# Changelog¶

All notable changes of this project will be documented here.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

## Version 5.3.0 (2024-03-28)¶

### Added¶

The SciPy implementation of the

`Nelder-Mead`

gradient-free algorithm is now available. #875`HSICAnalysis.compute_indices`

also computes the p-values for screening purposes in two different ways: through permutations and from asymptotic formula. #992Added the modified Normal Boundary Intersection (mNBI) multi-objective optimization algorithm, for use with

`"MNBI"`

as algorithm name. Added the class`MultiObjectiveOptimizationResult`

to store and display results from optimization problems with more than one objective. Added the class`ParetoFront`

to store the points of interest of a`MultiObjectiveOptimizationResult`

. Added the`Poloni`

analytical multi-objective optimization problem. Added the`FonsecaFlemming`

analytical multi-objective optimization problem. Added the`Viennet`

analytical multi-objective optimization problem. #1012The method

`DataConverter.is_continuous`

can tell if a variable is continuous. #1066The

`Dataset`

class can now be created from a`DataFrame`

using the new class method:`from_dataframe`

. #1069The boolean attribute

`DatasetPlot.grid`

allows to add a grid to the`DatasetPlot`

. #1074`HSICAnalysis.compute_indices`

proposes two new sensitivity analysis (SA) types, namely conditional SA and target SA. #1078`Lines`

and`BarPlot`

have HTML-based interactive versions based on plotly. #1082The method

`AbstractCache.get_all_entries`

that returns all the entries, whatever the tolerance.The module

`gemseo.typing`

that contains common type annotations. #1090`Dataset.from_csv`

has a new attribute`first_column_as_index`

, which permits to read`csv`

files that contain the index as the first column. #1093`MDOFunction`

supports elementwise multiplication and division by NumPy arrays.Addition, substraction, multiplication and division of a function expecting normalized inputs with a function that does not raise

`RuntimeError`

.The function values \(f(x)\) passed to optimizers can optionally be scaled relative to \(|f(x_0)|\) where \(x_0\) is the current value of the

`DesignSpace`

. This functionality is enabled by passing a positive value \(\epsilon\) as the option`scaling_threshold`

of any optimizer: the function values passed to the optimizer are then \(f(x) / \max\{ |f(x_0)|, \epsilon \}\). The purpose of \(\epsilon\) is to avoid division by a value close to zero. The (default) value`None`

for the option`scaling_threshold`

disables the scaling. #1100`DOELibrary.compute_doe`

and`compute_doe`

can use a variables space dimension instead of a variables space. #1102Each DOE algorithm available in GEMSEO has a new option named

`"callbacks"`

to pass a list of functions to be evaluated after each call to`OptimizationProblem.evaluate_functions`

. #1111Implement “hdf_node_path” for “opt_problem”,”design_space” and “database”.

Allow “opt_problem” to be exported/imported to/from a node in a specified hdf file. #1119

The plotting methods of

`SensitivityAnalysis`

and`Statistics`

classes return`DatasetPlot`

objects or figures from data visualization libraries, e.g. Matplotlib and Plotly.A Plotly figure can be passed to a Plotly plot. #1121

`OptimizationProblem.get_all_functions`

has a new argument`original`

to return the original functions given to the problem. #1126A property

`figures`

allows to retrieve the figures generated by a`DatasetPlot`

. #1130`DriverLibrary.clear_listeners`

removes the listeners added by the`DriverLibrary`

from the`Database`

attached to the`OptimizationProblem`

. #1134The

`Seeder`

class is a seed generator for features using random numbers, e.g.`DOELibrary`

; its`get_seed`

method returns either the user seed or the initial seed incremented by the number of calls. #1148

### Fixed¶

The stratified DOE algorithms

`OT_AXIAL`

,`OT_COMPOSITE`

and`OT_FACTORIAL`

correctly support the arguments`n_samples`

,`centers`

,`dimension`

and`levels`

. #88The

`MDODiscipline`

can be linearized after execution when its`cache_type`

is set to`MDODiscipline.CacheType.None`

and both inputs and outputs arguments of linearize are empty. #804`MDAJacobi`

and`MDAGaussSeidel`

have now different XDSM representations which are in line with the convention proposed in [LM12].`MDAChain`

is not represented anymore in the XDSM. Add tests for the pdf generation of XDSMs. Bugfixes for XDSM pdf generation. #1062The expression

`LinearComposition.expr`

is now correct. #1063Non-continuous variables can no longer be differentiated. #1066

The upper bound KS aggregation function is really called when aggregating constraints in an

`OptimizationProblem`

#1075The user no longer has to provide an initial design point to solve an optimization problem with gradient approximation. #1076

The method

`Scenario.set_optimization_history_backup()`

no longer causes the execution to crash at the first iteration when the Scenario includes equality or inequality constraints. #1089The

`DirectoryCreator`

can now consider non-existing root directory while using`DirectoryNamingMethod.NUMBERED`

. #1097The missing closing parenthesis in the expression of

`Rosenbrock`

is no longer missing.Addition, substraction, multiplication and division of functions expecting normalized inputs yield functions expecting normalized inputs. #1100

`CustomDOE.compute_doe`

no longer raises an error and works correctly. #1103The axes generated by

`EmpiricalStatistics.plot_cdf`

are no longer switched. #1105The BiLevel formulation can now be warm started even when the MDA1 does not exist (case of weakly coupled disciplines). #1107

The attribute

`ParameterSpace.distributions`

is correctly updated when renaming a random variable. #1108`OptimizationProblem.database`

is not used when`use_database`

is`False`

in the case of a`DOELibrary`

. #1110`Dataset.to_dict_of_arrays`

no longer raises an`AttributeError`

when both`by_entry`

and`by_group`

are`True`

and works properly. #1112When

`function_calls`

is`True`

,`OptimizationProblem.reset`

resets the number of calls of the original functions. #1126`DesignSpace.rename_variable`

can be applied to a variable without value. #1127Requesting an optimized LHS with size 1 raises an exception instead of a freeze. #1133

`Database`

cannot store the same listener several times. #1134The

`Alternate2Delta`

method now handles degenerated (ill-conditioned) least squares problems. In this case, the method now returns the iterate without transformations. #1137`Dataset.add_group`

works correctly when`variable_names`

defines a single variable. #1138The transformers passed to an

`MLAlgo`

are correctly applied when the`fit_transformers`

argument of the`learn`

method is`False`

. #1146The

`MDOChain`

Jacobian is made reproducible, making the sum of composite derivative terms in an order that does not depend on the code execution. #1150The

`PydanticGrammar`

was not able to validate`DisciplineData`

objects. #1153

### Changed¶

The methods

`OptimizationProblem.from_hdf()`

and`OptimizationProblem.to_hdf()`

no longer log messages when they are called. The method`Database.to_ggobi()`

no longer logs messages when it is called. #579The option

`disp`

of the`SciPy`

algorithms shall now be passed as a`boolean`

instead of an`integer`

. #875The method

`Scenario.set_optimization_history_backup()`

now starts generating plots only after the first two iterations have been computed. The`OptHistoryView`

plots created by`Scenario.set_optimization_history_backup()`

with the option`generate_opt_plot`

are no longer updated at each`Database.store()`

, only at each new iteration. #1089API change:

`AbstractCache._{INPUTS,OUTPUTS,JACOBIAN}_GROUP`

has been replaced by`AbstractCache.Group`

. #1090Methods

`execute`

and`linearize`

of`gemseo.problems.sobieski.core.structure.SobieskiStructure`

catch the`ValueError`

raised by the computation of the logarithm of a non-positive weight ratio. Method`execute`

returns`numpy.nan`

for the mass term. #1101It is now possible to solve

`MDA`

instances that include non-numeric couplings (weak or strong), typically strings or arrays of string. The non-numeric couplings are automatically filtered during the numerical solution of the`MDA`

. A warning message is shown in the log at`DEBUG`

level with the variables that were filtered. #1124`Database.clear_listeners`

returns the listeners after removing them from the`Database`

. #1134`OptimizationProblem.objective = mdo_function`

sets`mdo_function.f_type`

to`mdo_function.FunctionType.OBJ`

; no need to do it by hand anymore. #1141The argument

`uniform_distribution_name`

of`IshigamiProblem`

and`IshigamiSpace`

allows to use a uniform distribution from a library other than SciPy, e.g. OpenTURNS. #1143API change:

`SEED`

moved to`gemseo.utils.seeder`

. #1148

### Removed¶

Support for reStructuredText docstring format.

The function

`get_default_option_values`

; use`inspect.get_callable_argument_defaults(cls.__init__)`

instead of`get_default_option_values(cls)`

. #1059

## Version 5.2.0 (2023-12-20)¶

### Added¶

Setting

`file_format="html"`

in`DatasetPlot.execute`

saves on the disk and/or displays in a web browser a plotly-based interactive plot.`DatasetPlot.DEFAULT_PLOT_ENGINE`

is set to`PlotEngine.MATPLOTLIB`

; this is the default plot engine used by`DatasetPlot`

.`DatasetPlot.FILE_FORMATS_TO_PLOT_ENGINES`

maps the file formats to the plot engines to override the default plot engine. #181Add

`OptimizationProblem.get_last_point`

method to get the last point of an optimization problem. #285The disciplines

`Concatenater`

,`LinearCombination`

and`Splitter`

now have sparse Jacobians. #423The method

`EmpiricalStatistics.plot_barplot`

generates a boxplot for each variable. The method`EmpiricalStatistics.plot_cdf`

draws the cumulative distribution function for each variable. The method`EmpiricalStatistics.plot_pdf`

draws the probability density function for each variable. #438`MLRegressorQualityViewer`

proposes various methods to plot the quality of an`MLRegressionAlgo``

.`DatasetPlot.execute`

can use a file name suffix.`SurrogateDiscipline.get_quality_viewer`

returns a`MLRegressorQualityViewer`

. #666`ScatterMatrix`

can set any option of the pandas`scatter_matrix`

function.`ScatterMatrix`

can add trend curves on the scatter plots, with either the enumeration`ScatterMatrix.Trend`

or a custom fitting technique.`Scatter`

can add a trend curve, with either the enumeration`Scatter.Trend`

or a custom fitting technique. #724`ScenarioResult`

is a new concept attached to a`Scenario`

. This concept enables to post-process more specifically the results of a given scenario. In particular, the`ScenarioResult`

can be derived in order to implement dedicated post-treatments depending on the formulation.`OptimizationResult.from_optimization_problem`

creates an`OptimizationResult`

from an`OptimizationProblem`

.`BaseFormulation.DEFAULT_SCENARIO_RESULT_CLASS_NAME`

is the name of the default`OptimizationResult`

class to be used with the given formulation.`ScenarioResult`

stores the result of a`Scenario`

from a`Scenario`

or an HDF5 file.`BiLevelScenarioResult`

is a`ScenarioResult`

to store the result of a`Scenario`

using a`BiLevel`

formulation.`ScenarioResultFactory`

is a factory of`ScenarioResult`

.`Scenario.get_result`

returns the result of the execution of the`Scenario`

as a`ScenarioResult`

.`create_scenario_result`

stores the result of a`Scenario`

from a`Scenario`

or an HDF5 file.

The

`LinearCombination`

discipline now has a sparse Jacobian. #809The

`normalize`

option of`BasicHistory`

scales the data between 0 and 1 before plotting them. #841The type of the coupling variables is no longer restricted to NumPy arrays thanks to data converters attached to grammars. #849

`gemseo.mlearning.sampling`

is a new package with resampling techniques, such as`CrossValidation`

and`Bootstrap`

.`MLAlgo.resampling_results`

stores the resampling results; a resampling result is defined by a`Resampler`

, the machine learning algorithms generated during the resampling stage and the associated predictions. The methods offered by`MLQualityMeasure`

to estimate a quality measure by resampling have a new argument called`store_resampling_result`

to store the resampling results and reuse them to estimate another quality measure faster. #856`SciPyDOE`

is a new`DOELibrary`

based on SciPy, with five algorithms: crude Monte Carlo, Halton sequence, Sobol’ sequence, Latin hypercube sampling and Poisson disk sampling. #857When third-party libraries do not handle sparse Jacobians, a preprocessing step is used to convert them as dense NumPy arrays. #899

`R2Measure.evaluate_bootstrap`

is now implemented. #914Add diagrams in the documentation to illustrate the architecture and usage of ODEProblem. #922

MDA can now handle disciplines with matrix-free Jacobians. To define a matrix-free Jacobian, the user must fill in the

`MDODiscipline.jac`

dictionary with`JacobianOperator`

overloading the`_matvec`

and`_rmatvec`

methods to respectively implement the matrix-vector and transposed matrix-vector product. #940The

`SimplerGrammar`

is a grammar based on element names only.`SimplerGrammar` is even simpler than ``SimpleGrammar`

which considers both names and types. #949`HSICAnalysis`

is a new`SensitivityAnalysis`

based on the Hilbert-Schmidt independence criterion (HSIC). #951Add the Augmented Lagrangian Algorithm implementation. #959

Support for Python 3.11. #962

Optimization problems with inequality constraints can be reformulated with only bounds and equality constraints and additional slack variables thanks to the public method:

`OptimizationProblem.get_reformulated_problem_with_slack_variables.`

#963The subtitle of the graph generated by

`SobolAnalysis.plot`

includes the standard deviation of the output of interest in addition to its variance. #965`OTDistributionFactory`

is a`DistributionFactory`

limited to`OTDistribution`

objects.`SPDistributionFactory`

is a`DistributionFactory`

limited to`SPDistribution`

objects. The`base_class_name`

attribute of`get_available_distributions`

can limit the probability distributions to a specific library, e.g.`"OTDistribution"`

for OpenTURNS and`"SPDistribution"`

for SciPy. #972The

`use_one_line_progress_bar`

driver option allows to display only one iteration of the progress bar at a time. #977`OTWeibullDistribution`

is the OpenTURNS-based Weibull distribution.`SPWeibullDistribution`

is the SciPy-based Weibull distribution. #980`MDAChain`

has an option to initialize the default inputs by creating a`MDOInitializationChain`

at first execution. #981The upper bound KS function is added to the aggregation functions. The upper bound KS function is an offset of the lower bound KS function already implemented. #985

`CenteredDifferences`

Approximation mode is now supported for jacobian computation. This can be used to calculate`MDODiscipline`

and`MDOFunctions`

jacobians setting the jacobian approximation mode as for the Finite Differences and the Complex Step schemes. This is a second order approach that employs twice points but as a second order accuracy with respect to the Finite Difference scheme. When calculating a Centered Difference on one of the two bounds of the Design Space, the Finite Difference scheme is used instead. #987The class

`SobieskiDesignSpace`

deriving from`DesignSpace`

can be used in the Sobieski’s SSBJ problem. It offers new filtering methods, namely`filter_coupling_variables`

and`filter_design_variables`

. #1003The

`MDODiscipline`

can flag linear relationships between inputs and outputs. This enables the`FunctionFromDiscipline`

generated from these`MDODiscipline`

to be instances of`LinearMDOFunction`

. An`OptimizationProblem`

is now by default a linear problem unless a non-linear objective or constraint is added to the optimization problem. #1008The following methods now have an option

`as_dict`

to request the return values as dictionaries of NumPy arrays instead of straight NumPy arrays:`DesignSpace.get_lower_bounds`

,`DesignSpace.get_upper_bounds`

,`OptimizationProblem.get_x0_normalized`

and`DriverLibrary.get_x0_and_bounds_vects`

. #1010`gemseo.SEED`

is the default seed used by GEMSEO for random number generators. #1011HiGHS solvers for linear programming interfaced by SciPy are now available. #1016

Augmented Lagrangian can now pass some of the constraints to the sub-problem and deal with the rest of them thanks to the

`sub_problem_constraints`

option. #1026An example on the usage of the

`MDODiscipline.check_jacobian`

