Skip to content

Utilities

Core utility types and helper functions.

ShapeFamily Enum

OpenMagneticsVirtualBuilder.utils.ShapeFamily

Bases: Enum

Enumeration of all supported magnetic core shape families.

Each member corresponds to a core geometry following EN 60205 naming.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
class ShapeFamily(enum.Enum, metaclass=Meta):
    """Enumeration of all supported magnetic core shape families.

    Each member corresponds to a core geometry following EN 60205 naming.
    """

    ETD = enum.auto()
    ER = enum.auto()
    EP = enum.auto()
    EPX = enum.auto()
    PQ = enum.auto()
    E = enum.auto()
    PM = enum.auto()
    P = enum.auto()
    RM = enum.auto()
    PLANAR_ER = enum.auto()
    EFD = enum.auto()
    U = enum.auto()
    EQ = enum.auto()
    PLANAR_E = enum.auto()
    PLANAR_EL = enum.auto()
    EC = enum.auto()
    UR = enum.auto()
    UT = enum.auto()
    LP = enum.auto()
    T = enum.auto()
    C = enum.auto()

BuilderBase

OpenMagneticsVirtualBuilder.utils.BuilderBase

Shared base for FreeCADBuilder and CadQueryBuilder with common factory/families logic.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
class BuilderBase:
    """Shared base for FreeCADBuilder and CadQueryBuilder with common factory/families logic."""

    def factory(self, data):
        """Look up the shape builder for the given family name.

        Args:
            data: Dict with a ``"family"`` key.

        Returns:
            Shape builder instance from ``self.shapers``.
        """
        family = ShapeFamily[data["family"].upper().replace(" ", "_")]
        return self.shapers[family]

    def get_families(self):
        """Return dimensions and subtypes for every registered shape family."""
        return {shaper.name.lower().replace("_", " "): self.factory({"family": shaper.name}).get_dimensions_and_subtypes() for shaper in self.shapers}

factory

factory(data)

Look up the shape builder for the given family name.

Parameters:

Name Type Description Default
data

Dict with a "family" key.

required

Returns:

Type Description

Shape builder instance from self.shapers.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
def factory(self, data):
    """Look up the shape builder for the given family name.

    Args:
        data: Dict with a ``"family"`` key.

    Returns:
        Shape builder instance from ``self.shapers``.
    """
    family = ShapeFamily[data["family"].upper().replace(" ", "_")]
    return self.shapers[family]

get_families

get_families()

Return dimensions and subtypes for every registered shape family.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
def get_families(self):
    """Return dimensions and subtypes for every registered shape family."""
    return {shaper.name.lower().replace("_", " "): self.factory({"family": shaper.name}).get_dimensions_and_subtypes() for shaper in self.shapers}

Functions

OpenMagneticsVirtualBuilder.utils.flatten_dimensions

flatten_dimensions(data, scale_factor=1.0)

Convert MAS min/max/nominal dimension values to a flat dict of floats.

MAS dimensions can be specified as {"nominal": v}, {"minimum": v, "maximum": v}, or plain numbers. This function resolves each to a single nominal value and applies scale_factor.

Parameters:

Name Type Description Default
data

Dict with a "dimensions" key containing the MAS dimension map.

required
scale_factor

Multiplicative factor applied to every value (e.g. 1000 to convert m to mm).

1.0

Returns:

Type Description

Dict mapping dimension letter ("A", "B", ...) to a float

value. The "alpha" key, if present, is excluded.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
def flatten_dimensions(data, scale_factor=1.0):
    """Convert MAS min/max/nominal dimension values to a flat dict of floats.

    MAS dimensions can be specified as ``{"nominal": v}``,
    ``{"minimum": v, "maximum": v}``, or plain numbers.  This function
    resolves each to a single nominal value and applies *scale_factor*.

    Args:
        data: Dict with a ``"dimensions"`` key containing the MAS dimension
            map.
        scale_factor: Multiplicative factor applied to every value
            (e.g. ``1000`` to convert m to mm).

    Returns:
        Dict mapping dimension letter (``"A"``, ``"B"``, ...) to a float
        value.  The ``"alpha"`` key, if present, is excluded.
    """
    dimensions = copy.deepcopy(data["dimensions"])
    for k, v in dimensions.items():
        if isinstance(v, dict):
            if "nominal" not in v or v["nominal"] is None:
                if "maximum" not in v or v["maximum"] is None:
                    v["nominal"] = v["minimum"]
                elif "minimum" not in v or v["minimum"] is None:
                    v["nominal"] = v["maximum"]
                else:
                    v["nominal"] = round((v["maximum"] + v["minimum"]) / 2, 6)
        else:
            dimensions[k] = {"nominal": v}
    return {k: v["nominal"] * scale_factor for k, v in dimensions.items() if k != "alpha"}

OpenMagneticsVirtualBuilder.utils.decimal_ceil

decimal_ceil(a, precision=0)

Ceiling rounded to precision decimal places.

Parameters:

Name Type Description Default
a

Numeric value.

required
precision

Number of decimal places.

0

Returns:

Type Description

Rounded-up value as a float.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
def decimal_ceil(a, precision=0):
    """Ceiling rounded to *precision* decimal places.

    Args:
        a: Numeric value.
        precision: Number of decimal places.

    Returns:
        Rounded-up value as a float.
    """
    return numpy.true_divide(numpy.ceil(a * 10**precision), 10**precision)

OpenMagneticsVirtualBuilder.utils.decimal_floor

decimal_floor(a, precision=0)

Floor rounded to precision decimal places.

Parameters:

Name Type Description Default
a

Numeric value.

required
precision

Number of decimal places.

0

Returns:

Type Description

Rounded-down value as a float.

Source code in src/OpenMagneticsVirtualBuilder/utils.py
def decimal_floor(a, precision=0):
    """Floor rounded to *precision* decimal places.

    Args:
        a: Numeric value.
        precision: Number of decimal places.

    Returns:
        Rounded-down value as a float.
    """
    return numpy.true_divide(numpy.floor(a * 10**precision), 10**precision)