ding.utils.autolog.model¶
ding.utils.autolog.model
¶
LoggedModel
¶
Overview
A model with timeline (integered time, such as 1st, 2nd, 3rd, can also be modeled as a kind of self-defined discrete time, such as the implement of TickTime). Serveral values have association with each other can be maintained together by using LoggedModel.
Example
Define AvgList model like this
from ding.utils.autolog import LoggedValue, LoggedModel class AvgList(LoggedModel): value = LoggedValue(float) __property_names = ['value']
def __init__(self, time_: BaseTime, expire: Union[int, float]): LoggedModel.__init__(self, time_, expire) # attention, original value must be set in __init__ function, or it will not # be activated, the timeline of this value will also be unexpectedly affected. self.value = 0.0 self.__register() def __register(self): def __avg_func(prop_name: str) -> float: # function to calculate average value of properties records = self.range_values[prop_name]() (_start_time, _), _ = records[0] (_, _end_time), _ = records[-1] _duration = _end_time - _start_time _sum = sum([_value * (_end_time - _begin_time) for (_begin_time, _end_time), _value in records]) return _sum / _duration for _prop_name in self.__property_names: self.register_attribute_value('avg', _prop_name, partial(__avg_func, prop_name=_prop_name))
Use it like this
from ding.utils.autolog import NaturalTime, TimeMode
if name == "main": _time = NaturalTime() ll = AvgList(_time, expire=10)
# just do something here ... print(ll.range_values['value']()) # original range_values function in LoggedModel of last 10 secs print(ll.range_values['value'](TimeMode.ABSOLUTE)) # use absolute time print(ll.avg['value']()) # average value of last 10 secs
Interfaces
__init__, time, expire, fixed_time, current_time, freeze, unfreeze, register_attribute_value, __getattr__, get_property_attribute
Property
- time (:obj:
BaseTime): The time. - expire (:obj:
float): The expire time.
__properties
property
¶
Overview
Get all property names.
time
property
¶
Overview
Get original time object passed in, can execute method (such as step()) by this property.
Returns:
| Name | Type | Description |
|---|---|---|
BaseTime |
_TimeObjectType
|
time object used by this model |
expire
property
¶
Overview
Get expire time
Returns:
| Type | Description |
|---|---|
_TimeType
|
int or float: time that old value records expired |
__init__(time_, expire)
¶
Overview
Initialize the LoggedModel object using the given arguments.
Arguments:
- time_ (:obj:BaseTime): The time.
- expire (:obj:float): The expire time.
__get_property_ranged_data(name)
¶
Overview
Get ranged data of one property.
Arguments:
- name (:obj:str): The property name.
__init_properties()
¶
Overview
Initialize all properties.
__get_range_values_func(name)
¶
Overview
Get range_values function of one property.
Arguments:
- name (:obj:str): The property name.
__register_default_funcs()
¶
Overview
Register default functions.
fixed_time()
¶
Overview
Get fixed time (will be frozen time if time proxy is frozen) This feature can be useful when adding value replay feature (in the future)
Returns:
| Type | Description |
|---|---|
Union[float, int]
|
int or float: fixed time |
current_time()
¶
Overview
Get current time (real time that regardless of time proxy's frozen statement)
Returns:
| Type | Description |
|---|---|
Union[float, int]
|
int or float: current time |
freeze()
¶
Overview
Freeze time proxy object. This feature can be useful when adding value replay feature (in the future)
unfreeze()
¶
Overview
Unfreeze time proxy object. This feature can be useful when adding value replay feature (in the future)
register_attribute_value(attribute_name, property_name, value)
¶
Overview
Register a new attribute for one of the values. Example can be found in overview of class.
Arguments:
- attribute_name (:obj:str): name of attribute
- property_name (:obj:str): name of property
- value (:obj:Any): value of attribute
__getattr__(attribute_name)
¶
Overview
Support all methods registered.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
attribute_name
|
str
|
name of attribute |
required |
Return
A indelible object that can return attribute value.
Example
ll = AvgList(NaturalTime(), expire=10) ll.range_value['value'] # get 'range_value' attribute of 'value' property, it should be a function
get_property_attribute(property_name)
¶
Overview
Find all registered attributes (except common "range_values" attribute, since "range_values" is not
added to self.__prop2attr) of one given property.
Arguments:
- property_name (:obj:str): name of property to query attributes
Returns:
- attr_list (:obj:List[str]): the registered attributes list of the input property
Full Source Code
../ding/utils/autolog/model.py