.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/discipline/json_grammar_merge.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_discipline_json_grammar_merge.py: Merge or update a JSONGrammar ============================= .. GENERATED FROM PYTHON SOURCE LINES 22-32 .. code-block:: default from __future__ import annotations from copy import deepcopy from pathlib import Path from gemseo.core.grammars.errors import InvalidDataError from gemseo.core.grammars.json_grammar import JSONGrammar PATH_TO_PARENT_DIRECTORY = Path(__file__).parent .. GENERATED FROM PYTHON SOURCE LINES 33-38 Create the JSON grammars ------------------------ The first grammar has the elements `name1` and `name2` that shall be integers. The second grammar has the elements `name2` and `name3` that shall be strings. .. GENERATED FROM PYTHON SOURCE LINES 38-45 .. code-block:: default grammar_1 = JSONGrammar("grammar_1") grammar_1.update_from_file(PATH_TO_PARENT_DIRECTORY / "grammar_1.json") grammar_2 = JSONGrammar("grammar_2") grammar_2.update_from_file(PATH_TO_PARENT_DIRECTORY / "grammar_2.json") .. GENERATED FROM PYTHON SOURCE LINES 46-48 Keep a pristine copy of the first grammar such that we can experiment more than once on it. .. GENERATED FROM PYTHON SOURCE LINES 48-50 .. code-block:: default grammar_1_copy = deepcopy(grammar_1) .. GENERATED FROM PYTHON SOURCE LINES 51-56 Update without merge -------------------- By default, the update method acts like for a dictionary, i.e. an already existing key has its value overriden. Here the value for the element `name2` is now string. .. GENERATED FROM PYTHON SOURCE LINES 56-59 .. code-block:: default grammar_1.update(grammar_2) print(repr(grammar_1)) .. GENERATED FROM PYTHON SOURCE LINES 60-61 On validation, the allowed type is only the one from the second grammar. .. GENERATED FROM PYTHON SOURCE LINES 61-68 .. code-block:: default try: grammar_1.validate({"name2": 0}) except InvalidDataError: pass grammar_1.validate({"name2": "a string"}) .. GENERATED FROM PYTHON SOURCE LINES 69-73 Update with merge ----------------- First use the initial grammar from its copy. .. GENERATED FROM PYTHON SOURCE LINES 73-75 .. code-block:: default grammar_1 = grammar_1_copy .. GENERATED FROM PYTHON SOURCE LINES 76-78 When merging elements, an already existing element of the grammar will have both the old and the new value. .. GENERATED FROM PYTHON SOURCE LINES 78-81 .. code-block:: default grammar_1.update(grammar_2, merge=True) print(repr(grammar_1)) .. GENERATED FROM PYTHON SOURCE LINES 82-84 On validation, the allowed types can be any of the types from the original grammars, here either integer or string. .. GENERATED FROM PYTHON SOURCE LINES 84-86 .. code-block:: default grammar_1.validate({"name2": 0}) grammar_1.validate({"name2": "a string"}) .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.000 seconds) .. _sphx_glr_download_examples_discipline_json_grammar_merge.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: json_grammar_merge.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: json_grammar_merge.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_