method was added to the documentation. Three derivative approximation methods are discussed: finite differences, centered differences and complex step. #1039The

`TaylorDiscipline`

class can be used to create the first-order Taylor polynomial of an`MDODiscipline`

at a specific expansion point. #1042The following machine learning algorithms have an argument

`random_state`

to control the generation of random numbers:`RandomForestClassifier`

,`SVMClassifier`

,`GaussianMixture`

,`KMeans`

,`GaussianProcessRegressor`

,`LinearRegressor`

and`RandomForestRegressor`

. Use an integer for reproducible results (default behavior). #1044`BaseAlgoFactory.create`

initializes the grammar of algorithm options when it is called with an algorithm name. #1048

### Fixed¶

There is no longer overlap between learning and test samples when using a cross-validation technique to estimate the quality measure of a machine learning algorithm. #915

Security vulnerability when calling

`subprocess.run`

with`shell=True`

. #948Fixed bug on

`LagrangeMultipliers`

evaluation when bound constraints are activated on variables which have only one bound. #964The iteration rate is displayed with appropriate units in the progress bar. #973

`AnalyticDiscipline`

casts SymPy outputs to appropriate NumPy data types (as opposed to systematically casting to`float64`

). #974`AnalyticDiscipline`

no longer systematically casts inputs to`float`

. #976`MDODiscipline.set_cache_policy`

can use`MDODiscipline.CacheType.NONE`

as`cache_type`

value to remove the cache of the`MDODiscipline`

. #978The normalization methods of

`DesignSpace`

do no longer emit a`RuntimeWarning`

about a division by zero when the lower and upper bounds are equal. #1002The types used with

`PydanticGrammar.update_from_types`

with`merge=True`

are taken into account. #1006`DesignSpace.dict_to_array`

returns an`ndarray`

whose attribute`dtype`

matches the “common`dtype`

” of the values of its`dict`

argument`design_values`

corresponding to the keys passed in its argument`variables_names`

. So far, the`dtype`

was erroneously based on all the values of`design_values`

. #1019`DisciplineData`

with nested dictionary can now be serialized with`json`

. #1025Full-factorial design of experiments: the actual number of samples computed from the maximum number of samples and the dimension of the design space is now robust to numerical precision issues. #1028

`DOELibrary.execute`

raises a`ValueError`

when a component of the`DesignSpace`

is unbounded and the`DesignSpace`

is not a`ParameterSpace`

.`DOELibrary.compute_doe`

raises a`ValueError`

when`unit_sampling`

is`False`

, a component of the design space is unbounded and the`DesignSpace`

is not a`ParameterSpace`

. #1029`OptimizationProblem.get_violation_criteria`

no longer considers the non-violated components of the equality constraints when calculating the violation measure. #1032A

`JSONGrammar`

using namespaces can be serialized correctly. #1041`RadarChart`

displays the constraints at iteration`i`

when`iteration=i`

. #1054

### Changed¶

API:

The class

`RunFolderManager`

is renamed`DirectoryGenerator`

.The class

`FoldersIter`

is renamed`Identifiers`

.The signature of the class

`DirectoryGenerator`

has changed:`folders_iter`

is replaced by`identifiers`

`output_folder_basepath`

is replaced by`root_directory`

The subpackage

`gemseo.mlearning.data_formatters`

includes the`DataFormatters`

used by the learning and prediction methods of the machine learning algorithms. #933The argument

`use_shell`

of the discipline`DiscFromExe`

is no longer taken into account, executable are now always executed without shell. #948The existing KS function aggregation is renamed as

`lower_bound_KS`

. #985The log of the

`ProgressBar`

no longer displays the initialization of the progress bar. #988The

`samples`

option of the algorithm`CustomDOE`

can be a 2D-array shaped as`(n_samples, total_variable_size)`

, a dictionary shaped as`{variable_name: variable_samples, ...}`

where`variable_samples`

is a 2D-array shaped as`(n_samples, variable_size)`

or an`n_samples`

-length list shaped as`[{variable_name: variable_sample, ...}, ...]`

where`variable_sample`

is a 1D-array shaped as`(variable_size, )`

. #999`PydanticGrammar`

have been updated to support pydantic v2. For such grammars, NumPy ndarrays shall be typed with`gemseo.core.grammars.pydantic_ndarray.NDArrayPydantic`

instead of the standard`ndarray`

or`NDArray`

based of annotations. #1017The example on how to do a Pareto Front on the Binh Korn problem now uses a

`BiLevel`

formulation instead of an`MDOScenarioAdapter`

manually embedded into a`DOEScenario`

. #1040`ParameterSpace.__str__`

no longer displays the current values, the bounds and the variable types when all the variables are uncertain. #1046

### Removed¶

Support for Python 3.8. #962

## Version 5.1.1 (2023-10-04)¶

### Security¶

Upgrade the dependency `pillow`

to mitigate a vulnerability.

## Version 5.1.0 (2023-10-02)¶

### Added¶

The argument

`scenario_log_level`

of`MDOScenarioAdapter`

allows to change the level of the root logger during the execution of its scenario.The argument

`sub_scenarios_log_level`

of`BiLevel`

allows to change the level of the root logger during the execution of its sub-scenarios. #370`DesignSpace`

has a pretty HTML representation. #504The method

`add_random_vector()`

adds a random vector with independent components to a`ParameterSpace`

from a probability distribution name and parameters. These parameters can be set component-wise. #551The high-level function

`create_dataset`

returns an empty`Dataset`

by default with a default name. #721`OptimizationResult`

has new fields`x_0_as_dict`

and`x_opt_as_dict`

bounding the names of the design variables to their initial and optimal values. #775Enable the possibility of caching sparse Jacobian with cache type HDF5Cache. #783

Acceleration methods for MDAs are defined in dedicated classes inheriting from

`SequenceTransformer`

.Available sequence transformers are:

The alternate 2-δ method:

`Alternate2Delta`

.The alternate δ² method:

`AlternateDeltaSquared`

.The secante method:

`Secante`

.The Aitken method:

`Aitken`

.The minimum polynomial method:

`MinimumPolynomial`

.The over-relaxation:

`OverRelaxation`

.

The values of the constraints can be passed to method

`OptimizationProblem.get_number_of_unsatisfied_constraints.`

#802`MLErrorMeasureFactory`

is a factory of`MLErrorMeasure`

.`SurrogateDiscipline.get_error_measure`

returns an`MLErrorMeasure`

to assess the quality of a`SurrogateDiscipline`

; use one of its evaluation methods to compute it, e.g.`evaluate_learn`

to compute a learning error. #822The

`DatasetFactory`

is a factory of`Dataset`

.The high-level function

`create_dataset`

can return any type of`Dataset`

. #823`Dataset`

has a string property`summary`

returning some information, e.g. number of entries, number of variable identifiers, … #824`MLAlgo.__repr__`

returns the same as`MLAlgo.__str__`

before this change and`MLAlgo.__str__`

does not overload`MLAlgo.__repr__`

. #826The method

`Dataset.to_dict_of_arrays`

can break down the result by entry with the boolean argument`by_entry`

whose default value is`False`

. #828Added Scipy MILP solver wrapper. #833

`DesignSpace.get_variables_indexes`

features a new optional argument`use_design_space_order`

to switch the order of the indexes between the design space order and the user order. #850`ScalableProblem.create_quadratic_programming_problem`

handles the case where uncertain vectors are added in the coupling equations. #863`MDODisciplineAdapterGenerator`

can use a dictionary of variable sizes at instantiation. #870The multi-processing start method (spawn or fork) can now be chosen. #885

Acceleration methods and over-relaxation are now available for

`MDAJacobi`

,`MDAGaussSeidel`

and`MDANewtonRaphson`

. They are configured at initialization via the`acceleration_method`

and`over_relaxation_factor`

and can be modified afterward via the attributes`MDA.acceleration_method`

and`MDA.over_relaxation_factor`

.Available acceleration methods are:

`Alternate2Delta`

,`AlternateDeltaSquared`

,`Aitken`

,`Secant`

,`MinimumPolynomial`

,

`CouplingStudyAnalysis`

has a new method`generate_coupling_graph`

.The CLI

`gemseo-study`

generates the condensed and full coupling graphs as PDF files. #910The

`check_disciplines_consistency`

function checks if two disciplines compute the same output and raises an error or logs a warning message if this is the case.`MDOCouplingStructure`

logs a message with`WARNING`

level if two disciplines compute the same output. #912The default value of an input variable of a

`LinearCombination`

is zero. #913`BaseFactory.create`

supports positional arguments. #918The algorithms of a

`DriverLibrary`

have a new option`"log_problem"`

(default:`True`

). Set it to`False`

so as not to log the sections related to an optimization problem, namely the problem definition, the optimization result and the evolution of the objective value. This can be useful when a`DOEScenario`

is used as a pure sampling scenario. #925`SensitivityAnalysis.plot_bar`

and`SensitivityAnalysis.plot_radar`

have new arguments`sort`

and`sorting_output`

to sort the uncertain variables by decreasing order of the sensitivity indices associated with a sorting output variable.`DatasetPlot`

has a new argument`xtick_rotation`

to set the rotation angle of the x-ticks for a better readability when the number of ticks is important. #930`SensitivityAnalysis.to_dataset`

stores the second-order Sobol’ indices in the dictionary`Dataset.misc`

with the key`"second"`

. #936The string representation of a

`ComposedDistribution`

uses both the string representations of the marginals and the string representation of the copula.The string representation of a

`Distribution`

uses both the string representation of its parameters and its dimension when the latter is greater than 1. #937The default value of the argument

`outputs`

of the methods`plot_bar`

and`plot_radar`

of`SensitivityAnalysis`

is`()`

. In this case, the`SensitivityAnalysis`

uses all the outputs. #941`N2HTML`

can use any sized default inputs (NumPy arrays, lists, tuples, …) to deduce the size of the input variables. #945

### Fixed¶

Fix the MDA residual scaling strategy based on sub-residual norms. #957

An XDSM can now take into account several levels of nested scenarios as well as nested

`MDA`

. An XDSM with a nested Scenario can also take into account more complex formulations than`DisciplinaryOpt`

, such as`MDF`

. #687The properties of the

`JSONGrammar`

created by`BaseFactory.get_options_grammar`

are no longer required. #772If

`time_vector`

is not user-specified, then it is generated by the solver. As such, the array generated by the solver belongs in the`ODEResult`

. #778Fix plot at the end of the Van der Pol tutorial illustrating an

`ODEProblem`

. #806The high-level function

`create_dataset`

returns a base`Dataset`

by default. #823`SurrogateDiscipline.__str__`

is less verbose by inheriting from`MDODiscipline`

; use`SurrogateDiscipline.__repr__`

instead of the older`SurrogateDiscipline.__repr__`

. #837`OptHistoryView`

can be executed with`variable_names=None`

to explicitly display all the design variables.The variable names specified with the argument

`variable_names`

of`OptHistoryView`

are correctly considered.`OptimizationProblem.from_hdf`

sets`pb_type`

and`differentiation_method`

as string.`OptHistoryView`

,`ObjConstrHist`

and`ConstraintsHistory`

display a limited number of iterations on the*x*-axis to make it more readable by avoiding xtick overlay.`DesignSpace`

has a new property`names_to_indices`

defining the design vector indices associated with variable names. #838`execute_post`

can post-process a`Path`

. #846The MDA chain can change at once the

`max_mda_iter`

of all its MDAs. The behaviour of the`max_mda_iter`

of this class has been changed to do so. #848The methods

`to_dataset`

build`Dataset`

objects in one go instead of adding variables one by one. #852`CorrelationAnalysis`

and`SobolAnalysis`

use the input names in the order provided by the`ParameterSpace`

. #853The

`RunFolderManager`

can now work with a non-empty`output_folder_basepath`

when using`folders_iter = FoldersIter.NUMBERED`

. Their name can be different from a number. #865The argument

`output_names`

of`MorrisAnalysis`

works properly again. #866The argument

`n_samples`

passed to`MorrisAnalysis`

is correctly taken into account. #869`DOELibrary`

works when the design variables have no default value. #870The generation of XDSM diagrams for MDA looping over MDOScenarios. #879

`BarPlot`

handles now correctly a`Dataset`

whose number of rows is higher than the number of variables. #880The DOE algorithms consider the optional seed when it is equal to 0 and use the driver’s one when it is missing. #886

`PCERegressor`

now handles multidimensional random input variables. #895`get_all_inputs`

and`get_all_outputs`

return sorted names and so are now deterministic. #901`OptHistoryView`

no longer logs a warning when post-processing an optimization problem whose objective gradient history is empty. #902The string representation of an

`MDOFunction`

is now correct even after several sign changes. #917The sampling phase of a

`SensitivityAnalysis`

no longer reproduces the full log of the`DOEScenario`

. Only the disciplines, the MDO formulation and the progress bar are considered. #925The

`Correlations`

plot now labels its subplots correctly when the constraints of the optimization problem include an offset. #931The string representation of a

`Distribution`

no longer sorts the parameters. #935`SobolAnalysis`

can export the indices to a`Dataset`

, even when the second-order Sobol’ indices are computed. #936One can no longer add two random variables with the same name in a

`ParameterSpace`

. #938`SensitivityAnalysis.plot_bar`

and`SensitivityAnalysis.plot_radar`

use all the outputs when the argument`outputs`

is empty (e.g.`None`

,`""`

or`()`

). #941A

`DesignSpace`

containing a design variable without current value can be used to extend another`DesignSpace`

. #947Security vulnerability when calling

`subprocess.run`

with`shell=True`

. #948

### Changed¶

`Distribution`

: the default value of`variable`

is`"x"`

; same for`OTDistribution`

,`SPDistribution`

and their sub-classes.`SPDistribution`

: the default values of`interfaced_distribution`

and`parameters`

are`uniform`

and`{}`

.`OTDistribution`

: the default values of`interfaced_distribution`

and`parameters`

are`Uniform`

and`()`

. #551The high-level function

`create_dataset`

raises a`ValueError`

when the file has a wrong extension. #721The performance of

`MDANewtonRaphson`

was improved. #791The classes

`KMeans`

use`"auto"`

as default value for the argument`n_init`

of the scikit-learn’s`KMeans`

class. #825`output_names`

was added to`MDOFunction.DICT_REPR_ATTR`

in order for it to be exported when saving to an hdf file. #860`OptimizationProblem.minimize_objective`

is now a property that changes the sign of the objective function if needed. #909The name of the

`MDOFunction`

resulting from the sum (resp. subtraction, multiplication, division) of two`MDOFunction`

s named`"f"`

and`"g"`

is`"[f+g]"`

(resp.`"[f-g]"`

,`"[f*g]"`

,`"[f/g]"`

).The name of the

`MDOFunction`

defined as the opposite of the`MDOFunction`

named`"f"`

is`-f`

.In the expression of an

`MDOFunction`

resulting from the multiplication or division of`MDOFunction`

s, the expression of an operand is now grouped with round parentheses if this operand is a sum or subtraction. For example, for`"f(x) = 1+x"`

and`"g(x) = x"`

the resulting expression for`f*g`

is`"[f*g](x) = (1+x)*x"`

.The expression of the

`MDOFunction`

defined as the opposite of itself is`-(expr)`

. #917Renamed

`MLQualityMeasure.evaluate_learn`

to`MLQualityMeasure.compute_learning_measure`

.Renamed

`MLQualityMeasure.evaluate_test`

to`MLQualityMeasure.compute_test_measure`

.Renamed

`MLQualityMeasure.evaluate_kfolds`

to`MLQualityMeasure.compute_cross_validation_measure`

.Renamed

`MLQualityMeasure.evaluate_loo`

to`MLQualityMeasure.compute_leave_one_out_measure`

.Renamed

`MLQualityMeasure.evaluate_bootstrap`

to`MLQualityMeasure.compute_bootstrap_measure`

