elasticai.creator.ir.base.required_field
#
Module Contents#
Classes#
A descriptor that designates a mandatory field of an abstract ir data class.
The descriptor accesses the |
|
Functions#
Decorate a method as getter for a read only field. |
|
Decorate a static method as getter for a read only field. |
|
Data#
API#
- elasticai.creator.ir.base.required_field.StoredT#
‘TypeVar(…)’
- elasticai.creator.ir.base.required_field.VisibleT#
‘TypeVar(…)’
- class elasticai.creator.ir.base.required_field.RequiredField(set_convert: collections.abc.Callable[[elasticai.creator.ir.base.required_field.VisibleT], elasticai.creator.ir.base.required_field.StoredT], get_convert: collections.abc.Callable[[elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT])[source]#
Bases:
typing.Generic
[elasticai.creator.ir.base.required_field.StoredT
,elasticai.creator.ir.base.required_field.VisibleT
]A descriptor that designates a mandatory field of an abstract ir data class. The descriptor accesses the
data
dictionary of the owning abstract ir data object to read and write values. You can use theset_convert
andget_convert
functions to transform values during read/write accesses. That allows to keep dictionary of primitive (serializable) data types in memory, while still providing abstract ways to manipulate that data in complex ways. This is typically required when working with Nodes and Graphs to create new intermediate representations and transform one graph into another.NOTE: In most cases you want to ensure that the conditions
x == get_convert(set_convert(x))
x == set_convert(get_convert(x))
hold for all applicablex
.
E.g.
>>> from elasticai.creator.ir import IrData >>> class A(IrData): ... number: RequiredField[str, int] = RequiredField(set_transform=str, get_transform=int) >>> a = A({'number': "12"}) >>> a.number = a.number + 3 >>> a.data {'number': "15"}
Initialization
- __slots__#
(‘set_convert’, ‘get_convert’, ‘name’)
- __set_name__(owner: type[elasticai.creator.ir.base._has_data.HasData], name: str) None [source]#
IMPORTANT: do not remove owner even though it’s not used see https://docs.python.org/3/reference/datamodel.html#descriptors for more information
- __get__(instance: elasticai.creator.ir.base._has_data.HasData, owner=None) elasticai.creator.ir.base.required_field.VisibleT [source]#
IMPORTANT: do not remove owner even though it’s not used see https://docs.python.org/3/reference/datamodel.html#descriptors for more information
- __set__(instance: elasticai.creator.ir.base._has_data.HasData, value: elasticai.creator.ir.base.required_field.VisibleT) None [source]#
- class elasticai.creator.ir.base.required_field.SimpleRequiredField[source]#
Bases:
typing.Generic
[elasticai.creator.ir.base.required_field.StoredT
]- slots#
(‘name’,)
- __set_name__(owner: type[elasticai.creator.ir.base._has_data.HasData], name: str) None [source]#
- __get__(instance: elasticai.creator.ir.base._has_data.HasData, owner=None) elasticai.creator.ir.base.required_field.StoredT [source]#
- __set__(instance: elasticai.creator.ir.base._has_data.HasData, value: elasticai.creator.ir.base.required_field.StoredT) None [source]#
- class elasticai.creator.ir.base.required_field.ReadOnlyField(get_convert: collections.abc.Callable[[elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT])[source]#
Bases:
typing.Generic
[elasticai.creator.ir.base.required_field.StoredT
,elasticai.creator.ir.base.required_field.VisibleT
]- slots#
(‘get_convert’,)
- __set_name__(owner: type[elasticai.creator.ir.base._has_data.HasData], name: str) None [source]#
- __get__(instance: elasticai.creator.ir.base._has_data.HasData, owner: type[elasticai.creator.ir.base._has_data.HasData] | None = None) elasticai.creator.ir.base.required_field.VisibleT [source]#
- class elasticai.creator.ir.base.required_field.ReadOnlyMethodField(get_convert: collections.abc.Callable[[elasticai.creator.ir.base.required_field._HasDataT, elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT])[source]#
Bases:
typing.Generic
[elasticai.creator.ir.base.required_field._HasDataT
,elasticai.creator.ir.base.required_field.StoredT
,elasticai.creator.ir.base.required_field.VisibleT
]- __slots__#
(‘get_convert’, ‘name’)
- class elasticai.creator.ir.base.required_field.StaticMethodField(get_convert: collections.abc.Callable[[elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT])[source]#
Bases:
typing.Generic
[elasticai.creator.ir.base.required_field.StoredT
,elasticai.creator.ir.base.required_field.VisibleT
]- __slots__#
(‘set_convert’, ‘get_convert’, ‘name’)
- __get__(instance: elasticai.creator.ir.base.required_field._HasDataT, owner=None) elasticai.creator.ir.base.required_field.VisibleT [source]#
- elasticai.creator.ir.base.required_field.read_only_field(fn: collections.abc.Callable[[elasticai.creator.ir.base.required_field._HasDataT, elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT]) elasticai.creator.ir.base.required_field.ReadOnlyMethodField[elasticai.creator.ir.base.required_field._HasDataT, elasticai.creator.ir.base.required_field.StoredT, elasticai.creator.ir.base.required_field.VisibleT] [source]#
Decorate a method as getter for a read only field.
This works similar to the
property
decorator, but will automatically pass the content of the.data
dictionary to the decorated method, that matches its name, e.g., decorating a methodname
will call it withself.data['name']
. The method will also be bound as an instance method, i.e., the owning instance will be passed as the first argument.Additionally, the name of the decorated method will be registered as a required field for all other purposes.
Example
from elasticai.creator.ir import IrData, required_field class MyData(IrData): def __init__(self, data: dict[str, Attribute]): self.data = data self.length_scaling = 2 @required_field def name(self, value: str) -> str: return value @type.setter def _(self, value: str) -> str: return value.lower()
For more information see
required_field
.
- elasticai.creator.ir.base.required_field.static_required_field(fn: collections.abc.Callable[[elasticai.creator.ir.base.required_field.StoredT], elasticai.creator.ir.base.required_field.VisibleT]) elasticai.creator.ir.base.required_field.StaticMethodField[elasticai.creator.ir.base.required_field.StoredT, elasticai.creator.ir.base.required_field.VisibleT] [source]#
Decorate a static method as getter for a read only field.
Opposed to
read_only_field
this decorator will not pass the owning instance to the decorated method. This is to avoid hard to catch inconsistencies if the owning instances state changes between read and write operations.The main purpose of this decorator is to providea a more readable alternative to
RequiredField
.Note
Type checkers will not be able to pickup that the decorated methods are static by means of our custom descriptor. That means you will probably have to decorate the method with
@staticmethod
before applying@static_required_field
.Example
from elasticai.creator.ir import IrData, static_required_field class MyData(IrData): @static_required_field @staticmethod def length(value: int) -> float: return value * 2.0 @length.setter @staticmethod def _(value: float) -> int: return int(value / 2.0)
See also
read_only_field
.
- elasticai.creator.ir.base.required_field.is_required_field(o: object) typing_extensions.TypeIs[elasticai.creator.ir.base.required_field.RequiredField | elasticai.creator.ir.base.required_field.ReadOnlyField | elasticai.creator.ir.base.required_field.SimpleRequiredField] [source]#
- elasticai.creator.ir.base.required_field.is_required_field_type(cls: type) typing_extensions.TypeIs[type[elasticai.creator.ir.base.required_field.RequiredField] | type[elasticai.creator.ir.base.required_field.ReadOnlyField] | type[elasticai.creator.ir.base.required_field.RequiredField]] [source]#