Note
Click here to download the full example code
How to define and run a stochastic validation case.¶
Problem¶
I want to validate a model at several validation points and quantify the uncertainty due to the uncertainty on the model inputs and the epistemic uncertainties on the reference data.
Based on repeated reference data, the stochastic validation case of VIMSEO allows to take into account: - the uncertainty on the reference data - the uncertainty on model inputs
and propagate these uncertainties through the model. On the output quantity of interest, this validation tool uses specific metrics that can handle stochastic variables. It compares the cumulative distribution function (CDF) of these variables and outputs scalar metrics such as the area between the two CDFs, the relative mean to mean error, or the relative error on a given percentile.
from __future__ import annotations
import logging
from gemseo.datasets.io_dataset import IODataset
from vimseo import EXAMPLE_RUNS_DIR_NAME
from vimseo.api import activate_logger
from vimseo.api import create_model
from vimseo.core.model_settings import IntegratedModelSettings
from vimseo.io.space_io import SpaceToolFileIO
from vimseo.material.material import Material
from vimseo.material_lib import MATERIAL_LIB_DIR
from vimseo.storage_management.base_storage_manager import PersistencyPolicy
from vimseo.tools.io.reader_file_dataframe import ReaderFileDataFrame
from vimseo.tools.io.reader_file_dataframe import ReaderFileDataFrameSettings
from vimseo.tools.validation.validation_point import NominalValuesOutputType
from vimseo.tools.validation.validation_point import StochasticValidationPoint
from vimseo.tools.validation.validation_point import StochasticValidationPointInputs
from vimseo.tools.validation.validation_point import StochasticValidationPointSettings
from vimseo.tools.validation.validation_point import read_nominal_values
from vimseo.tools.validation_case.validation_case import DeterministicValidationCase
from vimseo.tools.validation_case.validation_case_result import ValidationCaseResult
from vimseo.utilities.datasets import SEP
from vimseo.utilities.generate_validation_reference import Bias
from vimseo.utilities.generate_validation_reference import (
generate_reference_from_parameter_space,
)
activate_logger(level=logging.INFO)
A first step is to generate uncertain reference data:
model_name = "BendingTestAnalytical"
load_case = "Cantilever"
target_model = create_model(
model_name,
load_case,
model_options=IntegratedModelSettings(
directory_archive_persistency=PersistencyPolicy.DELETE_ALWAYS,
directory_scratch_persistency=PersistencyPolicy.DELETE_ALWAYS,
),
)
target_model.cache = None
for mult_factor, batch in zip([1.01, 1.02, 1.03], [1, 2, 3], strict=False):
reference_dataset_cantilever = generate_reference_from_parameter_space(
target_model,
SpaceToolFileIO()
.read(file_name="bending_test_validation_input_space.json")
.parameter_space,
n_samples=6,
input_names=["width", "height", "imposed_dplt"],
output_names=["reaction_forces", "maximum_dplt"],
outputs_to_bias={"reaction_forces": Bias(mult_factor=mult_factor)},
additional_name_to_data={"nominal_length": 600.0, "batch": batch},
)
reference_dataset_cantilever.to_csv(
f"reference_validation_bending_test_cantilever_{batch}.csv",
sep=SEP,
index=False,
)
print(f"The reference data for batch {batch}: ", reference_dataset_cantilever)
Out:
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:19: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/CustomDOETool/53
INFO - 16:52:19:
INFO - 16:52:19: *** Start DOEScenario execution ***
INFO - 16:52:19: DOEScenario
INFO - 16:52:19: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:19:
INFO - 16:52:19: Load case:
INFO - 16:52:19: Load case Cantilever: A cantilever load case.
INFO - 16:52:19:
INFO - 16:52:19: Boundary condition variables:
INFO - 16:52:19: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:19:
INFO - 16:52:19: Plot parameters:
INFO - 16:52:19: {
INFO - 16:52:19: "curves": []
INFO - 16:52:19: }
INFO - 16:52:19: Load:
INFO - 16:52:19: Load(direction='', sign='', type='')
INFO - 16:52:19:
INFO - 16:52:19: Default values:
INFO - 16:52:19:
INFO - 16:52:19: Default geometrical variables:
INFO - 16:52:19: {"height": [40.0], "length": [600.0], "width": [30.0]}
INFO - 16:52:19:
INFO - 16:52:19: Default numerical variables:
INFO - 16:52:19: {}
INFO - 16:52:19:
INFO - 16:52:19: Default boundary conditions variables:
INFO - 16:52:19: {"imposed_dplt": [-5.0], "relative_dplt_location": [1.0]}
INFO - 16:52:19:
INFO - 16:52:19: Default material variables:
INFO - 16:52:19: {"nu_p": [0.3], "young_modulus": [210000.0]}
INFO - 16:52:19: model_inputs:
INFO - 16:52:19: [
INFO - 16:52:19: "length",
INFO - 16:52:19: "width",
INFO - 16:52:19: "height",
INFO - 16:52:19: "imposed_dplt",
INFO - 16:52:19: "relative_dplt_location",
INFO - 16:52:19: "young_modulus",
INFO - 16:52:19: "nu_p"
INFO - 16:52:19: ]
INFO - 16:52:19: model_outputs:
INFO - 16:52:19: [
INFO - 16:52:19: "reaction_forces",
INFO - 16:52:19: "maximum_dplt",
INFO - 16:52:19: "dplt_grid",
INFO - 16:52:19: "location_max_dplt",
INFO - 16:52:19: "dplt",
INFO - 16:52:19: "moment",
INFO - 16:52:19: "moment_grid",
INFO - 16:52:19: "dplt_at_force_location",
INFO - 16:52:19: "error_code",
INFO - 16:52:19: "model",
INFO - 16:52:19: "load_case",
INFO - 16:52:19: "description",
INFO - 16:52:19: "job_name",
INFO - 16:52:19: "persistent_result_files",
INFO - 16:52:19: "n_cpus",
INFO - 16:52:19: "date",
INFO - 16:52:19: "cpu_time",
INFO - 16:52:19: "user",
INFO - 16:52:19: "machine",
INFO - 16:52:19: "vims_git_version",
INFO - 16:52:19: "directory_archive_root",
INFO - 16:52:19: "directory_archive_job",
INFO - 16:52:19: "directory_scratch_root",
INFO - 16:52:19: "directory_scratch_job"
INFO - 16:52:19: ]
INFO - 16:52:19: MDO formulation: DisciplinaryOpt
INFO - 16:52:19: Optimization problem:
INFO - 16:52:19: minimize reaction_forces(width, height, imposed_dplt)
INFO - 16:52:19: with respect to height, imposed_dplt, width
INFO - 16:52:19: over the design space:
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: | width | -inf | None | inf | float |
INFO - 16:52:19: | height | -inf | None | inf | float |
INFO - 16:52:19: | imposed_dplt | -inf | None | inf | float |
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: Solving optimization problem with algorithm CustomDOE:
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 17%|█▋ | 1/6 [00:00<00:00, 29.94 it/sec, obj=-2.51e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 33%|███▎ | 2/6 [00:00<00:00, 44.77 it/sec, obj=-2.42e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 50%|█████ | 3/6 [00:00<00:00, 53.81 it/sec, obj=-2.39e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 67%|██████▋ | 4/6 [00:00<00:00, 59.84 it/sec, obj=-2.33e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 83%|████████▎ | 5/6 [00:00<00:00, 63.89 it/sec, obj=-2.19e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 100%|██████████| 6/6 [00:00<00:00, 67.93 it/sec, obj=-2.09e+3]
INFO - 16:52:19: Optimization result:
INFO - 16:52:19: Optimizer info:
INFO - 16:52:19: Status: None
INFO - 16:52:19: Message: None
INFO - 16:52:19: Number of calls to the objective function by the optimizer: 6
INFO - 16:52:19: Solution:
INFO - 16:52:19: Objective: -2510.537799821486
INFO - 16:52:19: Design space:
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: | width | -inf | 29.731689453125 | inf | float |
INFO - 16:52:19: | height | -inf | 40.77490234375 | inf | float |
INFO - 16:52:19: | imposed_dplt | -inf | -5.1246337890625 | inf | float |
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: *** End DOEScenario execution (time: 0:00:00.092374) ***
The reference data for batch 1: width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
0 29.731689 40.774902 -5.124634 -5.124634 -2535.643178 600.0 1
1 28.844360 41.317749 -4.890503 -4.890503 -2442.594202 600.0 1
2 29.704102 40.414917 -5.015015 -5.015015 -2414.018681 600.0 1
3 29.590942 40.666260 -4.824341 -4.824341 -2356.819893 600.0 1
4 31.425171 39.082642 -4.799927 -4.799927 -2210.502014 600.0 1
5 29.982178 38.942017 -4.860352 -4.860352 -2112.579675 600.0 1
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:19: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/CustomDOETool/54
INFO - 16:52:19:
INFO - 16:52:19: *** Start DOEScenario execution ***
INFO - 16:52:19: DOEScenario
INFO - 16:52:19: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:19:
INFO - 16:52:19: Load case:
INFO - 16:52:19: Load case Cantilever: A cantilever load case.
INFO - 16:52:19:
INFO - 16:52:19: Boundary condition variables:
INFO - 16:52:19: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:19:
INFO - 16:52:19: Plot parameters:
INFO - 16:52:19: {
INFO - 16:52:19: "curves": []
INFO - 16:52:19: }
INFO - 16:52:19: Load:
INFO - 16:52:19: Load(direction='', sign='', type='')
INFO - 16:52:19:
INFO - 16:52:19: Default values:
INFO - 16:52:19:
INFO - 16:52:19: Default geometrical variables:
INFO - 16:52:19: {"height": [40.0], "length": [600.0], "width": [30.0]}
INFO - 16:52:19:
INFO - 16:52:19: Default numerical variables:
INFO - 16:52:19: {}
INFO - 16:52:19:
INFO - 16:52:19: Default boundary conditions variables:
INFO - 16:52:19: {"imposed_dplt": [-5.0], "relative_dplt_location": [1.0]}
INFO - 16:52:19:
INFO - 16:52:19: Default material variables:
INFO - 16:52:19: {"nu_p": [0.3], "young_modulus": [210000.0]}
INFO - 16:52:19: model_inputs:
INFO - 16:52:19: [
INFO - 16:52:19: "length",
INFO - 16:52:19: "width",
INFO - 16:52:19: "height",
INFO - 16:52:19: "imposed_dplt",
INFO - 16:52:19: "relative_dplt_location",
INFO - 16:52:19: "young_modulus",
INFO - 16:52:19: "nu_p"
INFO - 16:52:19: ]
INFO - 16:52:19: model_outputs:
INFO - 16:52:19: [
INFO - 16:52:19: "reaction_forces",
INFO - 16:52:19: "maximum_dplt",
INFO - 16:52:19: "dplt_grid",
INFO - 16:52:19: "location_max_dplt",
INFO - 16:52:19: "dplt",
INFO - 16:52:19: "moment",
INFO - 16:52:19: "moment_grid",
INFO - 16:52:19: "dplt_at_force_location",
INFO - 16:52:19: "error_code",
INFO - 16:52:19: "model",
INFO - 16:52:19: "load_case",
INFO - 16:52:19: "description",
INFO - 16:52:19: "job_name",
INFO - 16:52:19: "persistent_result_files",
INFO - 16:52:19: "n_cpus",
INFO - 16:52:19: "date",
INFO - 16:52:19: "cpu_time",
INFO - 16:52:19: "user",
INFO - 16:52:19: "machine",
INFO - 16:52:19: "vims_git_version",
INFO - 16:52:19: "directory_archive_root",
INFO - 16:52:19: "directory_archive_job",
INFO - 16:52:19: "directory_scratch_root",
INFO - 16:52:19: "directory_scratch_job"
INFO - 16:52:19: ]
INFO - 16:52:19: MDO formulation: DisciplinaryOpt
INFO - 16:52:19: Optimization problem:
INFO - 16:52:19: minimize reaction_forces(width, height, imposed_dplt)
INFO - 16:52:19: with respect to height, imposed_dplt, width
INFO - 16:52:19: over the design space:
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: | width | -inf | None | inf | float |
INFO - 16:52:19: | height | -inf | None | inf | float |
INFO - 16:52:19: | imposed_dplt | -inf | None | inf | float |
INFO - 16:52:19: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:19: Solving optimization problem with algorithm CustomDOE:
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 17%|█▋ | 1/6 [00:00<00:00, 79.77 it/sec, obj=-2.67e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 33%|███▎ | 2/6 [00:00<00:00, 86.71 it/sec, obj=-2.38e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 50%|█████ | 3/6 [00:00<00:00, 89.13 it/sec, obj=-2.41e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 67%|██████▋ | 4/6 [00:00<00:00, 91.37 it/sec, obj=-2.42e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 83%|████████▎ | 5/6 [00:00<00:00, 93.26 it/sec, obj=-2.11e+3]
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:19: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:19: 100%|██████████| 6/6 [00:00<00:00, 94.15 it/sec, obj=-2.66e+3]
INFO - 16:52:19: Optimization result:
INFO - 16:52:19: Optimizer info:
INFO - 16:52:19: Status: None
INFO - 16:52:19: Message: None
INFO - 16:52:19: Number of calls to the objective function by the optimizer: 6
INFO - 16:52:19: Solution:
INFO - 16:52:19: Objective: -2674.6691186020826
INFO - 16:52:19: Design space:
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: | width | -inf | 29.1336669921875 | inf | float |
INFO - 16:52:19: | height | -inf | 41.9508056640625 | inf | float |
INFO - 16:52:19: | imposed_dplt | -inf | -5.1162109375 | inf | float |
INFO - 16:52:19: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:19: *** End DOEScenario execution (time: 0:00:00.068094) ***
The reference data for batch 2: width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
0 29.133667 41.950806 -5.116211 -5.116211 -2728.162501 600.0 2
1 29.151123 40.318115 -5.115479 -5.115479 -2422.969487 600.0 2
2 28.687744 40.479980 -5.211182 -5.211182 -2458.437755 600.0 2
3 30.194824 40.375000 -5.015015 -5.015015 -2470.859447 600.0 2
4 31.169434 38.259888 -4.978882 -4.978882 -2154.753161 600.0 2
5 30.858887 41.138062 -5.092285 -5.092285 -2712.252782 600.0 2
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/CustomDOETool/55
INFO - 16:52:20:
INFO - 16:52:20: *** Start DOEScenario execution ***
INFO - 16:52:20: DOEScenario
INFO - 16:52:20: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:20:
INFO - 16:52:20: Load case:
INFO - 16:52:20: Load case Cantilever: A cantilever load case.
INFO - 16:52:20:
INFO - 16:52:20: Boundary condition variables:
INFO - 16:52:20: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:20:
INFO - 16:52:20: Plot parameters:
INFO - 16:52:20: {
INFO - 16:52:20: "curves": []
INFO - 16:52:20: }
INFO - 16:52:20: Load:
INFO - 16:52:20: Load(direction='', sign='', type='')
INFO - 16:52:20:
INFO - 16:52:20: Default values:
INFO - 16:52:20:
INFO - 16:52:20: Default geometrical variables:
INFO - 16:52:20: {"height": [40.0], "length": [600.0], "width": [30.0]}
INFO - 16:52:20:
INFO - 16:52:20: Default numerical variables:
INFO - 16:52:20: {}
INFO - 16:52:20:
INFO - 16:52:20: Default boundary conditions variables:
INFO - 16:52:20: {"imposed_dplt": [-5.0], "relative_dplt_location": [1.0]}
INFO - 16:52:20:
INFO - 16:52:20: Default material variables:
INFO - 16:52:20: {"nu_p": [0.3], "young_modulus": [210000.0]}
INFO - 16:52:20: model_inputs:
INFO - 16:52:20: [
INFO - 16:52:20: "length",
INFO - 16:52:20: "width",
INFO - 16:52:20: "height",
INFO - 16:52:20: "imposed_dplt",
INFO - 16:52:20: "relative_dplt_location",
INFO - 16:52:20: "young_modulus",
INFO - 16:52:20: "nu_p"
INFO - 16:52:20: ]
INFO - 16:52:20: model_outputs:
INFO - 16:52:20: [
INFO - 16:52:20: "reaction_forces",
INFO - 16:52:20: "maximum_dplt",
INFO - 16:52:20: "dplt_grid",
INFO - 16:52:20: "location_max_dplt",
INFO - 16:52:20: "dplt",
INFO - 16:52:20: "moment",
INFO - 16:52:20: "moment_grid",
INFO - 16:52:20: "dplt_at_force_location",
INFO - 16:52:20: "error_code",
INFO - 16:52:20: "model",
INFO - 16:52:20: "load_case",
INFO - 16:52:20: "description",
INFO - 16:52:20: "job_name",
INFO - 16:52:20: "persistent_result_files",
INFO - 16:52:20: "n_cpus",
INFO - 16:52:20: "date",
INFO - 16:52:20: "cpu_time",
INFO - 16:52:20: "user",
INFO - 16:52:20: "machine",
INFO - 16:52:20: "vims_git_version",
INFO - 16:52:20: "directory_archive_root",
INFO - 16:52:20: "directory_archive_job",
INFO - 16:52:20: "directory_scratch_root",
INFO - 16:52:20: "directory_scratch_job"
INFO - 16:52:20: ]
INFO - 16:52:20: MDO formulation: DisciplinaryOpt
INFO - 16:52:20: Optimization problem:
INFO - 16:52:20: minimize reaction_forces(width, height, imposed_dplt)
INFO - 16:52:20: with respect to height, imposed_dplt, width
INFO - 16:52:20: over the design space:
INFO - 16:52:20: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:20: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:20: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:20: | width | -inf | None | inf | float |
INFO - 16:52:20: | height | -inf | None | inf | float |
INFO - 16:52:20: | imposed_dplt | -inf | None | inf | float |
INFO - 16:52:20: +--------------+-------------+-------+-------------+-------+
INFO - 16:52:20: Solving optimization problem with algorithm CustomDOE:
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 17%|█▋ | 1/6 [00:00<00:00, 88.90 it/sec, obj=-2.42e+3]
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 33%|███▎ | 2/6 [00:00<00:00, 94.79 it/sec, obj=-2.33e+3]
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 50%|█████ | 3/6 [00:00<00:00, 97.05 it/sec, obj=-2.21e+3]
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 67%|██████▋ | 4/6 [00:00<00:00, 98.05 it/sec, obj=-2.29e+3]
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 83%|████████▎ | 5/6 [00:00<00:00, 99.05 it/sec, obj=-2.09e+3]
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: Current root directory of job directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/default_archive.
INFO - 16:52:20: Removing job directory: default_archive/BendingTestAnalytical/Cantilever/1
INFO - 16:52:20: 100%|██████████| 6/6 [00:00<00:00, 99.42 it/sec, obj=-2.28e+3]
INFO - 16:52:20: Optimization result:
INFO - 16:52:20: Optimizer info:
INFO - 16:52:20: Status: None
INFO - 16:52:20: Message: None
INFO - 16:52:20: Number of calls to the objective function by the optimizer: 6
INFO - 16:52:20: Solution:
INFO - 16:52:20: Objective: -2418.719793402425
INFO - 16:52:20: Design space:
INFO - 16:52:20: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:20: | Name | Lower bound | Value | Upper bound | Type |
INFO - 16:52:20: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:20: | width | -inf | 30.9337158203125 | inf | float |
INFO - 16:52:20: | height | -inf | 40.67919921875 | inf | float |
INFO - 16:52:20: | imposed_dplt | -inf | -4.7789306640625 | inf | float |
INFO - 16:52:20: +--------------+-------------+------------------+-------------+-------+
INFO - 16:52:20: *** End DOEScenario execution (time: 0:00:00.064216) ***
The reference data for batch 3: width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
0 30.933716 40.679199 -4.778931 -4.778931 -2491.281387 600.0 3
1 29.584717 39.872437 -5.100830 -5.100830 -2394.800695 600.0 3
2 30.167847 38.632324 -5.236938 -5.236938 -2280.431717 600.0 3
3 30.303345 39.255249 -5.132080 -5.132080 -2355.157620 600.0 3
4 29.017822 38.655273 -5.140381 -5.140381 -2156.895678 600.0 3
5 30.684814 38.794678 -5.226318 -5.226318 -2344.113226 600.0 3
Then the model to validate is created:
model_name = "BendingTestAnalytical"
load_case = "Cantilever"
model = create_model(
model_name,
load_case,
model_options=IntegratedModelSettings(
directory_archive_root=f"../../../{EXAMPLE_RUNS_DIR_NAME}/archive/stochastic_validation_case",
directory_scratch_root=f"../../../{EXAMPLE_RUNS_DIR_NAME}/scratch/stochastic_validation_case",
cache_file_path=f"../../../{EXAMPLE_RUNS_DIR_NAME}/caches/stochastic_validation_case/{model_name}_{load_case}.hdf",
),
)
Out:
INFO - 16:52:20: Found 30 entries in the cache file : ../../../model_runs/caches/stochastic_validation_case/BendingTestAnalytical_Cantilever.hdf node : node
Model input uncertainty are captured in the stochastic material properties, compatible with the model:
material = Material.from_json(MATERIAL_LIB_DIR / "Ta6v.json")
print("The stochastic material: ", material)
Out:
The stochastic material: Ta6v
Material relations:
Ta6v_elastic_iso
young_modulus
Default value: 210000.0
Distribution:
Normal
Parameters:
{
"loc": 0.0,
"location": 0.0,
"lower": -1000000000000.0,
"lower_bound": 190000.0,
"mean": 0.0,
"mode": 0.0,
"mu": 210000.0,
"name": "Normal",
"rate": 1.0,
"scale": 1.0,
"shape": 1.0,
"sigma": 100.0,
"upper": 1000000000000.0,
"upper_bound": 230000.0
}
nu_p
Default value: 0.3
Distribution:
Normal
Parameters:
{
"loc": 0.0,
"location": 0.0,
"lower": -1000000000000.0,
"lower_bound": -1000000000000.0,
"mean": 0.0,
"mode": 0.0,
"mu": 0.3,
"name": "Normal",
"rate": 1.0,
"scale": 1.0,
"shape": 1.0,
"sigma": 0.02,
"upper": 1000000000000.0,
"upper_bound": 1000000000000.0
}
All inputs to a stochastic validation are now prepared: the model, the reference data and the uncertain input space. We can define and run the three validation points corresponding to the three batches of reference data, and gather the results in a validation case result.
results = []
for batch, reference_data in zip(
[1, 2, 3],
[
ReaderFileDataFrame()
.execute(
settings=ReaderFileDataFrameSettings(
file_name=f"reference_validation_bending_test_cantilever_{batch}.csv",
variable_names=[
"width",
"height",
"imposed_dplt",
"maximum_dplt",
"reaction_forces",
"nominal_length",
"batch",
],
variable_names_to_group_names={
"width": IODataset.INPUT_GROUP,
"height": IODataset.INPUT_GROUP,
"imposed_dplt": IODataset.INPUT_GROUP,
"reaction_forces": IODataset.OUTPUT_GROUP,
"maximum_dplt": IODataset.OUTPUT_GROUP,
},
)
)
.dataset
for batch in [1, 2, 3]
],
strict=False,
):
print(f"The reference data for batch {batch}: ", reference_data)
# If the reference data contain nominal values for the model inputs,
# it is possible to extract them as a dictionary and pass it to the tool.
# The model default inputs are then set to these nominal values.
# The ``read_nominal_values`` function allows to read
# the nominal values in the reference data, using averaging
# over the repeats for a given ``master`` variable:
nominal_data = read_nominal_values(
"batch",
csv_path=f"reference_validation_bending_test_cantilever_{batch}.csv",
master_value=batch,
additional_names=["nominal_length"],
name_remapping={"nominal_length": "length"},
output_type=NominalValuesOutputType.DICTIONARY,
)
# Otherwise, the user can define the nominal values as a dictionary,
# and pass it to the tool.
result = StochasticValidationPoint().execute(
inputs=StochasticValidationPointInputs(
model=model,
measured_data=reference_data,
uncertain_input_space=material.to_parameter_space(),
),
settings=StochasticValidationPointSettings(
metric_names=[
"AreaMetric",
"RelativeMeanToMean",
"AbsoluteRelativeErrorP90",
],
nominal_data=nominal_data,
),
)
print(f"The error dataset for batch {batch}: ", result.integrated_metrics)
results.append(result)
case_result = ValidationCaseResult()
case_result.set_from_point_results(results)
case_result.to_hdf5("validation_case_from_stochastic_points.hdf5")
case_result
Out:
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
The reference data for batch 1: GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 29.731689 40.774902 -5.124634 -5.124634 -2535.643178 600.0 1
1 28.844360 41.317749 -4.890503 -4.890503 -2442.594202 600.0 1
2 29.704102 40.414917 -5.015015 -5.015015 -2414.018681 600.0 1
3 29.590942 40.666260 -4.824341 -4.824341 -2356.819893 600.0 1
4 31.425171 39.082642 -4.799927 -4.799927 -2210.502014 600.0 1
5 29.982178 38.942017 -4.860352 -4.860352 -2112.579675 600.0 1
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/43
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/43/DOETool
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/43/StatisticsTool
INFO - 16:52:20: Found 30 entries in the cache file : ../../../model_runs/caches/stochastic_validation_case/BendingTestAnalytical_Cantilever.hdf node : node
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/43/StatisticsTool
INFO - 16:52:20: | Set goodness-of-fit criterion: Kolmogorov.
INFO - 16:52:20: | Set significance level of hypothesis test: 0.05.
INFO - 16:52:20: Fit different distributions (Uniform, Normal, LogNormal, Exponential, WeibullMin) per variable and compute the goodness-of-fit criterion.
INFO - 16:52:20: | Fit different distributions for height.
INFO - 16:52:20: | Fit different distributions for imposed_dplt.
INFO - 16:52:20: | Fit different distributions for width.
INFO - 16:52:20: Select the best distribution for each variable.
INFO - 16:52:20: | The best distribution for height[0] is WeibullMin([4629.87,6628.98,-4589.26]).
INFO - 16:52:20: | The best distribution for imposed_dplt[0] is WeibullMin([614.693,7507.78,-619.56]).
INFO - 16:52:20: | The best distribution for width[0] is Normal([29.8797,0.849357]).
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/43/DOETool
INFO - 16:52:20:
INFO - 16:52:20: *** Start DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution ***
INFO - 16:52:20: DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10
INFO - 16:52:20: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:20:
INFO - 16:52:20: Load case:
INFO - 16:52:20: Load case Cantilever: A cantilever load case.
INFO - 16:52:20:
INFO - 16:52:20: Boundary condition variables:
INFO - 16:52:20: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:20:
INFO - 16:52:20: Plot parameters:
INFO - 16:52:20: {
INFO - 16:52:20: "curves": []
INFO - 16:52:20: }
INFO - 16:52:20: Load:
INFO - 16:52:20: Load(direction='', sign='', type='')
INFO - 16:52:20:
INFO - 16:52:20: Default values:
INFO - 16:52:20:
INFO - 16:52:20: Default geometrical variables:
INFO - 16:52:20: {"height": [40.21449132433409], "length": [600.0], "width": [29.879740397135468]}
INFO - 16:52:20:
INFO - 16:52:20: Default numerical variables:
INFO - 16:52:20: {}
INFO - 16:52:20:
INFO - 16:52:20: Default boundary conditions variables:
INFO - 16:52:20: {"imposed_dplt": [-4.914325437637914], "relative_dplt_location": [1.0]}
INFO - 16:52:20:
INFO - 16:52:20: Default material variables:
INFO - 16:52:20: {"nu_p": [0.3000000000000006], "young_modulus": [209999.99999999357]}
INFO - 16:52:20: model_inputs:
INFO - 16:52:20: [
INFO - 16:52:20: "length",
INFO - 16:52:20: "width",
INFO - 16:52:20: "height",
INFO - 16:52:20: "imposed_dplt",
INFO - 16:52:20: "relative_dplt_location",
INFO - 16:52:20: "young_modulus",
INFO - 16:52:20: "nu_p"
INFO - 16:52:20: ]
INFO - 16:52:20: model_outputs:
INFO - 16:52:20: [
INFO - 16:52:20: "reaction_forces",
INFO - 16:52:20: "maximum_dplt",
INFO - 16:52:20: "dplt_grid",
INFO - 16:52:20: "location_max_dplt",
INFO - 16:52:20: "dplt",
INFO - 16:52:20: "moment",
INFO - 16:52:20: "moment_grid",
INFO - 16:52:20: "dplt_at_force_location",
INFO - 16:52:20: "error_code",
INFO - 16:52:20: "model",
INFO - 16:52:20: "load_case",
INFO - 16:52:20: "description",
INFO - 16:52:20: "job_name",
INFO - 16:52:20: "persistent_result_files",
INFO - 16:52:20: "n_cpus",
INFO - 16:52:20: "date",
INFO - 16:52:20: "cpu_time",
INFO - 16:52:20: "user",
INFO - 16:52:20: "machine",
INFO - 16:52:20: "vims_git_version",
INFO - 16:52:20: "directory_archive_root",
INFO - 16:52:20: "directory_archive_job",
INFO - 16:52:20: "directory_scratch_root",
INFO - 16:52:20: "directory_scratch_job"
INFO - 16:52:20: ]
INFO - 16:52:20: MDO formulation: DisciplinaryOpt
INFO - 16:52:20: Optimization problem:
INFO - 16:52:20: minimize maximum_dplt(young_modulus, nu_p, height, imposed_dplt, width)
INFO - 16:52:20: with respect to height, imposed_dplt, nu_p, width, young_modulus
INFO - 16:52:20: over the design space:
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:20: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:20: | height | WeibullMin(4629.8726738524065, 6628.982254585978, -4589.255142628196) | Trunc(x) |
INFO - 16:52:20: | imposed_dplt | WeibullMin(614.6930352591813, 7507.780790301626, -619.5601124498656) | Trunc(x) |
INFO - 16:52:20: | width | Normal(29.879740397135414, 0.8493565866604488) | Trunc(x) |
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: Solving optimization problem with algorithm OT_OPT_LHS:
INFO - 16:52:20: 10%|â–ˆ | 1/10 [00:00<00:00, 42.98 it/sec, obj=-4.94]
INFO - 16:52:20: 20%|██ | 2/10 [00:00<00:00, 51.60 it/sec, obj=-4.92]
INFO - 16:52:20: 30%|███ | 3/10 [00:00<00:00, 55.31 it/sec, obj=-5.1]
INFO - 16:52:20: 40%|████ | 4/10 [00:00<00:00, 57.78 it/sec, obj=-4.85]
INFO - 16:52:20: 50%|█████ | 5/10 [00:00<00:00, 59.28 it/sec, obj=-4.82]
INFO - 16:52:20: 60%|██████ | 6/10 [00:00<00:00, 57.53 it/sec, obj=-5.02]
INFO - 16:52:20: 70%|███████ | 7/10 [00:00<00:00, 58.42 it/sec, obj=-4.86]
INFO - 16:52:20: 80%|████████ | 8/10 [00:00<00:00, 59.43 it/sec, obj=-4.88]
INFO - 16:52:20: 90%|█████████ | 9/10 [00:00<00:00, 60.20 it/sec, obj=-4.74]
INFO - 16:52:20: 100%|██████████| 10/10 [00:00<00:00, 60.03 it/sec, obj=-4.98]
INFO - 16:52:20: Optimization result:
INFO - 16:52:20: Optimizer info:
INFO - 16:52:20: Status: None
INFO - 16:52:20: Message: None
INFO - 16:52:20: Number of calls to the objective function by the optimizer: 10
INFO - 16:52:20: Solution:
INFO - 16:52:20: Objective: -5.0970942904222065
INFO - 16:52:20: Design space:
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:20: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:20: | height | WeibullMin(4629.8726738524065, 6628.982254585978, -4589.255142628196) | Trunc(x) |
INFO - 16:52:20: | imposed_dplt | WeibullMin(614.6930352591813, 7507.780790301626, -619.5601124498656) | Trunc(x) |
INFO - 16:52:20: | width | Normal(29.879740397135414, 0.8493565866604488) | Trunc(x) |
INFO - 16:52:20: +---------------+-----------------------------------------------------------------------+--------------------+
INFO - 16:52:20: *** End DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution (time: 0:00:00.174562) ***
The error dataset for batch 1: {'AreaMetric': {'maximum_dplt': 0.03397960853752169, 'reaction_forces': 29.672259968752794}, 'RelativeMeanToMean': {'maximum_dplt': 0.0015794191770066874, 'reaction_forces': 0.008601397009366813}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.05199402730033657, 'reaction_forces': 0.15075655407298094}}
The reference data for batch 2: GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 29.133667 41.950806 -5.116211 -5.116211 -2728.162501 600.0 2
1 29.151123 40.318115 -5.115479 -5.115479 -2422.969487 600.0 2
2 28.687744 40.479980 -5.211182 -5.211182 -2458.437755 600.0 2
3 30.194824 40.375000 -5.015015 -5.015015 -2470.859447 600.0 2
4 31.169434 38.259888 -4.978882 -4.978882 -2154.753161 600.0 2
5 30.858887 41.138062 -5.092285 -5.092285 -2712.252782 600.0 2
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/44
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/44/DOETool
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/44/StatisticsTool
INFO - 16:52:20: Found 30 entries in the cache file : ../../../model_runs/caches/stochastic_validation_case/BendingTestAnalytical_Cantilever.hdf node : node
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/44/StatisticsTool
INFO - 16:52:20: | Set goodness-of-fit criterion: Kolmogorov.
INFO - 16:52:20: | Set significance level of hypothesis test: 0.05.
INFO - 16:52:20: Fit different distributions (Uniform, Normal, LogNormal, Exponential, WeibullMin) per variable and compute the goodness-of-fit criterion.
INFO - 16:52:20: | Fit different distributions for height.
INFO - 16:52:20: | Fit different distributions for imposed_dplt.
INFO - 16:52:20: | Fit different distributions for width.
INFO - 16:52:20: Select the best distribution for each variable.
INFO - 16:52:20: | The best distribution for height[0] is WeibullMin([24.4008,26.6566,16.5198]).
INFO - 16:52:20: | The best distribution for imposed_dplt[0] is WeibullMin([0.237662,3.17349,-5.30049]).
INFO - 16:52:20: | The best distribution for width[0] is WeibullMin([1.36474,0.891939,28.6877]).
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:20: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/44/DOETool
INFO - 16:52:20:
INFO - 16:52:20: *** Start DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution ***
INFO - 16:52:20: DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10
INFO - 16:52:20: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:20:
INFO - 16:52:20: Load case:
INFO - 16:52:20: Load case Cantilever: A cantilever load case.
INFO - 16:52:20:
INFO - 16:52:20: Boundary condition variables:
INFO - 16:52:20: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:20:
INFO - 16:52:20: Plot parameters:
INFO - 16:52:20: {
INFO - 16:52:20: "curves": []
INFO - 16:52:20: }
INFO - 16:52:20: Load:
INFO - 16:52:20: Load(direction='', sign='', type='')
INFO - 16:52:20:
INFO - 16:52:20: Default values:
INFO - 16:52:20:
INFO - 16:52:20: Default geometrical variables:
INFO - 16:52:20: {"height": [40.42508724536511], "length": [600.0], "width": [30.13086067658741]}
INFO - 16:52:20:
INFO - 16:52:20: Default numerical variables:
INFO - 16:52:20: {}
INFO - 16:52:20:
INFO - 16:52:20: Default boundary conditions variables:
INFO - 16:52:20: {"imposed_dplt": [-5.087709775354002], "relative_dplt_location": [1.0]}
INFO - 16:52:20:
INFO - 16:52:20: Default material variables:
INFO - 16:52:20: {"nu_p": [0.3000000000000006], "young_modulus": [209999.99999999357]}
INFO - 16:52:20: model_inputs:
INFO - 16:52:20: [
INFO - 16:52:20: "length",
INFO - 16:52:20: "width",
INFO - 16:52:20: "height",
INFO - 16:52:20: "imposed_dplt",
INFO - 16:52:20: "relative_dplt_location",
INFO - 16:52:20: "young_modulus",
INFO - 16:52:20: "nu_p"
INFO - 16:52:20: ]
INFO - 16:52:20: model_outputs:
INFO - 16:52:20: [
INFO - 16:52:20: "reaction_forces",
INFO - 16:52:20: "maximum_dplt",
INFO - 16:52:20: "dplt_grid",
INFO - 16:52:20: "location_max_dplt",
INFO - 16:52:20: "dplt",
INFO - 16:52:20: "moment",
INFO - 16:52:20: "moment_grid",
INFO - 16:52:20: "dplt_at_force_location",
INFO - 16:52:20: "error_code",
INFO - 16:52:20: "model",
INFO - 16:52:20: "load_case",
INFO - 16:52:20: "description",
INFO - 16:52:20: "job_name",
INFO - 16:52:20: "persistent_result_files",
INFO - 16:52:20: "n_cpus",
INFO - 16:52:20: "date",
INFO - 16:52:20: "cpu_time",
INFO - 16:52:20: "user",
INFO - 16:52:20: "machine",
INFO - 16:52:20: "vims_git_version",
INFO - 16:52:20: "directory_archive_root",
INFO - 16:52:20: "directory_archive_job",
INFO - 16:52:20: "directory_scratch_root",
INFO - 16:52:20: "directory_scratch_job"
INFO - 16:52:20: ]
INFO - 16:52:20: MDO formulation: DisciplinaryOpt
INFO - 16:52:20: Optimization problem:
INFO - 16:52:20: minimize maximum_dplt(young_modulus, nu_p, height, imposed_dplt, width)
INFO - 16:52:20: with respect to height, imposed_dplt, nu_p, width, young_modulus
INFO - 16:52:20: over the design space:
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:20: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:20: | height | WeibullMin(24.400836747901753, 26.656560640854106, 16.519780607184845) | Trunc(x) |
INFO - 16:52:20: | imposed_dplt | WeibullMin(0.23766235198634167, 3.1734928201669437, -5.300487581777769) | Trunc(x) |
INFO - 16:52:20: | width | WeibullMin(1.3647429193372944, 0.8919393916386209, 28.687744140624996) | Trunc(x) |
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: Solving optimization problem with algorithm OT_OPT_LHS:
INFO - 16:52:20: 10%|â–ˆ | 1/10 [00:00<00:00, 46.72 it/sec, obj=-5.12]
INFO - 16:52:20: 20%|██ | 2/10 [00:00<00:00, 51.87 it/sec, obj=-5.11]
INFO - 16:52:20: 30%|███ | 3/10 [00:00<00:00, 54.76 it/sec, obj=-5.2]
INFO - 16:52:20: 40%|████ | 4/10 [00:00<00:00, 56.11 it/sec, obj=-5.04]
INFO - 16:52:20: 50%|█████ | 5/10 [00:00<00:00, 57.27 it/sec, obj=-5.02]
INFO - 16:52:20: 60%|██████ | 6/10 [00:00<00:00, 57.95 it/sec, obj=-5.17]
INFO - 16:52:20: 70%|███████ | 7/10 [00:00<00:00, 58.56 it/sec, obj=-5.06]
INFO - 16:52:20: 80%|████████ | 8/10 [00:00<00:00, 59.02 it/sec, obj=-5.07]
INFO - 16:52:20: 90%|█████████ | 9/10 [00:00<00:00, 58.99 it/sec, obj=-4.92]
INFO - 16:52:20: 100%|██████████| 10/10 [00:00<00:00, 58.88 it/sec, obj=-5.15]
INFO - 16:52:20: Optimization result:
INFO - 16:52:20: Optimizer info:
INFO - 16:52:20: Status: None
INFO - 16:52:20: Message: None
INFO - 16:52:20: Number of calls to the objective function by the optimizer: 10
INFO - 16:52:20: Solution:
INFO - 16:52:20: Objective: -5.202443714648249
INFO - 16:52:20: Design space:
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:20: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:20: | height | WeibullMin(24.400836747901753, 26.656560640854106, 16.519780607184845) | Trunc(x) |
INFO - 16:52:20: | imposed_dplt | WeibullMin(0.23766235198634167, 3.1734928201669437, -5.300487581777769) | Trunc(x) |
INFO - 16:52:20: | width | WeibullMin(1.3647429193372944, 0.8919393916386209, 28.687744140624996) | Trunc(x) |
INFO - 16:52:20: +---------------+-------------------------------------------------------------------------+--------------------+
INFO - 16:52:20: *** End DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution (time: 0:00:00.177625) ***
The error dataset for batch 2: {'AreaMetric': {'maximum_dplt': 0.027499902644314598, 'reaction_forces': 66.16607054491195}, 'RelativeMeanToMean': {'maximum_dplt': 0.00044560463591247377, 'reaction_forces': 0.013458453272939245}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.03547883304952189, 'reaction_forces': 0.19733065258156343}}
The reference data for batch 3: GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 30.933716 40.679199 -4.778931 -4.778931 -2491.281387 600.0 3
1 29.584717 39.872437 -5.100830 -5.100830 -2394.800695 600.0 3
2 30.167847 38.632324 -5.236938 -5.236938 -2280.431717 600.0 3
3 30.303345 39.255249 -5.132080 -5.132080 -2355.157620 600.0 3
4 29.017822 38.655273 -5.140381 -5.140381 -2156.895678 600.0 3
5 30.684814 38.794678 -5.226318 -5.226318 -2344.113226 600.0 3
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/45
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/45/DOETool
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/45/StatisticsTool
INFO - 16:52:21: Found 30 entries in the cache file : ../../../model_runs/caches/stochastic_validation_case/BendingTestAnalytical_Cantilever.hdf node : node
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/45/StatisticsTool
INFO - 16:52:21: | Set goodness-of-fit criterion: Kolmogorov.
INFO - 16:52:21: | Set significance level of hypothesis test: 0.05.
INFO - 16:52:21: Fit different distributions (Uniform, Normal, LogNormal, Exponential, WeibullMin) per variable and compute the goodness-of-fit criterion.
INFO - 16:52:21: | Fit different distributions for height.
INFO - 16:52:21: | Fit different distributions for imposed_dplt.
INFO - 16:52:21: | Fit different distributions for width.
INFO - 16:52:21: Select the best distribution for each variable.
INFO - 16:52:21: | The best distribution for height[0] is Normal([39.3149,0.818213]).
INFO - 16:52:21: | The best distribution for imposed_dplt[0] is WeibullMin([0.222802,0.679502,-5.23694]).
INFO - 16:52:21: | The best distribution for width[0] is WeibullMin([293.614,562.951,-263.192]).
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/pydantic/main.py:209: DeprecationWarning:
Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case/StochasticValidationPoint/45/DOETool
INFO - 16:52:21:
INFO - 16:52:21: *** Start DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution ***
INFO - 16:52:21: DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10
INFO - 16:52:21: Disciplines: Model BendingTestAnalytical: An analytical model for the bending of a parallelepipedic beam
INFO - 16:52:21:
INFO - 16:52:21: Load case:
INFO - 16:52:21: Load case Cantilever: A cantilever load case.
INFO - 16:52:21:
INFO - 16:52:21: Boundary condition variables:
INFO - 16:52:21: ['imposed_dplt', 'relative_dplt_location']
INFO - 16:52:21:
INFO - 16:52:21: Plot parameters:
INFO - 16:52:21: {
INFO - 16:52:21: "curves": []
INFO - 16:52:21: }
INFO - 16:52:21: Load:
INFO - 16:52:21: Load(direction='', sign='', type='')
INFO - 16:52:21:
INFO - 16:52:21: Default values:
INFO - 16:52:21:
INFO - 16:52:21: Default geometrical variables:
INFO - 16:52:21: {"height": [39.31486002604183], "length": [600.0], "width": [30.12170869962808]}
INFO - 16:52:21:
INFO - 16:52:21: Default numerical variables:
INFO - 16:52:21: {}
INFO - 16:52:21:
INFO - 16:52:21: Default boundary conditions variables:
INFO - 16:52:21: {"imposed_dplt": [-4.946543675172578], "relative_dplt_location": [1.0]}
INFO - 16:52:21:
INFO - 16:52:21: Default material variables:
INFO - 16:52:21: {"nu_p": [0.3000000000000006], "young_modulus": [209999.99999999357]}
INFO - 16:52:21: model_inputs:
INFO - 16:52:21: [
INFO - 16:52:21: "length",
INFO - 16:52:21: "width",
INFO - 16:52:21: "height",
INFO - 16:52:21: "imposed_dplt",
INFO - 16:52:21: "relative_dplt_location",
INFO - 16:52:21: "young_modulus",
INFO - 16:52:21: "nu_p"
INFO - 16:52:21: ]
INFO - 16:52:21: model_outputs:
INFO - 16:52:21: [
INFO - 16:52:21: "reaction_forces",
INFO - 16:52:21: "maximum_dplt",
INFO - 16:52:21: "dplt_grid",
INFO - 16:52:21: "location_max_dplt",
INFO - 16:52:21: "dplt",
INFO - 16:52:21: "moment",
INFO - 16:52:21: "moment_grid",
INFO - 16:52:21: "dplt_at_force_location",
INFO - 16:52:21: "error_code",
INFO - 16:52:21: "model",
INFO - 16:52:21: "load_case",
INFO - 16:52:21: "description",
INFO - 16:52:21: "job_name",
INFO - 16:52:21: "persistent_result_files",
INFO - 16:52:21: "n_cpus",
INFO - 16:52:21: "date",
INFO - 16:52:21: "cpu_time",
INFO - 16:52:21: "user",
INFO - 16:52:21: "machine",
INFO - 16:52:21: "vims_git_version",
INFO - 16:52:21: "directory_archive_root",
INFO - 16:52:21: "directory_archive_job",
INFO - 16:52:21: "directory_scratch_root",
INFO - 16:52:21: "directory_scratch_job"
INFO - 16:52:21: ]
INFO - 16:52:21: MDO formulation: DisciplinaryOpt
INFO - 16:52:21: Optimization problem:
INFO - 16:52:21: minimize maximum_dplt(young_modulus, nu_p, height, imposed_dplt, width)
INFO - 16:52:21: with respect to height, imposed_dplt, nu_p, width, young_modulus
INFO - 16:52:21: over the design space:
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:21: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:21: | height | Normal(39.314860026041664, 0.8182133789449563) | Trunc(x) |
INFO - 16:52:21: | imposed_dplt | WeibullMin(0.2228020469551345, 0.6795017932457235, -5.236938476562502) | Trunc(x) |
INFO - 16:52:21: | width | WeibullMin(293.6140381339876, 562.9507349049163, -263.192190192467) | Trunc(x) |
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: Solving optimization problem with algorithm OT_OPT_LHS:
INFO - 16:52:21: 10%|â–ˆ | 1/10 [00:00<00:00, 59.93 it/sec, obj=-5.17]
INFO - 16:52:21: 20%|██ | 2/10 [00:00<00:00, 64.09 it/sec, obj=-5.15]
INFO - 16:52:21: 30%|███ | 3/10 [00:00<00:00, 65.70 it/sec, obj=-5.23]
INFO - 16:52:21: 40%|████ | 4/10 [00:00<00:00, 66.73 it/sec, obj=-4.91]
INFO - 16:52:21: 50%|█████ | 5/10 [00:00<00:00, 66.08 it/sec, obj=-4.75]
INFO - 16:52:21: 60%|██████ | 6/10 [00:00<00:00, 66.32 it/sec, obj=-5.22]
INFO - 16:52:21: 70%|███████ | 7/10 [00:00<00:00, 66.64 it/sec, obj=-5]
INFO - 16:52:21: 80%|████████ | 8/10 [00:00<00:00, 66.98 it/sec, obj=-5.05]
INFO - 16:52:21: 90%|█████████ | 9/10 [00:00<00:00, 67.30 it/sec, obj=-3.22]
INFO - 16:52:21: 100%|██████████| 10/10 [00:00<00:00, 67.09 it/sec, obj=-5.21]
INFO - 16:52:21: Optimization result:
INFO - 16:52:21: Optimizer info:
INFO - 16:52:21: Status: None
INFO - 16:52:21: Message: None
INFO - 16:52:21: Number of calls to the objective function by the optimizer: 10
INFO - 16:52:21: Solution:
INFO - 16:52:21: Objective: -5.233374019519989
INFO - 16:52:21: Design space:
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: | Name | Initial distribution | Transformation(x)= |
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: | young_modulus | Normal(mu=210000.0, sigma=100.0) | Trunc(x) |
INFO - 16:52:21: | nu_p | Normal(mu=0.3, sigma=0.02) | Trunc(x) |
INFO - 16:52:21: | height | Normal(39.314860026041664, 0.8182133789449563) | Trunc(x) |
INFO - 16:52:21: | imposed_dplt | WeibullMin(0.2228020469551345, 0.6795017932457235, -5.236938476562502) | Trunc(x) |
INFO - 16:52:21: | width | WeibullMin(293.6140381339876, 562.9507349049163, -263.192190192467) | Trunc(x) |
INFO - 16:52:21: +---------------+------------------------------------------------------------------------+--------------------+
INFO - 16:52:21: *** End DOE_BendingTestAnalytical_Cantilever_OT_OPT_LHS_10 execution (time: 0:00:00.156758) ***
The error dataset for batch 3: {'AreaMetric': {'maximum_dplt': 0.21661668165418124, 'reaction_forces': 174.06983434027282}, 'RelativeMeanToMean': {'maximum_dplt': 0.04123406491524969, 'reaction_forces': 0.0698326433624655}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.2338413100113296, 'reaction_forces': 0.2690870622991148}}
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
ValidationCaseResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': [], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95, 'output_names': [], 'n_samples': 10, 'algo': 'OT_OPT_LHS', 'metric_names': ['AreaMetric', 'RelativeMeanToMean', 'AbsoluteRelativeErrorP90'], 'simulated_uncertainties': {}, 'nominal_data': {'batch': array([1]), 'length': array([600.])}, 'typeb_uncertainties': {}}, report={'title': 'Validation of BendingTestAnalytical Cantilever', 'simulated_uncertainties': {}, 'typeb_uncertainties': {}, 'measured_output_names': ['maximum_dplt', 'reaction_forces'], 'measured_data_statistics': "StatisticsResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': ['height', 'imposed_dplt', 'width'], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95}, report={}, model=None), analysis=StatisticsTool\n n_samples: 6\n n_variables: 3\n variables: height, imposed_dplt, width, best_fitting_distributions={'height': 'WeibullMin', 'imposed_dplt': 'WeibullMin', 'width': 'Normal'}, statistics=OrderedDict([('maximum', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('minimum', {'height': array([-4589.25514263]), 'imposed_dplt': array([-619.56011245]), 'width': array([-inf])}), ('range', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('mean', {'height': array([40.21449132]), 'imposed_dplt': array([-4.91432544]), 'width': array([29.8797404])}), ('median', {'height': array([40.36155509]), 'imposed_dplt': array([-4.89708439]), 'width': array([29.8797404])}), ('compute_standard_deviation', {'height': array([0.89559315]), 'imposed_dplt': array([0.10498937]), 'width': array([0.84935659])}), ('variance', {'height': array([0.8020871]), 'imposed_dplt': array([0.01102277]), 'width': array([0.72140661])}), ('percentile_5', {'height': array([38.54352575]), 'imposed_dplt': array([-5.11021125]), 'width': array([28.48267313])}), ('percentile_10', {'height': array([39.04607643]), 'imposed_dplt': array([-5.05129645]), 'width': array([28.79124613])}), ('percentile_25', {'height': array([39.74744092]), 'imposed_dplt': array([-4.96907565]), 'width': array([29.30685809])}), ('percentile_50', {'height': array([40.36155509]), 'imposed_dplt': array([-4.89708439]), 'width': array([29.8797404])}), ('percentile_75', {'height': array([40.84566765]), 'imposed_dplt': array([-4.84033371]), 'width': array([30.45262271])}), ('percentile_90', {'height': array([41.20008022]), 'imposed_dplt': array([-4.79878772]), 'width': array([30.96823466])}), ('percentile_95', {'height': array([41.38390292]), 'imposed_dplt': array([-4.77723925]), 'width': array([31.27680766])}), ('tolerance_interval', {'height': [Bounds(lower=array([39.47849905]), upper=array([41.19468511]))], 'imposed_dplt': [Bounds(lower=array([-5.00060347]), upper=array([-4.79942015]))], 'width': [Bounds(lower=array([29.75943725]), upper=array([30.00004354]))]}), ('a_value', {'height': array([[36.47046503]]), 'imposed_dplt': array([[-5.35324731]]), 'width': array([[27.20512676]])}), ('b_value', {'height': array([[38.26699932]]), 'imposed_dplt': array([[-5.1426292]]), 'width': array([[28.09253139]])})]))"}, model=ModelDescription(name='BendingTestAnalytical', summary=' An analytical model for the bending of a parallelepipedic beam', load_case=Beam_Cantilever(name='Cantilever', domain='Beam', summary='A cantilever load case.', plot_parameters=PlotParameters(curves=[]), bc_variable_names=['imposed_dplt', 'relative_dplt_location'], load=Load(direction='', sign='', type='')), dataflow={'model_inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'model_outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code', 'model', 'load_case', 'description', 'job_name', 'persistent_result_files', 'n_cpus', 'date', 'cpu_time', 'user', 'machine', 'vims_git_version', 'directory_archive_root', 'directory_archive_job', 'directory_scratch_root', 'directory_scratch_job'], 'PreBendingTestAnalytical_Cantilever': {'inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary']}, 'RunBendingTestAnalytical': {'inputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary', 'length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces']}, 'PostBendingTestAnalytical_Cantilever': {'inputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces'], 'outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code']}, 'subroutine_names': []}, default_inputs={<InputGroupNames.NUMERICAL_VARS: 'numerical variables'>: {}, <InputGroupNames.BC_VARS: 'boundary conditions variables'>: {'imposed_dplt': [-5.0], 'relative_dplt_location': [1.0]}, <InputGroupNames.GEOMETRICAL_VARS: 'geometrical variables'>: {'length': [600.0], 'width': [30.0], 'height': [40.0]}, <InputGroupNames.MATERIAL_VARS: 'material variables'>: {'young_modulus': [210000.0], 'nu_p': [0.3]}}, curves=[('dplt_grid', 'dplt'), ('moment_grid', 'moment')], verbose=False)), element_wise_metrics=GROUP Nominal AbsoluteRelativeErrorP90 ... ReferenceInputs ReferenceOutputs
VARIABLE batch length maximum_dplt reaction_forces ... height imposed_dplt maximum_dplt reaction_forces
COMPONENT 0 0 0 0 ... 0 0 0 0
0 [1] [600.0] 0.051994 0.150757 ... 40.199748 -4.919128 -4.919128 -2345.359607
1 [2] [600.0] 0.035479 0.197331 ... 40.420308 -5.088175 -5.088175 -2491.239189
2 [3] [600.0] 0.233841 0.269087 ... 39.314860 -5.102580 -5.102580 -2337.113387
[3 rows x 20 columns], integrated_metrics=defaultdict(<class 'dict'>, {'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.10710472345372934, 'reaction_forces': 0.20572475631788642}, 'AreaMetric': {'maximum_dplt': 0.09269873094533916, 'reaction_forces': 89.96938828464586}, 'RelativeMeanToMean': {'maximum_dplt': 0.01441969624272295, 'reaction_forces': 0.030630831214923854}}), stochastic_point_results=[ValidationPointResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': [], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95, 'output_names': [], 'n_samples': 10, 'algo': 'OT_OPT_LHS', 'metric_names': ['AreaMetric', 'RelativeMeanToMean', 'AbsoluteRelativeErrorP90'], 'simulated_uncertainties': {}, 'nominal_data': {'batch': array([1]), 'length': array([600.])}, 'typeb_uncertainties': {}}, report={'title': 'Validation of BendingTestAnalytical Cantilever', 'simulated_uncertainties': {}, 'typeb_uncertainties': {}, 'measured_output_names': ['maximum_dplt', 'reaction_forces'], 'measured_data_statistics': "StatisticsResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': ['height', 'imposed_dplt', 'width'], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95}, report={}, model=None), analysis=StatisticsTool\n n_samples: 6\n n_variables: 3\n variables: height, imposed_dplt, width, best_fitting_distributions={'height': 'WeibullMin', 'imposed_dplt': 'WeibullMin', 'width': 'Normal'}, statistics=OrderedDict([('maximum', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('minimum', {'height': array([-4589.25514263]), 'imposed_dplt': array([-619.56011245]), 'width': array([-inf])}), ('range', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('mean', {'height': array([40.21449132]), 'imposed_dplt': array([-4.91432544]), 'width': array([29.8797404])}), ('median', {'height': array([40.36155509]), 'imposed_dplt': array([-4.89708439]), 'width': array([29.8797404])}), ('compute_standard_deviation', {'height': array([0.89559315]), 'imposed_dplt': array([0.10498937]), 'width': array([0.84935659])}), ('variance', {'height': array([0.8020871]), 'imposed_dplt': array([0.01102277]), 'width': array([0.72140661])}), ('percentile_5', {'height': array([38.54352575]), 'imposed_dplt': array([-5.11021125]), 'width': array([28.48267313])}), ('percentile_10', {'height': array([39.04607643]), 'imposed_dplt': array([-5.05129645]), 'width': array([28.79124613])}), ('percentile_25', {'height': array([39.74744092]), 'imposed_dplt': array([-4.96907565]), 'width': array([29.30685809])}), ('percentile_50', {'height': array([40.36155509]), 'imposed_dplt': array([-4.89708439]), 'width': array([29.8797404])}), ('percentile_75', {'height': array([40.84566765]), 'imposed_dplt': array([-4.84033371]), 'width': array([30.45262271])}), ('percentile_90', {'height': array([41.20008022]), 'imposed_dplt': array([-4.79878772]), 'width': array([30.96823466])}), ('percentile_95', {'height': array([41.38390292]), 'imposed_dplt': array([-4.77723925]), 'width': array([31.27680766])}), ('tolerance_interval', {'height': [Bounds(lower=array([39.47849905]), upper=array([41.19468511]))], 'imposed_dplt': [Bounds(lower=array([-5.00060347]), upper=array([-4.79942015]))], 'width': [Bounds(lower=array([29.75943725]), upper=array([30.00004354]))]}), ('a_value', {'height': array([[36.47046503]]), 'imposed_dplt': array([[-5.35324731]]), 'width': array([[27.20512676]])}), ('b_value', {'height': array([[38.26699932]]), 'imposed_dplt': array([[-5.1426292]]), 'width': array([[28.09253139]])})]))"}, model=ModelDescription(name='BendingTestAnalytical', summary=' An analytical model for the bending of a parallelepipedic beam', load_case=Beam_Cantilever(name='Cantilever', domain='Beam', summary='A cantilever load case.', plot_parameters=PlotParameters(curves=[]), bc_variable_names=['imposed_dplt', 'relative_dplt_location'], load=Load(direction='', sign='', type='')), dataflow={'model_inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'model_outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code', 'model', 'load_case', 'description', 'job_name', 'persistent_result_files', 'n_cpus', 'date', 'cpu_time', 'user', 'machine', 'vims_git_version', 'directory_archive_root', 'directory_archive_job', 'directory_scratch_root', 'directory_scratch_job'], 'PreBendingTestAnalytical_Cantilever': {'inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary']}, 'RunBendingTestAnalytical': {'inputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary', 'length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces']}, 'PostBendingTestAnalytical_Cantilever': {'inputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces'], 'outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code']}, 'subroutine_names': []}, default_inputs={<InputGroupNames.NUMERICAL_VARS: 'numerical variables'>: {}, <InputGroupNames.BC_VARS: 'boundary conditions variables'>: {'imposed_dplt': [-5.0], 'relative_dplt_location': [1.0]}, <InputGroupNames.GEOMETRICAL_VARS: 'geometrical variables'>: {'length': [600.0], 'width': [30.0], 'height': [40.0]}, <InputGroupNames.MATERIAL_VARS: 'material variables'>: {'young_modulus': [210000.0], 'nu_p': [0.3]}}, curves=[('dplt_grid', 'dplt'), ('moment_grid', 'moment')], verbose=False)), nominal_data={'batch': array([1]), 'length': array([600.])}, measured_data=GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 29.731689 40.774902 -5.124634 -5.124634 -2535.643178 600.0 1
1 28.844360 41.317749 -4.890503 -4.890503 -2442.594202 600.0 1
2 29.704102 40.414917 -5.015015 -5.015015 -2414.018681 600.0 1
3 29.590942 40.666260 -4.824341 -4.824341 -2356.819893 600.0 1
4 31.425171 39.082642 -4.799927 -4.799927 -2210.502014 600.0 1
5 29.982178 38.942017 -4.860352 -4.860352 -2112.579675 600.0 1, simulated_data=GROUP inputs outputs
VARIABLE young_modulus nu_p height imposed_dplt width maximum_dplt reaction_forces
COMPONENT 0 0 0 0 0 0 0
0 209961.744159 0.280202 41.322422 -4.937780 29.648245 -4.937780 -2510.235580
1 210026.296796 0.327193 40.329852 -4.918647 31.119893 -4.918647 -2440.751461
2 210013.264139 0.299666 38.811544 -5.097094 29.101894 -5.097094 -2107.946830
3 209946.421366 0.324960 39.289325 -4.845941 29.730807 -4.845941 -2123.260444
4 210270.957738 0.291460 40.491287 -4.824026 29.266630 -4.824026 -2281.038968
5 210104.507837 0.316615 40.942415 -5.020804 30.068855 -5.020804 -2519.603440
6 210070.375395 0.273124 39.597977 -4.864461 30.171610 -4.864461 -2215.661026
7 209802.120029 0.306318 40.594061 -4.876030 28.364563 -4.876030 -2246.602012
8 209987.410348 0.302707 40.977441 -4.744410 30.437961 -4.744410 -2414.970386
9 209874.402755 0.287067 40.115491 -4.984395 30.600530 -4.984395 -2391.792232, sample_to_sample_error=None, integrated_metrics={'AreaMetric': {'maximum_dplt': 0.03397960853752169, 'reaction_forces': 29.672259968752794}, 'RelativeMeanToMean': {'maximum_dplt': 0.0015794191770066874, 'reaction_forces': 0.008601397009366813}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.05199402730033657, 'reaction_forces': 0.15075655407298094}}), ValidationPointResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': [], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95, 'output_names': [], 'n_samples': 10, 'algo': 'OT_OPT_LHS', 'metric_names': ['AreaMetric', 'RelativeMeanToMean', 'AbsoluteRelativeErrorP90'], 'simulated_uncertainties': {}, 'nominal_data': {'batch': array([2]), 'length': array([600.])}, 'typeb_uncertainties': {}}, report={'title': 'Validation of BendingTestAnalytical Cantilever', 'simulated_uncertainties': {}, 'typeb_uncertainties': {}, 'measured_output_names': ['maximum_dplt', 'reaction_forces'], 'measured_data_statistics': "StatisticsResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': ['height', 'imposed_dplt', 'width'], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95}, report={}, model=None), analysis=StatisticsTool\n n_samples: 6\n n_variables: 3\n variables: height, imposed_dplt, width, best_fitting_distributions={'height': 'WeibullMin', 'imposed_dplt': 'WeibullMin', 'width': 'WeibullMin'}, statistics=OrderedDict([('maximum', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('minimum', {'height': array([16.51978061]), 'imposed_dplt': array([-5.30048758]), 'width': array([28.68774414])}), ('range', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('mean', {'height': array([40.42508725]), 'imposed_dplt': array([-5.08770978]), 'width': array([30.13086068])}), ('median', {'height': array([40.58741531]), 'imposed_dplt': array([-5.0887476]), 'width': array([29.5926261])}), ('compute_standard_deviation', {'height': array([1.12062048]), 'imposed_dplt': array([0.07353025]), 'width': array([1.62126567])}), ('variance', {'height': array([1.25579025]), 'imposed_dplt': array([0.0054067]), 'width': array([2.62850236])}), ('percentile_5', {'height': array([38.3477659]), 'imposed_dplt': array([-5.20727226]), 'width': array([28.7365905])}), ('percentile_10', {'height': array([38.94523468]), 'imposed_dplt': array([-5.18353866]), 'width': array([28.79722137])}), ('percentile_25', {'height': array([39.8063899]), 'imposed_dplt': array([-5.13999377]), 'width': array([29.02534973])}), ('percentile_50', {'height': array([40.58741531]), 'imposed_dplt': array([-5.0887476]), 'width': array([29.5926261])}), ('percentile_75', {'height': array([41.22145062]), 'imposed_dplt': array([-5.03706046]), 'width': array([30.65604933])}), ('percentile_90', {'height': array([41.69614161]), 'imposed_dplt': array([-4.99138812]), 'width': array([32.16430505])}), ('percentile_95', {'height': array([41.94591605]), 'imposed_dplt': array([-4.96466387]), 'width': array([33.35738344])}), ('tolerance_interval', {'height': [Bounds(lower=array([39.47234957]), upper=array([41.68884788]))], 'imposed_dplt': [Bounds(lower=array([-5.15833649]), upper=array([-4.99213949]))], 'width': [Bounds(lower=array([28.90696197]), upper=array([32.13433004]))]}), ('a_value', {'height': array([[36.04621524]]), 'imposed_dplt': array([[-5.26392665]]), 'width': array([[28.68949247]])}), ('b_value', {'height': array([[38.02580083]]), 'imposed_dplt': array([[-5.21821055]]), 'width': array([[28.71907407]])})]))"}, model=ModelDescription(name='BendingTestAnalytical', summary=' An analytical model for the bending of a parallelepipedic beam', load_case=Beam_Cantilever(name='Cantilever', domain='Beam', summary='A cantilever load case.', plot_parameters=PlotParameters(curves=[]), bc_variable_names=['imposed_dplt', 'relative_dplt_location'], load=Load(direction='', sign='', type='')), dataflow={'model_inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'model_outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code', 'model', 'load_case', 'description', 'job_name', 'persistent_result_files', 'n_cpus', 'date', 'cpu_time', 'user', 'machine', 'vims_git_version', 'directory_archive_root', 'directory_archive_job', 'directory_scratch_root', 'directory_scratch_job'], 'PreBendingTestAnalytical_Cantilever': {'inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary']}, 'RunBendingTestAnalytical': {'inputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary', 'length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces']}, 'PostBendingTestAnalytical_Cantilever': {'inputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces'], 'outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code']}, 'subroutine_names': []}, default_inputs={<InputGroupNames.NUMERICAL_VARS: 'numerical variables'>: {}, <InputGroupNames.BC_VARS: 'boundary conditions variables'>: {'imposed_dplt': [-4.914325437637914], 'relative_dplt_location': [1.0]}, <InputGroupNames.GEOMETRICAL_VARS: 'geometrical variables'>: {'length': [600.0], 'width': [29.879740397135468], 'height': [40.21449132433409]}, <InputGroupNames.MATERIAL_VARS: 'material variables'>: {'young_modulus': [209999.99999999357], 'nu_p': [0.3000000000000006]}}, curves=[('dplt_grid', 'dplt'), ('moment_grid', 'moment')], verbose=False)), nominal_data={'batch': array([2]), 'length': array([600.])}, measured_data=GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 29.133667 41.950806 -5.116211 -5.116211 -2728.162501 600.0 2
1 29.151123 40.318115 -5.115479 -5.115479 -2422.969487 600.0 2
2 28.687744 40.479980 -5.211182 -5.211182 -2458.437755 600.0 2
3 30.194824 40.375000 -5.015015 -5.015015 -2470.859447 600.0 2
4 31.169434 38.259888 -4.978882 -4.978882 -2154.753161 600.0 2
5 30.858887 41.138062 -5.092285 -5.092285 -2712.252782 600.0 2, simulated_data=GROUP inputs outputs
VARIABLE young_modulus nu_p height imposed_dplt width maximum_dplt reaction_forces
COMPONENT 0 0 0 0 0 0 0
0 209961.744159 0.280202 41.862103 -5.119447 29.313133 -5.119447 -2675.314793
1 210026.296796 0.327193 40.546465 -5.105611 32.721900 -5.105611 -2707.105297
2 210013.264139 0.299666 38.664405 -5.202444 28.910212 -5.202444 -2113.127123
3 209946.421366 0.324960 39.240248 -5.042685 29.404188 -5.042685 -2177.012697
4 210270.957738 0.291460 40.755717 -5.019998 28.999734 -5.019998 -2398.439392
5 210104.507837 0.316615 41.350140 -5.168972 29.880769 -5.168972 -2655.513673
6 210070.375395 0.273124 39.620155 -5.060421 30.062168 -5.060421 -2300.416498
7 209802.120029 0.306318 40.889876 -5.070875 28.722567 -5.070875 -2417.963274
8 209987.410348 0.302707 41.396894 -4.919444 30.621334 -4.919444 -2597.304812
9 209874.402755 0.287067 40.271388 -5.149185 31.030511 -5.149185 -2534.912068, sample_to_sample_error=None, integrated_metrics={'AreaMetric': {'maximum_dplt': 0.027499902644314598, 'reaction_forces': 66.16607054491195}, 'RelativeMeanToMean': {'maximum_dplt': 0.00044560463591247377, 'reaction_forces': 0.013458453272939245}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.03547883304952189, 'reaction_forces': 0.19733065258156343}}), ValidationPointResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': [], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95, 'output_names': [], 'n_samples': 10, 'algo': 'OT_OPT_LHS', 'metric_names': ['AreaMetric', 'RelativeMeanToMean', 'AbsoluteRelativeErrorP90'], 'simulated_uncertainties': {}, 'nominal_data': {'batch': array([3]), 'length': array([600.])}, 'typeb_uncertainties': {}}, report={'title': 'Validation of BendingTestAnalytical Cantilever', 'simulated_uncertainties': {}, 'typeb_uncertainties': {}, 'measured_output_names': ['maximum_dplt', 'reaction_forces'], 'measured_data_statistics': "StatisticsResult(metadata=ToolResultMetadata(generic={'datetime': '11-05-2026_16-52-20', 'version': '0.1.7.dev11+g45528c259'}, misc={}, settings={'variable_names': ['height', 'imposed_dplt', 'width'], 'fitting_criterion': 'Kolmogorov', 'selection_criterion': 'best', 'level': 0.05, 'tested_distributions': ['Uniform', 'Normal', 'LogNormal', 'Exponential', 'WeibullMin'], 'coverage': 0.05, 'confidence': 0.95}, report={}, model=None), analysis=StatisticsTool\n n_samples: 6\n n_variables: 3\n variables: height, imposed_dplt, width, best_fitting_distributions={'height': 'Normal', 'imposed_dplt': 'WeibullMin', 'width': 'WeibullMin'}, statistics=OrderedDict([('maximum', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('minimum', {'height': array([-inf]), 'imposed_dplt': array([-5.23693848]), 'width': array([-263.19219019])}), ('range', {'height': array([inf]), 'imposed_dplt': array([inf]), 'width': array([inf])}), ('mean', {'height': array([39.31486003]), 'imposed_dplt': array([-4.94654368]), 'width': array([30.1217087])}), ('median', {'height': array([39.31486003]), 'imposed_dplt': array([-5.10702107]), 'width': array([30.23075073])}), ('compute_standard_deviation', {'height': array([0.81821338]), 'imposed_dplt': array([0.439521]), 'width': array([0.66738148])}), ('variance', {'height': array([0.66947313]), 'imposed_dplt': array([0.19317871]), 'width': array([0.44539804])}), ('percentile_5', {'height': array([37.96901878]), 'imposed_dplt': array([-5.23412296]), 'width': array([28.8767848])}), ('percentile_10', {'height': array([38.26627739]), 'imposed_dplt': array([-5.22881715]), 'width': array([29.25048335])}), ('percentile_25', {'height': array([38.76298349]), 'imposed_dplt': array([-5.2013246]), 'width': array([29.77275202])}), ('percentile_50', {'height': array([39.31486003]), 'imposed_dplt': array([-5.10702107]), 'width': array([30.23075073])}), ('percentile_75', {'height': array([39.86673656]), 'imposed_dplt': array([-4.87662285]), 'width': array([30.59225758])}), ('percentile_90', {'height': array([40.36344266]), 'imposed_dplt': array([-4.47664746]), 'width': array([30.85717045])}), ('percentile_95', {'height': array([40.66070127]), 'imposed_dplt': array([-4.11705546]), 'width': array([30.99465853])}), ('tolerance_interval', {'height': [Bounds(lower=array([39.19896801]), upper=array([39.43075204]))], 'imposed_dplt': [Bounds(lower=array([-5.21673363]), upper=array([-4.48524051]))], 'width': [Bounds(lower=array([29.57238456]), upper=array([30.85313613]))]}), ('a_value', {'height': array([[36.73831597]]), 'imposed_dplt': array([[-5.2369029]]), 'width': array([[27.33986372]])}), ('b_value', {'height': array([[37.59318229]]), 'imposed_dplt': array([[-5.23536672]]), 'width': array([[28.67134514]])})]))"}, model=ModelDescription(name='BendingTestAnalytical', summary=' An analytical model for the bending of a parallelepipedic beam', load_case=Beam_Cantilever(name='Cantilever', domain='Beam', summary='A cantilever load case.', plot_parameters=PlotParameters(curves=[]), bc_variable_names=['imposed_dplt', 'relative_dplt_location'], load=Load(direction='', sign='', type='')), dataflow={'model_inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'model_outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code', 'model', 'load_case', 'description', 'job_name', 'persistent_result_files', 'n_cpus', 'date', 'cpu_time', 'user', 'machine', 'vims_git_version', 'directory_archive_root', 'directory_archive_job', 'directory_scratch_root', 'directory_scratch_job'], 'PreBendingTestAnalytical_Cantilever': {'inputs': ['length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary']}, 'RunBendingTestAnalytical': {'inputs': ['imposed_dplt_location', 'quadratic_moment', 'reaction_forces', 'moment', 'moment_grid', 'solver', 'boundary', 'length', 'width', 'height', 'imposed_dplt', 'relative_dplt_location', 'young_modulus', 'nu_p'], 'outputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces']}, 'PostBendingTestAnalytical_Cantilever': {'inputs': ['dplt', 'dplt_grid', 'moment', 'moment_grid', 'imposed_dplt_location', 'reaction_forces'], 'outputs': ['reaction_forces', 'maximum_dplt', 'dplt_grid', 'location_max_dplt', 'dplt', 'moment', 'moment_grid', 'dplt_at_force_location', 'error_code']}, 'subroutine_names': []}, default_inputs={<InputGroupNames.NUMERICAL_VARS: 'numerical variables'>: {}, <InputGroupNames.BC_VARS: 'boundary conditions variables'>: {'imposed_dplt': [-5.087709775354002], 'relative_dplt_location': [1.0]}, <InputGroupNames.GEOMETRICAL_VARS: 'geometrical variables'>: {'length': [600.0], 'width': [30.13086067658741], 'height': [40.42508724536511]}, <InputGroupNames.MATERIAL_VARS: 'material variables'>: {'young_modulus': [209999.99999999357], 'nu_p': [0.3000000000000006]}}, curves=[('dplt_grid', 'dplt'), ('moment_grid', 'moment')], verbose=False)), nominal_data={'batch': array([3]), 'length': array([600.])}, measured_data=GROUP inputs outputs parameters
VARIABLE width height imposed_dplt maximum_dplt reaction_forces nominal_length batch
COMPONENT 0 0 0 0 0 0 0
0 30.933716 40.679199 -4.778931 -4.778931 -2491.281387 600.0 3
1 29.584717 39.872437 -5.100830 -5.100830 -2394.800695 600.0 3
2 30.167847 38.632324 -5.236938 -5.236938 -2280.431717 600.0 3
3 30.303345 39.255249 -5.132080 -5.132080 -2355.157620 600.0 3
4 29.017822 38.655273 -5.140381 -5.140381 -2156.895678 600.0 3
5 30.684814 38.794678 -5.226318 -5.226318 -2344.113226 600.0 3, simulated_data=GROUP inputs outputs
VARIABLE young_modulus nu_p height imposed_dplt width maximum_dplt reaction_forces
COMPONENT 0 0 0 0 0 0 0
0 209961.744159 0.280202 40.557895 -5.174428 30.059053 -5.174428 -2521.681687
1 210026.296796 0.327193 39.282817 -5.148766 30.926482 -5.148766 -2346.396755
2 210013.264139 0.299666 38.122578 -5.233374 29.579210 -5.233374 -2084.721846
3 209946.421366 0.324960 38.426008 -4.911169 30.122215 -4.911169 -2039.587601
4 210270.957738 0.291460 39.450782 -4.753907 29.736128 -4.753907 -2112.357784
5 210104.507837 0.316615 39.993404 -5.222887 30.359297 -5.222887 -2466.545227
6 210070.375395 0.273124 38.647203 -5.003411 30.425136 -5.003411 -2136.505153
7 209802.120029 0.306318 39.564294 -5.047256 28.720229 -5.047256 -2179.965591
8 209987.410348 0.302707 40.040823 -3.216700 30.583975 -3.216700 -1534.945777
9 209874.402755 0.287067 39.077184 -5.209898 30.673335 -5.209898 -2316.358394, sample_to_sample_error=None, integrated_metrics={'AreaMetric': {'maximum_dplt': 0.21661668165418124, 'reaction_forces': 174.06983434027282}, 'RelativeMeanToMean': {'maximum_dplt': 0.04123406491524969, 'reaction_forces': 0.0698326433624655}, 'AbsoluteRelativeErrorP90': {'maximum_dplt': 0.2338413100113296, 'reaction_forces': 0.2690870622991148}})])
A validation point result can be plotted to compare the measured and simulated distributions of the quantity of interest.
result = results[0]
figs = StochasticValidationPoint().plot_results(
result, output_name="reaction_forces", show=True, save=False
)
figs["PDF_comparison"]

