def testDecodeGenerationStrategy(self): generation_strategy = get_generation_strategy() experiment = get_branin_experiment() gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) self.assertEqual(generation_strategy, new_generation_strategy) self.assertGreater(len(new_generation_strategy._steps), 0) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Model has not yet been initialized on this GS since it hasn't generated # anything yet. self.assertIsNone(new_generation_strategy.model) # Check that we can encode and decode the generation strategy after # it has generated some generator runs. generation_strategy = new_generation_strategy gr = generation_strategy.gen(experiment) gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Since this GS has now generated one generator run, model should have # been initialized and restored when decoding from JSON. self.assertIsInstance(new_generation_strategy.model, ModelBridge) # Check that we can encode and decode the generation strategy after # it has generated some trials and been updated with some data. generation_strategy = new_generation_strategy experiment.new_trial(gr) # Add previously generated GR as trial. # Make generation strategy aware of the trial's data via `gen`. generation_strategy.gen(experiment, data=get_branin_data()) gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) self.assertIsInstance(new_generation_strategy.model, ModelBridge)
def from_json_snapshot(serialized): """Recreate a `CoreAxClient` from a JSON snapshot.""" ax_client = CoreAxClient( experiment=object_from_json(serialized.pop("experiment")), generation_strategy=generation_strategy_from_json( generation_strategy_json=serialized.pop( "generation_strategy"))) return ax_client
def testDecodeGenerationStrategy(self): generation_strategy = get_generation_strategy() experiment = get_branin_experiment() gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) self.assertEqual(generation_strategy, new_generation_strategy) self.assertGreater(len(new_generation_strategy._steps), 0) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Model has not yet been initialized on this GS since it hasn't generated # anything yet. self.assertIsNone(new_generation_strategy.model) # Check that we can encode and decode the generation strategy after # it has generated some trials. generation_strategy = new_generation_strategy experiment.new_trial(generator_run=generation_strategy.gen(experiment)) gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) # `_seen_trial_indices_by_status` attribute of a GS is not saved in DB, # so it will be None in the restored version of the GS. # Hackily removing it from the original GS to check equality. generation_strategy._seen_trial_indices_by_status = None self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Since this GS has now generated one generator run, model should have # been initialized and restored when decoding from JSON. self.assertIsInstance(new_generation_strategy.model, ModelBridge) # Check that we can encode and decode the generation strategy after # it has generated some trials and been updated with some data. generation_strategy = new_generation_strategy experiment.new_trial( generation_strategy.gen(experiment, data=get_branin_data())) gs_json = object_to_json(generation_strategy) new_generation_strategy = generation_strategy_from_json(gs_json) # `_seen_trial_indices_by_status` attribute of a GS is not saved in DB, # so it will be None in the restored version of the GS. # Hackily removing it from the original GS to check equality. generation_strategy._seen_trial_indices_by_status = None self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) self.assertIsInstance(new_generation_strategy.model, ModelBridge)
def from_json_snapshot(serialized: Dict[str, Any], **kwargs) -> "AxClient": """Recreate an `AxClient` from a JSON snapshot.""" experiment = object_from_json(serialized.pop("experiment")) serialized_generation_strategy = serialized.pop("generation_strategy") ax_client = AxClient( generation_strategy=generation_strategy_from_json( generation_strategy_json=serialized_generation_strategy) if serialized_generation_strategy is not None else None, enforce_sequential_optimization=serialized.pop( "_enforce_sequential_optimization"), **kwargs, ) ax_client._experiment = experiment return ax_client
def from_json_snapshot(serialized: Dict[str, Any]) -> "AxClient": """Recreate an `AxClient` from a JSON snapshot.""" experiment = object_from_json(serialized.pop("experiment")) ax_client = AxClient( generation_strategy=generation_strategy_from_json( generation_strategy_json=serialized.pop( "generation_strategy")), enforce_sequential_optimization=serialized.pop( "_enforce_sequential_optimization"), ) ax_client._experiment = experiment ax_client._updated_trials = object_from_json( serialized.pop("_updated_trials")) return ax_client
def testDecodeGenerationStrategy(self): generation_strategy = get_generation_strategy() experiment = get_branin_experiment() gs_json = object_to_json( generation_strategy, encoder_registry=DEPRECATED_ENCODER_REGISTRY, class_encoder_registry=DEPRECATED_CLASS_ENCODER_REGISTRY, ) new_generation_strategy = generation_strategy_from_json( gs_json, decoder_registry=DEPRECATED_DECODER_REGISTRY, class_decoder_registry=DEPRECATED_CLASS_DECODER_REGISTRY, ) self.assertEqual(generation_strategy, new_generation_strategy) self.assertGreater(len(new_generation_strategy._steps), 0) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Model has not yet been initialized on this GS since it hasn't generated # anything yet. self.assertIsNone(new_generation_strategy.model) # Check that we can encode and decode the generation strategy after # it has generated some generator runs. Since we now need to `gen`, # we remove the fake callable kwarg we added, since model does not # expect it. generation_strategy = get_generation_strategy(with_callable_model_kwarg=False) gr = generation_strategy.gen(experiment) gs_json = object_to_json( generation_strategy, encoder_registry=DEPRECATED_ENCODER_REGISTRY, class_encoder_registry=DEPRECATED_CLASS_ENCODER_REGISTRY, ) new_generation_strategy = generation_strategy_from_json( gs_json, decoder_registry=DEPRECATED_DECODER_REGISTRY, class_decoder_registry=DEPRECATED_CLASS_DECODER_REGISTRY, ) self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) # Since this GS has now generated one generator run, model should have # been initialized and restored when decoding from JSON. self.assertIsInstance(new_generation_strategy.model, ModelBridge) # Check that we can encode and decode the generation strategy after # it has generated some trials and been updated with some data. generation_strategy = new_generation_strategy experiment.new_trial(gr) # Add previously generated GR as trial. # Make generation strategy aware of the trial's data via `gen`. generation_strategy.gen(experiment, data=get_branin_data()) gs_json = object_to_json( generation_strategy, encoder_registry=DEPRECATED_ENCODER_REGISTRY, class_encoder_registry=DEPRECATED_CLASS_ENCODER_REGISTRY, ) new_generation_strategy = generation_strategy_from_json( gs_json, decoder_registry=DEPRECATED_DECODER_REGISTRY, class_decoder_registry=DEPRECATED_CLASS_DECODER_REGISTRY, ) self.assertEqual(generation_strategy, new_generation_strategy) self.assertIsInstance(new_generation_strategy._steps[0].model, Models) self.assertIsInstance(new_generation_strategy.model, ModelBridge)
def initialize_from_json_snapshot(self, serialized): other = CoreAxClient( experiment=object_from_json(serialized["experiment"]), generation_strategy=generation_strategy_from_json( generation_strategy_json=serialized["generation_strategy"])) self.__dict__.update(other.__dict__)