mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 14:23:53 +00:00
typing
This commit is contained in:
@@ -31,6 +31,7 @@ import ifcopenshell.guid
|
||||
import ifcopenshell.util.brick
|
||||
import ifcopenshell.util.element
|
||||
import ifcopenshell.util.system
|
||||
from brickschema.persistent import Changeset
|
||||
|
||||
import bonsai.core.brick
|
||||
import bonsai.core.tool
|
||||
@@ -580,7 +581,7 @@ class BrickStore:
|
||||
|
||||
@classmethod
|
||||
@contextmanager
|
||||
def new_changeset(cls) -> Generator[Any, None, None]:
|
||||
def new_changeset(cls) -> Generator[Changeset]:
|
||||
cls.current_changesets += 1
|
||||
with BrickStore.graph.new_changeset("PROJECT") as cs:
|
||||
yield cs
|
||||
|
||||
@@ -15,14 +15,21 @@
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import ifcopenshell
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ifcopenshell.util.unit import DimensionalExponents
|
||||
|
||||
|
||||
def add_context_dependent_unit(
|
||||
file: ifcopenshell.file,
|
||||
unit_type: str = "USERDEFINED",
|
||||
name: str = "THINGAMAJIG",
|
||||
dimensions: tuple[int, int, int, int, int, int, int] = (0, 0, 0, 0, 0, 0, 0),
|
||||
dimensions: DimensionalExponents = (0, 0, 0, 0, 0, 0, 0),
|
||||
) -> ifcopenshell.entity_instance:
|
||||
"""Add a new arbitrary unit that can only be interpreted in a project specific context
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ class sqlite(file):
|
||||
# For creating C++ instances so that some of the calls here work
|
||||
self.shadow_file = ifcopenshell.file(schema_identifier=self.schema)
|
||||
# But we only create them once per type because we basically only need access to 'semi-static' such as get_attribute_category()
|
||||
self.instance_map = {}
|
||||
self.instance_map: dict[str, ifcopenshell.entity_instance] = {}
|
||||
|
||||
self.cursor.execute("SELECT ifc_id, ifc_class FROM id_map")
|
||||
self.id_map: dict[int, str] = {}
|
||||
@@ -186,7 +186,7 @@ class sqlite(file):
|
||||
"""Not supported for sqlite database."""
|
||||
assert False, "Not supported for sqlite database."
|
||||
|
||||
def _create_entity(self, type):
|
||||
def _create_entity(self, type: str) -> ifcopenshell.entity_instance:
|
||||
if inst := self.instance_map.get(type):
|
||||
return inst
|
||||
else:
|
||||
@@ -348,6 +348,7 @@ class sqlite(file):
|
||||
|
||||
class sqlite_entity:
|
||||
sqlite_wrapper: sqlite_wrapper
|
||||
wrapped_data: ifcopenshell.entity_instance
|
||||
|
||||
def __init__(self, id: int, ifc_class: str, file: sqlite = None):
|
||||
if not ifc_class:
|
||||
|
||||
@@ -188,13 +188,13 @@ try:
|
||||
# For creating C++ instances so that some of the calls here work
|
||||
self.shadow_file = ifcopenshell.file(schema=self.schema)
|
||||
# But we only create them once per type because we basically only need access to 'semi-static' such as get_attribute_category()
|
||||
self.instance_map = {}
|
||||
self.instance_map: dict[str, ifcopenshell.entity_instance] = {}
|
||||
|
||||
offset += len(line) + newline_character
|
||||
|
||||
self.preprocess_schema()
|
||||
|
||||
def _create_entity(self, type):
|
||||
def _create_entity(self, type: str) -> ifcopenshell.entity_instance:
|
||||
if inst := self.instance_map.get(type):
|
||||
return inst
|
||||
else:
|
||||
@@ -328,6 +328,7 @@ try:
|
||||
|
||||
class stream_entity:
|
||||
stream_wrapper: stream_wrapper
|
||||
wrapped_data: ifcopenshell.entity_instance
|
||||
|
||||
def __init__(self, id: int, ifc_class: str, file: stream = None):
|
||||
if not ifc_class:
|
||||
|
||||
@@ -16,14 +16,19 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Generator
|
||||
from fractions import Fraction
|
||||
from math import pi
|
||||
from typing import Literal, Optional, Union
|
||||
from typing import TYPE_CHECKING, Literal, Optional, TypeAlias, Union
|
||||
|
||||
import ifcopenshell
|
||||
import ifcopenshell.ifcopenshell_wrapper as ifcopenshell_wrapper
|
||||
|
||||
if TYPE_CHECKING:
|
||||
DimensionalExponents: TypeAlias = tuple[int, int, int, int, int, int, int]
|
||||
|
||||
prefixes = {
|
||||
"EXA": 1e18,
|
||||
"PETA": 1e15,
|
||||
@@ -76,7 +81,7 @@ unit_names = [
|
||||
"WEBER",
|
||||
]
|
||||
|
||||
si_dimensions = {
|
||||
si_dimensions: dict[str, DimensionalExponents] = {
|
||||
"METRE": (1, 0, 0, 0, 0, 0, 0),
|
||||
"SQUARE_METRE": (2, 0, 0, 0, 0, 0, 0),
|
||||
"CUBIC_METRE": (3, 0, 0, 0, 0, 0, 0),
|
||||
@@ -146,7 +151,7 @@ si_type_names = {
|
||||
|
||||
# See IfcDimensionalExponents:
|
||||
# (Length, Mass, Time, ElectricCurrent, ThermodynamicTemperature, AmountOfSubstance, LuminousIntensity)
|
||||
named_dimensions = {
|
||||
named_dimensions: dict[str, DimensionalExponents] = {
|
||||
"ABSORBEDDOSEUNIT": (2, 0, -2, 0, 0, 0, 0),
|
||||
"AMOUNTOFSUBSTANCEUNIT": (0, 0, 0, 0, 0, 1, 0),
|
||||
"AREAUNIT": (2, 0, 0, 0, 0, 0, 0),
|
||||
@@ -398,15 +403,15 @@ def get_full_unit_name(unit: ifcopenshell.entity_instance) -> str:
|
||||
return prefix + unit.Name.upper()
|
||||
|
||||
|
||||
def get_si_dimensions(name):
|
||||
def get_si_dimensions(name: str) -> DimensionalExponents:
|
||||
return si_dimensions.get(name, si_dimensions["OTHERWISE"])
|
||||
|
||||
|
||||
def get_named_dimensions(name):
|
||||
def get_named_dimensions(name: str) -> DimensionalExponents:
|
||||
return named_dimensions.get(name, (0, 0, 0, 0, 0, 0, 0))
|
||||
|
||||
|
||||
def get_unit_dimensions(unit: ifcopenshell.entity_instance) -> tuple[int, int, int, int, int, int, int]:
|
||||
def get_unit_dimensions(unit: ifcopenshell.entity_instance) -> DimensionalExponents:
|
||||
"""Get the dimensional exponents of a unit, per IfcDimensionalExponents.
|
||||
|
||||
Supports IfcSIUnit, IfcConversionBasedUnit, IfcContextDependentUnit, and
|
||||
|
||||
Reference in New Issue
Block a user