class_docstr: Base class for numpy operators. numpy operators allow parts
  of computation in symbolic graph to be writen in numpy. This feature
  is intended for quickly hacking out a solution for non performance
  critical parts. Please consider write a c++ implementation if it becomes
  a bottleneck.
  Note that if your operator contains internal states (like arrays),
  it cannot be used for multi-gpu training.
class_docstr_tok: ["Base","class","for","numpy","operators",".","numpy","operators","allow","parts","of","computation","in","symbolic","graph","to","be","writen","in","numpy",".","This","feature","is","intended","for","quickly","hacking","out","a","solution","for","non","performance","critical","parts",".","Please","consider","write","a","c++","implementation","if","it","becomes","a","bottleneck",".","Note","that","if","your","operator","contains","internal","states","(","like","arrays",")",",","it","can","not","be","used","for","multi-gpu","training","."]
docstr: Declare dependencies of this operator for backward pass.
  
  Parameters
  ----------
  out_grad : list of int
      ids of out_grad blobs.
  in_data : list of int
      ids of in_data blobs.
  out_data: list of int
      ids of out_data blobs.
  
  Returns
  -------
  deps : list of int
      ids of the needed blobs.
docstr_tok: ["Declare","dependencies","of","this","operator","for","backward","pass",".","Parameters","--","--","--","--","--","out_grad",":","list","of","int","ids","of","out_grad","blobs",".","in_data",":","list","of","int","ids","of","in_data","blobs",".","out_data",":","list","of","int","ids","of","out_data","blobs",".","Returns","--","--","--","-","deps",":","list","of","int","ids","of","the","needed","blobs","."]
code: def declare_backward_dependency(self, out_grad, in_data, out_data):
      """Declare dependencies of this operator for backward pass.
  
      Parameters
      ----------
      out_grad : list of int
          ids of out_grad blobs.
      in_data : list of int
          ids of in_data blobs.
      out_data: list of int
          ids of out_data blobs.
  
      Returns
      -------
      deps : list of int
          ids of the needed blobs.
      """
      deps = []
      if self.need_top_grad():
          deps.extend(out_grad)
      deps.extend(in_data)
      deps.extend(out_data)
      return deps
  
imports: import traceback
  import warnings
  import collections
  from array import array
  from threading import Lock
  import ctypes
  from ctypes import CFUNCTYPE, POINTER, Structure, pointer
  from ctypes import c_void_p, c_int, c_char, c_char_p, cast, c_bool
  from .base import _LIB, check_call, MXCallbackList, c_array, c_array_buf, mx_int, OpHandle
  from .base import c_str, mx_uint, mx_float, ctypes2numpy_shared, NDArrayHandle, py_str
  from .None import symbol, context
  from .ndarray import NDArray, dtype_np_to_mx, dtype_mx_to_np
  from .ndarray.ndarray import _STORAGE_TYPE_STR_TO_ID, _STORAGE_TYPE_ID_TO_STR
  from .ndarray.ndarray import _STORAGE_TYPE_UNDEFINED, _STORAGE_TYPE_DEFAULT
  from .ndarray.ndarray import _STORAGE_TYPE_CSR, _STORAGE_TYPE_ROW_SPARSE
  from .ndarray import _ndarray_cls
  from .numpy.multiarray import _np_ndarray_cls
  from .util import is_np_array
label_desc: Use image node_id 3 for calling the NDArrayOp obj's underlying member method code with example usage: obj.declare_backward_dependency(out_grad, in_data, out_data) and returns: deps