Utility functions

optimagic.utilities.fast_numpy_full(length: int, fill_value: float) ndarray[tuple[Any, ...], dtype[float64]][source]

Return a new array of given length, filled with fill_value.

Empirically, this is faster than using np.full for small arrays.

optimagic.utilities.chol_params_to_lower_triangular_matrix(params)[source]
optimagic.utilities.cov_params_to_matrix(cov_params)[source]

Build covariance matrix from 1d array with its lower triangular elements.

Parameters:

cov_params (np.array) – 1d array with the lower triangular elements of a covariance matrix (in C-order)

Returns:

a covariance matrix

Return type:

cov (np.array)

optimagic.utilities.cov_matrix_to_params(cov)[source]
optimagic.utilities.sdcorr_params_to_sds_and_corr(sdcorr_params)[source]
optimagic.utilities.sds_and_corr_to_cov(sds, corr)[source]
optimagic.utilities.cov_to_sds_and_corr(cov)[source]
optimagic.utilities.sdcorr_params_to_matrix(sdcorr_params)[source]

Build covariance matrix out of variances and correlations.

Parameters:

sdcorr_params (np.array) – 1d array with parameters. The dimensions of the covariance matrix are inferred automatically. The first dim parameters are assumed to be the variances. The remainder are the lower triangular elements (excluding the diagonal) of a correlation matrix.

Returns:

a covariance matrix

Return type:

cov (np.array)

optimagic.utilities.cov_matrix_to_sdcorr_params(cov)[source]
optimagic.utilities.number_of_triangular_elements_to_dimension(num)[source]

Calculate the dimension of a square matrix from number of triangular elements.

Parameters:

num (int) – The number of upper or lower triangular elements in the matrix.

Examples

>>> number_of_triangular_elements_to_dimension(6)
3
>>> number_of_triangular_elements_to_dimension(10)
4
optimagic.utilities.dimension_to_number_of_triangular_elements(dim)[source]

Calculate number of triangular elements from the dimension of a square matrix.

Parameters:

dim (int) – Dimension of a square matrix.

optimagic.utilities.propose_alternatives(requested, possibilities, number=3)[source]

Propose possible alternatives based on similarity to requested.

Parameters:
  • requested_algo (str) – From the user requested algorithm.

  • possibilities (list(str)) – List of available algorithms are lists of algorithms.

  • number (int) – Number of proposals.

Returns:

List of proposed algorithms.

Return type:

proposals (list(str))

Example

>>> possibilities = ["scipy_lbfgsb", "scipy_slsqp", "nlopt_lbfgsb"]
>>> propose_alternatives("scipy_L-BFGS-B", possibilities, number=1)
['scipy_slsqp']
>>> propose_alternatives("L-BFGS-B", possibilities, number=2)
['scipy_slsqp', 'scipy_lbfgsb']
optimagic.utilities.robust_cholesky(matrix, threshold=None, return_info=False)[source]

Lower triangular cholesky factor of matrix.

Parameters:
  • matrix (np.array) – Square, symmetric and (almost) positive semi-definite matrix

  • threshold (float) – Small negative number. Diagonal elements of D from the LDL decomposition between threshold and zero are set to zero. Default is minus machine accuracy.

  • return_info (bool) – If True, also return a dictionary with ‘method’. Method can take the values ‘np.linalg.cholesky’ and ‘Eigenvalue QR’.

Returns:

Cholesky factor of matrix info (float, optional): see return_info.

Return type:

chol (np.array)

Raises:

np.linalg.LinalgError if an eigenvalue of matrix is below threshold.

In contrast to a regular cholesky decomposition, this function will also work for matrices that are only positive semi-definite or even indefinite. For speed and precision reasons we first try a regular cholesky decomposition. If it fails we switch to more robust methods.

optimagic.utilities.robust_inverse(matrix, msg='')[source]

Calculate the inverse or pseudo-inverse of a matrix.

The difference to calling a pseudo inverse directly is that this function will emit a warning if the matrix is singular.

Parameters:

matrix (np.ndarray)

optimagic.utilities.hash_array(arr)[source]

Create a hashsum for fast comparison of numpy arrays.

optimagic.utilities.calculate_trustregion_initial_radius(x)[source]

Calculate the initial trust region radius.

It is calculated as \(0.1\max(|x|_{\infty}, 1)\).

Parameters:

x (np.ndarray) – the start parameter values.

Returns:

initial trust radius

Return type:

trust_radius (float)

optimagic.utilities.to_pickle(obj, path)[source]
optimagic.utilities.read_pickle(path)[source]
optimagic.utilities.isscalar(element)[source]

Jax aware replacement for np.isscalar.

optimagic.utilities.get_rng(seed)[source]

Construct a random number generator.

seed (Union[None, int, numpy.random.Generator]): If seed is None or int the

numpy.random.default_rng is used seeded with seed. If seed is already a Generator instance then that instance is used.

Returns:

The random number generator.

Return type:

numpy.random.Generator

optimagic.utilities.list_of_dicts_to_dict_of_lists(list_of_dicts)[source]

Convert a list of dicts to a dict of lists.

Parameters:

list_of_dicts (list) – List of dictionaries. All dictionaries have the same keys.

Returns:

dict

Examples

>>> list_of_dicts_to_dict_of_lists([{"a": 1, "b": 2}, {"a": 3, "b": 4}])
{'a': [1, 3], 'b': [2, 4]}
optimagic.utilities.dict_of_lists_to_list_of_dicts(dict_of_lists)[source]

Convert a dict of lists to a list of dicts.

Parameters:

dict_of_lists (dict) – Dictionary of lists where all lists have the same length.

Returns:

list

Examples

>>> dict_of_lists_to_list_of_dicts({'a': [1, 3], 'b': [2, 4]})
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]