code: def _linear_constraints(self, om):
          
          A, l, u = om.linear_constraints() # l <= A*x <= u
  
          # Indexes for equality, greater than (unbounded above), less than
          # (unbounded below) and doubly-bounded box constraints.
  #        ieq = flatnonzero( abs(u - l) <= EPS )
  #        igt = flatnonzero( (u >=  1e10) & (l > -1e10) )
  #        ilt = flatnonzero( (l <= -1e10) & (u <  1e10) )
  #        ibx = flatnonzero( (abs(u - l) > EPS) & (u < 1e10) & (l > -1e10) )
  
          # Zero-sized sparse matrices not supported.  Assume equality
          # constraints exist.
  ##        AA = A[ieq, :]
  ##        if len(ilt) > 0:
  ##            AA = vstack([AA, A[ilt, :]], "csr")
  ##        if len(igt) > 0:
  ##            AA = vstack([AA, -A[igt, :]], "csr")
  ##        if len(ibx) > 0:
  ##            AA = vstack([AA, A[ibx, :], -A[ibx, :]], "csr")
  #
  #        if len(ieq) or len(igt) or len(ilt) or len(ibx):
  #            sig_idx = [(1, ieq), (1, ilt), (-1, igt), (1, ibx), (-1, ibx)]
  #            AA = vstack([sig * A[idx, :] for sig, idx in sig_idx if len(idx)])
  #        else:
  #            AA = None
  #
  #        bb = r_[u[ieq, :], u[ilt], -l[igt], u[ibx], -l[ibx]]
  #
  #        self._nieq = ieq.shape[0]
  #
  #        return AA, bb
  
          return A, l, u
docs: Returns the linear problem constraints.