#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------

# Utility script to return head, i.e. 1:n rows, from input data.
#
# Parameters:
#    x    : (input) data set
#    n    : (input) number of rows to return, i.e.: 1:n
#    o    : (output) 
#    ofmt : (default "csv") format of output
#
# Example:
#   hadoop jar SystemDS.jar -f algorithms/utils/head.dml -nvargs x="/tmp/M.mtx" n=100 o="/tmp/o.mtx"
#

ofmt = ifdef ($ofmt, "csv");

x = read ($x);

o = x[1:$n,];

write (o, $o, format=ofmt);
