Skip to content

ding.utils.autolog.value

ding.utils.autolog.value

LoggedValue

Overview

LoggedValue can be used as property in LoggedModel, for it has get and set method. This class's instances will be associated with their owner LoggedModel instance, all the LoggedValue of one LoggedModel will shared the only one time object (defined in time_ctl), so that timeline can be managed properly.

Interfaces: __init__, __get__, __set__ Properties: - __property_name (:obj:str): The name of the property.

__property_name property

Overview

Get the name of the property.

__init__(type_=object)

Overview

Initialize the LoggedValue object.

Interfaces: __init__

__get_ranged_data(instance)

Overview

Get the ranged data.

Interfaces: __get_ranged_data

__get__(instance, owner)

Overview

Get the value.

Arguments: - instance (:obj:LoggedModel): The owner LoggedModel instance. - owner (:obj:type): The owner class.

__set__(instance, value)

Overview

Set the value.

Arguments: - instance (:obj:LoggedModel): The owner LoggedModel instance. - value (:obj:_ValueType): The value to set.

Full Source Code

../ding/utils/autolog/value.py

1from typing import Type 2 3from .base import _LOGGED_VALUE__PROPERTY_NAME, _LOGGED_MODEL__PROPERTY_ATTR_PREFIX, _ValueType 4from .data import TimeRangedData 5 6 7class LoggedValue: 8 """ 9 Overview: 10 LoggedValue can be used as property in LoggedModel, for it has __get__ and __set__ method. 11 This class's instances will be associated with their owner LoggedModel instance, all the LoggedValue 12 of one LoggedModel will shared the only one time object (defined in time_ctl), so that timeline can 13 be managed properly. 14 Interfaces: 15 ``__init__``, ``__get__``, ``__set__`` 16 Properties: 17 - __property_name (:obj:`str`): The name of the property. 18 """ 19 20 def __init__(self, type_: Type[_ValueType] = object): 21 """ 22 Overview: 23 Initialize the LoggedValue object. 24 Interfaces: 25 ``__init__`` 26 """ 27 28 self.__type = type_ 29 30 @property 31 def __property_name(self): 32 """ 33 Overview: 34 Get the name of the property. 35 """ 36 37 return getattr(self, _LOGGED_VALUE__PROPERTY_NAME) 38 39 def __get_ranged_data(self, instance) -> TimeRangedData: 40 """ 41 Overview: 42 Get the ranged data. 43 Interfaces: 44 ``__get_ranged_data`` 45 """ 46 47 return getattr(instance, _LOGGED_MODEL__PROPERTY_ATTR_PREFIX + self.__property_name) 48 49 def __get__(self, instance, owner): 50 """ 51 Overview: 52 Get the value. 53 Arguments: 54 - instance (:obj:`LoggedModel`): The owner LoggedModel instance. 55 - owner (:obj:`type`): The owner class. 56 """ 57 58 return self.__get_ranged_data(instance).current() 59 60 def __set__(self, instance, value: _ValueType): 61 """ 62 Overview: 63 Set the value. 64 Arguments: 65 - instance (:obj:`LoggedModel`): The owner LoggedModel instance. 66 - value (:obj:`_ValueType`): The value to set. 67 """ 68 69 if isinstance(value, self.__type): 70 return self.__get_ranged_data(instance).append(value) 71 else: 72 raise TypeError( 73 'New value should be {expect}, but {actual} found.'.format( 74 expect=self.__type.__name__, 75 actual=type(value).__name__, 76 ) 77 )