. #920The argument

`use_shell`

of the discipline`DiscFromExe`

is no longer taken into account, executable are now always executed without shell. #948

## Version 5.0.1 (2023-09-07)¶

### Added¶

The MDAJacobi performance and memory usage was improved. #882

### Fixed¶

The MDAJacobi executions are now deterministic. The MDAJacobi m2d acceleration is deactivated when the least square problem is not well solved. #882

## Version 5.0.0 (2023-06-02)¶

### Main GEMSEO.API breaking changes¶

The high-level functions defined in

`gemseo.api`

have been moved to`gemseo`

.Features have been extracted from GEMSEO and are now available in the form of

`plugins`

:`gemseo.algos.opt.lib_pdfo`

has been moved to gemseo-pdfo, a GEMSEO plugin for the PDFO library,`gemseo.algos.opt.lib_pseven`

has been moved to gemseo-pseven, a GEMSEO plugin for the pSeven library,`gemseo.wrappers.matlab`

has been moved to gemseo-matlab, a GEMSEO plugin for MATLAB,`gemseo.wrappers.template_grammar_editor`

has been moved to gemseo-template-editor-gui, a GUI to create input and output file templates for`DiscFromExe`

.

### Added¶

#### Surrogate models¶

`PCERegressor`

has new arguments:`use_quadrature`

to estimate the coefficients by quadrature rule or least-squares regression.`use_lars`

to get a sparse PCE with the LARS algorithm in the case of the least-squares regression.`use_cleaning`

and`cleaning_options`

to apply a cleaning strategy removing the non-significant terms.`hyperbolic_parameter`

to truncate the PCE before training.

The argument

`scale`

of`PCA`

allows to scale the data before reducing their dimension. #743

#### Post processing¶

`GradientSensitivity`

plots the positive derivatives in red and the negative ones in blue for easy reading. #725`TopologyView`

allows to visualize the solution of a 2D topology optimization problem. #739`ConstraintsHistory`

uses horizontal black dashed lines for tolerance. #664`Animation`

is a new`OptPostProcessor`

to generate an animated GIF from a`OptPostProcessor`

. #740

#### MDO processes¶

`JSchedulerDisciplineWrapper`

can submit the execution of disciplines to a HPC job scheduler. #613`MDODiscipline`

has now a virtual execution mode; when active,`MDODiscipline.execute`

returns its`MDODiscipline.default_outputs`

, whatever the inputs. #558Improve the computation of

`MDA`

residuals with the following new strategies:each sub-residual is scaled by the corresponding initial norm,

each component is scaled by the corresponding initial component,

the Euclidean norm of the component-wise division by initial residual scaled by the problem size.

`OTComposedDistribution`

can consider any copula offered by OpenTURNS. #655`Scenario.xdsmize`

returns a`XDSM`

; its`XDSM.visualize`

method displays the XDSM in a web browser; this object has also a HTML view. #564Add a new grammar type based on Pydantic:

`PydanticGrammar`

. This new grammar is still experimental and subject to changes, use with cautions. #436`XLSStudyParser`

has a new argument`has_scenario`

whose default value is`True`

; if`False`

, the sheet`Scenario`

is not required.`CouplingStudyAnalysis`

allows to generate an N2 diagram from an XLS file defining the disciplines in terms of input and output names.`MDOStudyAnalysis`

allows to generate an N2 diagram and an XDSM from an XLS file defining an MDO problem in terms of disciplines, formulation, objective, constraint and design variables. #696`JSONGrammar`

can validate`PathLike`

objects. #759Enable sparse matrices in the utils.comparisons module. #779

The method

`MDODiscipline._init_jacobian`

now supports sparse matrices.

#### Optimisation & DOE¶

Stopping options

`"max_time"`

and`"stop_crit_n_x"`

can now be used with the global optimizers of SciPy (`"DIFFERENTIAL_EVOLUTION"`

,`"DUAL_ANNEALING"`

and`"SHGO"`

). #663Add exterior penalty approach to reformulate

`OptimizationProblem`

with constraints into one without constraints. #581Documentation: the required parameters of optimization, DOE and linear solver algorithms are documented in dedicated sections. #680

The

`MDOLinearFunction`

expression can be passed as an argument to the instantiation. This can be useful for large numbers of inputs or outputs to avoid long computation times for the expression string. #697Enable sparse coefficients for

`MDOLinearFunction`

. #756

#### UQ¶

`SobolAnalysis`

provides the`SobolAnalysis.output_variances`

and`SobolAnalysis.output_standard_deviations`

.`SobolAnalysis.unscale_indices`

allows to unscale the Sobol’ indices using`SobolAnalysis.output_variances`

or`SobolAnalysis.output_standard_deviations`

.`SobolAnalysis.plot`

now displays the variance of the output variable in the title of the graph. #671`CorrelationAnalysis`

proposes two new sensitivity methods, namely Kendall rank correlation coefficients (`CorrelationAnalysis.kendall`

) and squared standard regression coefficients (`CorrelationAnalysis.ssrc`

). #654

#### Technical improvements¶

Factory for algorithms (

`BaseAlgoFactory`

) can cache the algorithm libraries to provide speedup. #522When

`keep_opt_history=True`

, the databases of a`MDOScenarioAdapter`

can be exported in HDF5 files. #607The argument

`use_deep_copy`

has been added to the constructor of`MDOParallelChain`

class. This controls the use of deepcopy when running`MDOParallelChain`

. By default this is set to`False`

, as a performance improvement has been observed in use cases with a large number of disciplines. The old behaviour of using a deep copy of`MDOParallelChain.local_data`

can be enabled by setting this option to`True`

. This may be necessary in some rare combination of`MDOParallelChain`

and other disciplines that directly modify the`MDODiscipline.input_data`

. #527Added a new

`RunFolderManager`

to generate unique run directory names for`DiscFromExe`

, either as successive integers or as UUID’s. #648`ScenarioAdapter`

is a`Factory`

of`MDOScenarioAdapter`

. #684A new

`MDOWarmStartedChain`

allows users to warm start some inputs of the chain with the output values of the previous run. #665The method

`Dataset.to_dict_of_arrays`

converts a`Dataset`

into a dictionary of NumPy arrays indexed by variable names or group names. #793

### Fixed¶

#### Surrogate models¶

`MinMaxScaler`

and`StandardScaler`

handle constant data without`RuntimeWarning`

. #719

#### Post processing¶

The different kinds of

`OptPostProcessor`

displaying iteration numbers start counting at 1. #601The option

`fig_size`

passed to`OptPostProcessor.execute`

is now taken into account. #641The subplots of

`ConstraintsHistory`

use their own y-limits. #656The visualization

`ParallelCoordinates`

uses the names of the design variables defined in the`DesignSpace`

instead of default ones. #675

#### MDO processes¶

`MDODiscipline.linearize`

with`compute_all_jacobians=False`

(default value) computes the Jacobians only for the inputs and outputs defined with`MDODiscipline.add_differentiated_inputs`

and`MDODiscipline.add_differentiated_outputs`

if any; otherwise, it returns an empty dictionary; if`compute_all_jacobians=True`

, it considers all the inputs and outputs. #644The bug concerning the linearization of a

`MDOScenarioAdapter`

including disciplines that depends both only on`MDOScenarioAdapter`

inputs and that are linearized in the`MDOScenarioAdapter._run`

method is solved. Tests concerning this behavior where added. #651`AutoPyDiscipline`

can wrap a Python function with multiline return statements. #661Modify the computation of total derivatives in the presence of state variables to avoid unnecessary calculations. #686

Modify the default linear solver calling sequence to prevent the use of the

`splu`

function on SciPy`LinearOperator`

objects. #691Fix Jacobian of

`MDOChain`

including`Splitter`

disciplines. #764Corrected typing issues that caused an exception to be raised when a custom parser was passed to the

`DiscFromExe`

at instantiation. #767The method

`MDODiscipline._init_jacobian`

when`fill_missing_key=True`

now creates the missing keys. #782It is now possible to pass a custom

`name`

to the`XLSDiscipline`

at instantiation. #788`get_available_mdas`

no longer returns the abstract class`MDA`

. #795

#### Optimisation & DOE¶

`OptimizationProblem.to_dataset`

uses the order of the design variables given by the`ParameterSpace`

to build the`Dataset`

. #626`Database.get_complete_history`

raises a`ValueError`

when asking for a non-existent function. #670The DOE algorithm

`OT_FACTORIAL`

handles correctly the tuple of parameters (`levels`

,`centers`

); this DOE algorithm does not use`n_samples`

. The DOE algorithm`OT_FULLFACT`

handles correctly the use of`n_samples`

as well as the use of the parameters`levels`

; this DOE algorithm can use either`n_samples`

or`levels`

. #676The required properties are now available in the grammars of the DOE algorithms. #680

The stopping criteria for the objective function variation are only activated if the objective value is stored in the database in the last iterations. #692

The

`GradientApproximator`

and its subclasses no longer include closures preventing serialization. #700A constraint aggregation

`MDOFunction`

is now capable of dealing with complex`ndarray`

inputs. #716Fix

`OptimizationProblem.is_mono_objective`

that returned wrong values when the objective had one`outvars`

but multidimensional. #734Fix the behavior of

`DesignSpace.filter_dim`

method for list of indices containing more than one index. #746

#### UQ¶

#### Technical improvements¶

The method

`OptProblem.constraint_names`

is now built on fly from the constraints. This fixes the issue of the updating of the constraint names when the constraints are modified, as it is the case with the aggregation of constraints. #669`Factory`

considers the base class as an available class when it is not abstract. #685Serialization of paths in disciplines attributes and local_data in multi OS. #711

### Changed¶

`JSONGrammar`

no longer merge the definition of a property with the dictionary-like`update`

methods. Now the usual behavior of a dictionary will be used such that the definition of a property is overwritten. The previous behavior can be used by passing the argument`merge = True`

. #708`CorrelationAnalysis`

no longer proposes the signed standard regression coefficients (SSRC), as it has been removed from`openturns`

. #654`Splitter`

,`Concatenater`

,`DensityFilter`

, and`MaterialModelInterpolation`

disciplines use sparse Jacobians. #745The minimum value of the seed used by a DOE algorithm is 0. #727

Parametric

`gemseo.problems.scalable.parametric.scalable_problem.ScalableProblem`

:The configuration of the scalable disciplines is done with

`ScalableDisciplineSettings`

.The method

`gemseo.problems.scalable.parametric.scalable_problem.ScalableProblem.create_quadratic_programming_problem`

returns the corresponding quadratic programming (QP) problem as an`OptimizationProblem`

.The argument

`alpha`

(default: 0.5) defines the share of feasible design space.

### API changes¶

The high-level functions defined in

`gemseo.api`

have been moved to`gemseo`

.

#### Surrogate models¶

The high-level functions defined in

`gemseo.mlearning.api`

have been moved to`gemseo.mlearning`

.`stieltjes`

and`strategy`

are no longer arguments of`PCERegressor`

.Rename

`MLAlgo.save`

to`MLAlgo.to_pickle`

.The name of the method to evaluate the quality measure is passed to

`MLAlgoAssessor`

with the argument`measure_evaluation_method`

; any of`["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]`

.The name of the method to evaluate the quality measure is passed to

`MLAlgoSelection`

with the argument`measure_evaluation_method`

; any of`["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]`

.The name of the method to evaluate the quality measure is passed to

`MLAlgoCalibration`

with the argument`measure_evaluation_method`

; any of`["LEARN", "TEST", "LOO", "KFOLDS", "BOOTSTRAP"]`

.The names of the methods to evaluate a quality measure can be accessed with

`MLAlgoQualityMeasure.EvaluationMethod`

. #464Rename

`gemseo.mlearning.qual_measure`

to`gemseo.mlearning.quality_measures`

.Rename

`gemseo.mlearning.qual_measure.silhouette`

to`gemseo.mlearning.quality_measures.silhouette_measure`

.Rename

`gemseo.mlearning.cluster`

to`gemseo.mlearning.clustering`

.Rename

`gemseo.mlearning.cluster.cluster`

to`gemseo.mlearning.clustering.clustering`

.Rename

`gemseo.mlearning.transform`

to`gemseo.mlearning.transformers`

. #701The enumeration

`RBFRegressor.Function`

replaced the constants:`RBFRegressor.MULTIQUADRIC`

`RBFRegressor.INVERSE_MULTIQUADRIC`

`RBFRegressor.GAUSSIAN`

`RBFRegressor.LINEAR`

`RBFRegressor.CUBIC`

`RBFRegressor.QUINTIC`

`RBFRegressor.THIN_PLATE`

`RBFRegressor.AVAILABLE_FUNCTIONS`

#### Post processing¶

The visualization

`Lines`

uses a specific tuple (color, style, marker, name) per line by default. #677`YvsX`

no longer has the arguments`x_comp`

and`y_comp`

; the components have to be passed as`x=("variable_name", variable_component)`

.`Scatter`

no longer has the arguments`x_comp`

and`y_comp`

; the components have to be passed as`x=("variable_name", variable_component)`

.`ZvsXY`

no longer has the arguments`x_comp`

,`y_comp`

and`z_comp`

; the components have to be passed as`x=("variable_name", variable_component)`

. #722`RobustnessQuantifier.compute_approximation`

uses`None`

as default value for`at_most_niter`

.`HessianApproximation.get_x_grad_history`

uses`None`

as default value for`last_iter`

and`at_most_niter`

.`HessianApproximation.build_approximation`

uses`None`

as default value for`at_most_niter`

.`HessianApproximation.build_inverse_approximation`

uses`None`

as default value for`at_most_niter`

.`LSTSQApprox.build_approximation`

uses`None`

as default value for`at_most_niter`

. #750`PostFactory.create`

uses`class_name`

, then`opt_problem`

and`**options`

as arguments. #752`Dataset.plot`

no longer refers to specific dataset plots, as ScatterMatrix, lines, curves…`Dataset.plot`

now refers to the standard pandas plot method. To retrieve ready-to-use plots, please check in`gemseo.post.dataset`

. #257

#### MDO processes¶

Renamed

`InvalidDataException`

to`InvalidDataError`

. #23Moved the

`MatlabDiscipline`

to the plugin gemseo-matlab.Rename

`MakeFunction`

to`MDODisciplineAdapter`

.In

`MDODisciplineAdapter`

, replace the argument`mdo_function`

of type`MDODisciplineAdapterGenerator`

by the argument`discipline`

of type`MDODiscipline`

.Rename

`MDOFunctionGenerator`

to`MDODisciplineAdapterGenerator`

. #412Rename

`AbstractCache.export_to_dataset`

to`AbstractCache.to_dataset`

.Rename

`AbstractCache.export_to_ggobi`

to`AbstractCache.to_ggobi`

.Rename

`Scenario.export_to_dataset`

to`Scenario.to_dataset`

.Rename

`MDODiscipline._default_inputs`

to`MDODiscipline.default_inputs`

.Rename

`MDODiscipline.serialize`

to`MDODiscipline.to_pickle`

.Rename

`MDODiscipline.deserialize`

to`MDODiscipline.from_pickle`

which is a static method.Rename

`ScalabilityResult.save`

to`ScalabilityResult.to_pickle`

.Rename

`BaseGrammar.convert_to_simple_grammar`

to`BaseGrammar.to_simple_grammar`

.Removed the method

`_update_grammar_input`

from`Scenario`

,`Scenario._update_input_grammar`

shall be used instead. #558`Scenario.xdsmize`

Rename

`latex_output`

to`save_pdf`

.Rename

`html_output`

to`save_html`

.Rename

`json_output`

to`save_json`

.Rename

`open_browser`

to`show_html`

.Rename

`outfilename`

to`file_name`

and do not use suffix.Rename

`outdir`

to`directory_path`

.

`XDSMizer`

Rename

`latex_output`

to`save_pdf`

.Rename

