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

# generates random numbers from a distribution
# with specified mean, standard deviation, 
# skewness, kurtosis
# mean and standard deviation are taken in as
# arguments by this script
# a,b,c,d are coefficients computed by some
# equation solver determined from the specified
# skewness and kurtosis using power method
# polynomials
#
# for more details see:
# Statistical Simulation: Power Method Polynomials
# and Other Transformations
# Author: Todd C. Headrick
# Chapman & Hall/CRC, Boca Raton, FL, 2010.
# ISBN 978-1-4200-6490-2

# $1 is the number of random points to be sampled
# $2 is specified mean
# $3 is specified standard deviation
# $4-$7 are a,b,c,d obtained by solving a system
# of equations using specified kurtosis and skewness
# $8 is the file to write out the generated data to

numSamples = $1
mu = $2
sigma = $3
a = $4
b = $5
c = $6
d = $7


print("a=" + a + " b=" + b + " c=" + c + " d=" + d)

X = Rand(rows=numSamples, cols=1, pdf="normal", seed=0)
Y = a + b*X + c*X^2 + d*X^3

Z = Y*sigma + mu
write(Z, $8, format="binary")
