{ "cells": [ { "cell_type": "markdown", "id": "97eb3a60-0af1-4f59-9dd6-0be8dfde93e6", "metadata": {}, "source": [ "# Introduction\n", "\n", "`pyiron_ontology` uses the `owlready2` library to build up pyiron-specific ontologies, and provides some extra tools to help you leverage these.\n", "\n", "At present, the only ontology implemented is for the realm of atomistic calculations, and the scope of this ontology is still fairly limited.\n", "\n", "First, let's import `pyiron_ontology` and grab the atomistics ontology (an `owlready2.namespace.Ontology` object) we define in there" ] }, { "cell_type": "code", "execution_count": 1, "id": "8c7000fd-0c77-4b8a-b1fc-8abde3bfe3b0", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "* Owlready2 * Warning: optimized Cython parser module 'owlready2_optimized' is not available, defaulting to slower Python implementation\n" ] } ], "source": [ "import owlready2 as owl\n", "import pyiron_ontology as po" ] }, { "cell_type": "code", "execution_count": 2, "id": "c1fcd3b6-64df-48d6-8c61-5c1c40434088", "metadata": {}, "outputs": [], "source": [ "onto = po.dynamic.atomistics()" ] }, { "cell_type": "markdown", "id": "84ab7a12-d976-4e24-aaf8-ccfe6b553def", "metadata": {}, "source": [ "We can look at various properties of the ontology, just like other owl ontologies, e.g. the classes and individuals defined in this space.\n", "\n", "There are four key-classes common to all ontologies made in the scope of `pyiron_ontology`: `Generic`, `Input`, `Function`, and `Output`. `Generic` is the parent class used for defining domain knowledge; the remaining three are used to represent how computations are performed in any knowledge-space. (You'll also see `PyironOntoThing`, `Parameter`, `WorkflowThing`, and `IO` are parent classes used under the hood).\n", "\n", "`Generic` will be heavily sub-classed in each specific ontology, and then instantiated and paired with inputs and outputs so that we will know what sort of information is moving around our computation graphs. The workflow elements will (so far) only be instantiated, defining all the possible calculation available.\n", "\n", "Let's first look at the classes for our atomistics knowledge-space:" ] }, { "cell_type": "code", "execution_count": 3, "id": "29b57b66-a385-4fbc-9429-0c89638b838d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[atomistics.PyironOntoThing,\n", " atomistics.Parameter,\n", " atomistics.Generic,\n", " atomistics.WorkflowThing,\n", " atomistics.Function,\n", " atomistics.IO,\n", " atomistics.Output,\n", " atomistics.Input,\n", " atomistics.AtomisticsFunction,\n", " atomistics.UserInput,\n", " atomistics.PyironObject,\n", " atomistics.PhysicalProperty,\n", " atomistics.Energy,\n", " atomistics.Force,\n", " atomistics.ChemicalElement,\n", " atomistics.MaterialProperty,\n", " atomistics.BulkModulus,\n", " atomistics.BPrime,\n", " atomistics.SurfaceEnergy,\n", " atomistics.Dimensional,\n", " atomistics.OneD,\n", " atomistics.TwoD,\n", " atomistics.ThreeD,\n", " atomistics.Structure,\n", " atomistics.Defected,\n", " atomistics.HasDislocation,\n", " atomistics.HasVacancy,\n", " atomistics.HasInterface,\n", " atomistics.HasGB,\n", " atomistics.HasSurface,\n", " atomistics.HasPB,\n", " atomistics.Bulk,\n", " atomistics.PyironProject,\n", " atomistics.AtomisticsProject,\n", " atomistics.PyironJob,\n", " atomistics.AtomisticsJob,\n", " atomistics.Lammps,\n", " atomistics.Vasp]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.classes())" ] }, { "cell_type": "markdown", "id": "f596c62c-602a-4814-8735-e01e23f7675a", "metadata": {}, "source": [ "We can also look at the individuals. Some of these should have very descriptive names -- these are the `Input`, `Output`, and `Function` individuals. The rest are instances of our `Generic` class (and its children) and receive their name automatically." ] }, { "cell_type": "code", "execution_count": 4, "id": "aff4fb1a-b2e6-469d-b2a1-5b42f1b2faf3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[atomistics.project,\n", " atomistics.userinput1,\n", " atomistics.project_input_name,\n", " atomistics.atomisticsproject1,\n", " atomistics.project_output_atomistics_project,\n", " atomistics.bulk_structure,\n", " atomistics.generic1,\n", " atomistics.bulk_structure_input_element,\n", " atomistics.structure1,\n", " atomistics.bulk_structure_output_structure,\n", " atomistics.surface_structure,\n", " atomistics.generic2,\n", " atomistics.surface_structure_input_element,\n", " atomistics.structure2,\n", " atomistics.surface_structure_output_structure,\n", " atomistics.lammps,\n", " atomistics.atomisticsproject2,\n", " atomistics.lammps_input_project,\n", " atomistics.structure3,\n", " atomistics.lammps_input_structure,\n", " atomistics.lammps1,\n", " atomistics.lammps_output_job,\n", " atomistics.vasp,\n", " atomistics.atomisticsproject3,\n", " atomistics.vasp_input_project,\n", " atomistics.generic3,\n", " atomistics.vasp_input_structure,\n", " atomistics.vasp1,\n", " atomistics.vasp_output_job,\n", " atomistics.atomistic_taker,\n", " atomistics.atomisticsjob1,\n", " atomistics.structure4,\n", " atomistics.atomistic_taker_job,\n", " atomistics.energy1,\n", " atomistics.atomistic_taker_output_energy_pot,\n", " atomistics.force1,\n", " atomistics.atomistic_taker_output_forces,\n", " atomistics.murnaghan,\n", " atomistics.atomisticsproject4,\n", " atomistics.murnaghan_input_project,\n", " atomistics.atomisticsjob2,\n", " atomistics.structure5,\n", " atomistics.murnaghan_input_job,\n", " atomistics.bulkmodulus1,\n", " atomistics.murnaghan_output_bulk_modulus,\n", " atomistics.bprime1,\n", " atomistics.murnaghan_output_b_prime,\n", " atomistics.surface_energy,\n", " atomistics.structure6,\n", " atomistics.surface_energy_input_bulk_structure,\n", " atomistics.energy2,\n", " atomistics.structure7,\n", " atomistics.surface_energy_input_bulk_energy,\n", " atomistics.structure8,\n", " atomistics.surface_energy_input_slab_structure,\n", " atomistics.energy3,\n", " atomistics.structure9,\n", " atomistics.surface_energy_input_slab_energy,\n", " atomistics.surfaceenergy1,\n", " atomistics.surface_energy_output_surface_energy]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.individuals())" ] }, { "cell_type": "markdown", "id": "c9b41d5b-1e6c-40df-ab96-4b45d5b2d626", "metadata": {}, "source": [ "We can make the usual owlready queries of these objects, e.g." ] }, { "cell_type": "code", "execution_count": 5, "id": "6318547e-7345-4e1a-82f1-a6cf47f245d6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[atomistics.IO,\n", " atomistics.Input,\n", " owl.Thing,\n", " atomistics.Parameter,\n", " atomistics.PyironOntoThing,\n", " atomistics.WorkflowThing]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.vasp_input_structure.INDIRECT_is_a" ] }, { "cell_type": "code", "execution_count": 6, "id": "e86f526d-0c69-4e2e-9ae1-018ccd78d23a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[atomistics.ThreeD,\n", " atomistics.Dimensional,\n", " owl.Thing,\n", " atomistics.Parameter,\n", " atomistics.Structure,\n", " atomistics.Generic,\n", " atomistics.PyironObject,\n", " atomistics.PyironOntoThing]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.vasp_input_structure.generic.INDIRECT_is_a" ] }, { "cell_type": "markdown", "id": "dd2b9abf-ac9a-44aa-bd74-6840a2405e10", "metadata": {}, "source": [ "We can also look into some of the atomistics-specific relationships that have been defined:" ] }, { "cell_type": "code", "execution_count": 7, "id": "827238e7-4772-4f94-901e-be17edbad66e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([atomistics.vasp_input_project, atomistics.vasp_input_structure],\n", " None,\n", " [atomistics.vasp_input_project, atomistics.vasp_input_structure])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.vasp.mandatory_inputs, onto.optional_inputs, onto.vasp.inputs" ] }, { "cell_type": "code", "execution_count": 8, "id": "2f2b3307-ebd3-4029-8a47-487e7de6fad1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[atomistics.vasp_output_job]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.vasp.outputs" ] }, { "cell_type": "markdown", "id": "9e042ea5-a70a-496c-b51e-efdef37e7fba", "metadata": {}, "source": [ "and we can chain these queries together in meaningful ways:" ] }, { "cell_type": "code", "execution_count": 9, "id": "c1c9359f-a346-4b48-8b8b-a83583801e25", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "some_code atomistics.vasp\n", "first_input atomistics.vasp_input_project\n", "appears_elsewhere [atomistics.vasp_input_project]\n", "can_come_from [atomistics.project_output_atomistics_project]\n", "which_is_produced_by atomistics.project\n" ] } ], "source": [ "some_code = onto.vasp\n", "first_input = some_code.mandatory_inputs[0]\n", "appears_elsewhere = first_input.generic.parameters\n", "can_come_from = first_input.get_sources()\n", "which_is_produced_by = can_come_from[0].output_of\n", "print('some_code', some_code)\n", "print('first_input', first_input)\n", "print('appears_elsewhere', appears_elsewhere)\n", "print('can_come_from', can_come_from)\n", "print('which_is_produced_by', which_is_produced_by)" ] }, { "cell_type": "markdown", "id": "47b26d66-fd19-4605-b2ea-1203d472dfa2", "metadata": {}, "source": [ "This is powerful, but can be a bit unwieldly. \n", "\n", "`pyiron_ontology` also comes with helper tools for building this sort of chain, or \"workflow\" in a guided or automatic way.\n", "\n", "First, let's see all the possible chains for getting input to a Lammps calculation:" ] }, { "cell_type": "code", "execution_count": 10, "id": "026309ed-91eb-4ce5-baee-f50a9e98164f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lammps\n", "\tlammps_input_project\n", "\t\tproject_output_atomistics_project\n", "\t\t\tproject\n", "\tlammps_input_structure\n", "\t\tsurface_structure_output_structure\n", "\t\t\tsurface_structure\n", "\t\tbulk_structure_output_structure\n", "\t\t\tbulk_structure\n" ] } ], "source": [ "onto.lammps.get_source_tree().render()" ] }, { "cell_type": "markdown", "id": "5aaea0f0-5244-4f3f-b40a-8a8b494f518d", "metadata": {}, "source": [ "This tool also passes requirements upstream in the workflow. For instance, we see above that Lammps can take either bulk-like or non-bulk-like structure input. Instead of querying the ontology about what's needed to run a particular code, let's ask for a workflow to produce a particular material property: the bulk modulus. In this case, we know the workflow only makes sense if the structures going into it are bulk-like!\n", "\n", "When we ask for this workflow, we again see Lammps (and Vasp) coming up as part of our tree, but now we see that it is precluded from taking surface structures because the condition for a bulk-like structure got passed up through our workflow!\n", "\n", "(Note, these tools only work on _individuals_, so we'll just reinstantiate a copy of our `BulkModulus` generic class and query that)" ] }, { "cell_type": "code", "execution_count": 11, "id": "97deb339-a99c-4e37-b452-e2f4d722b412", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bulkmodulus2\n", "\tmurnaghan_output_bulk_modulus\n", "\t\tmurnaghan\n", "\t\t\tmurnaghan_input_project\n", "\t\t\t\tproject_output_atomistics_project\n", "\t\t\t\t\tproject\n", "\t\t\tmurnaghan_input_job\n", "\t\t\t\tlammps_output_job\n", "\t\t\t\t\tlammps\n", "\t\t\t\t\t\tlammps_input_project\n", "\t\t\t\t\t\t\tproject_output_atomistics_project\n", "\t\t\t\t\t\t\t\tproject\n", "\t\t\t\t\t\tlammps_input_structure\n", "\t\t\t\t\t\t\tbulk_structure_output_structure\n", "\t\t\t\t\t\t\t\tbulk_structure\n", "\t\t\t\tvasp_output_job\n", "\t\t\t\t\tvasp\n", "\t\t\t\t\t\tvasp_input_project\n", "\t\t\t\t\t\t\tproject_output_atomistics_project\n", "\t\t\t\t\t\t\t\tproject\n", "\t\t\t\t\t\tvasp_input_structure\n", "\t\t\t\t\t\t\tbulk_structure_output_structure\n", "\t\t\t\t\t\t\t\tbulk_structure\n" ] } ], "source": [ "onto.BulkModulus().get_source_tree().render()" ] }, { "cell_type": "markdown", "id": "b77df807-500a-4608-9d4f-11c9ca392f86", "metadata": {}, "source": [ "Instead of seeing *all* possible paths, we can build one particular path iteratively, looking at the choices available at each step and selecting which one we want:" ] }, { "cell_type": "code", "execution_count": 12, "id": "6a437427-16a4-4d19-9262-98555bb2e0eb", "metadata": {}, "outputs": [], "source": [ "b_prime = onto.BPrime()" ] }, { "cell_type": "code", "execution_count": 13, "id": "39d7a305-2f51-446f-8d2a-260cb6a20b01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " [atomistics.murnaghan_output_b_prime])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path()" ] }, { "cell_type": "code", "execution_count": 14, "id": "93654029-b279-4a17-83ca-41ab486cb08b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(, [atomistics.murnaghan])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0)" ] }, { "cell_type": "code", "execution_count": 15, "id": "5fe5141b-4325-4fce-8460-b6f16eba1040", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " [atomistics.murnaghan_input_project, atomistics.murnaghan_input_job])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0) " ] }, { "cell_type": "markdown", "id": "d82d895e-fe79-4f9e-832b-2542cf09d5ed", "metadata": {}, "source": [ "The project is a bit of a boring path to follow, so let's choose `1` here to follow the job path:" ] }, { "cell_type": "code", "execution_count": 16, "id": "a757e745-357c-418a-a830-0c03eaba8368", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " [atomistics.lammps_output_job, atomistics.vasp_output_job])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1)" ] }, { "cell_type": "code", "execution_count": 17, "id": "a9e5e89e-28b3-4935-a08f-48c3828acff7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(, [atomistics.vasp])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1, 1)" ] }, { "cell_type": "code", "execution_count": 18, "id": "b25f3e40-03ea-4b27-bd74-c19cae2e6737", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " [atomistics.vasp_input_project, atomistics.vasp_input_structure])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1, 1, 0)" ] }, { "cell_type": "code", "execution_count": 19, "id": "e2cd25f5-cd73-4f2d-9de5-76d97188aee3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " [atomistics.project_output_atomistics_project])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1, 1, 0, 0)" ] }, { "cell_type": "code", "execution_count": 20, "id": "1f8ecf63-9397-41d1-8ae3-1ecece042c7a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(, [atomistics.project])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1, 1, 0, 0, 0)" ] }, { "cell_type": "code", "execution_count": 21, "id": "28eaa288-2fd2-42c3-8489-9549ce706f42", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(, [])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_prime.get_source_path(0, 0, 1, 1, 0, 0, 0, 0)" ] }, { "cell_type": "code", "execution_count": 22, "id": "4ee032ab-75b1-49f0-92f1-c90aa5c89a72", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bprime2\n", "\tmurnaghan_output_b_prime\n", "\t\tmurnaghan\n", "\t\t\tmurnaghan_input_job\n", "\t\t\t\tvasp_output_job\n", "\t\t\t\t\tvasp\n", "\t\t\t\t\t\tvasp_input_project\n", "\t\t\t\t\t\t\tproject_output_atomistics_project\n", "\t\t\t\t\t\t\t\tproject\n" ] } ], "source": [ "path, _ = b_prime.get_source_path(0, 0, 1, 1, 0, 0, 0, 0)\n", "path.render()" ] }, { "cell_type": "markdown", "id": "f3de4a85-2d97-4349-8de1-f75779a8becb", "metadata": {}, "source": [ "Note: this only traces _one path_ of the required input to get to the result we originally queried -- as noted above where we ignored the project input; you need to choose paths for _all_ the required input at each `Function` step of the path." ] }, { "cell_type": "markdown", "id": "ce0eb416-0c33-48a0-b111-5493cbec22b8", "metadata": {}, "source": [ "# Working with pyiron data\n", "\n", "We also have tools for leveraging the ontology to search through existing pyiron data in your storage and database \n", "\n", "Here we'll need import `pyiron_atomistics.Project` so we can create some data to work with." ] }, { "cell_type": "code", "execution_count": 23, "id": "81d4f04a-1ed3-43a0-8a82-dbfbe4c14cf3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "739f6ba574ba447ba0351e5d7c533857",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pyiron_ontology import AtomisticsReasoner\n",
    "from pyiron_atomistics import Project\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "3f284ae6-0e17-42ab-9c77-e27f54efe07c",
   "metadata": {},
   "outputs": [],
   "source": [
    "reasoner = AtomisticsReasoner(onto) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6885ca20-2375-4e3f-8bff-b088b8ad2129",
   "metadata": {},
   "source": [
    "Next, we'll produce some data and then use the a tool on the reasoner to search over it for data that matches a particular ontological property.\n",
    "\n",
    "First, we'll need to produce some data to search over. In this case, let's calculate the bulk modulus for a couple of alloys with varying Nickle content. On a single-core laptop, this might take two or three minutes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "02c6daf2-3982-4d54-b168-8265ab845f6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "441b49b5f43e4d4fbb3657a519c1443e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/48 [00:00\n",
       "\n",
       "\n",
       "  \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "  \n",
       "  \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "    \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "      \n",
       "    \n",
       "  \n",
       "
Chemical Formulaatomistics.BulkModulusunitEngine
0Cu108141.949581GPaLammps
1Ag9Cu99134.392608GPaLammps
2Ag24Cu84NaNGPaLammps
3Cu108141.949581GPaLammps
4Cu99Ni9145.901172GPaLammps
5Cu83Ni25152.635624GPaLammps
\n", "" ], "text/plain": [ " Chemical Formula atomistics.BulkModulus unit Engine\n", "0 Cu108 141.949581 GPa Lammps\n", "1 Ag9Cu99 134.392608 GPa Lammps\n", "2 Ag24Cu84 NaN GPa Lammps\n", "3 Cu108 141.949581 GPa Lammps\n", "4 Cu99Ni9 145.901172 GPa Lammps\n", "5 Cu83Ni25 152.635624 GPa Lammps" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reasoner.search_database_for_property(onto.BulkModulus(), pr)" ] }, { "cell_type": "markdown", "id": "b3afd055-59b5-4f0f-84b3-d2d7e7824575", "metadata": {}, "source": [ "We can also filter our search by chemistry:" ] }, { "cell_type": "code", "execution_count": 29, "id": "53793bba-bec3-41df-806a-63642e4ba39d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Chemical Formulaatomistics.BPrimeunitEngine
0Cu1084.393195NoneLammps
1Ag9Cu996.157580NoneLammps
2Ag24Cu84NaNNoneLammps
3Cu1084.393195NoneLammps
4Cu99Ni94.309860NoneLammps
5Cu83Ni254.112948NoneLammps
\n", "
" ], "text/plain": [ " Chemical Formula atomistics.BPrime unit Engine\n", "0 Cu108 4.393195 None Lammps\n", "1 Ag9Cu99 6.157580 None Lammps\n", "2 Ag24Cu84 NaN None Lammps\n", "3 Cu108 4.393195 None Lammps\n", "4 Cu99Ni9 4.309860 None Lammps\n", "5 Cu83Ni25 4.112948 None Lammps" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reasoner.search_database_for_property(onto.BPrime(), pr, select_alloy=\"Cu\")" ] }, { "cell_type": "markdown", "id": "200790a7-46ee-4f9b-bcb4-302dcfdad8b6", "metadata": {}, "source": [ "# Cleanup" ] }, { "cell_type": "code", "execution_count": 30, "id": "3aea218a-9c08-449e-83c6-dbfc9799ed88", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/ff/j3764z6n37386m647kqygyzw0000gp/T/ipykernel_94195/3270375829.py:1: DeprecationWarning: pyiron_base.project.generic.remove_jobs_silently is deprecated: Use pr.remove_jobs(silently=True) rather than pr.remove_jobs_silently()..\n", " pr.remove_jobs_silently(recursive=True)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e6589d0f80274bd3878895b811c6a071", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/48 [00:00