`open_browser`

to`show_html`

.Rename

`output_dir`

to`directory_path`

.Rename

`XDSMizer.outdir`

to`XDSMizer.directory_path`

.Rename

`XDSMizer.outfilename`

to`XDSMizer.json_file_name`

.Rename

`XDSMizer.latex_output`

to`XDSMizer.save_pdf`

.

`XDSMizer.monitor`

Rename

`latex_output`

to`save_pdf`

.Rename

`outfilename`

to`file_name`

and do not use suffix.Rename

`outdir`

to`directory_path`

.

`XDSMizer.run`

Rename

`latex_output`

to`save_pdf`

.Rename

`html_output`

to`save_html`

.Rename

`json_output`

to`save_json`

.Rename

`open_browser`

to`show_html`

.Rename

`outfilename`

to`file_name`

and do not use suffix.Rename

`outdir`

to`directory_path`

and use`"."`

as default value.

`StudyAnalysis.generate_xdsm`

Rename

`latex_output`

to`save_pdf`

.Rename

`open_browser`

to`show_html`

.Rename

`output_dir`

to`directory_path`

.

`MDOCouplingStructure.plot_n2_chart`

: rename`open_browser`

to`show_html`

.`N2HTML`

: rename`open_browser`

to`show_html`

.`generate_n2_plot`

rename`open_browser`

to`show_html`

.`Scenario.xdsmize`

: rename`print_statuses`

to`log_workflow_status`

.`XDSMizer.monitor`

: rename`print_statuses`

to`log_workflow_status`

.Rename

`XDSMizer.print_statuses`

to`XDSMizer.log_workflow_status`

.The CLI of the

`StudyAnalysis`

uses the shortcut`-p`

for the option`--save_pdf`

. #564Replace the argument

`force_no_exec`

by`execute`

in`MDODiscipline.linearize`

and`JacobianAssembly.total_derivatives`

.Rename the argument

`force_all`

to`compute_all_jacobians`

in`MDODiscipline.linearize`

. #644The names of the algorithms proposed by

`CorrelationAnalysis`

must be written in capital letters; see`CorrelationAnalysis.Method`

. #654 #464`DOEScenario`

no longer has a`seed`

attribute. #621Remove

`AutoPyDiscipline.get_return_spec_fromstr`

. #661Remove

`Scenario.get_optimum`

; use`Scenario.optimization_result`

instead. #770Rename

`AutoPyDiscipline.in_names`

to`AutoPyDiscipline.input_names`

.Rename

`AutoPyDiscipline.out_names`

to`AutoPyDiscipline.output_names`

. #661Replaced the module

`parallel_execution.py`

by the package`parallel_execution`

.Renamed the class

`ParallelExecution`

to`CallableParallelExecution`

.Renamed the function

`worker`

to`execute_workers`

.Renamed the argument

`input_values`

to`inputs`

.Removed the

`ParallelExecution`

methods:`_update_local_objects`

`_run_task`

`_is_worker`

`_filter_ordered_outputs`

`_run_task_by_index`

`ParallelExecution`

and its derive classes always take a collection of workers and no longer a single worker. #668Removed the property

`penultimate_entry`

from`SimpleCache`

. #480Rename

`GSNewtonMDA`

to`MDAGSNewton`

. #703The enumeration

`MDODiscipline.ExecutionStatus`

replaced the constants:`MDODiscipline.STATUS_VIRTUAL`

`MDODiscipline.STATUS_PENDING`

`MDODiscipline.STATUS_DONE`

`MDODiscipline.STATUS_RUNNING`

`MDODiscipline.STATUS_FAILED`

`MDODiscipline.STATUS_LINEARIZE`

`MDODiscipline.AVAILABLE_STATUSES`

The enumeration

`MDODiscipline.GrammarType`

replaced the constants:`MDODiscipline.JSON_GRAMMAR_TYPE`

`MDODiscipline.SIMPLE_GRAMMAR_TYPE`

The enumeration

`MDODiscipline.CacheType`

replaced the constants:`MDODiscipline.SIMPLE_CACHE`

`MDODiscipline.HDF5_CACHE`

`MDODiscipline.MEMORY_FULL_CACHE`

The value

`None`

indicating no cache is replaced by`MDODiscipline.CacheType.NONE`

The enumeration

`MDODiscipline.ReExecutionPolicy`

replaced the constants:`MDODiscipline.RE_EXECUTE_DONE_POLICY`

`MDODiscipline.RE_EXECUTE_NEVER_POLICY`

The enumeration

`derivation_modes.ApproximationMode`

replaced the constants:`derivation_modes.FINITE_DIFFERENCES`

`derivation_modes.COMPLEX_STEP`

`derivation_modes.AVAILABLE_APPROX_MODES`

The enumeration

`derivation_modes.DerivationMode`

replaced the constants:`derivation_modes.DIRECT_MODE`

`derivation_modes.REVERSE_MODE`

`derivation_modes.ADJOINT_MODE`

`derivation_modes.AUTO_MODE`

`derivation_modes.AVAILABLE_MODES`

The enumeration

`JacobianAssembly.DerivationMode`

replaced the constants:`JacobianAssembly.DIRECT_MODE`

`JacobianAssembly.REVERSE_MODE`

`JacobianAssembly.ADJOINT_MODE`

`JacobianAssembly.AUTO_MODE`

`JacobianAssembly.AVAILABLE_MODES`

The enumeration

`MDODiscipline.ApproximationMode`

replaced the constants:`MDODiscipline.FINITE_DIFFERENCES`

`MDODiscipline.COMPLEX_STEP`

`MDODiscipline.APPROX_MODES`

The enumeration

`MDODiscipline.LinearizationMode`

replaced the constants:`MDODiscipline.FINITE_DIFFERENCE`

`MDODiscipline.COMPLEX_STEP`

`MDODiscipline.AVAILABLE_APPROX_MODES`

The high-level functions defined in

`gemseo.problems.scalable.data_driven.api`

have been moved to`gemseo.problems.scalable.data_driven`

. #707Removed

`StudyAnalysis.AVAILABLE_DISTRIBUTED_FORMULATIONS`

.The enumeration

`DiscFromExe.Parser`

replaced the constants:`DiscFromExe.Parsers`

`DiscFromExe.Parsers.KEY_VALUE_PARSER`

`DiscFromExe.Parsers.TEMPLATE_PARSER`

The enumeration

`MatlabEngine.ParallelType`

replaced:`matlab_engine.ParallelType`

`MDOFunciton.check_grad`

argument`method`

was renamed to`approximation_mode`

and now expects to be passed an`ApproximationMode`

.For

`GradientApproximator`

and its derived classes:Renamed the class attribute

`ALIAS`

to`_APPROXIMATION_MODE`

,Renamed the instance attribute

`_par_args`

to`_parallel_args`

,Renamed

`GradientApproximationFactory`

to`GradientApproximatorFactory`

and moved it to the module`gradient_approximator_factory.py`

,Moved the duplicated functions to

`error_estimators.py`

:`finite_differences.comp_best_step`

`finite_differences.compute_truncature_error`

`finite_differences.compute_cancellation_error`

`finite_differences.approx_hess`

`derivatives_approx.comp_best_step`

`derivatives_approx.compute_truncature_error`

`derivatives_approx.compute_cancellation_error`

`derivatives_approx.approx_hess`

`comp_best_step`

was renamed to`compute_best_step`

`approx_hess`

was renamed to`compute_hessian_approximation`

To update a grammar from data names that shall be validated against Numpy arrays, the

`update`

method is now replaced by the method`update_from_names`

.To update a

`JSONGrammar`

from a JSON schema, the`update`

method is now replaced by the method`update_from_schema`

.Renamed

`JSONGrammar.write`

to`JSONGrammar.to_file`

.Renamed the argument

`schema_path`

to`file_path`

for the`JSONGrammar`

constructor.To update a

`SimpleGrammar`

or a`JSONGrammar`

from a names and types, the`update`

method is now replaced by the method`update_from_types`

. #741Renamed

`HDF5Cache.hdf_node_name`

to`HDF5Cache.hdf_node_path`

.`tolerance`

and`name`

are the first instantiation arguments of`HDF5Cache`

, for consistency with other caches.Added the arguments

`newton_linear_solver`

and`newton_linear_solver_options`

to the constructor of`MDANewtonRaphson`

. These arguments are passed to the linear solver of the Newton solver used to solve the MDA coupling. #715MDA: Remove the method

`set_residuals_scaling_options`

. #780`MDA`

: Remove the attributes`_scale_residuals_with_coupling_size`

and`_scale_residuals_with_first_norm`

and add the`scaling`

and`_scaling_data`

attributes.The module

`gemseo.problems.scalable.parametric.study`

has been removed. #717

#### Optimisation & DOE¶

Moved the library of optimization algorithms

`PSevenOpt`

to the plugin gemseo-pseven.Moved the

`PDFO`

wrapper to the plugin gemseo-pdfo.Removed the useless exception

`NloptRoundOffException`

.Rename

`MDOFunction.serialize`

to`MDOFunction.to_pickle`

.Rename

`MDOFunction.deserialize`

to`MDOFunction.from_pickle`

which is a static method.`DesignSpace`

has a class method`DesignSpace.from_file`

and an instance method`DesignSpace.to_file`

.`read_design_space`

can read an HDF file.Rename

`DesignSpace.export_hdf`

to`DesignSpace.to_hdf`

.Rename

`DesignSpace.import_hdf`

to`DesignSpace.from_hdf`

which is a class method.Rename

`DesignSpace.export_to_txt`

to`DesignSpace.to_csv`

.Rename

`DesignSpace.read_from_txt`

to`DesignSpace.from_csv`

which is a class method.Rename

`Database.export_hdf`

to`Database.to_hdf`

.Replace

`Database.import_hdf`

by the class method`Database.from_hdf`

and the instance method`Database.update_from_hdf`

.Rename

`Database.export_to_ggobi`

to`Database.to_ggobi`

.Rename

`Database.import_from_opendace`

to`Database.update_from_opendace`

.`Database`

no longer has the argument`input_hdf_file`

; use`database = Database.from_hdf(file_path)`

instead.Rename

`OptimizationProblem.export_hdf`

to`OptimizationProblem.to_hdf`

.Rename

`OptimizationProblem.import_hdf`

to`OptimizationProblem.from_hdf`

which is a class method.Rename

`OptimizationProblem.export_to_dataset`

to`OptimizationProblem.to_dataset`

.The argument

`export_hdf`

of`write_design_space`

has been removed.Rename

`export_design_space`

to`write_design_space`

.`DesignSpace`

no longer has`file_path`

as argument; use`design_space = DesignSpace.from_file(file_path)`

instead. #450Rename

`iks_agg`

to`compute_iks_agg`

Rename

`iks_agg_jac_v`

to`compute_total_iks_agg_jac`

Rename

`ks_agg`

to`compute_ks_agg`

Rename

`ks_agg_jac_v`

to`compute_total_ks_agg_jac`

Rename

`max_agg`

to`compute_max_agg`

Rename

`max_agg_jac_v`

to`compute_max_agg_jac`

Rename

`sum_square_agg`

to`compute_sum_square_agg`

Rename

`sum_square_agg_jac_v`

to`compute_total_sum_square_agg_jac`

Rename the first positional argument

`constr_data_names`

of`ConstraintAggregation`

to`constraint_names`

.Rename the second positional argument

`method_name`

of`ConstraintAggregation`

to`aggregation_function`

.Rename the first position argument

`constr_id`

of`OptimizationProblem.aggregate_constraint`

to`constraint_index`

.Rename the aggregation methods

`"pos_sum"`

,`"sum"`

and`"max"`

to`"POS_SUM"`

,`"SUM"`

and`"MAX"`

.Rename

`gemseo.algos.driver_lib`

to`gemseo.algos.driver_library`

.Rename

`DriverLib`

to`DriverLibrary`

.Rename

`gemseo.algos.algo_lib`

to`gemseo.algos.algorithm_library`

.Rename

`AlgoLib`

to`AlgorithmLibrary`

.Rename

`gemseo.algos.doe.doe_lib`

to`gemseo.algos.doe.doe_library`

.Rename

`gemseo.algos.linear_solvers.linear_solver_lib`

to`gemseo.algos.linear_solvers.linear_solver_library`

.Rename

`LinearSolverLib`

to`LinearSolverLibrary`

.Rename

`gemseo.algos.opt.opt_lib`

to`gemseo.algos.opt.optimization_library`

. #702The enumeration

`DriverLib.DifferentiationMethod`

replaced the constants:`DriverLib.USER_DEFINED_GRADIENT`

`DriverLib.DIFFERENTIATION_METHODS`

The enumeration

`DriverLib.ApproximationMode`

replaced the constants:`DriverLib.COMPLEX_STEP_METHOD`

`DriverLib.FINITE_DIFF_METHOD`

The enumeration

`OptProblem.ApproximationMode`

replaced the constants:`OptProblem.USER_DEFINED_GRADIENT`

`OptProblem.DIFFERENTIATION_METHODS`

`OptProblem.NO_DERIVATIVES`

`OptProblem.COMPLEX_STEP_METHOD`

`OptProblem.FINITE_DIFF_METHOD`

The method

`Scenario.set_differentiation_method`

no longer accepts`None`

for the argument`method`

.The enumeration

`OptProblem.ProblemType`

replaced the constants:`OptProblem.LINEAR_PB`

`OptProblem.NON_LINEAR_PB`

`OptProblem.AVAILABLE_PB_TYPES`

The enumeration

`DesignSpace.DesignVariableType`

replaced the constants:`DesignSpace.FLOAT`

`DesignSpace.INTEGER`

`DesignSpace.AVAILABLE_TYPES`

The namedtuple

`DesignSpace.DesignVariable`

replaced:`design_space.DesignVariable`

The enumeration

`MDOFunction.ConstraintType`

replaced the constants:`MDOFunction.TYPE_EQ`

`MDOFunction.TYPE_INEQ`

The enumeration

`MDOFunction.FunctionType`

replaced the constants:`MDOFunction.TYPE_EQ`

`MDOFunction.TYPE_INEQ`

`MDOFunction.TYPE_OBJ`

`MDOFunction.TYPE_OBS`

The value

`""`

indicating no function type is replaced by`MDOFunction.FunctionType.NONE`

The enumeration

`LinearSolver.Solver`

replaced the constants:`LinearSolver.LGMRES`

`LinearSolver.AVAILABLE_SOLVERS`

The enumeration

`ConstrAggregationDisc.EvaluationFunction`

replaced:`constraint_aggregation.EvaluationFunction`

Use

`True`

as default value of`eval_observables`

in`OptimizationProblem.evaluate_functions`

.Rename

`outvars`

to`output_names`

and`args`

to`input_names`

in`MDOFunction`

and its subclasses (names of arguments, attributes and methods).`MDOFunction.has_jac`

is a property.Remove

`MDOFunction.has_dim`

.Remove

`MDOFunction.has_outvars`

.Remove

`MDOFunction.has_expr`

.Remove

`MDOFunction.has_args`

.Remove

`MDOFunction.has_f_type`

.Rename

`DriverLib.is_algo_requires_grad`

to`DriverLibrary.requires_gradient`

.Rename

`ConstrAggegationDisc`

to`ConstraintAggregation`

. #713Remove

`Database.KEYSSEPARATOR`

.Remove

`Database._format_design_variable_names`

.Remove

`Database.get_value`

; use`output_value = database[x_vect]`

instead of`output_value = database.get_value(x_vect)`

.Remove

`Database.contains_x`

; use`x_vect in database`

instead of`database.contains_x(x_vect)`

.Remove

`Database.contains_dataname`

; use`output_name in database.output_names`

instead of`database.contains_dataname(output_name)`

.Remove

`Database.set_dv_names`

; use`database.input_names`

to access the input names.Remove

`Database.is_func_grad_history_empty`

