{ "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
<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 }