from typing import Any, TypeVar, Type, cast


T = TypeVar("T")


def from_float(x: Any) -> float:
    assert isinstance(x, (float, int)) and not isinstance(x, bool)
    return float(x)


def to_float(x: Any) -> float:
    assert isinstance(x, float)
    return x


def to_class(c: Type[T], x: Any) -> dict:
    assert isinstance(x, c)
    return cast(Any, x).to_dict()


class Axis:
    x: float
    y: float
    z: float

    def __init__(self, x: float, y: float, z: float) -> None:
        self.x = x
        self.y = y
        self.z = z

    @staticmethod
    def from_dict(obj: Any) -> 'Axis':
        assert isinstance(obj, dict)
        x = from_float(obj.get("x"))
        y = from_float(obj.get("y"))
        z = from_float(obj.get("z"))
        return Axis(x, y, z)

    def to_dict(self) -> dict:
        result: dict = {}
        result["x"] = to_float(self.x)
        result["y"] = to_float(self.y)
        result["z"] = to_float(self.z)
        return result


class GeometryPart:
    euler: Axis
    position: Axis
    rotation: Axis
    center: Axis

    def __init__(self, euler: Axis, position: Axis, rotation: Axis, center: Axis) -> None:
        self.euler = euler
        self.position = position
        self.rotation = rotation
        self.center = center

    @staticmethod
    def from_dict(obj: Any) -> 'GeometryPart':
        assert isinstance(obj, dict)
        euler = Axis.from_dict(obj.get("euler"))
        position = Axis.from_dict(obj.get("position"))
        rotation = Axis.from_dict(obj.get("rotation"))
        center = Axis.from_dict(obj.get("center"))
        return GeometryPart(euler, position, rotation, center)

    def to_dict(self) -> dict:
        result: dict = {}
        result["euler"] = to_class(Axis, self.euler)
        result["position"] = to_class(Axis, self.position)
        result["rotation"] = to_class(Axis, self.rotation)
        result["center"] = to_class(Axis, self.center)
        return result

    def toJson(self) -> str:
        return str(self.to_dict()).replace('\'', '"')


def geometry_part_from_dict(s: Any) -> GeometryPart:
    return GeometryPart.from_dict(s)


def geometry_part_to_dict(x: GeometryPart) -> Any:
    return to_class(GeometryPart, x)
