{ "cells": [ { "cell_type": "markdown", "id": "580bb11a", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [ "model" ] }, "source": [ "# Validation\n", "\n", "In this example, we demonstrate how to validate input data for a project.\n", "\n", "First, let's import the necessary packages:" ] }, { "cell_type": "code", "execution_count": 40, "id": "85d4d928", "metadata": {}, "outputs": [], "source": [ "from probabilistic_library import ReliabilityProject, SensitivityProject, UncertaintyProject \n", "from probabilistic_library import DistributionType, ReliabilityMethod, SensitivityMethod, UncertaintyMethod\n", "from utils.models import bligh\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 41, "id": "ad07d242", "metadata": { "tags": [ "gallery", "model" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAGiCAYAAADA0E3hAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUpVJREFUeJzt3QecVOW5x/EHUIoIBERBEEGpKr1Kt6Ak2EvEEiDWGGvkqkhEjLFgjHpJFCV2bzQRe4wiFgQRBREQbBQpCiIsTXfpde7n/555h7PrLm6Z3Zmz8/t+PuPuzk45OyN7nn3fp1SIxWIxAwAAiICKqT4AAACAwiJwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAOU3cJkyZYqdcsop1qBBA6tQoYK9+uqrP3ufyZMnW8eOHa1KlSrWrFkze+qpp4p7vAAAIIMVOXDZtGmTtWvXzsaMGVOo2y9dutROOukkO/bYY23OnDn2hz/8wS655BJ76623inO8AAAgg1UoyZBFrbi88sordvrppxd4m2HDhtkbb7xhX3zxReK6c88913788UebMGFCcZ8aAABkoH1K+wmmTZtm/fr1y3Vd//793cpLQbZt2+Yu3u7du239+vV2wAEHuGAJAACkP62NbNiwwaWXVKxYMRqBy6pVq6xevXq5rtPXOTk5tmXLFqtWrdpP7jNq1Ci77bbbSvvQAABAGVi+fLkdcsgh0QhcimP48OE2dOjQxNfZ2dl26KGHuh+8Zs2aKT02AABQOFqkaNSokdWoUcOSpdQDl/r161tWVlau6/S1ApD8VltE1Ue65KX7ELgAABAtyUzzKPU+Lt27d7eJEyfmuu6dd95x1wMAAJRq4LJx40ZX1qyLL3fW58uWLUts8wwePDhx+8svv9yWLFliN954o82fP98eeughe/755+26664r6lMDAIAMV+TAZebMmdahQwd3EeWi6PORI0e6r1euXJkIYuSwww5z5dBaZVH/l/vuu88ee+wxV1kEAABQZn1cyjK5p1atWi5JlxwXAACioTTO38wqAgAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAJFB4AIAACKDwAUAAEQGgQsAAIgMAhcAABAZBC4AACAyCFwAAEBkELgAAIDIIHABAACRQeACAAAig8AFAABEBoELAACIDAIXAAAQGQQuAAAgMghcAABAZBC4AACAyCBwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAJFB4AIAACKDwAUAAEQGgQsAAIgMAhcAABAZBC4AACAyCFwAAEBkELgAAIDIIHABAACRQeACAAAig8AFAABEBoELAACIDAIXAAAQGQQuAAAgMghcAABAZBC4AACAyCBwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAJFB4AIAACKDwAUAAEQGgQsAAIgMAhcAABAZBC4AACAyCFwAAED5DlzGjBljTZo0sapVq1q3bt1sxowZe7396NGjrWXLllatWjVr1KiRXXfddbZ169biHjMAAMhQRQ5cxo0bZ0OHDrVbb73VZs+ebe3atbP+/fvb6tWr8739v/71L7vpppvc7efNm2ePP/64e4w//vGPyTh+AACQQYocuNx///126aWX2oUXXmhHHnmkjR071vbbbz974okn8r39Rx99ZD179rTzzz/frdKceOKJdt555/3sKg0AAECJApft27fbrFmzrF+/fnseoGJF9/W0adPyvU+PHj3cfXygsmTJEhs/frwNGDCgwOfZtm2b5eTk5LoAAADsU5SXYO3atbZr1y6rV69eruv19fz58/O9j1ZadL9evXpZLBaznTt32uWXX77XraJRo0bZbbfdxrsDAADKtqpo8uTJdtddd9lDDz3kcmJefvlle+ONN+z2228v8D7Dhw+37OzsxGX58uWlfZgAAKC8rbjUrVvXKlWqZFlZWbmu19f169fP9z633HKLDRo0yC655BL3dZs2bWzTpk122WWX2c033+y2mvKqUqWKuwAAABR7xaVy5crWqVMnmzhxYuK63bt3u6+7d++e7302b978k+BEwY9o6wgAAKBUVlxEpdBDhgyxzp07W9euXV2PFq2gqMpIBg8ebA0bNnR5KnLKKae4SqQOHTq4ni+LFi1yqzC63gcwAAAApRK4DBw40NasWWMjR460VatWWfv27W3ChAmJhN1ly5blWmEZMWKEVahQwX1csWKFHXjggS5oufPOO4v61AAAIMNViEVgv0bl0LVq1XKJujVr1kz1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wglBL5bNm82ys4OVFQUrNWrsWYkhhwUoNQQuAFBUCkyqVw8u5K0AZSqFPa8BAACKhsAFAABEBoELAACIDAIXAAAQGQQuAAAgMghcAABAZBC4AACA8h24jBkzxpo0aWJVq1a1bt262YwZMwq87aOPPmq9e/e22rVru0u/fv32ensAAICkBS7jxo2zoUOH2q233mqzZ8+2du3aWf/+/W316tX53n7y5Ml23nnn2aRJk2zatGnWqFEjO/HEE23FihVFfWoAAJDhKsRi6l1deFph6dKliz344IPu6927d7tg5Oqrr7abbrrpZ++/a9cut/Ki+w8ePDjf22zbts1dwmOx9RzJHIsNAABKl87ftWrVSur5u0grLtu3b7dZs2a57Z7EA1Ss6L7WakphbN682Xbs2GF1NOa9AKNGjXI/qL8oaAEAAChS4LJ27Vq3YlKvXr1c1+vrVatWFeoxhg0bZg0aNMgV/OQ1fPhwF535y/Lly3mnAABA2Q5ZvPvuu+25555zeS9K7C1IlSpV3AUAAKDYgUvdunWtUqVKlpWVlet6fV2/fv293vfee+91gcu7775rbdu2LcrTAgAAFH2rqHLlytapUyebOHFi4jol5+rr7t27F3i/e+65x26//XabMGGCde7cuShPCQAAUPytIpVCDxkyxAUgXbt2tdGjR9umTZvswgsvdN9XpVDDhg1dgq385S9/sZEjR9q//vUv1/vF58Lsv//+7gIAAFBqgcvAgQNtzZo1LhhRENK+fXu3kuITdpctW+YqjbyHH37YVSOdffbZuR5HfWD+9Kc/FfXpAQBABityH5fyUgcOAADKeR8XAACAVCJwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAJFB4AIAACKDwAUAAEQGgQsAAIgMAhcAABAZBC4AACAyCFwAAEBkELgAAIDIIHABAACRQeACAAAig8AFAABEBoELAACIDAIXAAAQGQQuAAAgMghcAABAZBC4AACAyCBwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAAJFB4AIAACKDwAUAAEQGgQsAAIgMAhcAABAZBC4AACAyCFwAAEBkELgAAIDIIHABAACRQeACAAAig8AFAABEBoELAACIDAIX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cosL6i+55BL3tapQNRj4sssuc8GktppQNgo6d9esWbPQqy2S8ndM/4D1F8nEiRNz/cLV19ojzo+uD99e3nnnnQJvj9J7L0RDM/XXy4QJE9zUcJT9e6HWAJ9//rnbJvKXU0891Y499lj3uUpAUTbvhfTs2dNtD/ngURYuXOgCGoKWsn0vlHeXNzjxASWj+spW0s7dsTQpb1O52lNPPeVKpC677DJX3rZq1Sr3/UGDBsVuuummXOXQ++yzT+zee+91Jbi33nor5dApei/uvvtuV5r44osvxlauXJm4bNiwIVmHlLGK+l7kRVVR6t6LZcuWueq6q666KrZgwYLY66+/HjvooINid9xxRxKPKjMV9b3Q+UHvxb///W9Xjvv222/HmjZt6qpTUTL6Pa9WGLoonLj//vvd599++637vt4HvR95y6FvuOEGd+5WK43IlkOL6rkPPfRQdxJUudv06dMT3+vbt6/7JRz2/PPPx1q0aOFur/KqN954IwVHXT4V5b1o3Lix+x8270W/LFC270VeBC6pfS8++ugj16ZBJ1mVRt95552uXB1l+17s2LEj9qc//ckFK1WrVo01atQodsUVV8R++OEH3ooSmjRpUr6///3rr496P/Lep3379u6907+LJ598ssjPW0H/Se5iEAAAQOlIeY4LAABAYRG4AACAyCBwAQAAkUHgAgAAIoPABQAARAaBCwAAiAwCFwAAEBkELgAAIDIIXAAAQGQQuAAAgMggcAEAABYV/w9w7/rkHHN2JAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.text(0.65, 0.65, \"error\", size=50, rotation=-25.,\n", " ha=\"right\", va=\"top\",\n", " bbox=dict(boxstyle=\"round\",\n", " ec=(1., 0.5, 0.5),\n", " fc=(1., 0.8, 0.8),\n", " )\n", " )\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "93bc97c8", "metadata": {}, "source": [ "Now, let's prepare some projects with both valid and invalid input data:" ] }, { "cell_type": "code", "execution_count": 42, "id": "ce33dcab", "metadata": {}, "outputs": [], "source": [ "def valid_reliability_analysis():\n", "\n", " project = ReliabilityProject()\n", " project.model = bligh\n", "\n", " project.variables[\"m\"].distribution = DistributionType.log_normal\n", " project.variables[\"m\"].mean = 1.76\n", " project.variables['m'].scale = 0.1\n", "\n", " project.variables[\"L\"].distribution = DistributionType.normal\n", " project.variables[\"L\"].mean = 50\n", " project.variables[\"L\"].deviation = 2.5\n", "\n", " project.variables[\"c_creep\"].distribution = DistributionType.deterministic\n", " project.variables[\"c_creep\"].mean = 18\n", "\n", " project.variables[\"delta_H\"].distribution = DistributionType.gumbel\n", " project.variables[\"delta_H\"].shift = 0.53\n", " project.variables[\"delta_H\"].scale = 0.406\n", "\n", " project.settings.reliability_method = ReliabilityMethod.form\n", " project.settings.relaxation_factor = 0.75\n", " project.settings.maximum_iterations = 50\n", " project.settings.epsilon_beta = 0.01\n", "\n", " return project" ] }, { "cell_type": "code", "execution_count": 43, "id": "2c78c4f1", "metadata": {}, "outputs": [], "source": [ "def invalid_reliability_analysis():\n", "\n", " project = ReliabilityProject()\n", " project.model = bligh\n", "\n", " project.variables[\"m\"].distribution = DistributionType.log_normal\n", " project.variables[\"m\"].mean = 1.76\n", " project.variables['m'].scale = -0.1 # wrong: scale must be positive\n", "\n", " project.variables[\"L\"].distribution = DistributionType.normal\n", " project.variables[\"L\"].mean = 50\n", " project.variables[\"L\"].deviation = 2.5\n", "\n", " project.variables[\"c_creep\"].distribution = DistributionType.uniform\n", " project.variables[\"c_creep\"].minimum = 18\n", " project.variables[\"c_creep\"].maximum = 17\n", "\n", " project.variables[\"delta_H\"].distribution = DistributionType.triangular\n", " project.variables[\"delta_H\"].minimum = 0.0\n", " project.variables[\"delta_H\"].maximum = -1.0 # wrong: maximum must be greater than minimum\n", " project.variables[\"delta_H\"].shift = 2.0\n", "\n", " project.settings.reliability_method = ReliabilityMethod.crude_monte_carlo\n", " project.settings.minimum_samples = 1000\n", " project.settings.maximum_samples = 500 # wrong: maximum_samples must be greater than minimum_samples\n", "\n", " return project" ] }, { "cell_type": "code", "execution_count": 44, "id": "911a61f6", "metadata": {}, "outputs": [], "source": [ "def invalid_sensitivity_analysis():\n", "\n", " project = SensitivityProject()\n", " project.model = bligh\n", "\n", " project.variables[\"m\"].distribution = DistributionType.log_normal\n", " project.variables[\"m\"].mean = 1.76\n", " project.variables['m'].scale = -0.1 # wrong: scale must be positive\n", "\n", " project.variables[\"L\"].distribution = DistributionType.normal\n", " project.variables[\"L\"].mean = 50\n", " project.variables[\"L\"].deviation = 2.5\n", "\n", " project.variables[\"c_creep\"].distribution = DistributionType.uniform\n", " project.variables[\"c_creep\"].minimum = 18\n", " project.variables[\"c_creep\"].maximum = 17 # wrong: maximum must be greater than minimum\n", "\n", " project.variables[\"delta_H\"].distribution = DistributionType.triangular\n", " project.variables[\"delta_H\"].minimum = 0.0 \n", " project.variables[\"delta_H\"].maximum = -1.0 # wrong: maximum must be greater than minimum\n", " project.variables[\"delta_H\"].shift = 2.0 \n", "\n", " project.settings.sensitivity_method = SensitivityMethod.single_variation\n", " project.settings.low_value = -0.99 # wrong: value must be between 0 and 1\n", " project.settings.high_value = 2.99 # wrong: value must be between 0 and 1\n", "\n", " return project" ] }, { "cell_type": "code", "execution_count": 45, "id": "a20f35dd", "metadata": {}, "outputs": [], "source": [ "def invalid_uncertainty_analysis():\n", "\n", " project = UncertaintyProject()\n", " project.model = bligh\n", "\n", " project.variables[\"m\"].distribution = DistributionType.log_normal\n", " project.variables[\"m\"].mean = 1.76\n", " project.variables['m'].scale = -0.1 # wrong: scale must be positive\n", "\n", " project.variables[\"L\"].distribution = DistributionType.normal\n", " project.variables[\"L\"].mean = 50\n", " project.variables[\"L\"].deviation = 2.5\n", "\n", " project.variables[\"c_creep\"].distribution = DistributionType.uniform\n", " project.variables[\"c_creep\"].minimum = 18\n", " project.variables[\"c_creep\"].maximum = 17 # wrong: maximum must be greater than minimum\n", "\n", " project.variables[\"delta_H\"].distribution = DistributionType.triangular\n", " project.variables[\"delta_H\"].minimum = 0.0 \n", " project.variables[\"delta_H\"].maximum = -1.0 # wrong: maximum must be greater than minimum\n", " project.variables[\"delta_H\"].shift = 2.0 \n", "\n", " project.settings.uncertainty_method = UncertaintyMethod.crude_monte_carlo\n", " project.settings.minimum_samples = -99 # wrong: minimum_samples must be positive (it is not used in Uncertainty analysis)\n", " project.settings.maximum_samples = -99 # wrong: maximum_samples must be positive\n", "\n", " return project" ] }, { "cell_type": "markdown", "id": "2ceae971", "metadata": {}, "source": [ "It is possible to validate projects, variables, and settings. Only the properties that are in use will be validated.\n", "\n", "There are two ways to perform validation: `is_valid()` and `validate()`.\n", "\n", "* `is_valid()` returns True or False
\n", "* `validate()` provides any error messages that occur." ] }, { "cell_type": "markdown", "id": "d7a53aea", "metadata": {}, "source": [ "### Project validation" ] }, { "cell_type": "code", "execution_count": 46, "id": "771c6253", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "ok\n" ] } ], "source": [ "project_valid = valid_reliability_analysis()\n", "\n", "print(project_valid.is_valid())\n", "project_valid.validate()" ] }, { "cell_type": "code", "execution_count": 47, "id": "6f397dc2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "Error: m => scale value -0.1 is less than 0.\n", "Error: c_creep => maximum value 17 is less than 18.\n", "Error: delta_H => shift value 2 is greater than -1.\n", "Error: maximum samples value 500 is less than 1000.\n" ] } ], "source": [ "project_invalid = invalid_reliability_analysis()\n", "\n", "print(project_invalid.is_valid())\n", "project_invalid.validate()" ] }, { "cell_type": "markdown", "id": "ca86b1bb", "metadata": {}, "source": [ "### Variable validation" ] }, { "cell_type": "code", "execution_count": 48, "id": "e5d40996", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "Error: m => scale value -0.1 is less than 0.\n" ] } ], "source": [ "project_invalid = invalid_sensitivity_analysis()\n", "\n", "print(project_invalid.variables[\"m\"].is_valid())\n", "project_invalid.variables[\"m\"].validate()" ] }, { "cell_type": "markdown", "id": "cfb29d82", "metadata": {}, "source": [ "### Settings validation" ] }, { "cell_type": "code", "execution_count": 49, "id": "f4a2b086", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "Error: minimum samples value -99 is less than 1.\n" ] } ], "source": [ "project_invalid = invalid_uncertainty_analysis()\n", "\n", "print(project_invalid.settings.is_valid())\n", "project_invalid.settings.validate()" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }