diff --git a/src/ifcopenshell-python/ifcopenshell/util/system.py b/src/ifcopenshell-python/ifcopenshell/util/system.py index 3a5be9693f..ac19ab3c35 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/system.py +++ b/src/ifcopenshell-python/ifcopenshell/util/system.py @@ -39,6 +39,12 @@ group_types: dict[str, tuple[str, ...]] = { "IfcSystem": ("IfcProduct",), "IfcGroup": ("IfcObjectDefinition",), } +# Subclasses. +group_types["IfcDistributionCircuit"] = group_types["IfcDistributionSystem"] +# Replaced by IfcDistributionCircuit in IFC4, though it wasn't limited to IfcDistributionElements: +# "Usage of IfcElectricalCircuit is as for the supertype IfcSystem". +group_types["IfcElectricalCircuit"] = group_types["IfcSystem"] + FLOW_DIRECTION = Literal["SINK", "SOURCE", "SOURCEANDSINK", "NOTEDEFINED"] diff --git a/src/ifcopenshell-python/test/util/test_system.py b/src/ifcopenshell-python/test/util/test_system.py index 2796c3c3d2..892d9e2fdf 100644 --- a/src/ifcopenshell-python/test/util/test_system.py +++ b/src/ifcopenshell-python/test/util/test_system.py @@ -21,7 +21,23 @@ import test.bootstrap import ifcopenshell.api import ifcopenshell.api.root import ifcopenshell.api.system +import ifcopenshell.util.schema import ifcopenshell.util.system as subject +from typing import get_args + + +class TestValidateGroupTypes: + def test_run(self): + ifcsystem_classes = set() + for schema_name in get_args(ifcopenshell.util.schema.IFC_SCHEMA): + schema = ifcopenshell.schema_by_name(schema_name) + declaration = schema.declaration_by_name("IfcSystem") + declarations = ifcopenshell.util.schema.get_subtypes(declaration) + ifcsystem_classes.update(d.name() for d in declarations) + + used_classes = set(subject.group_types) + unused_classes = ifcsystem_classes - used_classes + assert not unused_classes class TestIsAssignable(test.bootstrap.IFC4):