.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/disciplines/grammars/plot_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_disciplines_grammars_plot_json_grammar_merge.py: Merge or update a JSONGrammar ============================= .. GENERATED FROM PYTHON SOURCE LINES 22-31 .. code-block:: Python from __future__ import annotations import contextlib from copy import deepcopy from gemseo.core.grammars.errors import InvalidDataError from gemseo.core.grammars.json_grammar import JSONGrammar .. GENERATED FROM PYTHON SOURCE LINES 32-37 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 37-44 .. code-block:: Python grammar_1 = JSONGrammar("grammar_1") grammar_1.update_from_file("grammar_1.json") grammar_2 = JSONGrammar("grammar_2") grammar_2.update_from_file("grammar_2.json") .. GENERATED FROM PYTHON SOURCE LINES 45-47 Keep a pristine copy of the first grammar such that we can experiment more than once on it. .. GENERATED FROM PYTHON SOURCE LINES 47-49 .. code-block:: Python grammar_1_copy = deepcopy(grammar_1) .. GENERATED FROM PYTHON SOURCE LINES 50-55 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 55-58 .. code-block:: Python grammar_1.update(grammar_2) grammar_1 .. raw:: html
Grammar name: grammar_1
  • Required elements:
  • Optional elements:
    • name1:
      • Type: integer
      • Default: N/A
    • name2:
      • Type: string
      • Default: N/A
    • name3:
      • Type: string
      • Default: N/A


.. GENERATED FROM PYTHON SOURCE LINES 59-60 On validation, the allowed type is only the one from the second grammar. .. GENERATED FROM PYTHON SOURCE LINES 60-65 .. code-block:: Python with contextlib.suppress(InvalidDataError): grammar_1.validate({"name2": 0}) grammar_1.validate({"name2": "a string"}) .. GENERATED FROM PYTHON SOURCE LINES 66-70 Update with merge ----------------- First use the initial grammar from its copy. .. GENERATED FROM PYTHON SOURCE LINES 70-72 .. code-block:: Python grammar_1 = grammar_1_copy .. GENERATED FROM PYTHON SOURCE LINES 73-75 When merging elements, an already existing element of the grammar will have both the old and the new value. .. GENERATED FROM PYTHON SOURCE LINES 75-78 .. code-block:: Python grammar_1.update(grammar_2, merge=True) grammar_1 .. raw:: html
Grammar name: grammar_1
  • Required elements:
  • Optional elements:
    • name1:
      • Type: integer
      • Default: N/A
    • name2:
      • Type: ['integer', 'string']
      • Default: N/A
    • name3:
      • Type: string
      • Default: N/A


.. GENERATED FROM PYTHON SOURCE LINES 79-81 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 81-83 .. code-block:: Python 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.006 seconds) .. _sphx_glr_download_examples_disciplines_grammars_plot_json_grammar_merge.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_json_grammar_merge.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_json_grammar_merge.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_