class_docstr: Memoize a property
docstr: Get descriptor calling the property function and replacing it with
  its value or on state if we are in the transient state.
code: def __get__(self, obj, type_=None):
      """
      Get descriptor calling the property function and replacing it with
      its value or on state if we are in the transient state.
      """
      if obj is None:
          return self
      value = self.getter(obj)
      if hasattr(obj, "state"):
          setattr(obj.state, self.__name__, value)
      else:
          obj.__dict__[self.__name__] = self.getter(obj)
      return value
  
imports: from __future__ import division
  import re
  from decimal import Decimal
  from math import ceil, cos, floor, log10, pi, sin
label_desc: Use image node_id 2 for calling the cached_property obj's underlying member method code with example usage: obj.__get__(obj, type_) and returns: value, self