; use`database.check_output_history_is_empty`

instead with any output name.Rename

`Database.get_hashed_key`

to`Database.get_hashable_ndarray`

.Rename

`Database.get_all_data_names`

to`Database.get_function_names`

.Rename

`Database.missing_value_tag`

to`Database.MISSING_VALUE_TAG`

.Rename

`Database.get_x_by_iter`

to`Database.get_x_vect`

.Rename

`Database.clean_from_iterate`

to`Database.clear_from_iteration`

.Rename

`Database.get_max_iteration`

to`Database.n_iterations`

.Rename

`Database.notify_newiter_listeners`

to`Database.notify_new_iter_listeners`

.Rename

`Database.get_func_history`

to`Database.get_function_history`

.Rename

`Database.get_func_grad_history`

to`Database.get_gradient_history`

.Rename

`Database.get_x_history`

to`Database.get_x_vect_history`

.Rename

`Database.get_last_n_x`

to`Database.get_last_n_x_vect`

.Rename

`Database.get_x_at_iteration`

to`Database.get_x_vect`

.Rename

`Database.get_index_of`

to`Database.get_iteration`

.Rename

`Database.get_f_of_x`

to`Database.get_function_value`

.Rename the argument

`all_function_names`

to`function_names`

in`Database.to_ggobi`

.Rename the argument

`design_variable_names`

to`input_names`

in`Database.to_ggobi`

.Rename the argument

`add_dv`

to`with_x_vect`

in`Database.get_history_array`

.Rename the argument

`values_dict`

to`output_value`

in`Database.store`

.Rename the argument

`x_vect`

to`input_value`

.Rename the argument

`listener_func`

to`function`

.Rename the arguments

`funcname`

,`fname`

and`data_name`

to`function_name`

.Rename the arguments

`functions`

and`names`

to`function_names`

.Rename the argument

`names`

to`output_names`

in`Database.filter`

.Rename the argument

`x_hist`

to`add_x_vect_history`

in`Database.get_function_history`

and`Database.get_gradient_history`

.`Database.get_x_vect`

starts counting the iterations at 1.`Database.clear_from_iteration`

starts counting the iterations at 1.`RadarChart`

,`TopologyView`

and`GradientSensitivity`

starts counting the iterations at 1.The input history returned by

`Database.get_gradient_history`

and`Database.get_function_history`

is now a 2D NumPy array.Remove

`Database.n_new_iteration`

.Remove

`Database.reset_n_new_iteration`

.Remove the argument

`reset_iteration_counter`

in`Database.clear`

.The

`Database`

no longer uses the tag`"Iter"`

.The

`Database`

no longer uses the notion of`stacked_data`

. #753Remove

`MDOFunction.concatenate`

; please use`Concatenate`

.Remove

`MDOFunction.convex_linear_approx`

; please use`ConvexLinearApprox`

.Remove

`MDOFunction.linear_approximation`

; please use`compute_linear_approximation`

.Remove

`MDOFunction.quadratic_approx`

; please use`compute_quadratic_approximation`

.Remove

`MDOFunction.restrict`

; please use`FunctionRestriction`

.Remove

`DOELibrary.compute_phip_criteria`

; please use`compute_phip_criterion`

.

#### UQ¶

The high-level functions defined in

`gemseo.uncertainty.api`

have been moved to`gemseo.uncertainty`

.Rename

`SensitivityAnalysis.export_to_dataset`

to`SensitivityAnalysis.to_dataset`

.Rename

`SensitivityAnalysis.save`

to`SensitivityAnalysis.to_pickle`

.Rename

`SensitivityAnalysis.load`

to`SensitivityAnalysis.from_pickle`

which is a class method.`ComposedDistribution`

uses`None`

as value for independent copula.`ParameterSpace`

no longer uses a`copula`

passed at instantiation but to`ParameterSpace.build_composed_distribution`

.`SPComposedDistribution`

raises an error when set up with a copula different from`None`

. #655The enumeration

`RobustnessQuantifier.Approximation`

replaced the constant:`RobustnessQuantifier.AVAILABLE_APPROXIMATIONS`

The enumeration

`OTDistributionFitter.DistributionName`

replaced the constants:`OTDistributionFitter.AVAILABLE_DISTRIBUTIONS`

`OTDistributionFitter._AVAILABLE_DISTRIBUTIONS`

The enumeration

`OTDistributionFitter.FittingCriterion`

replaced the constants:`OTDistributionFitter.AVAILABLE_FITTING_TESTS`

`OTDistributionFitter._AVAILABLE_FITTING_TESTS`

The enumeration

`OTDistributionFitter.SignificanceTest`

replaced the constant:`OTDistributionFitter.SIGNIFICANCE_TESTS`

The enumeration

`ParametricStatistics.DistributionName`

replaced the constant:`ParametricStatistics.AVAILABLE_DISTRIBUTIONS`

The enumeration

`ParametricStatistics.FittingCriterion`

replaced the constant:`ParametricStatistics.AVAILABLE_FITTING_TESTS`

The enumeration

`ParametricStatistics.SignificanceTest`

replaced the constant:`ParametricStatistics.SIGNIFICANCE_TESTS`

The enumeration

`SobolAnalysis.Algorithm`

replaced the constant:`SobolAnalysis.Algorithm.Saltelli`

by`SobolAnalysis.Algorithm.SALTELLI`

`SobolAnalysis.Algorithm.Jansen`

by`SobolAnalysis.Algorithm.JANSEN`

`SobolAnalysis.Algorithm.MauntzKucherenko`

by`SobolAnalysis.Algorithm.MAUNTZ_KUCHERENKO`

`SobolAnalysis.Algorithm.Martinez`

by`SobolAnalysis.Algorithm.MARTINEZ`

The enumeration

`SobolAnalysis.Method`

replaced the constant:`SobolAnalysis.Method.first`

by`SobolAnalysis.Method.FIRST`

`SobolAnalysis.Method.total`

by`SobolAnalysis.Method.TOTAL`

The enumeration

`ToleranceInterval.ToleranceIntervalSide`

replaced:`distribution.ToleranceIntervalSide`

The namedtuple

`ToleranceInterval.Bounds`

replaced:`distribution.Bounds`

Remove

`n_legend_cols`

in`ParametricStatistics.plot_criteria`

.Rename

`variables_names`

,`variables_sizes`

and`variables_types`

to`variable_names`

,`variable_sizes`

and`variable_types`

.Rename

`inputs_names`

and`outputs_names`

to`input_names`

and`output_names`

.Rename

`constraints_names`

to`constraint_names`

.Rename

`functions_names`

to`function_names`

.Rename

`inputs_sizes`

and`outputs_sizes`

to`input_sizes`

and`output_sizes`

.Rename

`disciplines_names`

to`discipline_names`

.Rename

`jacobians_names`

to`jacobian_names`

.Rename

`observables_names`

to`observable_names`

.Rename

`columns_names`

to`column_names`

.Rename

`distributions_names`

to`distribution_names`

.Rename

`options_values`

to`option_values`

.Rename

`constraints_values`

to`constraint_values`

.Rename

`jacobians_values`

to`jacobian_values`

.`SobolAnalysis.AVAILABLE_ALGOS`

no longer exists; use the`enum`

`SobolAnalysis.Algorithm`

instead.`MLQualityMeasure.evaluate`

no longer exists; please use either`MLQualityMeasure.evaluate_learn`

,`MLQualityMeasure.evaluate_test`

,`MLQualityMeasure.evaluate_kfolds`

,`MLQualityMeasure.evaluate_loo`

and`MLQualityMeasure.evaluate_bootstrap`

.Remove

`OTComposedDistribution.AVAILABLE_COPULA_MODELS`

; please use`OTComposedDistribution.CopulaModel`

.Remove

`ComposedDistribution.AVAILABLE_COPULA_MODELS`

; please use`ComposedDistribution.CopulaModel`

.Remove

`SPComposedDistribution.AVAILABLE_COPULA_MODELS`

; please use`SPComposedDistribution.CopulaModel`

.Remove

`ComposedDistribution.INDEPENDENT_COPULA`

; please use`ComposedDistribution.INDEPENDENT_COPULA`

.Remove

`SobolAnalysis.AVAILABLE_ALGOS`

; please use`SobolAnalysis.Algorithm`

.

#### Technical improvements¶

Moved

`gemseo.utils.testing.compare_dict_of_arrays`

to`gemseo.utils.comparisons.compare_dict_of_arrays`

.Moved

`gemseo.utils.testing.image_comparison`

to`gemseo.utils.testing.helpers.image_comparison`

.Moved

`gemseo.utils.pytest_conftest`

to`gemseo.utils.testing.pytest_conftest`

.Moved

`gemseo.utils.testing.pytest_conftest.concretize_classes`

to`gemseo.utils.testing.helpers.concretize_classes`

. #173`Dataset`

inherits from`DataFrame`

and uses multi-indexing columns. Some methods have been added to improve the use of multi-index;`Dataset.transform_variable`

has been renamed to`Dataset.transform_data`

. Two derived classes (`IODataset`

and`OptimizationDataset`

) can be considered for specific usages.`Dataset`

can be imported from`gemseo.datasets.dataset`

.The default group of

`Dataset`

is`parameters`

.`Dataset`

no longer has the`get_data_by_group`

,`get_all_data`

and`get_data_by_names`

