MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / _floatify_numeric_lists

Function _floatify_numeric_lists

src/ifcedit/ifcedit/coerce.py:151–167  ·  view source on GitHub ↗

Recursively convert lists of numbers to lists of floats. IFC C++ bindings require Python floats (not ints) for AGGREGATE OF DOUBLE attributes (e.g. DirectionRatios, Coordinates). JSON parsing produces ints for whole numbers like 0, which causes a TypeError at the binding level.

(obj)

Source from the content-addressed store, hash-verified

149
150
151def _floatify_numeric_lists(obj):
152 """Recursively convert lists of numbers to lists of floats.
153
154 IFC C++ bindings require Python floats (not ints) for AGGREGATE OF DOUBLE
155 attributes (e.g. DirectionRatios, Coordinates). JSON parsing produces ints
156 for whole numbers like 0, which causes a TypeError at the binding level.
157 """
158 if isinstance(obj, dict):
159 return {k: _floatify_numeric_lists(v) for k, v in obj.items()}
160 if (
161 isinstance(obj, list)
162 and obj
163 and all(isinstance(v, (int, float)) for v in obj)
164 and any(isinstance(v, float) for v in obj)
165 ):
166 return [float(v) for v in obj]
167 return obj
168
169
170def _split_list(value_str: str) -> list[str]:

Callers 1

coerce_valueFunction · 0.85

Calls 1

itemsMethod · 0.45

Tested by

no test coverage detected