ax.storage¶
JSON¶
ax.storage.json_store.decoder module¶
-
ax.storage.json_store.decoder.
ax_class_from_json_dict
(_class: Type, object_json: Dict[str, Any]) → Any[source]¶ Reinstantiates an Ax class registered in DECODER_REGISTRY from a JSON dict.
-
ax.storage.json_store.decoder.
data_from_json
(data_by_trial_json: Dict[str, Any]) → Dict[int, OrderedDict[int, Data]][source]¶ Load Ax Data from JSON.
-
ax.storage.json_store.decoder.
experiment_from_json
(object_json: Dict[str, Any]) → ax.core.experiment.Experiment[source]¶ Load Ax Experiment from JSON.
-
ax.storage.json_store.decoder.
generation_step_from_json
(generation_step_json: Dict[str, Any]) → ax.modelbridge.generation_node.GenerationStep[source]¶ Load generation step from JSON.
-
ax.storage.json_store.decoder.
generation_strategy_from_json
(generation_strategy_json: Dict[str, Any], experiment: Optional[ax.core.experiment.Experiment] = None) → ax.modelbridge.generation_strategy.GenerationStrategy[source]¶ Load generation strategy from JSON.
-
ax.storage.json_store.decoder.
generator_run_from_json
(object_json: Dict[str, Any]) → ax.core.generator_run.GeneratorRun[source]¶ Load Ax GeneratorRun from JSON.
-
ax.storage.json_store.decoder.
multi_type_experiment_from_json
(object_json: Dict[str, Any]) → ax.core.multi_type_experiment.MultiTypeExperiment[source]¶ Load AE MultiTypeExperiment from JSON.
-
ax.storage.json_store.decoder.
object_from_json
(object_json: Any) → Any[source]¶ Recursively load objects from a JSON-serializable dictionary.
-
ax.storage.json_store.decoder.
parameter_constraints_from_json
(parameter_constraint_json: List[Dict[str, Any]], parameters: List[ax.core.parameter.Parameter]) → List[ax.core.parameter_constraint.ParameterConstraint][source]¶ Load ParameterConstraints from JSON.
Order and SumConstraint are tied to a search space, and require that SearchSpace’s parameters to be passed in for decoding.
- Parameters
parameter_constraint_json – JSON representation of parameter constraints.
parameters – Parameter definitions for decoding via parameter names.
- Returns
Python classes for parameter constraints.
- Return type
parameter_constraints
-
ax.storage.json_store.decoder.
search_space_from_json
(search_space_json: Dict[str, Any]) → ax.core.search_space.SearchSpace[source]¶ Load a SearchSpace from JSON.
This function is necessary due to the coupled loading of SearchSpace and parameter constraints.
-
ax.storage.json_store.decoder.
simple_benchmark_problem_from_json
(object_json: Dict[str, Any]) → ax.benchmark.benchmark_problem.SimpleBenchmarkProblem[source]¶ Load a benchmark problem from JSON.
-
ax.storage.json_store.decoder.
simple_experiment_from_json
(object_json: Dict[str, Any]) → ax.core.simple_experiment.SimpleExperiment[source]¶ Load AE SimpleExperiment from JSON.
-
ax.storage.json_store.decoder.
trials_from_json
(experiment: ax.core.experiment.Experiment, trials_json: Dict[str, Any]) → Dict[int, ax.core.base_trial.BaseTrial][source]¶ Load Ax Trials from JSON.
ax.storage.json_store.decoders module¶
-
ax.storage.json_store.decoders.
batch_trial_from_json
(experiment: core.experiment.Experiment, index: int, trial_type: Optional[str], status: TrialStatus, time_created: datetime, time_completed: Optional[datetime], time_staged: Optional[datetime], time_run_started: Optional[datetime], abandoned_reason: Optional[str], run_metadata: Optional[Dict[str, Any]], generator_run_structs: List[GeneratorRunStruct], runner: Optional[Runner], abandoned_arms_metadata: Dict[str, AbandonedArm], num_arms_created: int, status_quo: Optional[Arm], status_quo_weight_override: float, optimize_for_power: Optional[bool], ttl_seconds: Optional[int] = None, generation_step_index: Optional[int] = None, properties: Optional[Dict[str, Any]] = None, stop_metadata: Optional[Dict[str, Any]] = None, **kwargs: Any) → BatchTrial[source]¶ Load Ax BatchTrial from JSON.
Other classes don’t need explicit deserializers, because we can just use their constructors (see decoder.py). However, the constructor for Batch does not allow us to exactly recreate an existing object.
-
ax.storage.json_store.decoders.
class_from_json
(json: Dict[str, Any]) → Type[Any][source]¶ Load any class registered in CLASS_DECODER_REGISTRY from JSON.
-
ax.storage.json_store.decoders.
transform_type_from_json
(object_json: Dict[str, Any]) → Type[ax.modelbridge.transforms.base.Transform][source]¶ Load the transform type from JSON.
-
ax.storage.json_store.decoders.
trial_from_json
(experiment: core.experiment.Experiment, index: int, trial_type: Optional[str], status: TrialStatus, time_created: datetime, time_completed: Optional[datetime], time_staged: Optional[datetime], time_run_started: Optional[datetime], abandoned_reason: Optional[str], run_metadata: Optional[Dict[str, Any]], generator_run: GeneratorRun, runner: Optional[Runner], num_arms_created: int, ttl_seconds: Optional[int] = None, generation_step_index: Optional[int] = None, properties: Optional[Dict[str, Any]] = None, stop_metadata: Optional[Dict[str, Any]] = None, **kwargs: Any) → Trial[source]¶ Load Ax trial from JSON.
Other classes don’t need explicit deserializers, because we can just use their constructors (see decoder.py). However, the constructor for Trial does not allow us to exactly recreate an existing object.
ax.storage.json_store.encoder module¶
-
ax.storage.json_store.encoder.
object_to_json
(obj: Any) → Any[source]¶ Convert an Ax object to a JSON-serializable dictionary.
The root node passed to this function should always be an instance of a core Ax class or a JSON-compatible python builtin. The sub-fields of the input will then be recursively passed to this function.
e.g. if we pass an instance of Experiment, we will first fall through to the line object_dict = ENCODER_REGISTRY[_type](object), which will convert the Experiment to a (shallow) dictionary, where search subfield remains “unconverted”, i.e.: {“name”: <name: string>, “search_space”: <search space: SearchSpace>}. We then pass each item of the dictionary back into this function to recursively convert the entire object.
ax.storage.json_store.encoders module¶
-
ax.storage.json_store.encoders.
arm_to_dict
(arm: ax.core.arm.Arm) → Dict[str, Any][source]¶ Convert Ax arm to a dictionary.
-
ax.storage.json_store.encoders.
batch_to_dict
(batch: ax.core.batch_trial.BatchTrial) → Dict[str, Any][source]¶ Convert Ax batch to a dictionary.
-
ax.storage.json_store.encoders.
benchmark_problem_to_dict
(benchmark_problem: ax.benchmark.benchmark_problem.BenchmarkProblem) → Dict[str, Any][source]¶ Converts an Ax benchmark problem to a serializable dictionary.
-
ax.storage.json_store.encoders.
botorch_model_to_dict
(model: ax.models.torch.botorch_modular.model.BoTorchModel) → Dict[str, Any][source]¶ Convert Ax model to a dictionary.
-
ax.storage.json_store.encoders.
botorch_modular_to_dict
(class_type: Type[Any]) → Dict[str, Any][source]¶ Convert any class to a dictionary.
-
ax.storage.json_store.encoders.
choice_parameter_to_dict
(parameter: ax.core.parameter.ChoiceParameter) → Dict[str, Any][source]¶ Convert Ax choice parameter to a dictionary.
-
ax.storage.json_store.encoders.
data_to_dict
(data: ax.core.data.Data) → Dict[str, Any][source]¶ Convert Ax data to a dictionary.
-
ax.storage.json_store.encoders.
experiment_to_dict
(experiment: ax.core.experiment.Experiment) → Dict[str, Any][source]¶ Convert Ax experiment to a dictionary.
-
ax.storage.json_store.encoders.
fixed_parameter_to_dict
(parameter: ax.core.parameter.FixedParameter) → Dict[str, Any][source]¶ Convert Ax fixed parameter to a dictionary.
-
ax.storage.json_store.encoders.
generation_step_to_dict
(generation_step: ax.modelbridge.generation_node.GenerationStep) → Dict[str, Any][source]¶ Converts Ax generation step to a dictionary.
-
ax.storage.json_store.encoders.
generation_strategy_to_dict
(generation_strategy: ax.modelbridge.generation_strategy.GenerationStrategy) → Dict[str, Any][source]¶ Converts Ax generation strategy to a dictionary.
-
ax.storage.json_store.encoders.
generator_run_to_dict
(generator_run: ax.core.generator_run.GeneratorRun) → Dict[str, Any][source]¶ Convert Ax generator run to a dictionary.
-
ax.storage.json_store.encoders.
map_data_to_dict
(map_data: ax.core.map_data.MapData) → Dict[str, Any][source]¶ Convert Ax map data to a dictionary.
-
ax.storage.json_store.encoders.
map_key_info_to_dict
(mki: ax.core.map_data.MapKeyInfo) → Dict[str, Any][source]¶ Convert Ax map data metadata to a dictionary.
-
ax.storage.json_store.encoders.
metric_to_dict
(metric: ax.core.metric.Metric) → Dict[str, Any][source]¶ Convert Ax metric to a dictionary.
-
ax.storage.json_store.encoders.
multi_objective_optimization_config_to_dict
(multi_objective_optimization_config: ax.core.optimization_config.MultiObjectiveOptimizationConfig) → Dict[str, Any][source]¶ Convert Ax optimization config to a dictionary.
-
ax.storage.json_store.encoders.
multi_objective_to_dict
(objective: ax.core.objective.MultiObjective) → Dict[str, Any][source]¶ Convert Ax objective to a dictionary.
-
ax.storage.json_store.encoders.
multi_type_experiment_to_dict
(experiment: ax.core.multi_type_experiment.MultiTypeExperiment) → Dict[str, Any][source]¶ Convert AE multitype experiment to a dictionary.
-
ax.storage.json_store.encoders.
objective_to_dict
(objective: ax.core.objective.Objective) → Dict[str, Any][source]¶ Convert Ax objective to a dictionary.
-
ax.storage.json_store.encoders.
observation_features_to_dict
(obs_features: ax.core.observation.ObservationFeatures) → Dict[str, Any][source]¶ Converts Ax observation features to a dictionary
-
ax.storage.json_store.encoders.
optimization_config_to_dict
(optimization_config: ax.core.optimization_config.OptimizationConfig) → Dict[str, Any][source]¶ Convert Ax optimization config to a dictionary.
-
ax.storage.json_store.encoders.
order_parameter_constraint_to_dict
(parameter_constraint: ax.core.parameter_constraint.OrderConstraint) → Dict[str, Any][source]¶ Convert Ax order parameter constraint to a dictionary.
-
ax.storage.json_store.encoders.
outcome_constraint_to_dict
(outcome_constraint: ax.core.outcome_constraint.OutcomeConstraint) → Dict[str, Any][source]¶ Convert Ax outcome constraint to a dictionary.
-
ax.storage.json_store.encoders.
parameter_constraint_to_dict
(parameter_constraint: ax.core.parameter_constraint.ParameterConstraint) → Dict[str, Any][source]¶ Convert Ax sum parameter constraint to a dictionary.
-
ax.storage.json_store.encoders.
percentile_early_stopping_strategy_to_dict
(strategy: ax.early_stopping.strategies.PercentileEarlyStoppingStrategy) → Dict[str, Any][source]¶ Convert Ax percentile early stopping strategy to a dictionary.
-
ax.storage.json_store.encoders.
range_parameter_to_dict
(parameter: ax.core.parameter.RangeParameter) → Dict[str, Any][source]¶ Convert Ax range parameter to a dictionary.
-
ax.storage.json_store.encoders.
runner_to_dict
(runner: ax.runners.synthetic.SyntheticRunner) → Dict[str, Any][source]¶ Convert Ax synthetic runner to a dictionary.
-
ax.storage.json_store.encoders.
scalarized_objective_to_dict
(objective: ax.core.objective.ScalarizedObjective) → Dict[str, Any][source]¶ Convert Ax objective to a dictionary.
-
ax.storage.json_store.encoders.
search_space_to_dict
(search_space: ax.core.search_space.SearchSpace) → Dict[str, Any][source]¶ Convert Ax search space to a dictionary.
-
ax.storage.json_store.encoders.
simple_experiment_to_dict
(experiment: ax.core.simple_experiment.SimpleExperiment) → Dict[str, Any][source]¶ Convert AE simple experiment to a dictionary.
-
ax.storage.json_store.encoders.
sum_parameter_constraint_to_dict
(parameter_constraint: ax.core.parameter_constraint.SumConstraint) → Dict[str, Any][source]¶ Convert Ax sum parameter constraint to a dictionary.
-
ax.storage.json_store.encoders.
surrogate_to_dict
(surrogate: ax.models.torch.botorch_modular.surrogate.Surrogate) → Dict[str, Any][source]¶ Convert Ax surrogate to a dictionary.
-
ax.storage.json_store.encoders.
transform_type_to_dict
(transform_type: Type[ax.modelbridge.transforms.base.Transform]) → Dict[str, Any][source]¶ Convert a transform class to a dictionary.
-
ax.storage.json_store.encoders.
trial_to_dict
(trial: ax.core.trial.Trial) → Dict[str, Any][source]¶ Convert Ax trial to a dictionary.
-
ax.storage.json_store.encoders.
winsorization_config_to_dict
(config: ax.modelbridge.transforms.winsorize.WinsorizationConfig) → Dict[str, Any][source]¶ Convert Ax winsorization config to a dictionary.
ax.storage.json_store.load module¶
-
ax.storage.json_store.load.
load_experiment
(filepath: str) → ax.core.experiment.Experiment[source]¶ Load experiment from file.
Read file.
Convert dictionary to Ax experiment instance.
ax.storage.json_store.registry module¶
SQLAlchemy (MySQL / SQLite)¶
ax.storage.sqa_store.base_decoder module¶
ax.storage.sqa_store.base_encoder module¶
ax.storage.sqa_store.db module¶
-
class
ax.storage.sqa_store.db.
SQABase
[source]¶ Bases:
object
Metaclass for SQLAlchemy classes corresponding to core Ax classes.
-
ax.storage.sqa_store.db.
create_all_tables
(engine: sqlalchemy.engine.base.Engine) → None[source]¶ Create all tables that inherit from Base.
- Parameters
engine – a SQLAlchemy engine with a connection to a MySQL or SQLite DB.
Note
In order for all tables to be correctly created, all modules that define a mapped class that inherits from Base must be imported.
-
ax.storage.sqa_store.db.
create_mysql_engine_from_creator
(creator: Callable, echo: bool = False, pool_recycle: int = 10, **kwargs: Any) → sqlalchemy.engine.base.Engine[source]¶ Create a SQLAlchemy engine with the MySQL dialect given a creator function.
- Parameters
creator – a callable which returns a DBAPI connection.
echo – if True, set engine to be verbose.
pool_recycle – number of seconds after which to recycle connections. -1 means no timeout. Default is 10 seconds.
**kwargs – keyword args passed to create_engine
- Returns
SQLAlchemy engine with connection to MySQL DB.
- Return type
Engine
-
ax.storage.sqa_store.db.
create_mysql_engine_from_url
(url: str, echo: bool = False, pool_recycle: int = 10, **kwargs: Any) → sqlalchemy.engine.base.Engine[source]¶ Create a SQLAlchemy engine with the MySQL dialect given a database url.
- Parameters
url – a database url that can include username, password, hostname, database name as well as optional keyword arguments for additional configuration. e.g. dialect+driver://username:password@host:port/database.
echo – if True, set engine to be verbose.
pool_recycle – number of seconds after which to recycle connections. -1 means no timeout. Default is 10 seconds.
**kwargs – keyword args passed to create_engine
- Returns
SQLAlchemy engine with connection to MySQL DB.
- Return type
Engine
-
ax.storage.sqa_store.db.
create_test_engine
(path: Optional[str] = None, echo: bool = True) → sqlalchemy.engine.base.Engine[source]¶ Creates a SQLAlchemy engine object for use in unit tests.
- Parameters
path – if None, use in-memory SQLite; else attempt to create a SQLite DB in the path provided.
echo – if True, set engine to be verbose.
- Returns
an instance of SQLAlchemy engine.
- Return type
Engine
-
ax.storage.sqa_store.db.
get_engine
() → sqlalchemy.engine.base.Engine[source]¶ Fetch a SQLAlchemy engine, if already initialized.
If not initialized, need to either call init_engine_and_session_factory or get_session explicitly.
- Returns
an instance of a SQLAlchemy engine with a connection to a DB.
- Return type
Engine
-
ax.storage.sqa_store.db.
get_session
() → sqlalchemy.orm.session.Session[source]¶ Fetch a SQLAlchemy session with a connection to a DB.
Unless init_engine_and_session_factory is called first with custom args, this will automatically initialize a connection to xdb.adaptive_experiment.
- Returns
an instance of a SQLAlchemy session.
- Return type
Session
-
ax.storage.sqa_store.db.
init_engine_and_session_factory
(url: Optional[str] = None, creator: Optional[Callable] = None, echo: bool = False, force_init: bool = False, **kwargs: Any) → None[source]¶ Initialize the global engine and SESSION_FACTORY for SQLAlchemy.
The initialization needs to only happen once. Note that it is possible to re-initialize the engine by setting the force_init flag to True, but this should only be used if you are absolutely certain that you know what you are doing.
- Parameters
url – a database url that can include username, password, hostname, database name as well as optional keyword arguments for additional configuration. e.g. dialect+driver://username:password@host:port/database. Either this argument or creator argument must be specified.
creator – a callable which returns a DBAPI connection. Either this argument or url argument must be specified.
echo – if True, logging for engine is enabled.
force_init – if True, allows re-initializing engine and session factory.
**kwargs – keyword arguments passed to create_mysql_engine_from_creator
-
ax.storage.sqa_store.db.
init_test_engine_and_session_factory
(tier_or_path: Optional[str] = None, echo: bool = False, force_init: bool = False, **kwargs: Any) → None[source]¶ Initialize the global engine and SESSION_FACTORY for SQLAlchemy, using an in-memory SQLite database.
The initialization needs to only happen once. Note that it is possible to re-initialize the engine by setting the force_init flag to True, but this should only be used if you are absolutely certain that you know what you are doing.
- Parameters
tier_or_path – the name of the DB tier.
echo – if True, logging for engine is enabled.
force_init – if True, allows re-initializing engine and session factory.
**kwargs – keyword arguments passed to create_mysql_engine_from_creator
-
ax.storage.sqa_store.db.
optional_session_scope
(session: Optional[sqlalchemy.orm.session.Session] = None) → AbstractContextManager[sqlalchemy.orm.session.Session][source]¶
ax.storage.sqa_store.delete module¶
ax.storage.sqa_store.json module¶
-
class
ax.storage.sqa_store.json.
JSONEncodedMediumText
(object_pairs_hook: Optional[Any] = None, *args: List[Any], **kwargs: Dict[Any, Any])[source]¶ Bases:
ax.storage.sqa_store.json.JSONEncodedObject
Class for JSON-encoding objects in SQLAlchemy, backed by MEDIUMTEXT (MySQL).
See description in JSONEncodedObject.
-
impl
: sqlalchemy.sql.sqltypes.VARCHAR = Text(length=16777215)¶
-
-
class
ax.storage.sqa_store.json.
JSONEncodedObject
(object_pairs_hook: Optional[Any] = None, *args: List[Any], **kwargs: Dict[Any, Any])[source]¶ Bases:
sqlalchemy.sql.type_api.TypeDecorator
Class for JSON-encoding objects in SQLAlchemy.
Represents an object that is automatically marshalled and unmarshalled to/from the corresponding JSON string. By itself, this data structure does not track any changes.
-
impl
: sqlalchemy.sql.sqltypes.VARCHAR = VARCHAR(length=4096)¶
-
process_bind_param
(value: Any, dialect: Any) → Optional[str][source]¶ Receive a bound parameter value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for incoming data values. This method is called at statement execution time and is passed the literal Python data value which is to be associated with a bound parameter in the statement.The operation could be anything desired to perform custom behavior, such as transforming or serializing data. This could also be used as a hook for validating logic.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_result_value()
-
process_result_value
(value: Any, dialect: Any) → Any[source]¶ Receive a result-row column value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for data values being received in result rows coming from the database. This method is called at result fetching time and is passed the literal Python data value that’s extracted from a database result row.The operation could be anything desired to perform custom behavior, such as transforming or deserializing data.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_bind_param()
-
-
class
ax.storage.sqa_store.json.
JSONEncodedText
(object_pairs_hook: Optional[Any] = None, *args: List[Any], **kwargs: Dict[Any, Any])[source]¶ Bases:
ax.storage.sqa_store.json.JSONEncodedObject
Class for JSON-encoding objects in SQLAlchemy, backed by TEXT (MySQL).
See description in JSONEncodedObject.
-
impl
¶ alias of
sqlalchemy.sql.sqltypes.Text
-
object_pairs_hook
: Any¶
-
ax.storage.sqa_store.load module¶
ax.storage.sqa_store.save module¶
ax.storage.sqa_store.structs module¶
ax.storage.sqa_store.sqa_classes module¶
-
class
ax.storage.sqa_store.sqa_classes.
SQAAbandonedArm
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
time_abandoned
: datetime.datetime = Column(None, IntTimestamp(), table=None, nullable=False, default=ColumnDefault(<function datetime.now>))¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAArm
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
class
ax.storage.sqa_store.sqa_classes.
SQAData
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
class
ax.storage.sqa_store.sqa_classes.
SQAExperiment
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
data
: List[ax.storage.sqa_store.sqa_classes.SQAData] = <RelationshipProperty at 0x7f7ae31018c0; no key>¶
-
default_data_type
: ax.core.experiment.DataType = Column(None, IntEnum(), table=None)¶
-
generation_strategy
: Optional[ax.storage.sqa_store.sqa_classes.SQAGenerationStrategy] = <RelationshipProperty at 0x7f7ae3101c20; no key>¶
-
metrics
: List[ax.storage.sqa_store.sqa_classes.SQAMetric] = <RelationshipProperty at 0x7f7ae3101950; no key>¶
-
parameter_constraints
: List[ax.storage.sqa_store.sqa_classes.SQAParameterConstraint] = <RelationshipProperty at 0x7f7ae3101a70; no key>¶
-
parameters
: List[ax.storage.sqa_store.sqa_classes.SQAParameter] = <RelationshipProperty at 0x7f7ae31019e0; no key>¶
-
properties
: Optional[Dict[str, Any]] = Column(None, JSONEncodedText(), table=None, default=ColumnDefault({}))¶
-
runners
: List[ax.storage.sqa_store.sqa_classes.SQARunner] = <RelationshipProperty at 0x7f7ae3101b00; no key>¶
-
status_quo_parameters
: Optional[Dict[str, Optional[Union[str, bool, float, int]]]] = Column(None, JSONEncodedText(), table=None)¶
-
time_created
: datetime.datetime = Column(None, IntTimestamp(), table=None, nullable=False)¶
-
trials
: List[ax.storage.sqa_store.sqa_classes.SQATrial] = <RelationshipProperty at 0x7f7ae3101b90; no key>¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAGenerationStrategy
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
generator_runs
: List[ax.storage.sqa_store.sqa_classes.SQAGeneratorRun] = <RelationshipProperty at 0x7f7ae30ec830; no key>¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAGeneratorRun
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
arms
: List[ax.storage.sqa_store.sqa_classes.SQAArm] = <RelationshipProperty at 0x7f7ae30ec200; no key>¶
-
best_arm_parameters
: Optional[Dict[str, Optional[Union[str, bool, float, int]]]] = Column(None, JSONEncodedText(), table=None)¶
-
best_arm_predictions
: Optional[Tuple[Dict[str, float], Optional[Dict[str, Dict[str, float]]]]] = Column(None, JSONEncodedObject(length=4096), table=None)¶
-
candidate_metadata_by_arm_signature
: Optional[Dict[str, Any]] = Column(None, JSONEncodedText(), table=None)¶
-
generation_strategy_id
: Optional[int] = Column(None, Integer(), ForeignKey('generation_strategy.id'), table=None)¶
-
metrics
: List[ax.storage.sqa_store.sqa_classes.SQAMetric] = <RelationshipProperty at 0x7f7ae30d84d0; no key>¶
-
model_predictions
: Optional[Tuple[Dict[str, List[float]], Dict[str, Dict[str, List[float]]]]] = Column(None, JSONEncodedObject(length=4096), table=None)¶
-
parameter_constraints
: List[ax.storage.sqa_store.sqa_classes.SQAParameterConstraint] = <RelationshipProperty at 0x7f7ae30ec560; no key>¶
-
parameters
: List[ax.storage.sqa_store.sqa_classes.SQAParameter] = <RelationshipProperty at 0x7f7ae30ec4d0; no key>¶
-
time_created
: datetime.datetime = Column(None, IntTimestamp(), table=None, nullable=False, default=ColumnDefault(<function datetime.now>))¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAMetric
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
generator_run_id
: Optional[int] = Column(None, Integer(), ForeignKey('generator_run_v2.id'), table=None)¶
-
intent
: ax.storage.utils.MetricIntent = Column(None, StringEnum(length=100), table=None, nullable=False)¶
-
op
: Optional[ax.core.types.ComparisonOp] = Column(None, IntEnum(), table=None)¶
-
properties
: Optional[Dict[str, Any]] = Column(None, JSONEncodedText(), table=None, default=ColumnDefault({}))¶
-
scalarized_objective_children_metrics
= <RelationshipProperty at 0x7f7ae30d88c0; no key>¶
-
scalarized_objective_id
= Column(None, Integer(), ForeignKey('metric_v2.id'), table=None)¶
-
scalarized_outcome_constraint_children_metrics
= <RelationshipProperty at 0x7f7ae30d8a70; no key>¶
-
scalarized_outcome_constraint_id
= Column(None, Integer(), ForeignKey('metric_v2.id'), table=None)¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAParameter
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
choice_values
: Optional[List[Optional[Union[str, bool, float, int]]]] = Column(None, JSONEncodedObject(length=4096), table=None)¶
-
domain_type
: ax.storage.utils.DomainType = Column(None, IntEnum(), table=None, nullable=False)¶
-
fixed_value
: Optional[Union[str, bool, float, int]] = Column(None, JSONEncodedObject(length=4096), table=None)¶
-
generator_run_id
: Optional[int] = Column(None, Integer(), ForeignKey('generator_run_v2.id'), table=None)¶
-
parameter_type
: ax.core.parameter.ParameterType = Column(None, IntEnum(), table=None, nullable=False)¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQAParameterConstraint
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
constraint_dict
: Dict[str, float] = Column(None, JSONEncodedObject(length=4096), table=None, nullable=False)¶
-
generator_run_id
: Optional[int] = Column(None, Integer(), ForeignKey('generator_run_v2.id'), table=None)¶
-
type
: ax.storage.sqa_store.sqa_enum.IntEnum = Column(None, IntEnum(), table=None, nullable=False)¶
-
-
class
ax.storage.sqa_store.sqa_classes.
SQARunner
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
class
ax.storage.sqa_store.sqa_classes.
SQATrial
(*args: Any, **kwargs: Any)[source]¶ Bases:
sqlalchemy.ext.declarative.
-
abandoned_arms
: List[ax.storage.sqa_store.sqa_classes.SQAAbandonedArm] = <RelationshipProperty at 0x7f7ae31013b0; no key>¶
-
generator_runs
: List[ax.storage.sqa_store.sqa_classes.SQAGeneratorRun] = <RelationshipProperty at 0x7f7ae3101440; no key>¶
-
is_batch
: bool = Column('is_batched', Boolean(), table=None, nullable=False, default=ColumnDefault(True))¶
-
num_arms_created
: int = Column(None, Integer(), table=None, nullable=False, default=ColumnDefault(0))¶
-
properties
: Optional[Dict[str, Any]] = Column(None, JSONEncodedText(), table=None, default=ColumnDefault({}))¶
-
runner
: ax.storage.sqa_store.sqa_classes.SQARunner = <RelationshipProperty at 0x7f7ae31014d0; no key>¶
-
status
: ax.core.base_trial.TrialStatus = Column(None, IntEnum(), table=None, nullable=False, default=ColumnDefault(<TrialStatus.CANDIDATE: 0>))¶
-
time_completed
: Optional[datetime.datetime] = Column(None, IntTimestamp(), table=None)¶
-
time_created
: datetime.datetime = Column(None, IntTimestamp(), table=None, nullable=False)¶
-
time_run_started
: Optional[datetime.datetime] = Column(None, IntTimestamp(), table=None)¶
-
time_staged
: Optional[datetime.datetime] = Column(None, IntTimestamp(), table=None)¶
-
ax.storage.sqa_store.sqa_config module¶
ax.storage.sqa_store.sqa_enum module¶
-
class
ax.storage.sqa_store.sqa_enum.
BaseNullableEnum
(enum: Any, *arg: List[Any], **kw: Dict[Any, Any])[source]¶ Bases:
sqlalchemy.sql.type_api.TypeDecorator
-
process_bind_param
(value: Any, dialect: Any) → Any[source]¶ Receive a bound parameter value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for incoming data values. This method is called at statement execution time and is passed the literal Python data value which is to be associated with a bound parameter in the statement.The operation could be anything desired to perform custom behavior, such as transforming or serializing data. This could also be used as a hook for validating logic.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_result_value()
-
process_result_value
(value: Any, dialect: Any) → Any[source]¶ Receive a result-row column value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for data values being received in result rows coming from the database. This method is called at result fetching time and is passed the literal Python data value that’s extracted from a database result row.The operation could be anything desired to perform custom behavior, such as transforming or deserializing data.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_bind_param()
-
-
class
ax.storage.sqa_store.sqa_enum.
IntEnum
(enum: Any, *arg: List[Any], **kw: Dict[Any, Any])[source]¶ Bases:
ax.storage.sqa_store.sqa_enum.BaseNullableEnum
-
impl
¶ alias of
sqlalchemy.sql.sqltypes.SmallInteger
-
-
class
ax.storage.sqa_store.sqa_enum.
StringEnum
(enum: Any, *arg: List[Any], **kw: Dict[Any, Any])[source]¶ Bases:
ax.storage.sqa_store.sqa_enum.BaseNullableEnum
-
impl
= VARCHAR(length=100)¶
-
ax.storage.sqa_store.timestamp module¶
-
class
ax.storage.sqa_store.timestamp.
IntTimestamp
(*args, **kwargs)[source]¶ Bases:
sqlalchemy.sql.type_api.TypeDecorator
-
impl
¶ alias of
sqlalchemy.sql.sqltypes.Integer
-
process_bind_param
(value: Optional[datetime.datetime], dialect: sqlalchemy.engine.interfaces.Dialect) → Optional[int][source]¶ Receive a bound parameter value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for incoming data values. This method is called at statement execution time and is passed the literal Python data value which is to be associated with a bound parameter in the statement.The operation could be anything desired to perform custom behavior, such as transforming or serializing data. This could also be used as a hook for validating logic.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_result_value()
-
process_result_value
(value: Optional[int], dialect: sqlalchemy.engine.interfaces.Dialect) → Optional[datetime.datetime][source]¶ Receive a result-row column value to be converted.
Custom subclasses of
_types.TypeDecorator
should override this method to provide custom behaviors for data values being received in result rows coming from the database. This method is called at result fetching time and is passed the literal Python data value that’s extracted from a database result row.The operation could be anything desired to perform custom behavior, such as transforming or deserializing data.
- Parameters
value – Data to operate upon, of any type expected by this method in the subclass. Can be
None
.dialect – the
Dialect
in use.
See also
types_typedecorator
_types.TypeDecorator.process_bind_param()
-
ax.storage.sqa_store.utils module¶
ax.storage.sqa_store.validation module¶
ax.storage.sqa_store.reduced_state module¶
-
ax.storage.sqa_store.reduced_state.
get_query_options_to_defer_immutable_duplicates
() → List[sqlalchemy.orm.strategy_options.Load][source]¶ Returns the query options that defer loading of attributes that are duplicated on each trial (like search space attributes and metrics). These attributes do not need to be loaded for experiments with immutable search space and optimization configuration.
-
ax.storage.sqa_store.reduced_state.
get_query_options_to_defer_large_model_cols
() → List[sqlalchemy.orm.strategy_options.Load][source]¶ Returns the query options that defer loading of model-state-related columns of generator runs, which can be large and are not needed on every generator run when loading experiment and generation strategy in reduced state.
Registries¶
-
ax.storage.botorch_modular_registry.
ACQUISITION_FUNCTION_REGISTRY
: Dict[Type[botorch.acquisition.acquisition.AcquisitionFunction], str] = {<class 'botorch.acquisition.analytic.ExpectedImprovement'>: 'ExpectedImprovement', <class 'botorch.acquisition.multi_objective.monte_carlo.qExpectedHypervolumeImprovement'>: 'qExpectedHypervolumeImprovement', <class 'botorch.acquisition.multi_objective.monte_carlo.qNoisyExpectedHypervolumeImprovement'>: 'qNoisyExpectedHypervolumeImprovement', <class 'botorch.acquisition.monte_carlo.qExpectedImprovement'>: 'qExpectedImprovement', <class 'botorch.acquisition.knowledge_gradient.qKnowledgeGradient'>: 'qKnowledgeGradient', <class 'botorch.acquisition.max_value_entropy_search.qMaxValueEntropy'>: 'qMaxValueEntropy', <class 'botorch.acquisition.knowledge_gradient.qMultiFidelityKnowledgeGradient'>: 'qMultiFidelityKnowledgeGradient', <class 'botorch.acquisition.max_value_entropy_search.qMultiFidelityMaxValueEntropy'>: 'qMultiFidelityMaxValueEntropy', <class 'botorch.acquisition.monte_carlo.qNoisyExpectedImprovement'>: 'qNoisyExpectedImprovement'}¶ Mapping of BoTorch MarginalLogLikelihood classes to class name strings.
-
ax.storage.botorch_modular_registry.
ACQUISITION_REGISTRY
: Dict[Type[ax.models.torch.botorch_modular.acquisition.Acquisition], str] = {<class 'ax.models.torch.botorch_modular.acquisition.Acquisition'>: 'Acquisition'}¶ Mapping of BoTorch Model classes to class name strings.
-
ax.storage.botorch_modular_registry.
CLASS_TO_REGISTRY
: Dict[Any, Dict[Type[Any], str]] = {<class 'ax.models.torch.botorch_modular.acquisition.Acquisition'>: {<class 'ax.models.torch.botorch_modular.acquisition.Acquisition'>: 'Acquisition'}, <class 'botorch.acquisition.acquisition.AcquisitionFunction'>: {<class 'botorch.acquisition.analytic.ExpectedImprovement'>: 'ExpectedImprovement', <class 'botorch.acquisition.multi_objective.monte_carlo.qExpectedHypervolumeImprovement'>: 'qExpectedHypervolumeImprovement', <class 'botorch.acquisition.multi_objective.monte_carlo.qNoisyExpectedHypervolumeImprovement'>: 'qNoisyExpectedHypervolumeImprovement', <class 'botorch.acquisition.monte_carlo.qExpectedImprovement'>: 'qExpectedImprovement', <class 'botorch.acquisition.knowledge_gradient.qKnowledgeGradient'>: 'qKnowledgeGradient', <class 'botorch.acquisition.max_value_entropy_search.qMaxValueEntropy'>: 'qMaxValueEntropy', <class 'botorch.acquisition.knowledge_gradient.qMultiFidelityKnowledgeGradient'>: 'qMultiFidelityKnowledgeGradient', <class 'botorch.acquisition.max_value_entropy_search.qMultiFidelityMaxValueEntropy'>: 'qMultiFidelityMaxValueEntropy', <class 'botorch.acquisition.monte_carlo.qNoisyExpectedImprovement'>: 'qNoisyExpectedImprovement'}, <class 'gpytorch.mlls.marginal_log_likelihood.MarginalLogLikelihood'>: {<class 'gpytorch.mlls.exact_marginal_log_likelihood.ExactMarginalLogLikelihood'>: 'ExactMarginalLogLikelihood', <class 'gpytorch.mlls.sum_marginal_log_likelihood.SumMarginalLogLikelihood'>: 'SumMarginalLogLikelihood'}, <class 'botorch.models.model.Model'>: {<class 'botorch.models.gp_regression.FixedNoiseGP'>: 'FixedNoiseGP', <class 'botorch.models.gp_regression_fidelity.FixedNoiseMultiFidelityGP'>: 'FixedNoiseMultiFidelityGP', <class 'botorch.models.multitask.FixedNoiseMultiTaskGP'>: 'FixedNoiseMultiTaskGP', <class 'botorch.models.gp_regression_mixed.MixedSingleTaskGP'>: 'MixedSingleTaskGP', <class 'botorch.models.model_list_gp_regression.ModelListGP'>: 'ModelListGP', <class 'botorch.models.multitask.MultiTaskGP'>: 'MultiTaskGP', <class 'botorch.models.gp_regression.SingleTaskGP'>: 'SingleTaskGP', <class 'botorch.models.gp_regression_fidelity.SingleTaskMultiFidelityGP'>: 'SingleTaskMultiFidelityGP'}}¶ Reverse registries for decoding.
-
ax.storage.botorch_modular_registry.
MLL_REGISTRY
: Dict[Type[gpytorch.mlls.marginal_log_likelihood.MarginalLogLikelihood], str] = {<class 'gpytorch.mlls.exact_marginal_log_likelihood.ExactMarginalLogLikelihood'>: 'ExactMarginalLogLikelihood', <class 'gpytorch.mlls.sum_marginal_log_likelihood.SumMarginalLogLikelihood'>: 'SumMarginalLogLikelihood'}¶ Overarching mapping from encoded classes to registry map.
-
ax.storage.botorch_modular_registry.
MODEL_REGISTRY
: Dict[Type[botorch.models.model.Model], str] = {<class 'botorch.models.gp_regression.FixedNoiseGP'>: 'FixedNoiseGP', <class 'botorch.models.gp_regression_fidelity.FixedNoiseMultiFidelityGP'>: 'FixedNoiseMultiFidelityGP', <class 'botorch.models.multitask.FixedNoiseMultiTaskGP'>: 'FixedNoiseMultiTaskGP', <class 'botorch.models.gp_regression_mixed.MixedSingleTaskGP'>: 'MixedSingleTaskGP', <class 'botorch.models.model_list_gp_regression.ModelListGP'>: 'ModelListGP', <class 'botorch.models.multitask.MultiTaskGP'>: 'MultiTaskGP', <class 'botorch.models.gp_regression.SingleTaskGP'>: 'SingleTaskGP', <class 'botorch.models.gp_regression_fidelity.SingleTaskMultiFidelityGP'>: 'SingleTaskMultiFidelityGP'}¶ Mapping of Botorch AcquisitionFunction classes to class name strings.
-
ax.storage.botorch_modular_registry.
REVERSE_MLL_REGISTRY
: Dict[str, Type[gpytorch.mlls.marginal_log_likelihood.MarginalLogLikelihood]] = {'ExactMarginalLogLikelihood': <class 'gpytorch.mlls.exact_marginal_log_likelihood.ExactMarginalLogLikelihood'>, 'SumMarginalLogLikelihood': <class 'gpytorch.mlls.sum_marginal_log_likelihood.SumMarginalLogLikelihood'>}¶ Overarching mapping from encoded classes to reverse registry map.
-
ax.storage.botorch_modular_registry.
register_acquisition
(acq_class: Type[ax.models.torch.botorch_modular.acquisition.Acquisition]) → None[source]¶ Add a custom acquisition class to the SQA and JSON registries.
-
ax.storage.metric_registry.
register_metric
(metric_cls: Type[ax.core.metric.Metric], val: Optional[int] = None) → None[source]¶ Add a custom metric class to the SQA and JSON registries. For the SQA registry, if no int is specified, use a hash of the class name.
-
ax.storage.runner_registry.
register_runner
(runner_cls: Type[ax.core.runner.Runner], val: Optional[int] = None) → None[source]¶ Add a custom runner class to the SQA and JSON registries. For the SQA registry, if no int is specified, use a hash of the class name.