def solve(a, b):
a, _ = _makearray(a)<EOL>_assertRankAtLeast2(a)<EOL>_assertNdSquareness(a)<EOL>b, wrap = _makearray(b)<EOL>t, result_t = _commonType(a, b)<EOL>if b.ndim == a.ndim - <NUM_LIT:1>:<EOL><INDENT>if a.shape[-<NUM_LIT:1>] == <NUM_LIT:0> and b.shape[-<NUM_LIT:1>] == <NUM_LIT:0>:<EOL><INDENT>a = a.reshape(a.shape[:-<NUM_LIT:1>])<EOL>bc = broadcast(a, b)<EOL>return wrap(empty(bc.shape, dtype=result_t))<EOL><DEDENT>gufunc = _umath_linalg.solve1<EOL><DEDENT>else:<EOL><INDENT>if b.size == <NUM_LIT:0>:<EOL><INDENT>if (a.shape[-<NUM_LIT:1>] == <NUM_LIT:0> and b.shape[-<NUM_LIT:2>] == <NUM_LIT:0>) or b.shape[-<NUM_LIT:1>] == <NUM_LIT:0>:<EOL><INDENT>a = a[:,:<NUM_LIT:1>].reshape(a.shape[:-<NUM_LIT:1>] + (<NUM_LIT:1>,))<EOL>bc = broadcast(a, b)<EOL>return wrap(empty(bc.shape, dtype=result_t))<EOL><DEDENT><DEDENT>gufunc = _umath_linalg.solve<EOL><DEDENT>signature = '<STR_LIT>' if isComplexType(t) else '<STR_LIT>'<EOL>extobj = get_linalg_error_extobj(_raise_linalgerror_singular)<EOL>r = gufunc(a, b, signature=signature, extobj=extobj)<EOL>return wrap(r.astype(result_t))<EOL>
Solve a linear matrix equation, or system of linear scalar equations.

Computes the "exact" solution, `x`, of the well-determined, i.e., full
rank, linear matrix equation `ax = b`.

Parameters
----------
a : (..., M, M) array_like
    Coefficient matrix.
b : {(..., M,), (..., M, K)}, array_like
    Ordinate or "dependent variable" values.

Returns
-------
x : {(..., M,), (..., M, K)} ndarray
    Solution to the system a x = b.  Returned shape is identical to `b`.

Raises
------
LinAlgError
    If `a` is singular or not square.

Notes
-----
Broadcasting rules apply, see the `numpy.linalg` documentation for
details.

The solutions are computed using LAPACK routine _gesv

`a` must be square and of full-rank, i.e., all rows (or, equivalently,
columns) must be linearly independent; if either is not true, use
`lstsq` for the least-squares best "solution" of the
system/equation.

References
----------
.. [1] G. Strang, *Linear Algebra and Its Applications*, 2nd Ed., Orlando,
       FL, Academic Press, Inc., 1980, pg. 22.

Examples
--------
Solve the system of equations ``3 * x0 + x1 = 9`` and ``x0 + 2 * x1 = 8``:

>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> x = np.linalg.solve(a, b)
>>> x
array([ 2.,  3.])

Check that the solution is correct:

>>> np.allclose(np.dot(a, x), b)
True