class_docstr: Automatic differentiation given an op-tree.
  
  Arguments:
      op_tree (OpTreeNode): the op-tree to take gradient of
      be (Backend): computation backend used
      next_error (Tensor or OpTreeNode, optional): next layer's error, usually
                                                   self.delta in a layer. If
                                                   set to None, then automatically
                                                   the default value is tensor
                                                   ones() in output shape
class_docstr_tok: ["Automatic","differentiation","given","an","op-tree",".","Arguments",":","op_tree","(","OpTreeNode",")",":","the","op-tree","to","take","gradient","of","be","(","Backend",")",":","computation","backend","used","next_error","(","Tensor","or","OpTreeNode",",","optional",")",":","next","layer","'s","error",",","usually","self.delta","in","a","layer",".","If","set","to","None",",","then","automatically","the","default","value","is","tensor","ones","(",")","in","output","shape"]
docstr: Back-propagate the gradient of the `tensors` to `gradients`.
  
  Arguments:
      Tensors (list): List of Tensors to compute gradients.
      Gradient (list): List of Tensors, as output buffers of the
                       Gradients.
docstr_tok: ["Back-propagate","the","gradient","of","the","`","tensors","`","to","`","gradients","`",".","Arguments",":","Tensors","(","list",")",":","List","of","Tensors","to","compute","gradients",".","Gradient","(","list",")",":","List","of","Tensors",",","as","output","buffers","of","the","Gradients","."]
code: def back_prop_grad(self, tensors, gradients):
      """
      Back-propagate the gradient of the `tensors` to `gradients`.
  
      Arguments:
          Tensors (list): List of Tensors to compute gradients.
          Gradient (list): List of Tensors, as output buffers of the
                           Gradients.
      """
      # avoid tensor reused as a grad_buffer
      for grad_buffer in gradients:
          assert (
              grad_buffer._original_base
              not in self.map_tensor_grad_op_tree
          )
  
      skipped_tensor = None
      for tensor, grad_buffer in zip(tensors, gradients):
          if grad_buffer is self.next_error:
              # next_error reused as a grad_buffer
              skipped_tensor = tensor
          else:
              grad_buffer[:] = self.map_tensor_grad_op_tree.get(
                  tensor._original_base, grad_buffer * 0.0
              )
  
      if skipped_tensor:
          self.next_error[:] = self.map_tensor_grad_op_tree.get(
              skipped_tensor._original_base, self.next_error * 0.0
          )
  
imports: from __future__ import division
  from builtins import object, zip
  from neon.backends.backend import OpTreeNode, Tensor
  import numpy
  from functools import wraps
label_desc: Use image node_id 4 for calling the Autodiff obj's underlying member method code with example usage: obj.back_prop_grad(tensors, gradients) without return types