methods. Use`Dataset.get_view``

instead. It returns a sliced`Dataset`

, to focus on some parts. Different formats can be used to extract data using pandas default methods. For instance,`get_data_by_names`

can be replaced by`get_view(variable_names=var_name).to_numpy()`

.In a

`Dataset`

, a variable is identified by a tuple`(group_name, variable_name)`

. This tuple called*variable identifier*is unique, contrary to a variable name as it can be used in several groups. The size of a variable corresponds to its number of components. dataset.variable_names_to_n_components[variable_name]`` returns the size of all the variables named`variable_name`

while`len(dataset.get_variable_components(group_name, variable_name))`

returns the size of the variable named`variable_name`

and belonging to`group_name`

.The methods

`to_dataset`

no longer have an argument`by_group`

as the`Dataset`

no longer stores the data by group (the previous`Dataset`

stored the data in a dictionary indexed by either variable names or group names).`Dataset`

no longer has the`export_to_dataframe`

method, since it is a`DataFrame`

itself.`Dataset`

no longer has the`length`

; use`len(dataset)`

instead.`Dataset`

no longer has the`is_empty`

method. Use pandas attribute`empty`

instead.`Dataset`

no longer has the`export_to_cache`

method.`Dataset`

no longer has the`row_names`

attribute. Use`index`

instead.`Dataset.add_variable`

no longer has the`group`

argument. Use`group_name`

instead.`Dataset.add_variable`

no longer has the`name`

argument. Use`variable_name`

instead.`Dataset.add_variable`

no longer has the`cache_as_input`

argument.`Dataset.add_group`

no longer has the`group`

argument. Use`group_name`

instead.`Dataset.add_group`

no longer has the`variables`

argument. Use`variable_names`

instead.`Dataset.add_group`

no longer has the`sizes`

argument. Use`variable_names_to_n_components`

instead.`Dataset.add_group`

no longer has the`cache_as_input`

and`pattern`

arguments.Renamed

`Dataset.set_from_array`

to`Dataset.from_array`

.Renamed

`Dataset.get_names`

to`Dataset.get_variable_names`

.Renamed

`Dataset.set_metadata`

to`Dataset.misc`

.Removed

`Dataset.n_samples`

in favor of`len()`

.`gemseo.load_dataset`

is renamed:`gemseo.create_benchmark_dataset`

. Can be used to create a Burgers, Iris or Rosenbrock dataset.`BurgerDataset`

no longer exists. Create a Burger dataset with`create_burgers_dataset`

.`IrisDataset`

no longer exists. Create an Iris dataset with`create_iris_dataset`

.`RosenbrockDataset`

no longer exists. Create a Rosenbrock dataset with`create_rosenbrock_dataset`

.`problems.dataset.factory`

no longer exists.`Scenario.to_dataset`

no longer has the`by_group`

argument.`AbstractCache.to_dataset`

no longer has the`by_group`

and`name`

arguments. #257Rename

`MDOObjScenarioAdapter`

to`MDOObjectiveScenarioAdapter`

.The scenario adapters

`MDOScenarioAdapter`

and`MDOObjectiveScenarioAdapter`

are now located in the package`gemseo.disciplines.scenario_adapters`

. #407Moved

`gemseo.core.factory.Factory`

to`gemseo.core.base_factory.BaseFactory`

Removed the attribute

`factory`

of the factories.Removed

`Factory._GEMS_PATH`

.Moved

`singleton._Multiton`

to`factory._FactoryMultitonMeta`

Renamed

`Factory.cache_clear`

to`Factory.clear_cache`

.Renamed

`Factory.classes`

to`Factory.class_names`

.Renamed

`Factory`

to`BaseFactory`

.Renamed

`DriverFactory`

to`BaseAlgoFactory`

. #522The way non-serializable attributes of an

`MDODiscipline`

are treated has changed. From now on, instead of defining the attributes to serialize with the class variable`_ATTR_TO_SERIALIZE`

,`MDODiscipline`

and its child classes shall define the attributes not to serialize with the class variable`_ATTR_NOT_TO_SERIALIZE`

. When a new attribute that is not serializable is added to the list, the methods`__setstate__`

and`__getstate__`

shall be modified to handle its creation properly. #699`utils.python_compatibility`

was moved and renamed to`utils.compatibility.python`

. #689The enumeration

`FilePathManager.FileType`

replaced the constant:`file_type_manager.FileType`

Rename

`Factory.classes`

to`Factory.class_names`

.Move

`ProgressBar`

and`TqdmToLogger`

to`gemseo.algos.progress_bar`

.Move

`HashableNdarray`

to`gemseo.algos.hashable_ndarray`

.Move the HDF methods of

`Database`

to`HDFDatabase`

.Remove

`BaseEnum.get_member_from_name`

; please use`BaseEnum.__getitem__`

.`StudyAnalysis.disciplines_descr`

has been removed; use`MDOStudyAnalysis.study.disciplines`

instead.`StudyAnalysis.scenarios_descr`

has been removed; use`MDOStudyAnalysis.study.scenarios`

instead.`StudyAnalysis.xls_study_path`

has been removed; use`CouplingStudyAnalysis.study.xls_study_path`

instead.`gemseo.utils.study_analysis.StudyAnalysis`

has been moved to`gemseo.utils.study_analyses.mdo_study_analysis`

and renamed to`MDOStudyAnalysis`

.`gemseo.utils.study_analysis.XLSStudyParser`

has been moved to`gemseo.utils.study_analyses.xls_study_parser`

.`gemseo.utils.study_analysis_cli`

has been moved to`gemseo.utils.study_analyses`

.`MDOStudyAnalysis.generate_xdsm`

no longer returns a`MDOScenario`

but an`XDSM`

.The option

`fig_size`

of the`gemseo-study`

has been replaced by the options`height`

and`width`

.The CLI

`gemseo-study`

can be used for MDO studies with`gemseo-study xls_file_path`

and coupling studies with`gemseo-study xls_file_path -t coupling`

.

### Removed¶

Removed the

`gemseo.core.jacobian_assembly`

module that is now in`gemseo.core.derivatives.jacobian_assembly`

.Removed the obsolete

`snopt`

wrapper.Removed Python 3.7 support.

## Version 4.3.0 (2023-02-09)¶

### Added¶

`Statistics.compute_joint_probability`

computes the joint probability of the components of random variables while`Statistics.compute_probability`

computes their marginal ones. #542`MLErrorMeasure`

can split the multi-output measures according to the output names. #544`SobolAnalysis.compute_indices`

has a new argument to change the level of the confidence intervals. #599`MDOInitializationChain`

can compute the input data for a MDA from incomplete default_inputs of the disciplines. #610Add a new execution status for disciplines: “STATUS_LINEARIZE” when the discipline is performing the linearization. #612

`ConstraintsHistory`

:One can add one point per iteration on the blue line (default behavior).

The line style can be changed (dashed line by default).

The types of the constraint are displayed.

The equality constraints are plotted with the

`OptPostProcessor.eq_cstr_cmap`

.

Users can now choose whether the

`OptimizationProblem.current_iter`

should be set to 0 before the execution of an`OptimizationProblem`

passing the algo option`reset_iteration_counters`

. This is useful to complete the execution of a`Scenario`

from a backup file without exceeding the requested`max_iter`

or`n_samples`

. #636

### Fixed¶

`HDF5Cache.hdf_node_name`

returns the name of the node of the HDF file in which the data are cached. #583The histories of the objective and constraints generated by

`OptHistoryView`

no longer return an extra iteration. #591The histories of the constraints and diagonal of the Hessian matrix generated by

`OptHistoryView`

use the scientific notation. #592`ObjConstrHist`

correctly manages the objectives to maximize. #594`Statistics.n_variables`

no longer corresponds to the number of variables in the`Statistics.dataset`

but to the number of variables considered by`Statistics`

.`ParametricStatistics`

correctly handles variables with dimension greater than one.`ParametricStatistics.compute_a_value`

uses 0.99 as coverage level and 0.95 as confidence level. #597The input data provided to the discipline by a DOE did not match the type defined in the design space. #606

The cache of a self-coupled discipline cannot be exported to a dataset. #608

The

`ConstraintsHistory`

draws the vertical line at the right position when the constraint is satisfied at the final iteration. #616Fixed remaining time unit inconsistency in progress bar. #617

The attribute

`fig_size`

of`save_show_figure`

impacts the figure when`show`

is`True`

. #618`Transformer`

handles both 1D and 2D arrays. #624`SobolAnalysis`

no longer depends on the order of the variables in the`ParameterSpace`

. #626`ParametricStatistics.plot_criteria`

plots the confidence level on the right subplot when the fitting criterion is a statistical test. #627`CorrelationAnalysis.sort_parameters`

uses the rule “The higher the absolute correlation coefficient the better”. #628Fix the parallel execution and the serialization of LinearCombination discipline. #638

Fix the parallel execution and the serialization of ConstraintAggregation discipline. #642

### Changed¶

`Statistics.compute_probability`

computes one probability per component of the variables. #542The history of the diagonal of the Hessian matrix generated by

`OptHistoryView`

displays the names of the design variables on the y-axis. #595`QuadApprox`

now displays the names of the design variables. #596The methods

`SensitivityAnalysis.plot_bar`

and`SensitivityAnalysis.plot_comparison`

of`SensitivityAnalysis`

uses two decimal places by default for a better readability. #603`BarPlot`

uses a grid for a better readability.`SobolAnalysis.plot`

uses a grid for a better readability.`MorrisAnalysis.plot`

uses a grid for a better readability. #604`Dataset.export_to_dataframe`

can either sort the columns by group, name and component, or only by group and component. #622`OptimizationProblem.export_to_dataset`

uses the order of the design variables given by the`ParameterSpace`

to build the`Dataset`

. #626

## Version 4.2.0 (2022-12-22)¶

### Added¶

Add a new property to

`MatlabDiscipline`

in order to get access to the`MatlabEngine`

instance attribute. #536Independent

`MDA`

in a`MDAChain`

can be run in parallel. #587The

`MDAChain`

has now an option to run the independent branches of the process in parallel.The Ishigami use case to illustrate and benchmark UQ techniques (

`IshigamiFunction`

,`IshigamiSpace`

,`IshigamiProblem`

and`IshigamiDiscipline`

). #517An

`MDODiscipline`

can now be composed of`MDODiscipline.disciplines`

. #520`SobolAnalysis`

can compute the`SobolAnalysis.second_order_indices`

.`SobolAnalysis`

uses asymptotic distributions by default to compute the confidence intervals. #524`PCERegressor`

has a new attribute`PCERegressor.second_sobol_indices`

. #525The

`DistributionFactory`

has two new methods:`DistributionFactory.create_marginal_distribution`

and`DistributionFactory.create_composed_distribution`

. #526`SobieskiProblem`

has a new attribute`USE_ORIGINAL_DESIGN_VARIABLES_ORDER`

to order the design variables of the`SobieskiProblem.design_space`

according to their original order (`"x_shared"`

,`"x_1"`

,`"x_2"`

and`"x_3"`

) rather than the GEMSEO one (`"x_shared"`

,`"x_1"`

,`"x_2"`

and`"x_3"`

), as`SobieskiProblem`

and`SobieskiBase`

are based on this original order. #550

### Fixed¶

Fix the XDSM workflow of a sequential sequence within a parallel sequence. #586

`Factory`

no longer considers abstract classes. #280When the

`DOELibrary.execute`

is called twice with different DOEs, the functions attached to the`OptimizationProblem`

are correctly sampled during the second execution and the results correctly stored in the`Database`

. #435A

`ParameterSpace`

prevents the mixing of probability distributions coming from different libraries. #495`MinMaxScaler`

and`StandardScaler`

can now deal with constant variables. #512The options

`use_database`

,`round_ints`

and`normalized_design_space`

passed to`DriverLib.execute`

are no longer ignored. #537`OptimizationProblem`

casts the complex numbers to real when exporting its`OptimizationProblem.database`

to a`Dataset`

. #546`PCERegressor`

computes the Sobol’ indices for all the output dimensions. #557Fixed a bug in

`HDF5FileSingleton`

that caused the`HDF5Cache`

to crash when writing data that included arrays of string. #559`OptProblem.get_violation_criteria`

is inf for constraints with NaN values. #561Fixed a bug in the iterations progress bar, that displayed inconsistent objective function and duration values. #562

`NormFunction`

and`NormDBFunction`

now use the`MDOFunction.special_repr`

of the original`MDOFunction`

. #568`DOEScenario`

and`MDOScenario`

can be serialized after an execution. Added missing`_ATTR_TO_SERIALIZE`

to`MDOChain`

and`MDOScenarioAdapter`

. #578

### Changed¶

Since version 4.1.0, when using a DOE, an integer variable passed to a discipline is casted to a floating point. The previous behavior will be restored in version 4.2.1.

The batches requested by pSeven are evaluated in parallel. #207

The

`LagrangeMultipliers`

of a non-solved`OptimizationProblem`

can be approximated. The errors raised by`LagrangeMultipliers`

are now raised by`PostOptimalAnalysis`

. #372The jacobian computation in

`MDOChain`

now uses the minimal jacobians of the disciplines instead of the`force_all`

option of the disciplines linearization. #531The jacobian computation in

`MDA`

now uses the minimal jacobians of the disciplines instead of all couplings for the disciplines linearization. #483The

`Scenario.set_differentiation_method`

now casts automatically all float default inputs of the disciplines in its formulation to complex when using`OptimizationProblem.COMPLEX_STEP`

and setting the option`cast_default_inputs_to_complex`

to`True`

. The`Scenario.set_differentiation_method`

now casts automatically the current value of the`DesignSpace`

to complex when using`OptimizationProblem.COMPLEX_STEP`

. The`MDODiscipline.disciplines`

is now a property that returns the protected attribute`MDODiscipline._disciplines`

. #520The methods

`MDODiscipline.add_differentiated_inputs`

and`MDODiscipline.add_differentiated_outputs`

now ignore inputs or outputs that are not numeric. #548`MLQualityMeasure`

uses`True`

as the default value for`fit_transformers`

, which means that the`Transformer`

instances attached to the assessed`MLAlgo`

are re-trained on each training subset of the cross-validation partition.`MLQualityMeasure.evaluate_kfolds`

uses`True`

as default value for`randomize`

, which means that the learning samples attached to the assessed`MLAlgo`

are shuffled before building the cross-validation partition. #553

## Version 4.1.0 (2022-10-25)¶

### Added¶

`MakeFunction`

has a new optional argument`names_to_sizes`

defining the sizes of the input variables. #252`DesignSpace.initialize_missing_current_values`

sets the missing current design values to default ones.`OptimizationLibrary`

initializes the missing design values to default ones before execution. #299`Boxplot`

is a new`DatasetPlot`

to create boxplots from a`Dataset`

. #320`Scenario`

offers an keyword argument`maximize_objective`

, previously passed implicitly with`**formulation_options`

. #350A stopping criterion based on KKT condition residual can now be used for all gradient-based solvers. #372

The static N2 chart represents the self-coupled disciplines with blue diagonal blocks. The dynamic N2 chart represents the self-coupled disciplines with colored diagonal blocks. #396

`SimpleCache`

can be exported to a`Dataset`

. #404A warning message is logged when an attempt is made to add an observable twice to an

`OptimizationProblem`

and the addition is cancelled. #409A

`SensitivityAnalysis`

can be saved on the disk (use`SensitivityAnalysis.save`

and`SensitivityAnalysis.load`

). A`SensitivityAnalysis`

can be loaded from the disk with the function`load_sensitivity_analysis`

. #417The

`PCERegressor`

has new properties related to the PCE output, namely its`PCERegressor.mean`

,`PCERegressor.covariance`

,`PCERegressor.variance`

and`PCERegressor.standard_deviation`

. #428`Timer`

can be used as a context manager to measure the time spent within a`with`

statement. #431Computation of KKT criteria is made optional. #440

Bievel processes now store the local optimization history of sub-scenarios in ScenarioAdapters. #441

`pretty_str`

converts an object into an readable string by using`str`

. #442The functions

`create_linear_approximation`

and`create_quadratic_approximation`

computes the first- and second-order Taylor polynomials of an`MDOFunction`

. #451The KKT norm is added to database when computed. #457

MDAs now output the norm of residuals at the end of its execution. #460

`pretty_str`

and`pretty_repr`

sort the elements of collections by default. #469The module

`gemseo.algos.doe.quality`

offers features to assess the quality of a DOE:`DOEQuality`

assesses the quality of a DOE from`DOEMeasures`

; the qualities can be compared with logical operators.`compute_phip_criterion`

computes the`\varphi_p`

space-filling criterion.`compute_mindist_criterion`

computes the minimum-distance space-filling criterion.`compute_discrepancy`

computes different discrepancy criteria.

### Fixed¶

NLOPT_COBYLA and NLOPT_BOBYQA algorithms may end prematurely in the simplex construction phase, caused by an non-exposed and too small default value of the

`stop_crit_n_x`

algorithm option. #307The MDANewton MDA does not have anymore a Jacobi step interleaved in-between each Newton step. #400

The

`AnalyticDiscipline.default_inputs`

do not share anymore the same Numpy array. #406The Lagrange Multipliers computation is fixed for design points close to local optima. #408

`gemseo-template-grammar-editor`

now works with both pyside6 and pyside2. #410`DesignSpace.read_from_txt`

can read a CSV file with a current value set at`None`

. #411The argument

`message`

passed to`DriverLib.init_iter_observer`

and defining the iteration prefix of the`ProgressBar`

works again; its default value is`"..."`

. #416The signatures of

`MorrisAnalysis`

,`CorrelationAnalysis`

and`SobolAnalysis`

are now consistent with`SensitivityAnalysis`

. #424When using a unique process, the observables can now be evaluated as many times as the number of calls to

`DOELibrary.execute`

. #425The

`DOELibrary.seed`

of the`DOELibrary`

is used by default and increments at each execution; pass the integer option`seed`

to`DOELibrary.execute`

to use another one, the time of this execution. #426`DesignSpace.get_current_value`

correctly handles the order of the`variable_names`

in the case of NumPy array outputs. #433The

`SimpleCache`

no longer fails when caching an output that is not a Numpy array. #444The first iteration of a

`MDA`

was not shown in red with`MDA.plot_residual_history``

. #455The self-organizing map post-processing (

`SOM`

) has been fixed, caused by a regression. #465The couplings variable order, used in the

`MDA`

class for the adjoint matrix assembly, was not deterministic. #472A multidisciplinary system with a self-coupled discipline can be represented correctly by a coupling graph. #506

### Changed¶

The

`LoggingContext`

uses the root logger as default value of`logger`

. #421The

`GradientSensitivity`

post-processor now includes an option to compute the gradients at the selected iteration to avoid a crash if they are missing. #434`pretty_repr`

converts an object into an unambiguous string by using`repr`

; use`pretty_str`

for a readable string. #442A global multi-processing manager is now used, this improves the performance of multiprocessing on Windows platforms. #445

The graphs produced by

`OptHistoryView`

use the same`OptHistoryView.xlabel`

. #449`Database.notify_store_listener`

takes a design vector as input and when not provided the last iteration design vector is employed. The KKT criterion when kkt tolerances are provided is computed at each new storage. #457

## Version 4.0.1 (2022-08-04)¶

### Added¶

### Fixed¶

The MDANewton MDA does not have anymore a Jacobi step interleaved in-between each Newton step. #400

The

`AnalyticDiscipline.default_inputs`

do not share anymore the same Numpy array. #406The Lagrange Multipliers computation is fixed for design points close to local optima. #408

`gemseo-template-grammar-editor`

now works with both pyside6 and pyside2. #410

## Version 4.0.0 (2022-07-28)¶

### Added¶

`Concatenater`

can now scale the inputs before concatenating them.`LinearCombination`

is a new discipline computing the weighted sum of its inputs.`Splitter`

is a new discipline splitting whose outputs are subsets of its unique input. #316The transform module in machine learning now features two power transforms:

`BoxCox`

and`YeoJohnson`

. #341A

`MDODiscipline`

can now use a pandas DataFrame via its`MDODiscipline.local_data`

. #58Grammars can add namespaces to prefix the element names. #70

Disciplines and functions, with tests, for the resolution of 2D Topology Optimization problem by the SIMP approach were added in gemseo.problems.topo_opt. In the documentation, 3 examples covering L-Shape, Short Cantilever and MBB structures are also added. #128

A

`TransformerFactory`

. #154The

`gemseo.post.radar_chart.RadarChart`

post-processor plots the constraints at optimum by default and provides access to the database elements from either the first or last index. #159`OptimizationResult`

can store the optimum index. #161An

`OptimizationProblem`

can be reset either fully or partially (database, current iteration, current design point, number of function calls or functions preprocessing).`Database.clear`

can reset the iteration counter. #188The

`Database`

attached to a`Scenario`

can be cleared before running the driver. #193The variables of a

`DesignSpace`

can be renamed. #204The optimization history can be exported to a

`Dataset`

from a`Scenario`

. #209A

`DatasetPlot`

can associate labels to the handled variables for a more meaningful display. #212The bounds of the parameter length scales of a

`GaussianProcessRegressor`

can be defined at instantiation. #228Observables included in the exported HDF file. #230

`ScatterMatrix`

can plot a limited number of variables. #236The Sobieski’s SSBJ use case can now be used with physical variable names. #242

The coupled adjoint can now account for disciplines with state residuals. #245

Randomized cross-validation can now use a seed for the sake of reproducibility. #246

The

`DriverLib`

now checks if the optimization or DOE algorithm handles integer variables. #247An

`MDODiscipline`

can automatically detect JSON grammar files from a user directory. #253`Statistics`

can now estimate a margin. #255Observables can now be derived when the driver option

`eval_obs_jac`

is`True`

(default:`False`

). #256`ZvsXY`

can add series of points above the surface. #259The number and positions of levels of a

`ZvsXY`

or`Surfaces`

can be changed. #262`ZvsXY`

or`Surfaces`

can use either isolines or filled surfaces. #263A

`MDOFunction`

can now be divided by another`MDOFunction`

or a number. #267An

`MLAlgo`

cannot fit the transformers during the learning stage. #273The

`KLSVD`

wrapped from OpenTURNS can now use the stochastic algorithms. #274The lower or upper half of the

`ScatterMatrix`

can be hidden. #301A

`Scenario`

