Find classes and values#

Ontology classes are Python classes. Enumeration values, such as media and roles, are EnumValue objects in the package’s enums module. Both can be browsed as trees.

Browse a class branch#

from plumb.watr import Process

print(Process.meta.tree(max_depth=2))
Process
├── Process_BiologicalProcess
│   ├── Process_ActivatedSludge
│   ├── Process_Biofiltration
│   ├── Process_Composting
│   ├── Process_Denitrification
│   ├── Process_Digestion
│   ├── Process_EnhancedBiologicalPhosphorusRemoval
│   └── Process_Nitrification
├── Process_ChemicalProcess
│   ├── Process_ChemicalPrecipitation
│   ├── Process_Combustion
│   ├── Process_Dosing
│   ├── Process_Electrodialysis
│   ├── Process_Electrolysis
│   ├── Process_Flocculation
│   ├── Process_HighDensitySludge
│   ├── Process_Hydrolysis
│   ├── Process_IonExchange
│   ├── Process_Oxidation
│   ├── Process_Reduction
│   └── Process_SolventExtraction
└── Process_PhysicalProcess
    ├── Process_Adsorption
    ├── Process_Cleaning
    ├── Process_Combustion
    ├── Process_Comminution
    ├── Process_Condensation
    ├── Process_Electrocoagulation
    ├── Process_Electrooxidation
    ├── Process_Evaporation
    ├── Process_GasTransfer
    ├── Process_HighDensitySludge
    ├── Process_IonExchange
    ├── Process_LandApplication
    ├── Process_Landfilling
    ├── Process_Mixing
    ├── Process_Recirculation
    ├── Process_Separation
    ├── Process_Solidification
    ├── Process_ThermalTreatment
    └── Process_UVIrradiation

Attribute

Gives

meta.children

direct subclasses

meta.descendants

all subclasses

meta.parents

direct parents

meta.tree(max_depth=...)

printable subtree

A class with several parents appears under each one.

Select a class#

Look up a class within a branch by short name, Python name, or IRI:

from plumb.watr import Process_ReverseOsmosis

selected = Process.meta["ReverseOsmosis"]
selected is Process_ReverseOsmosis, selected.meta.iri
(True, 'https://watermetadata.org/ontology/watr#Process-ReverseOsmosis')

The lookup raises KeyError outside the branch. issubclass() and isinstance() work as usual.

Inspect a class#

.meta gives a class’s ontology provenance:

from plumb.watr import SedimentationTank

SedimentationTank.meta.iri, SedimentationTank.meta.label, SedimentationTank.meta.parents
('https://watermetadata.org/ontology/watr#SedimentationTank',
 'Sedimentation Tank',
 (plumb.watr.SeparationTank,))
print(SedimentationTank.meta.definition)
A tank in which suspended solids separate from water by settling under gravity

meta.properties lists the generated attributes and describe_ports() the connection points. On an object, meta.instance_iri and meta.model identify it.

List every class#

Each package’s REGISTRY lists its classes:

from plumb import watr

len(watr.REGISTRY.classes), watr.REGISTRY.resolve("Process_ReverseOsmosis")
(709, plumb.watr.Process_ReverseOsmosis)

The class catalog lists every S223 and WaTr class.

Browse enumeration values#

enums.values holds every value under a flat name. The top level of enums holds the branches, for tab completion:

from plumb.watr import enums

water = enums.Substance.Medium.Mix.Fluid.Water
water is enums.values.Fluid_Water
True
water.tree(max_depth=2)
Fluid-Water
├── Water-Brackish
├── Water-Brine
├── Water-ChilledWater
├── Water-Freshwater
├── Water-GlycolSolution
│   ├── GlycolSolution-15Percent
│   └── GlycolSolution-30Percent
├── Water-HotWater
├── Water-Seawater
└── Water-Steam

Values have children, descendants, parent, and parents, without a .meta step. tree_text() returns the tree as a string.

Select a value#

Bracket lookup searches a subtree by short name, flat name, or IRI:

chilled = enums.values.Water_ChilledWater
water["ChilledWater"] is chilled, water[chilled.iri] is chilled
(True, True)

An ambiguous short name raises KeyError listing the matches.

Check ancestry#

is_a() follows every parent:

sludge = enums.values.Fluid_Sludge
sludge.is_a(enums.values.Mix_Fluid), sludge.is_a(enums.values.Fluid_Water)
(True, False)

Sludge is a fluid mixture, not a kind of water.