microecs.component
component.py - submodule holind the base class for all components, which is just a dataclass wrapper
1"""component.py - submodule holind the base class for all components, which is just a dataclass wrapper""" 2from dataclasses import dataclass, field, Field 3from typing import Any 4import numpy as np 5 6class Component: 7 """Base for ECS components: subclassing auto-applies @dataclass(kw_only=True).""" 8 def __init_subclass__(cls, **kwargs): 9 super().__init_subclass__(**kwargs) 10 dataclass(kw_only=True)(cls) 11 12ComponentType = type[Component] 13 14# helper functions to build components and fields 15 16class zeros: # pylint: disable=all 17 """special object so we can instantiate with e.g. f32(..., default=zeros)""" 18 19def _make_field(dtype: str, shape: tuple[int, ...], default: Any = None, **extra) -> Field: 20 if default is zeros: 21 if dtype == "object": 22 default = np.full(shape, fill_value=None, dtype="object") 23 else: 24 default = np.zeros(shape, dtype=dtype) 25 # pylint: disable=invalid-field-call # builder pattern: Field is consumed by @dataclass on the Component subclass 26 return field(metadata={**extra, "shape": shape, "dtype": dtype, "default": default}) 27 28def f32(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 29 """Builds a float32 field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 30 return _make_field("float32", shape, default, **extra) 31 32def i32(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 33 """Builds a int32 field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 34 return _make_field("int32", shape, default, **extra) 35 36def obj(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 37 """Builds a object field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 38 return _make_field("object", shape, default, **extra) 39 40def boolf(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 41 """Builds a bool field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 42 return _make_field("bool", shape, default, **extra)
class
Component:
7class Component: 8 """Base for ECS components: subclassing auto-applies @dataclass(kw_only=True).""" 9 def __init_subclass__(cls, **kwargs): 10 super().__init_subclass__(**kwargs) 11 dataclass(kw_only=True)(cls)
Base for ECS components: subclassing auto-applies @dataclass(kw_only=True).
ComponentType =
type[Component]
class
zeros:
17class zeros: # pylint: disable=all 18 """special object so we can instantiate with e.g. f32(..., default=zeros)"""
special object so we can instantiate with e.g. f32(..., default=zeros)
def
f32( shape: tuple[int, ...], default: Any = None, **extra) -> dataclasses.Field:
29def f32(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 30 """Builds a float32 field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 31 return _make_field("float32", shape, default, **extra)
Builds a float32 field; kwargs (e.g. serializable/comment) go into the field's metadata.
def
i32( shape: tuple[int, ...], default: Any = None, **extra) -> dataclasses.Field:
33def i32(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 34 """Builds a int32 field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 35 return _make_field("int32", shape, default, **extra)
Builds a int32 field; kwargs (e.g. serializable/comment) go into the field's metadata.
def
obj( shape: tuple[int, ...], default: Any = None, **extra) -> dataclasses.Field:
37def obj(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 38 """Builds a object field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 39 return _make_field("object", shape, default, **extra)
Builds a object field; kwargs (e.g. serializable/comment) go into the field's metadata.
def
boolf( shape: tuple[int, ...], default: Any = None, **extra) -> dataclasses.Field:
41def boolf(shape: tuple[int, ...], default: Any = None, **extra) -> Field: 42 """Builds a bool field; kwargs (e.g. serializable/comment) go into the field's metadata.""" 43 return _make_field("bool", shape, default, **extra)
Builds a bool field; kwargs (e.g. serializable/comment) go into the field's metadata.