class_docstr: Gradient wrt x of the Softmax Op.
class_docstr_tok: ["Gradient","wrt","x","of","the","Softmax","Op","."]
code: def make_node(self, dy, sm):
      dy = as_tensor_variable(dy)
      sm = as_tensor_variable(sm)
  
      if self.axis is not None and (
          self.axis >= sm.ndim or self.axis < -sm.ndim
      ):
          raise ValueError(
              f"SoftmaxGrad axis(={self.axis}) out of bounds for {sm.ndim}D array {sm}"
          )
  
      return Apply(self, [dy, sm], [sm.type()])
  
imports: from textwrap import dedent
  import numpy
  import scipy
  from pytensor.graph.basic import Apply
  from pytensor.graph.replace import _vectorize_node
  from pytensor.link.c.op import COp
  from pytensor.tensor.basic import as_tensor_variable
  from pytensor.tensor.elemwise import get_normalized_batch_axes
  from pytensor.tensor.math import gamma, gammaln, neg, sum
label_desc: Use image node_id 2 for calling the SoftmaxGrad obj's underlying member method code with example usage: obj.make_node(dy, sm) and returns: Apply