#!/bin/bash
date
START=`date +%s`
ARGS=$@
PROFILING=""
RELEASE=""

if [ "$1" == "--release" ]; then
    RELEASE="True"
    shift
    ARGS=$@
fi

if [ "$1" == "--buildbot" ]; then
    #we set the compiledir to the /Tmp dir to make the test faster by bypassing the nfs network.
    COMPILEDIR=/Tmp/lisa_theano_compile_dir_theano
    ROOT_CWD=/Tmp/nightly_build
    FLAGS=compiledir=$COMPILEDIR
    cd ${ROOT_CWD}/Theano
    git rev-parse HEAD
    #Run tests from inside the Theano directory to prevent import problem.
    ARGS=""
    PROFILING="--with-coverage --cover-package=theano"
    NOSETESTS=${ROOT_CWD}/Theano/bin/theano-nose
    export PYTHONPATH=${ROOT_CWD}:$PYTHONPATH
else
    COMPILEDIR=`python -c "import theano; print theano.config.compiledir"`
    NOSETESTS=`python -c "import theano; print theano.__path__[0]"`/../bin/theano-nose
fi

echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

# We don't want warnings in the buildbot for errors already fixed.
FLAGS=${THEANO_FLAGS},warn.argmax_pushdown_bug=False,warn.gpusum_01_011_0111_bug=False,warn.sum_sum_bug=False,warn.sum_div_dimshuffle_bug=False,warn.subtensor_merge_bug=False,$FLAGS

# We want to see correctly optimization/shape errors, so make make them raise an
# error.
FLAGS=on_opt_error=raise,$FLAGS
FLAGS=on_shape_error=raise,$FLAGS

# Ignore user device and floatX config, because:
#   1. Tests are intended to be run with device=cpu.
#   2. We explicitly add 'floatX=float32' in one run of the test suite below,
#      while we want all other runs to run with 'floatX=float64'.
FLAGS=${FLAGS},device=cpu,floatX=float64


if [ "$RELEASE" ]; then
    echo "Executing tests with default mode and compute_test_value"
    THEANO_FLAGS=${FLAGS},compute_test_value=ignore ${NOSETESTS} ${ARGS}
    echo "Number of elements in the compiledir:"
    ls ${COMPILEDIR}|wc -l
fi

echo "Executing tests with mode=FAST_COMPILE with --batch=1000"
THEANO_FLAGS=${FLAGS},mode=FAST_COMPILE ${NOSETESTS} --batch=1000 ${ARGS}
echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

echo "Executing tests with mode=FAST_RUN"
THEANO_FLAGS=cmodule.warn_no_version=True,${FLAGS},mode=FAST_RUN ${NOSETESTS} ${PROFILING} ${ARGS}
echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

echo "Executing tests with mode=FAST_RUN,floatX=float32"
THEANO_FLAGS=${FLAGS},mode=FAST_RUN,floatX=float32 ${NOSETESTS} ${ARGS}
echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

echo "Executing tests with linker=vm,vm.lazy=True,floatX=float32"
THEANO_FLAGS=${FLAGS},linker=vm,vm.lazy=True,floatX=float32 ${NOSETESTS} ${ARGS}
echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

#we change the seed and record it everyday to test different combination. We record it to be able to reproduce bug caused by different seed. We don't want multiple test in DEBUG_MODE each day as this take too long.
seed=$RANDOM
echo "Executing tests with mode=DEBUG_MODE with seed of the day $seed"
THEANO_FLAGS=${FLAGS},unittests.rseed=$seed,mode=DEBUG_MODE,DebugMode.check_strides=0,DebugMode.patience=3,DebugMode.check_preallocated_output= ${NOSETESTS} ${ARGS}

echo "Number of elements in the compiledir:"
ls ${COMPILEDIR}|wc -l

echo
END=`date +%s`
python -c "print 'Total test time: %dm %ds'%((${END} - ${START})/60, (${END} - ${START})%60)"
date
