#-------------------------------------------------------------
#
# 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.
#
#-------------------------------------------------------------

imgSize=$1
numImg=$2
numChannels=$3
numFilters=$4
filterSize=$5
stride=$6
pad=$7

# Assumption: NCHW image format
x=matrix(seq(1, numImg*numChannels*imgSize*imgSize), rows=numImg, cols=numChannels*imgSize*imgSize)
w=matrix(seq(1, numFilters*numChannels*filterSize*filterSize), rows=numFilters, cols=numChannels*filterSize*filterSize)
b=matrix(seq(1, numFilters), rows=numFilters, cols=1) 

if($9) {
	zero_mask = (x - mean(x)*1.5) > 0 
	x = x * zero_mask
}
else {
	x = x - mean(x)
}
if($10) {
	zero_mask = (w - mean(w)*1.5) > 0 
	w = w * zero_mask
}
else {
	w = w - mean(w)
}
output = conv2d(x, w, padding=[pad, pad], stride=[stride, stride], input_shape=[numImg, numChannels, imgSize, imgSize], filter_shape=[numFilters, numChannels, filterSize, filterSize], bias=b)
output = bias_add(output, b)

write(output, $8, format="text")
