def test_concurent_producers(producer, storage, random_dt): """Test concurrent production of new trials.""" trials_in_db_before = len(storage._fetch_trials({})) new_trials_in_db_before = len(storage._fetch_trials({"status": "new"})) # Set so that first producer's algorithm generate valid point on first time # And second producer produce same point and thus must produce next one two. # Hence, we know that producer algo will have _num == 1 and # second producer algo will have _num == 2 producer.algorithm.algorithm.possible_values = [("gru", "rnn"), ("gru", "gru")] # Make sure it starts from index 0 producer.algorithm.seed_rng(0) assert producer.experiment.pool_size == 1 second_producer = Producer(producer.experiment) second_producer.algorithm = copy.deepcopy(producer.algorithm) producer.update() second_producer.update() producer.produce() second_producer.produce() # Algorithm was required to suggest some trials num_new_points = producer.algorithm.algorithm._num assert num_new_points == 1 # pool size num_new_points = second_producer.algorithm.algorithm._num assert num_new_points == 2 # pool size # `num_new_points` new trials were registered at database assert len(storage._fetch_trials({})) == trials_in_db_before + 2 assert len(storage._fetch_trials({"status": "new"})) == new_trials_in_db_before + 2 new_trials = list( storage._fetch_trials({ "status": "new", "submit_time": random_dt })) assert new_trials[0].experiment == producer.experiment.id assert new_trials[0].start_time is None assert new_trials[0].end_time is None assert new_trials[0].results == [] assert new_trials[0].params == { "/decoding_layer": "gru", "/encoding_layer": "rnn", } assert new_trials[1].params == { "/decoding_layer": "gru", "/encoding_layer": "gru", }
def test_concurent_producers(producer, database, random_dt): """Test concurrent production of new trials.""" trials_in_db_before = database.trials.count() new_trials_in_db_before = database.trials.count({'status': 'new'}) print(producer.experiment.fetch_trials({})) # Set so that first producer's algorithm generate valid point on first time # And second producer produce same point and thus must produce next one two. # Hence, we know that producer algo will have _num == 1 and # second producer algo will have _num == 2 producer.algorithm.algorithm.possible_values = [('rnn', 'gru'), ('gru', 'gru')] # Make sure it starts from index 0 producer.algorithm.seed_rng(0) assert producer.experiment.pool_size == 1 second_producer = Producer(producer.experiment) second_producer.algorithm = copy.deepcopy(producer.algorithm) producer.update() second_producer.update() print(producer.algorithm.algorithm._index) print(second_producer.algorithm.algorithm._index) producer.produce() print(producer.algorithm.algorithm._index) print(second_producer.algorithm.algorithm._index) second_producer.produce() # Algorithm was required to suggest some trials num_new_points = producer.algorithm.algorithm._num assert num_new_points == 1 # pool size num_new_points = second_producer.algorithm.algorithm._num assert num_new_points == 2 # pool size # `num_new_points` new trials were registered at database assert database.trials.count() == trials_in_db_before + 2 assert database.trials.count({'status': 'new'}) == new_trials_in_db_before + 2 new_trials = list( database.trials.find({ 'status': 'new', 'submit_time': random_dt })) assert new_trials[0]['experiment'] == producer.experiment.name assert new_trials[0]['start_time'] is None assert new_trials[0]['end_time'] is None assert new_trials[0]['results'] == [] assert new_trials[0]['params'] == [{ 'name': '/encoding_layer', 'type': 'categorical', 'value': 'rnn' }, { 'name': '/decoding_layer', 'type': 'categorical', 'value': 'gru' }] assert new_trials[1]['params'] == [{ 'name': '/encoding_layer', 'type': 'categorical', 'value': 'gru' }, { 'name': '/decoding_layer', 'type': 'categorical', 'value': 'gru' }]
def test_concurent_producers(producer, database, random_dt): """Test concurrent production of new trials.""" trials_in_db_before = database.trials.count() new_trials_in_db_before = database.trials.count({"status": "new"}) # Set so that first producer's algorithm generate valid point on first time # And second producer produce same point and thus must produce next one two. # Hence, we know that producer algo will have _num == 1 and # second producer algo will have _num == 2 producer.algorithm.algorithm.possible_values = [("gru", "rnn"), ("gru", "gru")] # Make sure it starts from index 0 producer.algorithm.seed_rng(0) assert producer.experiment.pool_size == 1 second_producer = Producer(producer.experiment) second_producer.algorithm = copy.deepcopy(producer.algorithm) producer.update() second_producer.update() producer.produce() second_producer.produce() # Algorithm was required to suggest some trials num_new_points = producer.algorithm.algorithm._num assert num_new_points == 1 # pool size num_new_points = second_producer.algorithm.algorithm._num assert num_new_points == 2 # pool size # `num_new_points` new trials were registered at database assert database.trials.count() == trials_in_db_before + 2 assert database.trials.count({"status": "new"}) == new_trials_in_db_before + 2 new_trials = list( database.trials.find({ "status": "new", "submit_time": random_dt })) assert new_trials[0]["experiment"] == producer.experiment.name assert new_trials[0]["start_time"] is None assert new_trials[0]["end_time"] is None assert new_trials[0]["results"] == [] assert new_trials[0]["params"] == [ { "name": "/decoding_layer", "type": "categorical", "value": "gru" }, { "name": "/encoding_layer", "type": "categorical", "value": "rnn" }, ] assert new_trials[1]["params"] == [ { "name": "/decoding_layer", "type": "categorical", "value": "gru" }, { "name": "/encoding_layer", "type": "categorical", "value": "gru" }, ]