code: def __init__(
      self,
      vars,
      model=None,
      blocked=True,
      dtype=None,
      logp_dlogp_func=None,
      **pytensor_kwargs,
  ):
      model = modelcontext(model)
  
      if logp_dlogp_func is None:
          func = model.logp_dlogp_function(
              vars, dtype=dtype, **pytensor_kwargs
          )
      else:
          func = logp_dlogp_func
  
      self._logp_dlogp_func = func
  
      super().__init__(vars, func._extra_vars_shared, blocked)
  
imports: from abc import abstractmethod
  from typing import Callable, List, Tuple, Union, cast
  import numpy
  from numpy.random import uniform
  from pymc.blocking import DictToArrayBijection, PointType, RaveledVars, StatsType
  from pymc.model import modelcontext
  from pymc.step_methods.compound import BlockedStep
  from pymc.util import get_var_name
label_desc: Use image node_id 1 to create a new GradientSharedStep object from inherited base classes: ArrayStepShared with example: obj = GradientSharedStep(vars, model, blocked, dtype, logp_dlogp_func)