import sys
import os

# Concat top Level dir to system environmental variables
sys.path += os.path.join('..', '.')

from soup import *
from experiment import *


if __name__ == '__main__':
    if True:
        with SoupExperiment("soup") as exp:
            for run_id in range(1):
                net_generator = lambda: TrainingNeuralNetworkDecorator(WeightwiseNeuralNetwork(2, 2)) \
                     .with_keras_params(activation='linear').with_params(epsilon=0.0001)
                # net_generator = lambda: TrainingNeuralNetworkDecorator(AggregatingNeuralNetwork(4, 2, 2))\
                #     .with_keras_params(activation='linear')
                # net_generator = lambda: TrainingNeuralNetworkDecorator(FFTNeuralNetwork(4, 2, 2))\
                #    .with_keras_params(activation='linear')
                # net_generator = lambda: RecurrentNeuralNetwork(2, 2).with_keras_params(activation='linear').with_params()
                soup = Soup(20, net_generator).with_params(remove_divergent=True, remove_zero=True,
                                                           train=30,
                                                           learn_from_rate=-1)
                soup.seed()
                for _ in tqdm(range(100)):
                    soup.evolve()
                exp.log(soup.count())
                # you can access soup.historical_particles[particle_uid].states[time_step]['loss']
                #             or soup.historical_particles[particle_uid].states[time_step]['weights']
                # from soup.dill
                exp.save(soup=soup.without_particles())