can use a standardized objective in logs and`OptimizationResult`

. #306`Statistics`

can compute the coefficient of variation. #325`Lines`

can use an abscissa variable and markers. #328The user can now define a

`OTDiracDistribution`

with OpenTURNS. #329It is now possible to select the number of processes on which to run an

`IDF`

formulation using the option`n_processes`

. #369

### Fixed¶

Ensure that a nested

`MDAChain`

is not detected as a self-coupled discipline. #138The method

`MDOCouplingStructure.plot_n2_chart`

no longer crashes when the provided disciplines have no couplings. #174The broken link to the GEMSEO logo used in the D3.js-based N2 chart is now repaired. #184

An

`XLSDiscipline`

no longer crashes when called using multi-threading. #186The option

`mutation`

of the`"DIFFERENTIAL_EVOLUTION"`

algorithm now checks the correct expected type. #191`SensitivityAnalysis`

can plot a field with an output name longer than one character. #194Fixed a typo in the

`monitoring`

section of the documentation referring to the function`create_gantt_chart`

as`create_gannt`

. #196`DOELibrary`

untransforms unit samples properly in the case of random variables. #197The string representations of the functions of an

`OptimizationProblem`

imported from an HDF file do not have bytes problems anymore. #201Fix normalization/unnormalization of functions and disciplines that only contain integer variables. #219

`Factory.get_options_grammar`

provides the same content in the returned grammar and the dumped one. #220`Dataset`

uses pandas to read CSV files more efficiently. #221Missing function and gradient values are now replaced with

`numpy.NaN`

when exporting a`Database`

to a`Dataset`

. #223The method

`OptimizationProblem.get_data_by_names`

no longer crashes when both`as_dict`

and`filter_feasible`

are set to True. #226`MorrisAnalysis`

can again handle multidimensional outputs. #237The

`XLSDiscipline`

test run no longer leaves zombie processes in the background after the execution is finished. #238An

`MDAJacobi`

inside a`DOEScenario`

no longer causes a crash when a sample raises a`ValueError`

. #239AnalyticDiscipline with absolute value can now be derived. #240

The function

`hash_data_dict`

returns deterministic hash values, fixing a bug introduced in GEMSEO 3.2.1. #251`LagrangeMultipliers`

are ensured to be non negative. #261A

`MLQualityMeasure`

can now be applied to a`MLAlgo`

built from a subset of the input names. #265The given value in

`DesignSpace.add_variable`

is now cast to the proper`var_type`

. #278The

`DisciplineJacApprox.compute_approx_jac`

method now returns the correct Jacobian when filtering by indices. With this fix, the`MDODiscipline.check_jacobian`

method no longer crashes when using indices. #308An integer design variable can be added with a lower or upper bound explicitly defined as +/-inf. #311

A

`PCERegressor`

can now be deepcopied before or after the training stage. #340A

`DOEScenario`

can now be serialized. #358An

`AnalyticDiscipline`

can now be serialized. #359`N2JSON`

now works when a coupling variable has no default value, and displays`"n/a"`

as variable dimension.`N2JSON`

now works when the default value of a coupling variable is an unsized object, e.g.`array(1)`

. #388The observables are now computed in parallel when executing a

`DOEScenario`

using more than one process. #391

### Changed¶

Fixed Lagrange Multipliers computation for equality active constraints. #345

The

`normalize`

argument of`OptimizationProblem.preprocess_functions`

is now named`is_function_input_normalized`

. #22API changes:

The

`MDAChain`

now takes`inner_mda_name`

as argument instead of`sub_mda_class`

.The

`MDF`

formulation now takes`main_mda_name`

as argument instead of`main_mda_class`

and`inner_mda_name`

instead of`sub_mda_class`

.The

`BiLevel`

formulation now takes`main_mda_name`

as argument instead of`mda_name`

. It is now possible to explicitly define an`inner_mda_name`

as well.

The

`gemseo.post.radar_chart.RadarChart`

post-processor uses all the constraints by default. #159Updating a dictionary of NumPy arrays from a complex array no longer converts the complex numbers to the original data type except if required. #177

The D3.js-based N2 chart can now display the GEMSEO logo offline. #184

The caches API has been changed to be more Pythonic and expose an interface similar to a dictionary. One can iterate an

`AbstractFullCache`

and handle it with square brackets, eg.`output_data = cache[input_data].outputs`

. The entry of a cache is a`CacheEntry`

whose components`entry.{inputs,outputs,jacobian}`

are dictionaries of NumPy arrays indexed by variable names.API changes from old to new:

`cache.inputs_names`

:`cache.input_names`

`cache.get_all_data`

:`[cache_entry for cache_entry in cache]`

`cache.get_data`

: has been removed`cache.get_length`

:`len(cache)`

`cache.get_outputs`

:`cache[input_data].outputs`

`cache.{INPUTS,JACOBIAN,OUTPUTS,SAMPLE}_GROUP`

: have been removed`cache.get_last_cached_inputs`

:`cache.last_entry.inputs`

`cache.get_last_cached_outputs`

:`cache.last_entry.outputs`

`cache.max_length`

: has been removed`cache.merge`

:`cache.update`

`cache.outputs_names`

:`cache.output_names`

`cache.varsizes`

:`cache.names_to_sizes`

`cache.samples_indices`

: has been removed

The grammars API has been changed to be more pythonic and expose an interface similar to a dictionary. The behavior of the grammars has been made more consistent too.

API changes from old to new:

`grammar.load_data`

:`grammar.validate`

`grammar.is_data_name_existing(name)`

:`name in grammar`

`grammar.update_from`

:`grammar.update`

`grammar.remove_item(name)`

:`del grammar[name]`

`grammar.get_data_names`

:`grammar.keys()`

`grammar.is_all_data_names_existing(names)`

:`set(names) <= set(grammar.keys())`

`grammar.initialize_from_data_names`

:`grammar.update`

`grammar.initialize_from_base_dict`

:`grammar.update_from_data`

`grammar.is_type_array`

:`grammar.is_array`

`grammar.update_from_if_not_in`

: use`update`

with`exclude_names`

`grammar.to_simple_grammar`

:`grammar.convert_to_simple_grammar()`

`grammar.is_required(name)`

:`name in grammar.required_names`

`grammar.set_item_value`

: has been removed`grammar.remove_required(name)`

:`grammar.required_names.remove(name)`

`grammar.init_from_schema_file`

:`grammar.update_from_file`

`grammar.write_schema`

:`grammar.write`

`grammar.schema_dict`

:`grammar.schema`

`grammar.data_names`

:`grammar.keys()`

`grammar.data_types`

:`grammar.values()`

`grammar.update_elements`

:`grammar.update`

`grammar.update_required_elements`

: has been removed`JSONGrammar`

class attributes removed:`PROPERTIES_FIELD`

,`REQUIRED_FIELD`

,`TYPE_FIELD`

,`OBJECT_FIELD`

,`TYPES_MAP`

`AbstractGrammar`

:`BaseGrammar`

The default number of components used by a

`DimensionReduction`

transformer is based on data and depends on the related technique. #244Classes deriving from

`MDODiscipline`

inherits the input and output grammar files of their first parent. #258The parameters of a

`DatasetPlot`

are now passed at instantiation. #260An

`MLQualityMeasure`

no longer trains an`MLAlgo`

already trained. #264Accessing a unique entry of a Dataset no longer returns 2D arrays but 1D arrays. Accessing a unique feature of a Dataset no longer returns a dictionary of arrays but an array. #270

`MLQualityMeasure`

no longer refits the transformers with cross-validation and bootstrap techniques. #273Improved the way

`xlwings`

objects are handled when an`XLSDiscipline`

runs in multiprocessing, multithreading, or both. #276A

`CustomDOE`

can be used without specifying`algo_name`

whose default value is`"CustomDOE"`

now. #282The

`XLSDiscipline`

no longer copies the original Excel file when both`copy_xls_at_setstate`

and`recreate_book_at_run`

are set to`True`

. #287The post-processing algorithms plotting the objective function can now use the standardized objective when

`OptimizationProblem.use_standardized_objective`

is`True`

. When post-processing a`Scenario`

, the name of a constraint passed to the`OptPostProcessor`

should be the value of`constraint_name`

passed to`Scenario.add_constraint`

or the vale of`output_name`

if`None`

. #302An

`MDOFormulation`

now shows an`INFO`

level message when a variable is removed from the design space because it is not an input for any discipline in the formulation. #304It is now possible to carry out a

`SensitivityAnalysis`

with multiple disciplines. #310The classes of the regression algorithms are renamed as

`{Prefix}Regressor`

. #322API changes:

`AlgoLib.lib_dict`

renamed to`AlgoLib.descriptions`

.`AnalyticDiscipline.expr_symbols_dict`

renamed to`AnalyticDiscipline.output_names_to_symbols`

.`AtomicExecSequence.get_state_dict`

renamed to`AtomicExecSequence.get_statuses`

.`BasicHistory`

:`data_list`

renamed to`variable_names`

.`CompositeExecSequence.get_state_dict`

renamed to`CompositeExecSequence.get_statuses`

.`CompositeExecSequence.sequence_list`

renamed to`CompositeExecSequence.sequences`

.`ConstraintsHistory`

:`constraints_list`

renamed to`constraint_names`

`MatlabDiscipline.__init__`

:`input_data_list`

and`output_data_list`

renamed to`input_names`

and`output_names`

.`MDAChain.sub_mda_list`

renamed to`MDAChain.inner_mdas`

.`MDOFunctionGenerator.get_function`

:`input_names_list`

and`output_names_list`

renamed to`output_names`

and`output_names`

.`MDOScenarioAdapter.__init__`

:`inputs_list`

and`outputs_list`

renamed to`input_names`

and`output_names`

.`OptPostProcessor.out_data_dict`

renamed to`OptPostProcessor.materials_for_plotting`

.`ParallelExecution.input_data_list`

renamed to`ParallelExecution.input_values`

.`ParallelExecution.worker_list`

renamed to`ParallelExecution.workers`

.`RadarChart`

:`constraints_list`

renamed to`constraint_names`

.`ScatterPlotMatrix`

:`variables_list`

renamed to`variable_names`

.`save_matlab_file`

:`dict_to_save`

renamed to`data`

.`DesignSpace.get_current_x`

renamed to`DesignSpace.get_current_value`

.`DesignSpace.has_current_x`

renamed to`DesignSpace.has_current_value`

.`DesignSpace.set_current_x`

renamed to`DesignSpace.set_current_value`

.`gemseo.utils.data_conversion`

:`FLAT_JAC_SEP`

renamed to`STRING_SEPARATOR`

`DataConversion.dict_to_array`

renamed to`concatenate_dict_of_arrays_to_array`

`DataConversion.list_of_dict_to_array`

removed`DataConversion.array_to_dict`

renamed to`split_array_to_dict_of_arrays`

`DataConversion.jac_2dmat_to_dict`

renamed to`split_array_to_dict_of_arrays`

`DataConversion.jac_3dmat_to_dict`

renamed to`split_array_to_dict_of_arrays`

`DataConversion.dict_jac_to_2dmat`

removed`DataConversion.dict_jac_to_dict`

renamed to`flatten_nested_dict`

`DataConversion.flat_jac_name`

removed`DataConversion.dict_to_jac_dict`

renamed to`nest_flat_bilevel_dict`

`DataConversion.update_dict_from_array`

renamed to`update_dict_of_arrays_from_array`

`DataConversion.deepcopy_datadict`

renamed to`deepcopy_dict_of_arrays`

`DataConversion.get_all_inputs`

renamed to`get_all_inputs`

`DataConversion.get_all_outputs`

renamed to`get_all_outputs`

`DesignSpace.get_current_value`

can now return a dictionary of NumPy arrays or normalized design values.

API changes:

The short names of some machine learning algorithms have been replaced by conventional acronyms.

The class variable

`MLAlgo.ABBR`

was renamed as`MLAlgo.SHORT_ALGO_NAME`

.

The constructor of

`AutoPyDiscipline`

now allows the user to select a custom name instead of the name of the Python function. #339It is now possible to serialize an

`MDOFunction`

. #342All

`MDA`

algos now count their iterations starting from`0`

. The`MDA.residual_history`

is now a list of normed residuals. The argument`figsize`

in`plot_residual_history`

was renamed to`fig_size`

to be consistent with other`OptPostProcessor`

algos. #343API change:

`fig_size`

is the unique name to identify the size of a figure and the occurrences of`figsize`

,`figsize_x`

and`figsize_y`

have been replaced by`fig_size`

,`fig_size_x`

and`fig_size_y`

. #344API change: the option

`parallel_exec`

in`IDF`

was replaced by`n_processes`

. #369

### Removed¶

API change: Remove

`DesignSpace.get_current_x_normalized`

and`DesignSpace.get_current_x_dict`

. #323

## Version 3.2.2 (March 2022)¶

### Fixed¶

Cache may not be used because of the way data was hashed.

## Version 3.2.1 (November 2021)¶

### Fixed¶

Missing package dependency declaration.

## Version 3.2.0 (November 2021)¶

### Added¶

#### Algorithms and numerical computations¶

The matrix linear problem solvers libraries are now handled by a Factory and can then be extended by plugins.

MDA warns if it stops when reaching

`max_mda_iter`

but before reaching the tolerance criteria.The convergence of an MDA can be logged.

Add max line search steps option in scipy L-BFGS-B

An analytical Jacobian can be checked for subsets of input and output names and components.

An analytical Jacobian can be checked from a reference file.

Scipy global algorithms SHGO and differential evolution now handle non linear constraints.

It is now possible to get the number of constraints not satisfied by a design in an OptimizationProblem.

The names of the scalar constraints in an OptimizationProblem can be retrieved as a list.

The dimensions of the outputs for functions in an OptimizationProblem are now available as a dictionary.

The cross-validation technique can now randomize the samples before dividing them in folds.

#### Post processing¶

The Scatter Plot Matrix post processor now allows the user to filter non-feasible points.

OptPostProcessor can change the size of the figures with the method execute().

SensitivityAnalysis can plot indices with values standardized in [0,1].

#### UQ¶

MorrisAnalysis provides new indices: minimum, maximum and relative standard deviation.

MorrisAnalysis can compute indices normalized with the empirical output bounds.

#### Documentation and examples¶

A button to change the tagged version of GEMSEO is available on the documentation hosted by Read the Docs.

The documentation now includes a link to the gemseo-scilab plugin.

ParetoFront: an example of a BiLevel scenario to compute the Pareto front has been added the examples.

A Pareto front computation example using a bi-level scenario has been added to the documentation.

The documentation now includes hints on how to use the add_observable method.

#### Software improvements¶

It is now possible to execute DOEScenarios in parallel on Windows. This feature does not support the use of MemoryFullCache or HDF5Cache on Windows. The progress bar may show duplicated instances during the initialization of each subprocess, in some cases it may also print the conclusion of an iteration ahead of another one that was concluded first. This is a consequence of the pickling process and does not affect the computations of the scenario.

A ParameterSpace can be casted into a DesignSpace.

Plugins can be discovered via setuptools entry points.

A dumped MDODiscipline can now be loaded with the API function import_discipline().

Database has a name used by OptimizationProblem to name the Dataset; this is the name of the corresponding Scenario if any.

The grammar type can be passed to the sub-processes through the formulations.

Scenario, MDOScenario and DOEScenario now include the argument

`grammar_type`

.A GrammarFactory used by MDODiscipline allows to plug new grammars for data checking.

The coupling structure can be directly passed to an MDA.

Database has a name used by OptimizationProblem to name the Dataset; this is the name of the corresponding Scenario if any.

A dumped MDODiscipline can now be loaded with the API function

`import_discipline`

.The name of an MDOScenarioAdapter can be defined at creation.

The AbstractFullCache built from a Dataset has the same name as the dataset.

The HDF5 file generated by HDF5Cache has now a version number.

