optimpv.general package
Submodules
optimpv.general.BaseAgent module
BaseAgent class for Agent objects
- class optimpv.general.BaseAgent.BaseAgent[source]
Bases:
object
Provides general functionality for Agent objects
- create_metrics_list()[source]
Create a list of all metrics from all agents.
- Returns:
list – List of metric names
list – List of minimize values
- descale_dataframe(df, params)[source]
Descale the dataframe to match the Fitparam() objects descaling
- Parameters:
df (DataFrame) – dataframe to descale
params (list of Fitparam() objects) – list of Fitparam() objects to descale
- Returns:
dataframe descaled
- Return type:
DataFrame
- get_all_agent_metric_names()[source]
Get all metric names from the agent
- Returns:
List of all metric names from the agent, formatted as ‘name_exp_format_metric_loss’
- Return type:
list
- Raises:
ValueError – If no metric or exp_format is defined in the agent
- get_all_agent_tracking_metric_names()[source]
Get all tracking metric names from the agent
- Returns:
List of all tracking metric names from the agent, formatted as ‘name_exp_format_metric_loss’
- Return type:
list
- Raises:
ValueError – If no metric or exp_format is defined in the agent
- params_descale(parameters, params)[source]
Descale the parameters dictionary to match the Fitparam() objects descaling
- Parameters:
parameters (dict) – dictionary of parameter names and values to descale the Fitparam() objects
params (list of Fitparam() objects) – list of Fitparam() objects to descale
- Raises:
ValueError – If the value_type of the parameter is not ‘float’, ‘int’, ‘str’, ‘cat’, ‘sub’ or ‘bool’
- Returns:
dictionary of parameter names and values descaled
- Return type:
dict
- params_rescale(parameters, params)[source]
Rescale the parameters dictionary to match the Fitparam() objects rescaling
- Parameters:
parameters (dict) – dictionary of parameter names and values to rescale the Fitparam() objects
params (list of Fitparam() objects) – list of Fitparam() objects to rescale
- Raises:
ValueError – If the value_type of the parameter is not ‘float’, ‘int’, ‘str’, ‘cat’, ‘sub’ or ‘bool’
- Returns:
dictionary of parameter names and values rescaled
- Return type:
dict
- params_w(parameters, params)[source]
Populate the Fitparam() objects with the values from the parameters dictionary
- Parameters:
parameters (dict) – dictionary of parameter names and values to populate the Fitparam() objects
params (list of Fitparam() objects) – list of Fitparam() objects to populate
- Raises:
ValueError – If the value_type of the parameter is not ‘float’, ‘int’, ‘str’, ‘cat’, ‘sub’ or ‘bool’
- Returns:
list of Fitparam() objects populated with the values from the parameters dictionary
- Return type:
list of Fitparam() objects
optimpv.general.FitParams module
FitParams class
- class optimpv.general.FitParams.FitParam(name='', type='range', value_type='float', value=None, bounds=None, values=None, start_value=None, log_scale=False, rescale=False, fscale=None, stepsize=None, display_name='', unit='', axis_type=None, std=None, encoding=None, is_ordered=False, is_sorted=False, force_log=False)[source]
Bases:
object
optimpv.general.SuggestOnlyAgent module
Provides general functionality for Agent objects for non ideal diode simulations
- class optimpv.general.SuggestOnlyAgent.SuggestOnlyAgent(params, exp_format=None, metric=None, loss=None, threshold=100, minimize=True, tracking_metric=None, tracking_loss=None, tracking_exp_format=None, name='suggest', **kwargs)[source]
Bases:
BaseAgent
Agent object for suggesting new points in an optimization process without running the agents.
- Parameters:
params (list of Fitparam() objects) – List of Fitparam() objects.
exp_format (str or list of str, optional) – Format of the experimental data, by default [].
metric (str or list of str, optional) – Metric to evaluate the model, see optimpv.general.calc_metric for options, by default ‘mse’.
loss (str or list of str, optional) – Loss function to use, see optimpv.general.loss_function for options, by default ‘linear’.
threshold (int or list of int, optional) – Threshold value for the loss function used when doing multi-objective optimization, by default 100.
minimize (bool or list of bool, optional) – If True then minimize the loss function, if False then maximize the loss function (note that if running a fit minize should be True), by default True.
tracking_metric (str or list of str, optional) – Additional metrics to track and report in run_Ax output, by default None.
tracking_loss (str or list of str, optional) – Loss functions to apply to tracking metrics, by default None.
tracking_exp_format (str or list of str, optional) – Experimental formats for tracking metrics, by default None. Weights for tracking metrics, by default None.
name (str, optional) – Name of the agent, by default ‘diode’.
**kwargs (dict) – Additional keyword arguments.
optimpv.general.general module
General functions
- optimpv.general.general.calc_metric(y, yfit, sample_weight=None, metric_name='mse')[source]
Calculate the metric between the true values and the predicted values
- Parameters:
y (array-like of shape (n_samples,)) – True values
yfit (array-like of shape (n_samples,)) – Predicted values
sample_weight (array-like of shape (n_samples,), optional) – Sample weights, by default None
metric_name (str, optional) –
Name of the metric to calculate, by default ‘mse’ Possible values are:
’mse’: Mean Squared Error
’mae’: Mean Absolute Error
’mape’: Mean Absolute Percentage Error
’msle’: Mean Squared Log Error
’rmsle’: Root Mean Squared Log Error
’rmse’: Root Mean Squared Error
’medae’: Median Absolute Error
’nrmse’: Normalized Root Mean Squared Error
’rmsre’: Root Mean Squared Relative Error
- Returns:
The calculated metric
- Return type:
float
- Raises:
ValueError – If the metric is not implemented
- optimpv.general.general.direct_mean_euclidean_distance(X_true, y_true, X_fit, y_fit)[source]
Calculate the mean euclidean distance between the true and the predicted values
- Parameters:
X_true (array-like of shape (n_samples,)) – True values of the X coordinate
y_true (array-like of shape (n_samples,)) – True values of the y coordinate
X_fit (array-like of shape (n_samples,)) – Predicted values of the X coordinate
y_fit (array-like of shape (n_samples,)) – Predicted values of the y coordinate
- Returns:
The average euclidian distance between the true and the predicted values
- Return type:
float
- optimpv.general.general.inv_loss_function(value, loss='linear')[source]
Calculate the inverse loss function for the given value. Inspired by the scipy loss functions (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html). The following loss functions are implemented:
- ‘linear’ (default)
rho(z) = z
. Gives a standard least-squares problem.
- ‘linear’ (default)
- ‘soft_l1’
rho(z) = 2 * ((1 + z)**0.5 - 1)
. The smooth approximation of l1 (absolute value) loss. Usually a good choice for robust least squares.
- ‘soft_l1’
- ‘huber’
rho(z) = z if z <= 1 else 2*z**0.5 - 1
. Works similarly to ‘soft_l1’.
- ‘huber’
- ‘cauchy’
rho(z) = ln(1 + z)
. Severely weakens outliers influence, but may cause difficulties in optimization process.
- ‘cauchy’
- ‘arctan’
rho(z) = arctan(z)
. Limits a maximum loss on a single residual, has properties similar to ‘cauchy’.
- ‘arctan’
- ‘log’
rho(z) = log( z)
. Logarithmically scales the loss, very similar to ‘cauchy’ but not as safe.
- ‘log’
- ‘log10’
rho(z) = log10(z)
. Logarithmically scales the loss with base 10 log, very similar to ‘cauchy’ but not as safe.
- ‘log10’
- Parameters:
value (float) – value to calculate the inverse loss function
loss (str, optional) – loss function to use, by default ‘linear’
- Returns:
value of the inverse loss function
- Return type:
float
- Raises:
ValueError – If the loss function is not implemented
- optimpv.general.general.loss_function(value, loss='linear')[source]
Calculate the loss function for the given value. Inspired by the scipy loss functions (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html). The following loss functions are implemented:
- ‘linear’ (default)
rho(z) = z
. Gives a standard least-squares problem.
- ‘linear’ (default)
- ‘soft_l1’
rho(z) = 2 * ((1 + z)**0.5 - 1)
. The smooth approximation of l1 (absolute value) loss. Usually a good choice for robust least squares.
- ‘soft_l1’
- ‘huber’
rho(z) = z if z <= 1 else 2*z**0.5 - 1
. Works similarly to ‘soft_l1’.
- ‘huber’
- ‘cauchy’
rho(z) = ln(1 + z)
. Severely weakens outliers influence, but may cause difficulties in optimization process.
- ‘cauchy’
- ‘arctan’
rho(z) = arctan(z)
. Limits a maximum loss on a single residual, has properties similar to ‘cauchy’.
- ‘arctan’
- ‘log’
rho(z) = log( z)
. Logarithmically scales the loss, very similar to ‘cauchy’ but not as safe.
- ‘log’
- ‘log10’
rho(z) = log10(z)
. Logarithmically scales the loss with base 10 log, very similar to ‘cauchy’ but not as safe.
- ‘log10’
- Parameters:
value (float) – value to calculate the loss function
loss (str, optional) – loss function to use, by default
- Returns:
value of the loss function
- Return type:
float
- Raises:
ValueError – If the loss function is not implemented
- optimpv.general.general.mean_min_euclidean_distance(X_true, y_true, X_fit, y_fit)[source]
Calculate the minimum euclidean distance between the true and the predicted values
- Parameters:
X_true (array-like of shape (n_samples,)) – True values of the X coordinate
y_true (array-like of shape (n_samples,)) – True values of the y coordinate
X_fit (array-like of shape (n_samples,)) – Predicted values of the X coordinate
y_fit (array-like of shape (n_samples,)) – Predicted values of the y coordinate
- Returns:
The average minimum euclidian distance between the true and the predicted values
- Return type:
float
- optimpv.general.general.transform_data(y, y_pred, X=None, X_pred=None, transform_type='linear', epsilon=None)[source]
Transform data according to specified transformation type
- Parameters:
y (array-like) – True values to transform
y_pred (array-like) – Predicted values to transform alongside y
X (array-like, optional) – X coordinates of true values, by default None
X_pred (array-like, optional) – X coordinates of predicted values, by default None
transform_type (str, optional) –
Type of transformation to apply, by default ‘linear’ Possible values are:
’linear’: No transformation
’log’: Log10 transformation of absolute values
’normalized’: Division by maximum value
’normalized_log’: Normalization followed by log transformation
’sqrt’: Square root transformation
epsilon (float, optional) – Small value to add to avoid log(0), by default the machine epsilon for float64
- Returns:
(y_transformed, y_pred_transformed)
- Return type:
tuple of array-like
- Raises:
ValueError – If the transformation type is not implemented
optimpv.general.logger module
- class optimpv.general.logger.OptimpvOutputNameFilter(name='')[source]
Bases:
Filter
This is a filter which sets the record’s output_name, if not configured
- optimpv.general.logger.build_file_handler(filepath: str, level: int = 20) StreamHandler [source]
Build a file handle that logs entries to the given file, using the same formatting as the stream handler.
- Parameters:
filepath – Location of the file to log output to. If the file exists, output will be appended. If it does not exist, a new file will be created.
level – The log level. By default, sets level to INFO
- Returns:
A logging.FileHandler instance
- optimpv.general.logger.build_stream_handler(level: int = 20) StreamHandler [source]
Build the default stream handler used for most optimpv logging. Sets default level to INFO, instead of WARNING.
- Parameters:
level – The log level. By default, sets level to INFO
- Returns:
A logging.StreamHandler instance
- class optimpv.general.logger.disable_logger(name: str, level: int = 40)[source]
Bases:
ClassDecorator
- class optimpv.general.logger.disable_loggers(names: list[str], level: int = 40)[source]
Bases:
ClassDecorator
- optimpv.general.logger.get_logger(name: str, level: int = 20, force_name: bool = False) Logger [source]
Get an optimpv logger.
To set a human-readable “output_name” that appears in logger outputs, add {“output_name”: “[MY_OUTPUT_NAME]”} to the logger’s contextual information. By default, we use the logger’s name
NOTE: To change the log level on particular outputs (e.g. STDERR logs), set the proper log level on the relevant handler, instead of the logger e.g. logger.handers[0].setLevel(INFO)
- Parameters:
name – The name of the logger.
level – The level at which to actually log. Logs below this level of importance will be discarded
force_name – If set to false and the module specified is not ultimately a descendent of the optimpv module specified by name, “optimpv.” will be prepended to name
- Returns:
The logging.Logger object.
- optimpv.general.logger.make_indices_str(indices: Iterable[int]) str [source]
Generate a string representation of an iterable of indices; if indices are contiguous, returns a string formatted like like ‘<min_idx> - <max_idx>’, otherwise a string formatted like ‘[idx_1, idx_2, …, idx_n’].