Out:
INFO - 16:52:21: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
INFO - 16:52:22: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/tools/validation/validation_point.py:321: UserWarning:
FigureCanvasAgg is non-interactive, and thus cannot be shown
The comparison of the measured and simulated CDF:
figs["CDF_comparison"]
Even if the validation case is stochastic, it is possible to get the same plots as for a deterministic validation case, using integrated metrics such as the AreaMetric (or a metric of this family), which output a scalar value for each validation point. The plots are computed for a given output and metric:
figs = DeterministicValidationCase().plot_results(
case_result,
metric_name="AbsoluteRelativeErrorP90",
output_name="reaction_forces",
show=True,
save=False,
)
# a parallel coordinates plot:
figs["parallel_coordinates"]
Out:
INFO - 16:52:22: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
INFO - 16:52:23: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/src/vimseo/utilities/datasets.py:376: FutureWarning:
Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
/home/sebastien.bocquet/PycharmProjects/vimseo/.tox/doc/lib/python3.11/site-packages/plotly/basedatatypes.py:2314: DeprecationWarning:
The append_trace method is deprecated and will be removed in a future version.
Please use the add_trace method with the row and col parameters.
INFO - 16:52:24: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
INFO - 16:52:25: Working directory is /home/sebastien.bocquet/PycharmProjects/vimseo/docs/runnable_examples/07_validation_case
an error scatter matrix:
figs["error_scatter_matrix"]
a predict-versus-true plot:
figs["predict_vs_true"]
a bar plot of the integrated metrics:
figs["integrated_metric_bars"]
Total running time of the script: ( 0 minutes 6.085 seconds)
Download Python source code: plot_stochastic_validation_case_straightbeammodel.py
Download Jupyter notebook: plot_stochastic_validation_case_straightbeammodel.ipynb