{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic use of entities" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from __future__ import annotations\n", "\n", "from typing import TYPE_CHECKING\n", "\n", "try:\n", " from rich import print, print_json\n", "except ImportError:\n", " print_json = print\n", "\n", "if TYPE_CHECKING:\n", " from typing import Any" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load an entity\n", "\n", "A test entity:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "
description: A bare-bones entity for testing.\n",
       "dimensions:\n",
       "  N: Number of elements.\n",
       "identity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\n",
       "properties:\n",
       "  atom:\n",
       "    description: An atom.\n",
       "    shape:\n",
       "    - N\n",
       "    type: string\n",
       "  electrons:\n",
       "    description: Number of electrons.\n",
       "    shape:\n",
       "    - N\n",
       "    type: int\n",
       "  mass:\n",
       "    description: Atomic mass.\n",
       "    shape:\n",
       "    - N\n",
       "    type: float\n",
       "    unit: amu\n",
       "  radius:\n",
       "    description: Atomic radius.\n",
       "    shape:\n",
       "    - N\n",
       "    type: float\n",
       "    unit: Å\n",
       "\n",
       "
\n" ], "text/plain": [ "description: A bare-bones entity for testing.\n", "dimensions:\n", " N: Number of elements.\n", "identity: \u001b[4;94mhttp://onto-ns.com/s7/0.1.0/MolecularSpecies\u001b[0m\n", "properties:\n", " atom:\n", " description: An atom.\n", " shape:\n", " - N\n", " type: string\n", " electrons:\n", " description: Number of electrons.\n", " shape:\n", " - N\n", " type: int\n", " mass:\n", " description: Atomic mass.\n", " shape:\n", " - N\n", " type: float\n", " unit: amu\n", " radius:\n", " description: Atomic radius.\n", " shape:\n", " - N\n", " type: float\n", " unit: Å\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pathlib import Path\n", "\n", "import yaml\n", "\n", "# Note, this is the directory where the notebook is located\n", "# While it is dynamically set to the current working directory, it is\n", "# recommended to set it to the directory where the notebook is located\n", "# to avoid any confusion when running the notebook in different environments\n", "# and from different directories.\n", "NOTEBOOK_DIR = Path.cwd().resolve()\n", "\n", "REPO_DIR = NOTEBOOK_DIR.parent.parent.resolve()\n", "STATIC_TEST_DIR = REPO_DIR / \"tests\" / \"static\"\n", "TEST_ENTITY_PATH = STATIC_TEST_DIR / \"soft_datasource_entity.yaml\"\n", "\n", "RAW_TEST_ENTITY: dict[str, Any] = yaml.safe_load(TEST_ENTITY_PATH.read_text())\n", "\n", "print(yaml.safe_dump(RAW_TEST_ENTITY, allow_unicode=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the entity as a `SOFT7Entity` class." ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
SOFT7Entity(\n",
       "    identity=Url('http://onto-ns.com/s7/0.1.0/MolecularSpecies'),\n",
       "    description='A bare-bones entity for testing.',\n",
       "    dimensions={'N': 'Number of elements.'},\n",
       "    properties={\n",
       "        'atom': SOFT7EntityProperty(type='string', shape=['N'], description='An atom.', unit=None),\n",
       "        'electrons': SOFT7EntityProperty(type='int', shape=['N'], description='Number of electrons.', unit=None),\n",
       "        'mass': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic mass.', unit='amu'),\n",
       "        'radius': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic radius.', unit='Å')\n",
       "    }\n",
       ")\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mSOFT7Entity\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33midentity\u001b[0m=\u001b[1;35mUrl\u001b[0m\u001b[1m(\u001b[0m\u001b[32m'http://onto-ns.com/s7/0.1.0/MolecularSpecies'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[33mdescription\u001b[0m=\u001b[32m'A bare-bones entity for testing.'\u001b[0m,\n", " \u001b[33mdimensions\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'N'\u001b[0m: \u001b[32m'Number of elements.'\u001b[0m\u001b[1m}\u001b[0m,\n", " \u001b[33mproperties\u001b[0m=\u001b[1m{\u001b[0m\n", " \u001b[32m'atom'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'string'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'An atom.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'electrons'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'int'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Number of electrons.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'mass'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic mass.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'amu'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'radius'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic radius.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'Å'\u001b[0m\u001b[1m)\u001b[0m\n", " \u001b[1m}\u001b[0m\n", "\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from s7.pydantic_models.soft7_entity import SOFT7Entity\n", "\n", "entity = SOFT7Entity(**RAW_TEST_ENTITY)\n", "\n", "print(entity)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate a Python class from the entity\n", "\n", "Generate a custom Python class based on the entity.\n", "It will be possible to create instances of this class, based on the properties and dimensions of the entity." ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Class: <class 's7.factories.generated_classes.MolecularSpeciesEntity'>\n",
       "
\n" ], "text/plain": [ "Class: \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m's7.factories.generated_classes.MolecularSpeciesEntity'\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
MolecularSpecies\n",
       "\n",
       "    A bare-bones entity for testing.\n",
       "\n",
       "    SOFT7 Entity Metadata:\n",
       "        Identity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\n",
       "\n",
       "        Namespace: http://onto-ns.com/s7\n",
       "        Version: 0.1.0\n",
       "        Name: MolecularSpecies\n",
       "\n",
       "    Dimensions:\n",
       "        N (int): Number of elements.\n",
       "\n",
       "    Attributes:\n",
       "        atom (list): An atom.\n",
       "        electrons (list): Number of electrons.\n",
       "        mass (list): Atomic mass.\n",
       "        radius (list): Atomic radius.\n",
       "\n",
       "    \n",
       "
\n" ], "text/plain": [ "MolecularSpecies\n", "\n", " A bare-bones entity for testing.\n", "\n", " SOFT7 Entity Metadata:\n", " Identity: \u001b[4;94mhttp://onto-ns.com/s7/0.1.0/MolecularSpecies\u001b[0m\n", "\n", " Namespace: \u001b[4;94mhttp://onto-ns.com/s7\u001b[0m\n", " Version: \u001b[1;36m0.1\u001b[0m.\u001b[1;36m0\u001b[0m\n", " Name: MolecularSpecies\n", "\n", " Dimensions:\n", " N \u001b[1m(\u001b[0mint\u001b[1m)\u001b[0m: Number of elements.\n", "\n", " Attributes:\n", " atom \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: An atom.\n", " electrons \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Number of electrons.\n", " mass \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Atomic mass.\n", " radius \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Atomic radius.\n", "\n", " \n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
JSON Schema:\n",
       "
\n" ], "text/plain": [ "JSON Schema:\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
{\n",
       "    '$defs': {\n",
       "        'MolecularSpeciesEntityDimensions': {\n",
       "            'additionalProperties': False,\n",
       "            'description': 'MolecularSpeciesDimensions\\n\\nDimensions for the MolecularSpecies SOFT7 data \n",
       "source.\\n\\nSOFT7 Entity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\nAttributes:\\n    N (int): Number of \n",
       "elements.',\n",
       "            'properties': {\n",
       "                'N': {\n",
       "                    'anyOf': [{'type': 'integer'}, {'type': 'null'}],\n",
       "                    'default': None,\n",
       "                    'description': 'Number of elements.',\n",
       "                    'title': 'N'\n",
       "                }\n",
       "            },\n",
       "            'title': 'MolecularSpeciesEntityDimensions',\n",
       "            'type': 'object'\n",
       "        },\n",
       "        'MolecularSpeciesEntityProperties': {\n",
       "            'additionalProperties': False,\n",
       "            'description': 'MolecularSpeciesProperties\\n\\nProperties for the MolecularSpecies SOFT7 data \n",
       "source.\\n\\nSOFT7 Entity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\nAttributes:\\n    atom (list[str]): An \n",
       "atom.\\n    electrons (list[int]): Number of electrons.\\n    mass (list[float]): Atomic mass.\\n    radius \n",
       "(list[float]): Atomic radius.',\n",
       "            'properties': {\n",
       "                'atom': {\n",
       "                    'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'null'}],\n",
       "                    'default': None,\n",
       "                    'description': 'An atom.',\n",
       "                    'title': 'atom',\n",
       "                    'x-soft7-shape': ['N']\n",
       "                },\n",
       "                'electrons': {\n",
       "                    'anyOf': [{'items': {'type': 'integer'}, 'type': 'array'}, {'type': 'null'}],\n",
       "                    'default': None,\n",
       "                    'description': 'Number of electrons.',\n",
       "                    'title': 'electrons',\n",
       "                    'x-soft7-shape': ['N']\n",
       "                },\n",
       "                'mass': {\n",
       "                    'anyOf': [{'items': {'type': 'number'}, 'type': 'array'}, {'type': 'null'}],\n",
       "                    'default': None,\n",
       "                    'description': 'Atomic mass.',\n",
       "                    'title': 'mass',\n",
       "                    'x-soft7-shape': ['N'],\n",
       "                    'x-soft7-unit': 'amu'\n",
       "                },\n",
       "                'radius': {\n",
       "                    'anyOf': [{'items': {'type': 'number'}, 'type': 'array'}, {'type': 'null'}],\n",
       "                    'default': None,\n",
       "                    'description': 'Atomic radius.',\n",
       "                    'title': 'radius',\n",
       "                    'x-soft7-shape': ['N'],\n",
       "                    'x-soft7-unit': 'Å'\n",
       "                }\n",
       "            },\n",
       "            'title': 'MolecularSpeciesEntityProperties',\n",
       "            'type': 'object'\n",
       "        }\n",
       "    },\n",
       "    'additionalProperties': False,\n",
       "    'description': 'MolecularSpecies\\n\\nA bare-bones entity for testing.\\n\\nSOFT7 Entity Metadata:\\n    Identity: \n",
       "http://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\n    Namespace: http://onto-ns.com/s7\\n    Version: 0.1.0\\n    Name:\n",
       "MolecularSpecies\\n\\nDimensions:\\n    N (int): Number of elements.\\n\\nAttributes:\\n    atom (list[str]): An atom.\\n \n",
       "electrons (list[int]): Number of electrons.\\n    mass (list[float]): Atomic mass.\\n    radius (list[float]): Atomic\n",
       "radius.',\n",
       "    'properties': {\n",
       "        'dimensions': {\n",
       "            'allOf': [{'$ref': '#/$defs/MolecularSpeciesEntityDimensions'}],\n",
       "            'description': 'The MolecularSpecies SOFT7 entity dimensions.'\n",
       "        },\n",
       "        'properties': {\n",
       "            'description': 'The MolecularSpecies SOFT7 entity properties.',\n",
       "            'allOf': [{'$ref': '#/$defs/MolecularSpeciesEntityProperties'}]\n",
       "        }\n",
       "    },\n",
       "    'required': ['dimensions', 'properties'],\n",
       "    'title': 'MolecularSpeciesEntity',\n",
       "    'type': 'object'\n",
       "}\n",
       "
\n" ], "text/plain": [ "\u001b[1m{\u001b[0m\n", " \u001b[32m'$defs'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'MolecularSpeciesEntityDimensions'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'additionalProperties'\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'MolecularSpeciesDimensions\\n\\nDimensions for the MolecularSpecies SOFT7 data \u001b[0m\n", "\u001b[32msource.\\n\\nSOFT7 Entity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\nAttributes:\\n N \u001b[0m\u001b[32m(\u001b[0m\u001b[32mint\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Number of \u001b[0m\n", "\u001b[32melements.'\u001b[0m,\n", " \u001b[32m'properties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'N'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'anyOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'integer'\u001b[0m\u001b[1m}\u001b[0m, \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'null'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'default'\u001b[0m: \u001b[3;35mNone\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'Number of elements.'\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'N'\u001b[0m\n", " \u001b[1m}\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'MolecularSpeciesEntityDimensions'\u001b[0m,\n", " \u001b[32m'type'\u001b[0m: \u001b[32m'object'\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'MolecularSpeciesEntityProperties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'additionalProperties'\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'MolecularSpeciesProperties\\n\\nProperties for the MolecularSpecies SOFT7 data \u001b[0m\n", "\u001b[32msource.\\n\\nSOFT7 Entity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\nAttributes:\\n atom \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mstr\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: An \u001b[0m\n", "\u001b[32matom.\\n electrons \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mint\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Number of electrons.\\n mass \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mfloat\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Atomic mass.\\n radius \u001b[0m\n", "\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mfloat\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Atomic radius.'\u001b[0m,\n", " \u001b[32m'properties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'atom'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'anyOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'items'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'string'\u001b[0m\u001b[1m}\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'array'\u001b[0m\u001b[1m}\u001b[0m, \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'null'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'default'\u001b[0m: \u001b[3;35mNone\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'An atom.'\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'atom'\u001b[0m,\n", " \u001b[32m'x-soft7-shape'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'electrons'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'anyOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'items'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'integer'\u001b[0m\u001b[1m}\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'array'\u001b[0m\u001b[1m}\u001b[0m, \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'null'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'default'\u001b[0m: \u001b[3;35mNone\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'Number of electrons.'\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'electrons'\u001b[0m,\n", " \u001b[32m'x-soft7-shape'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'mass'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'anyOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'items'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'number'\u001b[0m\u001b[1m}\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'array'\u001b[0m\u001b[1m}\u001b[0m, \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'null'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'default'\u001b[0m: \u001b[3;35mNone\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'Atomic mass.'\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'mass'\u001b[0m,\n", " \u001b[32m'x-soft7-shape'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'x-soft7-unit'\u001b[0m: \u001b[32m'amu'\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'radius'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'anyOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'items'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'number'\u001b[0m\u001b[1m}\u001b[0m, \u001b[32m'type'\u001b[0m: \u001b[32m'array'\u001b[0m\u001b[1m}\u001b[0m, \u001b[1m{\u001b[0m\u001b[32m'type'\u001b[0m: \u001b[32m'null'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'default'\u001b[0m: \u001b[3;35mNone\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'Atomic radius.'\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'radius'\u001b[0m,\n", " \u001b[32m'x-soft7-shape'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'x-soft7-unit'\u001b[0m: \u001b[32m'Å'\u001b[0m\n", " \u001b[1m}\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'MolecularSpeciesEntityProperties'\u001b[0m,\n", " \u001b[32m'type'\u001b[0m: \u001b[32m'object'\u001b[0m\n", " \u001b[1m}\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'additionalProperties'\u001b[0m: \u001b[3;91mFalse\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'MolecularSpecies\\n\\nA bare-bones entity for testing.\\n\\nSOFT7 Entity Metadata:\\n Identity: \u001b[0m\n", "\u001b[32mhttp://onto-ns.com/s7/0.1.0/MolecularSpecies\\n\\n Namespace: http://onto-ns.com/s7\\n Version: 0.1.0\\n Name:\u001b[0m\n", "\u001b[32mMolecularSpecies\\n\\nDimensions:\\n N \u001b[0m\u001b[32m(\u001b[0m\u001b[32mint\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Number of elements.\\n\\nAttributes:\\n atom \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mstr\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: An atom.\\n \u001b[0m\n", "\u001b[32melectrons \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mint\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Number of electrons.\\n mass \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mfloat\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Atomic mass.\\n radius \u001b[0m\u001b[32m(\u001b[0m\u001b[32mlist\u001b[0m\u001b[32m[\u001b[0m\u001b[32mfloat\u001b[0m\u001b[32m]\u001b[0m\u001b[32m)\u001b[0m\u001b[32m: Atomic\u001b[0m\n", "\u001b[32mradius.'\u001b[0m,\n", " \u001b[32m'properties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'dimensions'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'allOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'$ref'\u001b[0m: \u001b[32m'#/$defs/MolecularSpeciesEntityDimensions'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'The MolecularSpecies SOFT7 entity dimensions.'\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'properties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'description'\u001b[0m: \u001b[32m'The MolecularSpecies SOFT7 entity properties.'\u001b[0m,\n", " \u001b[32m'allOf'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1m{\u001b[0m\u001b[32m'$ref'\u001b[0m: \u001b[32m'#/$defs/MolecularSpeciesEntityProperties'\u001b[0m\u001b[1m}\u001b[0m\u001b[1m]\u001b[0m\n", " \u001b[1m}\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[32m'required'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'dimensions'\u001b[0m, \u001b[32m'properties'\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'title'\u001b[0m: \u001b[32m'MolecularSpeciesEntity'\u001b[0m,\n", " \u001b[32m'type'\u001b[0m: \u001b[32m'object'\u001b[0m\n", "\u001b[1m}\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from s7.factories import create_entity\n", "\n", "MolecularSpecies = create_entity(entity)\n", "\n", "print(f\"Class: {MolecularSpecies}\")\n", "print(MolecularSpecies.__doc__)\n", "print(\"JSON Schema:\")\n", "print(MolecularSpecies.model_json_schema())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The entity is still accessible under the `entity` class attribute:" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
SOFT7Entity(\n",
       "    identity=Url('http://onto-ns.com/s7/0.1.0/MolecularSpecies'),\n",
       "    description='A bare-bones entity for testing.',\n",
       "    dimensions={'N': 'Number of elements.'},\n",
       "    properties={\n",
       "        'atom': SOFT7EntityProperty(type='string', shape=['N'], description='An atom.', unit=None),\n",
       "        'electrons': SOFT7EntityProperty(type='int', shape=['N'], description='Number of electrons.', unit=None),\n",
       "        'mass': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic mass.', unit='amu'),\n",
       "        'radius': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic radius.', unit='Å')\n",
       "    }\n",
       ")\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mSOFT7Entity\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33midentity\u001b[0m=\u001b[1;35mUrl\u001b[0m\u001b[1m(\u001b[0m\u001b[32m'http://onto-ns.com/s7/0.1.0/MolecularSpecies'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[33mdescription\u001b[0m=\u001b[32m'A bare-bones entity for testing.'\u001b[0m,\n", " \u001b[33mdimensions\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'N'\u001b[0m: \u001b[32m'Number of elements.'\u001b[0m\u001b[1m}\u001b[0m,\n", " \u001b[33mproperties\u001b[0m=\u001b[1m{\u001b[0m\n", " \u001b[32m'atom'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'string'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'An atom.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'electrons'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'int'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Number of electrons.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'mass'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic mass.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'amu'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'radius'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic radius.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'Å'\u001b[0m\u001b[1m)\u001b[0m\n", " \u001b[1m}\u001b[0m\n", "\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(MolecularSpecies.entity)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When generating a new class, it can be imported from the `s7.factories.generated_classes` module:" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
[\n",
       "    <class 's7.factories.generated_classes.MolecularSpeciesEntityDimensions'>,\n",
       "    <class 's7.factories.generated_classes.MolecularSpeciesEntityProperties'>,\n",
       "    <class 's7.factories.generated_classes.MolecularSpeciesEntity'>\n",
       "]\n",
       "
\n" ], "text/plain": [ "\u001b[1m[\u001b[0m\n", " \u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m's7.factories.generated_classes.MolecularSpeciesEntityDimensions'\u001b[0m\u001b[39m>,\u001b[0m\n", "\u001b[39m ,\u001b[0m\n", "\u001b[39m \u001b[0m\n", "\u001b[1m]\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from s7.factories import generated_classes\n", "\n", "# Here we are printing all the classes that were generated by the factory.\n", "# More specifically, we are printing all the classes that are in the generated_classes\n", "# module.\n", "print([_ for _ in generated_classes.__dict__.values() if isinstance(_, type)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that along with the generated class (here `MolecularSpeciesEntity`), two more classes are generated to represent the entity's properties (here `MolecularSpeciesEntityProperties`) and dimensions (here `MolecularSpeciesEntityDimensions`).\n", "\n", "One can even import the named entity classes directly from the `s7.factories.generated_classes` module:" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<class 's7.factories.generated_classes.MolecularSpeciesEntity'>\n",
       "
\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m's7.factories.generated_classes.MolecularSpeciesEntity'\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
The imported 'MolecularSpeciesEntity' class is the exactly same as the previously generated 'MolecularSpecies' \n",
       "class: True\n",
       "
\n" ], "text/plain": [ "The imported \u001b[32m'MolecularSpeciesEntity'\u001b[0m class is the exactly same as the previously generated \u001b[32m'MolecularSpecies'\u001b[0m \n", "class: \u001b[3;92mTrue\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
MolecularSpecies\n",
       "\n",
       "    A bare-bones entity for testing.\n",
       "\n",
       "    SOFT7 Entity Metadata:\n",
       "        Identity: http://onto-ns.com/s7/0.1.0/MolecularSpecies\n",
       "\n",
       "        Namespace: http://onto-ns.com/s7\n",
       "        Version: 0.1.0\n",
       "        Name: MolecularSpecies\n",
       "\n",
       "    Dimensions:\n",
       "        N (int): Number of elements.\n",
       "\n",
       "    Attributes:\n",
       "        atom (list): An atom.\n",
       "        electrons (list): Number of electrons.\n",
       "        mass (list): Atomic mass.\n",
       "        radius (list): Atomic radius.\n",
       "\n",
       "    \n",
       "
\n" ], "text/plain": [ "MolecularSpecies\n", "\n", " A bare-bones entity for testing.\n", "\n", " SOFT7 Entity Metadata:\n", " Identity: \u001b[4;94mhttp://onto-ns.com/s7/0.1.0/MolecularSpecies\u001b[0m\n", "\n", " Namespace: \u001b[4;94mhttp://onto-ns.com/s7\u001b[0m\n", " Version: \u001b[1;36m0.1\u001b[0m.\u001b[1;36m0\u001b[0m\n", " Name: MolecularSpecies\n", "\n", " Dimensions:\n", " N \u001b[1m(\u001b[0mint\u001b[1m)\u001b[0m: Number of elements.\n", "\n", " Attributes:\n", " atom \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: An atom.\n", " electrons \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Number of electrons.\n", " mass \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Atomic mass.\n", " radius \u001b[1m(\u001b[0mlist\u001b[1m)\u001b[0m: Atomic radius.\n", "\n", " \n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
SOFT7Entity(\n",
       "    identity=Url('http://onto-ns.com/s7/0.1.0/MolecularSpecies'),\n",
       "    description='A bare-bones entity for testing.',\n",
       "    dimensions={'N': 'Number of elements.'},\n",
       "    properties={\n",
       "        'atom': SOFT7EntityProperty(type='string', shape=['N'], description='An atom.', unit=None),\n",
       "        'electrons': SOFT7EntityProperty(type='int', shape=['N'], description='Number of electrons.', unit=None),\n",
       "        'mass': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic mass.', unit='amu'),\n",
       "        'radius': SOFT7EntityProperty(type='float', shape=['N'], description='Atomic radius.', unit='Å')\n",
       "    }\n",
       ")\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mSOFT7Entity\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33midentity\u001b[0m=\u001b[1;35mUrl\u001b[0m\u001b[1m(\u001b[0m\u001b[32m'http://onto-ns.com/s7/0.1.0/MolecularSpecies'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[33mdescription\u001b[0m=\u001b[32m'A bare-bones entity for testing.'\u001b[0m,\n", " \u001b[33mdimensions\u001b[0m=\u001b[1m{\u001b[0m\u001b[32m'N'\u001b[0m: \u001b[32m'Number of elements.'\u001b[0m\u001b[1m}\u001b[0m,\n", " \u001b[33mproperties\u001b[0m=\u001b[1m{\u001b[0m\n", " \u001b[32m'atom'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'string'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'An atom.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'electrons'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'int'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Number of electrons.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'mass'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic mass.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'amu'\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[32m'radius'\u001b[0m: \u001b[1;35mSOFT7EntityProperty\u001b[0m\u001b[1m(\u001b[0m\u001b[33mtype\u001b[0m=\u001b[32m'float'\u001b[0m, \u001b[33mshape\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'N'\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdescription\u001b[0m=\u001b[32m'Atomic radius.'\u001b[0m, \u001b[33munit\u001b[0m=\u001b[32m'Å'\u001b[0m\u001b[1m)\u001b[0m\n", " \u001b[1m}\u001b[0m\n", "\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from s7.factories.generated_classes import MolecularSpeciesEntity\n", "\n", "print(MolecularSpeciesEntity)\n", "print(\n", " \"The imported 'MolecularSpeciesEntity' class is exactly the same as the previously \"\n", " f\"generated 'MolecularSpecies' class: {MolecularSpeciesEntity == MolecularSpecies}\"\n", ")\n", "print(MolecularSpeciesEntity.__doc__)\n", "print(MolecularSpeciesEntity.entity)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create an instance of the custom class\n", "\n", "Load test data that has been pre-formatted to match the data structure of an entity, i.e., it has been written as a dictionary/object with the top keys `dimensions` and `properties`." ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
dimensions:\n",
       "  N: 3\n",
       "properties:\n",
       "  atom:\n",
       "  - H\n",
       "  - He\n",
       "  - Li\n",
       "  electrons:\n",
       "  - 1\n",
       "  - 2\n",
       "  - 3\n",
       "  mass:\n",
       "  - 1.008\n",
       "  - 4.0026\n",
       "  - 6.94\n",
       "  radius:\n",
       "  - 0.37\n",
       "  - 0.32\n",
       "  - 1.45\n",
       "\n",
       "
\n" ], "text/plain": [ "dimensions:\n", " N: \u001b[1;36m3\u001b[0m\n", "properties:\n", " atom:\n", " - H\n", " - He\n", " - Li\n", " electrons:\n", " - \u001b[1;36m1\u001b[0m\n", " - \u001b[1;36m2\u001b[0m\n", " - \u001b[1;36m3\u001b[0m\n", " mass:\n", " - \u001b[1;36m1.008\u001b[0m\n", " - \u001b[1;36m4.0026\u001b[0m\n", " - \u001b[1;36m6.94\u001b[0m\n", " radius:\n", " - \u001b[1;36m0.37\u001b[0m\n", " - \u001b[1;36m0.32\u001b[0m\n", " - \u001b[1;36m1.45\u001b[0m\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "TEST_ENTITY_DATA_PATH = STATIC_TEST_DIR / \"soft_datasource_entity_test_data.yaml\"\n", "\n", "RAW_TEST_ENTITY_DATA: dict[str, Any] = yaml.safe_load(TEST_ENTITY_DATA_PATH.read_text())\n", "\n", "print(yaml.safe_dump(RAW_TEST_ENTITY_DATA))" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
MolecularSpeciesEntity(\n",
       "    dimensions=MolecularSpeciesEntityDimensions(N=3),\n",
       "    properties=MolecularSpeciesEntityProperties(\n",
       "        atom=['H', 'He', 'Li'],\n",
       "        electrons=[1, 2, 3],\n",
       "        mass=[1.008, 4.0026, 6.94],\n",
       "        radius=[0.37, 0.32, 1.45]\n",
       "    )\n",
       ")\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mMolecularSpeciesEntity\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33mdimensions\u001b[0m=\u001b[1;35mMolecularSpeciesEntityDimensions\u001b[0m\u001b[1m(\u001b[0m\u001b[33mN\u001b[0m=\u001b[1;36m3\u001b[0m\u001b[1m)\u001b[0m,\n", " \u001b[33mproperties\u001b[0m=\u001b[1;35mMolecularSpeciesEntityProperties\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33matom\u001b[0m=\u001b[1m[\u001b[0m\u001b[32m'H'\u001b[0m, \u001b[32m'He'\u001b[0m, \u001b[32m'Li'\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33melectrons\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m3\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mmass\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;36m1.008\u001b[0m, \u001b[1;36m4.0026\u001b[0m, \u001b[1;36m6.94\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mradius\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;36m0.37\u001b[0m, \u001b[1;36m0.32\u001b[0m, \u001b[1;36m1.45\u001b[0m\u001b[1m]\u001b[0m\n", " \u001b[1m)\u001b[0m\n", "\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "entity_data = MolecularSpecies(**RAW_TEST_ENTITY_DATA)\n", "\n", "print(entity_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While the entity is still accessible under the `entity` class attribute for the instance, when serialized to JSON or a dictionary utilizing the standard serialization methods for a pydantic model, only `dimensions` and `properties` are included:" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Python dictionary:\n",
       "
\n" ], "text/plain": [ "Python dictionary:\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
{\n",
       "    'dimensions': {'N': 3},\n",
       "    'properties': {\n",
       "        'atom': ['H', 'He', 'Li'],\n",
       "        'electrons': [1, 2, 3],\n",
       "        'mass': [1.008, 4.0026, 6.94],\n",
       "        'radius': [0.37, 0.32, 1.45]\n",
       "    }\n",
       "}\n",
       "
\n" ], "text/plain": [ "\u001b[1m{\u001b[0m\n", " \u001b[32m'dimensions'\u001b[0m: \u001b[1m{\u001b[0m\u001b[32m'N'\u001b[0m: \u001b[1;36m3\u001b[0m\u001b[1m}\u001b[0m,\n", " \u001b[32m'properties'\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[32m'atom'\u001b[0m: \u001b[1m[\u001b[0m\u001b[32m'H'\u001b[0m, \u001b[32m'He'\u001b[0m, \u001b[32m'Li'\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'electrons'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m1\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m3\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'mass'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m1.008\u001b[0m, \u001b[1;36m4.0026\u001b[0m, \u001b[1;36m6.94\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[32m'radius'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m0.37\u001b[0m, \u001b[1;36m0.32\u001b[0m, \u001b[1;36m1.45\u001b[0m\u001b[1m]\u001b[0m\n", " \u001b[1m}\u001b[0m\n", "\u001b[1m}\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
JSON:\n",
       "
\n" ], "text/plain": [ "JSON:\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
{\n",
       "  \"dimensions\": {\n",
       "    \"N\": 3\n",
       "  },\n",
       "  \"properties\": {\n",
       "    \"atom\": [\n",
       "      \"H\",\n",
       "      \"He\",\n",
       "      \"Li\"\n",
       "    ],\n",
       "    \"electrons\": [\n",
       "      1,\n",
       "      2,\n",
       "      3\n",
       "    ],\n",
       "    \"mass\": [\n",
       "      1.008,\n",
       "      4.0026,\n",
       "      6.94\n",
       "    ],\n",
       "    \"radius\": [\n",
       "      0.37,\n",
       "      0.32,\n",
       "      1.45\n",
       "    ]\n",
       "  }\n",
       "}\n",
       "
\n" ], "text/plain": [ "\u001b[1m{\u001b[0m\n", " \u001b[1;34m\"dimensions\"\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[1;34m\"N\"\u001b[0m: \u001b[1;36m3\u001b[0m\n", " \u001b[1m}\u001b[0m,\n", " \u001b[1;34m\"properties\"\u001b[0m: \u001b[1m{\u001b[0m\n", " \u001b[1;34m\"atom\"\u001b[0m: \u001b[1m[\u001b[0m\n", " \u001b[32m\"H\"\u001b[0m,\n", " \u001b[32m\"He\"\u001b[0m,\n", " \u001b[32m\"Li\"\u001b[0m\n", " \u001b[1m]\u001b[0m,\n", " \u001b[1;34m\"electrons\"\u001b[0m: \u001b[1m[\u001b[0m\n", " \u001b[1;36m1\u001b[0m,\n", " \u001b[1;36m2\u001b[0m,\n", " \u001b[1;36m3\u001b[0m\n", " \u001b[1m]\u001b[0m,\n", " \u001b[1;34m\"mass\"\u001b[0m: \u001b[1m[\u001b[0m\n", " \u001b[1;36m1.008\u001b[0m,\n", " \u001b[1;36m4.0026\u001b[0m,\n", " \u001b[1;36m6.94\u001b[0m\n", " \u001b[1m]\u001b[0m,\n", " \u001b[1;34m\"radius\"\u001b[0m: \u001b[1m[\u001b[0m\n", " \u001b[1;36m0.37\u001b[0m,\n", " \u001b[1;36m0.32\u001b[0m,\n", " \u001b[1;36m1.45\u001b[0m\n", " \u001b[1m]\u001b[0m\n", " \u001b[1m}\u001b[0m\n", "\u001b[1m}\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"Python dictionary:\")\n", "print(entity_data.model_dump())\n", "\n", "print(\"JSON:\")\n", "print_json(entity_data.model_dump_json())" ] } ], "metadata": { "kernelspec": { "display_name": "soft", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }