class_docstr: Data Descriptor class that syncs and resets cached properties adj and succ
  
  The cached properties `adj` and `succ` are reset whenever `_adj` or `_succ`
  are set to new objects. In addition, the attributes `_succ` and `_adj`
  are synced so these two names point to the same object.
  
  This object sits on a class and ensures that any instance of that
  class clears its cached properties "succ" and "adj" whenever the
  underlying instance attributes "_succ" or "_adj" are set to a new object.
  It only affects the set process of the obj._adj and obj._succ attribute.
  All get/del operations act as they normally would.
  
  For info on Data Descriptors see: https://docs.python.org/3/howto/descriptor.html
code: def __set__(self, obj, value):
      od = obj.__dict__
      od["_adj"] = value
      od["_succ"] = value
      # reset cached properties
      if "adj" in od:
          del od["adj"]
      if "succ" in od:
          del od["succ"]
  
imports: from copy import deepcopy
  from functools import cached_property
  import networkx
  from networkx import convert
  from networkx.classes.coreviews import AdjacencyView
  from networkx.classes.graph import Graph
  from networkx.classes.reportviews import DiDegreeView, InDegreeView, InEdgeView, OutDegreeView, OutEdgeView
  from networkx.exception import NetworkXError
label_desc: Use image node_id 1 for calling the _CachedPropertyResetterAdjAndSucc obj's underlying member method code with example usage: obj.__set__(obj, value) without return types