### Changed¶

The IO grammar files of a scenario are located in the same directory as its class.

Distribution, ParameterSpace and OpenTURNS use now the logger mainly at debug level.

The grammar types “JSON” and “Simple” are replaced by the classes names “JSONGrammar” and “SimpleGrammar”.

RadarChart uses the scientific notation as default format for the grid levels and allows to change the discretization of the grid.

### Fixed¶

#### Algorithms and numerical computations¶

Make OpenTURNS- and pyDOE-based full factorial DOEs work whatever the dimension and number of samples.

The NLopt library wrapper now handles user functions that return ndarrays properly.

Fix bilevel formulation: the strong couplings were used instead of all the couplings when computing the inputs and outputs of the sub-scenarios adapters. Please note that this bug had an impact on execution performance, but had no adverse effect on the bilevel calculations in previous builds.

Bug with the ‘sample_x’ parameter of the pSeven wrapper.

An OptimizationProblem can now normalize and unnormalize gradient with uncertain variables.

A SurrogateDiscipline can now be instantiated from an MLAlgo saved without its learning set.

Bug with the ‘measure_options’ arguments of MLAlgoAssessor and MLAlgoSelection.

The constraints names are now correctly formed with the minus sign and offset value if any.

DesignSpace no longer logs an erroneous warning when unnormalizing an unbounded variable.

Resampling-based MLQualityMeasure no longer re-train the original ML model, but a copy.

The computation of a diagonal DOE out of a design space does not crash anymore.

OptimizationProblem no longer logs a warning when using the finite-difference method on the design boundary.

OpenTURNS options are processed correctly when computing a DOE out of a design space.

#### Post processing¶

The Correlations post-processor now sorts labels properly when two or more functions share the same name followed by an underscore.

The ParetoFront post-processor now shows the correct labels in the plot axis.

The Gantt Chart, Basic History, Constraints History and Scatter Plot Matrix pages in the documentation now render the example plots correctly.

Post-processings based on SymLogNorm (matplotlib) now works with Python 3.6.

OptHistoryView no longer raises an exception when the Hessian diagonal contains NaN and skips the Hessian plot.

#### Documentation and examples¶

Bug with inherited docstrings.

The MDO Scenario example subsections are now correctly named.

#### Software¶

The data hashing strategy used by HDF5Cache has been corrected, old cache files shall have to be converted, see the FAQ.

Fix levels option for Full-Factorial doe: now this option is taken into account and enables to build an anisotropic sample.

The constraints names are now correctly formed with the minus sign and offset value if any.

Bug with the MATLAB discipline on Windows.

The SurrogateDiscipline can now be serialized.

The name used to export an OptimizationProblem to a Dataset is no longer mandatory.

Bug in the print_configuration method, the configuration table is now shown properly.

Bug with integer elements casted into

The image comparison tests in post/dataset no longer leave the generated files when completed.

Typo in the function name get_scenario_differenciation.

ImportError (backport.unittest_mock) on Python 2.7.

Backward compatibility with the legacy logger named “GEMSEO”.

DOE algorithms now have their own JSON grammar files which corrects the documentation of their options.

DOEScenario no longer passes a default number of samples to a DOELibrary for which it is not an option.

Issues when a python module prefixed with

`gemseo_`

is in the current working directory.DesignSpace can now be iterated correctly.

The Jacobian approximated by the finite-difference method is now correct when computed with respect to uncertain variables.

The standard deviation predicted by GaussianProcessRegression is now correctly shaped.

The input data to stored in a HDF5Cache are now hashed with their inputs names.

The hashing strategy used by HDF5Cache no longer considers only the values of the dictionary but also the keys.

## Version 3.1.0 (July 2021)¶

### Changed¶

Faster JSON schema and dependency graph creation.

The Gradient Sensitivity post processor is now able to scale gradients.

MemoryFullCache can now use standard memory as well as shared memory.

Sellar1 and Sellar2 compute y_1 and y_2 respectively, for consistency of naming.

Improve checks of MDA structure.

IDF: add option to start at equilibrium with an MDA.

Improve doc of GEMSEO study.

Unified drivers stop criteria computed by GEMSEO (xtol_rel, xtol_abs, ftol_rel, ftom_abs).

SimpleGrammars supported for all processes (MDOChain, MDAChain etc.).

JSONGrammar can be converted to SimpleGrammar.

DiscFromExe can now run executables without using the shell.

It is now possible to add observable variables to the scenario class.

ParetoFront post-processing improvements: legends have been added, it is now possible to hide the non-feasible points in the plots.

The Gradient Sensitivity, Variable Influence and Correlations post processors now show variables names instead of hard-coded names.

The Correlations post processor now allows the user to select a subset of functions to plot.

The Correlations post processor now allows the user to select the figure size.

Documentation improvements.

### Added¶

Support for Python 3.9.

Support for fastjsonschema up to 2.15.1.

Support for h5py up to 3.2.1.

Support for numpy up to 1.20.3.

Support for pyxdsm up to 2.2.0.

Support for scipy to 1.6.3.

Support for tqdm up to 4.61.0.

Support for xdsmjs up to 1.0.1.

Support for openturns up to 1.16.

Support for pandas up to 1.2.4.

Support for scikit-learn up to 0.24.2.

Support for openpyxl up to 3.0.7.

Support for nlopt up to 2.7.0.

Constraint aggregation methods (KS, IKS, max, sum).

N2: an interactive web N2 chart allowing to expand or collapse the groups of strongly coupled disciplines.

Uncertainty: user interface for easy access.

Sensitivity analysis: an abstract class with sorting, plotting and comparison methods, with a dedicated factory and new features (correlation coefficients and Morris indices).

Sensitivity analysis: examples.

Concatenater: a new discipline to concatenate inputs variables into a single one.

Gantt chart generation to visualize the disciplines execution time.

An interactive web N2 chart allowing to expand or collapse the groups of strongly coupled disciplines.

Support pSeven algorithms for single-objective optimization.

DOELibrary.compute_doe computes a DOE based on a design space.

### Fixed¶

The greatest value that OT_LHSC can generate must not be 0.5 but 1.

Internally used HDF5 file left open.

The Scatter Plot Matrix post processor now plots the correct values for a subset of variables or functions.

MDA Jacobian fixes in specific cases (self-coupled, no strong couplings, etc).

Strong coupling definition.

Bi-level formulation implementation, following the modification of the strong coupling definition.

Graphviz package is no longer mandatory.

XDSM pdf generation bug.

DiscFromExe tests do not fail anymore under Windows, when using a network directory for the pytest base temporary directory.

No longer need quotation marks on gemseo-study string option values.

XDSM file generated with the right name given with outfilename.

SellarSystem works now in the Sphinx-Gallery documentation (plot_sellar.py).

## Version 3.0.3 (May 2021)¶

### Changed¶

Documentation fixes and improvements.

## Version 3.0.2 (April 2021)¶

### Changed¶

First open source release!

### Fixed¶

Dependency version issue for python 3.8 (pyside2).

## Version 3.0.1 (April 2021)¶

### Fixed¶

Permission issue with a test.

Robustness of the excel discipline wrapper.

## Version 3.0.0 (January 2021)¶

### Added¶

Licenses materials.

### Changed¶

Renamed gems package to gemseo.

### Removed¶

OpenOPT backend which is no longer maintained and has features overlap with other backends.

### Fixed¶

Better error handling of the study CLI with missing latex tools.

## Version 2.0.1 (December 2020)¶

### Fixed¶

Improper configuration of the logger in the MDAChain test leading to GEMS crashes if the user has not write permission on the GEMS installation directory.

Max versions of h5py and Openturns defined in environment and configuration files to prevent incorrect environments due to API incompatibilites.

Max version of numpy defined in order to avoid the occurence of a fmod/OpenBlas bug with Windows 10 2004 (https://developercommunity.visualstudio.com/content/problem/1207405/fmod-after-an-update-to-windows-2004-is-causing-a.html).

## Version 2.0.0 (July 2020)¶

### Added¶

Support for Python3

String encoding: all the strings shall now be encoded in unicode. For Python 2 users, please read carefuly the Python2 and Python3 compatibility note to migrate your existing GEMS scripts.

Documentation: gallery of examples and tutorials + cheat sheet

New conda file to automatically create a Python environment for GEMS under Linux, Windows and Mac OS.

~35% improved performance on Python3

pyXDSM to generate latex/PDF XDSM

Display XDSM directly in the browser

Machine learning capabilities based on scikit-learn, OpenTURNS and scipy: clustering, classification, regression, dimension reduction, data scaling, quality measures, algorithm calibration.

Uncertainty package based on OpenTURNS and scipy: distributions, uncertain space, empirical and parametric statistics, Sobol’ indices.

AbstractFullCache to cache inputs and outputs in memory

New Dataset class to store data from numpy arrays, file, Database and AbstractFullCache; Unique interface to machine learning and uncertainty algorithms.

Cache post-processing via Dataset

Make a discipline from an executable with a GUI

Excel-based discipline

Prototype a MDO study without writing any code and generating N2 and XDSM diagrams

Automatic finite difference step

Post-optimal analysis to compute the jacobian of MDO scenarios

Pareto front: computation and plot

New scalable problem from Tedford and Martins

New plugin mechanism for extension of features

### Changed¶

Refactored and much improved documentation

Moved to matplotlib 2.x and 3.x

Support for scipy 1.x

Improved API

Improved linear solvers robustness

Improved surrogate models based on machine learning capabilities and Dataset class.

Improved scalable models

Improved BasicHistory: works for design variables also

Improved XDSM diagrams for MDAChain

Improved BiLevel when no strong coupling is present

Improved overall tests

### Fixed¶

Bug in GradientSensitivity

Bug in AutoPyDiscipline for multiple returns and non pep8 code

## Version 1.3.2 (December 2019)¶

### Fixed¶

Bugfix in Discipline while updating data from the cache

## Version 1.3.1 (July 2019)¶

### Added¶

COBYLA handle NaNs values and manages it to backtrack. Requires specific mod of COBYLA by IRT

OptHistoryView and BasicHistory handle NaNs values

BasicHistory works for design variable values

### Changed¶

Improved error message when missing property in JSONGrammars

Improved imports to handle multiple versions of sklearn, pandas and sympy (thanks Damien Guenot)

### Fixed¶

Bug in Caching and Discipline for inouts (Thanks Romain Olivanti)

Bug in MDASequential convergence hisotry

## Version 1.3.0 (June 2019)¶

### Added¶

Refactored and much improved documentation

All algorithms, MDAs, Surrogates, formulations options are now automatically documented in the HTML doc

Enhanced API: all MDO scenarios can be fully configured and run from the API

AutoPyDiscipline: faster way to wrap a Python function as a discipline

Surrogate models: Polynomial Chaos from OpenTurns

Surrogate model quality metrics:Leave one out, Q2, etc.

MDAs can handle self-coupled disciplines (inputs that are also outputs)

Lagrange Multipliers

Multi-starting point optimization as a bi-level scenario using a DOE

New aerostructure toy MDO problem

### Changed¶

Bi-Level formulation can now handle black box optimization scenarios, and external MDAs

Improve Multiprocessing and multithreading parallelism handling (avoid deadlocks with caches)

Improve performance of input / output data checks, x13 faster JSONGrammars

Improve performance of disciplines execution: avoid memory copies

Enhanced Scalable discipline, DOE is now based on a driver and inputs are read from a HDF5 cache like surrogate models

More readable N2 graph

Improved logging: fix issue with output files

Improved progress bar and adapt units for runtime prediction

NLOPT Cobyla: add control for init step of the DOE (rho)

Surrogate GPR: add options handling

## Version 1.2.1 (August 2018)¶

### Added¶

Handle integer variables in DOEs

### Changed¶

Improve performance of normalization/unnormalization

Improve x_xstar post processing to display the optimum

### Fixed¶

Issue to use external optimizers in a MDOScenario

## Version 1.2.0 (July 2018)¶

### Added¶

New API to ease the scenario creation and use by external platforms

mix parallelism multithreading / multiprocessing

much improved and unified plugin system with factories for Optimizers, DOE, MDAs, Formulations, Disciplines, Surrogates

Surrogate models interfaces

MDAJacobi is now much faster thanks to a new acceleration set of methods

### Changed¶

HTML documentation

Small improvements

### Fixed¶

Many bugs

## Version 1.1.0 (April 2018)¶

### Added¶

Mix finite differences in the discipline derivation and analytical jacobians or complex step to compute chain rule or adjoint method when not all disciplines’ analytical derivatives are available

Ability to handle design spaces with integer variables

Analytic discipline based on symbolic calculation to easily create disciplines from analytic formulas

A scalable surrogate approximation of a discipline to benchmark MDO formulations

A HDF cache (= recorder) for disciplines to store all executions on the disk

The P-L-BFGS-B algorithm interface, a variant of LBFGSB with preconditioning coded in Python

Parallel (multiprocessing and / or multithreading) execution of disciplines and or call to functions

New constraints plot visualizations (radar chart) and constraints plot with values

Visualization to plot the distance to the best value in log scale ||x-x*||

Possibility to choose to normalize the design space or not for each variable

IDF improved for weakly coupled problems

On the fly backup of the optimization history (HDF5), in “append” mode

We can now monitor the convergence on the fly by creating optimization history plots at each iteration

Famous N2 plot in the CouplingStructure

Sphinx generated documentation in HTML (open doc/index.html), with:

GEMS in a nutshell tutorial

Discipline integration tutorial

Post processing description

GEMS architecture description

MDO formulations description

MDAs

### Changed¶

Improved automatically finding the best point in an optimization history

Improved callback functions during optimization / DOE

Improved stop criteria for optimization

Improved progress bar

Improved LGMRES solver for MDAs when using multiple RHS (recycle Krylov subspaces to accelerate convergence)

### Fixed¶

Many bugs

## Version 1.0.0 (December 2016)¶

### Added¶

Design of Experiment (DOE) capabilities from pyDOE, OpenTURNS or a custom samples set

Full differentiation of the process is available:

analytical gradient based optimization

analytical Newton type coupling solver for MDA (Multi Disciplinary Analyses)

analytical derivation of the chains of disciplines (MDOChain) via the chain rule

Post processing of optimization history: many plots to view the constraints, objective, design variables

More than 10 MDA (coupled problems) solver available, some gradient based (quasi newton) and hybrid multi-step methods (SequantialMDA) !

OptimizationProblem and its solution can be written to disk and post processed afterwards

Handling of DOE and optimization algorithm options via JSON schemas

Introduced an OptimizationProblem class that is created by the MDOFormulation and passed to an algorithm for resolution

Serialization mechanism for MDODiscipline and subclasses (write objects to disk)

Intensive testing: 500 tests and 98 % line coverage (excluding third party source)

Improved code coverage by tests from 95% to 98% and all modules have a coverage of at least 95%

Reduced pylint warnings from 800 to 40 !

### Changed¶

Code architecture refactoring for below items

Modularized post processing

Refactored algorithms part with factories

Removed dependency to json_shema_generator library, switched to GENSON (embeded with MIT licence)

Moved from JsonSchema Draft 3 to Draft 4 standard

Refactored the connection between the functions and the optimizers

Refactored MDOScenario

Refactored IDF formulation

Refactored Bilevel formulation

Refactored MDAs and introduced the CouplingStructure class

Refactored the DataProcessor for data interface with workflow engines

Refactored Sobieski use case to improve code quality

Included AGI remarks corrections on code style and best practices

## Version 0.1.0 (April 2016)¶

### Added¶

Basic MDO formulations: MDF, IDF, Bilevel formulations

Some optimization history views for convergence monitoring of the algorithm

Optimization algorithms: Scipy, OpenOPT, NLOPT

Possible export of the optimization history to the disk

Complex step and finite differences optimization

Benchmark cases:

Sobieski’s Supersonic Business Jet MDO case

Sellar

Propane