class_docstr: Solve a system of linear equations.
  
  For on CPU and GPU.
class_docstr_tok: ["Solve","a","system","of","linear","equations",".","For","on","CPU","and","GPU","."]
docstr: Reverse-mode gradient updates for matrix solve operation c = A \\ b.
  
  Symbolic expression for updates taken from [#]_.
  
  References
  ----------
  .. [#] M. B. Giles, "An extended collection of matrix derivative results
    for forward and reverse mode automatic differentiation",
    http://eprints.maths.ox.ac.uk/1079/
code: def L_op(self, inputs, outputs, output_gradients):
      """
      Reverse-mode gradient updates for matrix solve operation c = A \\\ b.
  
      Symbolic expression for updates taken from [#]_.
  
      References
      ----------
      .. [#] M. B. Giles, "An extended collection of matrix derivative results
        for forward and reverse mode automatic differentiation",
        http://eprints.maths.ox.ac.uk/1079/
  
      """
      A, b = inputs
      c = outputs[0]
      c_bar = output_gradients[0]
      trans_map = {
          "lower_triangular": "upper_triangular",
          "upper_triangular": "lower_triangular",
      }
      trans_solve_op = Solve(
          # update A_structure and lower to account for a transpose operation
          A_structure=trans_map.get(self.A_structure, self.A_structure),
          lower=not self.lower,
      )
      b_bar = trans_solve_op(A.T, c_bar)
      # force outer product if vector second input
      A_bar = (
          -tensor.outer(b_bar, c) if c.ndim == 1 else -b_bar.dot(c.T)
      )
      if self.A_structure == "lower_triangular":
          A_bar = tensor.tril(A_bar)
      elif self.A_structure == "upper_triangular":
          A_bar = tensor.triu(A_bar)
      return [A_bar, b_bar]
  
imports: from __future__ import absolute_import, print_function, division
  import logging
  import warnings
  from six.moves import xrange
  import numpy
  from theano import tensor
  import theano.tensor
  from theano.tensor import as_tensor_variable
  from theano.gof import Op, Apply
label_desc: Use image node_id 6 for calling the Solve obj's underlying member method code with example usage: obj.L_op(inputs, outputs, output_gradients) and returns: list