docs: def _ctx_elt_properties(elt, ctx=None, create=False):
      """Get elt properties related to a ctx.
  
      :param elt: property component elt. Not None methods or unhashable types.
      :param ctx: elt ctx from where get properties. Equals elt if None. It
          allows to get function properties related to a class or instance if
          related function is defined in base class.
      :param bool create: create ctx elt properties if not exist.
  
      :return: dictionary of property by name embedded into ctx __dict__ or in
          shared __STATIC_ELEMENTS_CACHE__ or else in shared
          __UNHASHABLE_ELTS_CACHE__. None if no properties exists.
      :rtype: dict
      """
  
      result = None
  
      if ctx is None:
          ctx = find_ctx(elt=elt)
  
      ctx_properties = None
  
      # in case of dynamic object, parse the ctx __dict__
      ctx__dict__ = getattr(ctx, __DICT__, None)
      if ctx__dict__ is not None and isinstance(ctx__dict__, dict):
          # if properties exist in ctx__dict__
          if __B3J0F__PROPERTIES__ in ctx__dict__:
              ctx_properties = ctx__dict__[__B3J0F__PROPERTIES__]
          elif create:  # if create in worst case
              ctx_properties = ctx__dict__[__B3J0F__PROPERTIES__] = {}
  
      else:  # in case of static object
          if isinstance(ctx, Hashable):  # search among static elements
              cache = __STATIC_ELEMENTS_CACHE__
          else:  # or unhashable elements
              cache = __UNHASHABLE_ELTS_CACHE__
              ctx = id(ctx)
              if not isinstance(elt, Hashable):
                  elt = id(elt)
          # if ctx is in cache
          if ctx in cache:
              # get its properties
              ctx_properties = cache[ctx]
          elif create:  # elif create, get an empty dict
              ctx_properties = cache[ctx] = {}
  
      # if ctx_properties is not None
      if ctx_properties is not None:
          # check if elt exist in ctx_properties
          if elt in ctx_properties:
              result = ctx_properties[elt]
          elif create:  # create the right data if create
              if create:
                  result = ctx_properties[elt] = {}
  
      return result