
    \hn                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  SSKJrJrJrJr  S S	KJr  S
 rS rS rS rg)    )defaultdict)Add)Mul)S)construct_domain)PolyNonlinearError   )SDM	sdm_irrefsdm_particular_from_rrefsdm_nullspace_from_rref)
filldedentc                    [        U5      n[        X5      u  p4[        X4U5      nUR                  nUR                  (       d  UR
                  (       a/  UR                  5       R                  5       S   R                  5       n[        U5      u  pxn	U(       a
  US   U:X  a  g[        XrS-   U5      n
[        XvR                  X(U	5      u  p[        [        5      nU
R                  5        H*  u  pXU      R!                  UR#                  U5      5        M,     [%        X5       HL  u  nnUU   nUR                  5        H-  u  pXU      R!                  UUR#                  U5      -  5        M/     MN     UR                  5        VVs0 s H  u  nnU['        U6 _M     nnn[(        R*                  n[-        U5      [-        U5      -
   H  nUUU'   M
     U$ s  snnf )a  Solve a linear system of equations.

Examples
========

Solve a linear system with a unique solution:

>>> from sympy import symbols, Eq
>>> from sympy.polys.matrices.linsolve import _linsolve
>>> x, y = symbols('x, y')
>>> eqs = [Eq(x + y, 1), Eq(x - y, 2)]
>>> _linsolve(eqs, [x, y])
{x: 3/2, y: -1/2}

In the case of underdetermined systems the solution will be expressed in
terms of the unknown symbols that are unconstrained:

>>> _linsolve([Eq(x + y, 0)], [x, y])
{x: -y, y: y}

r   Nr	   )len_linear_eq_to_dictsympy_dict_to_dmdomainis_RealFieldis_ComplexFieldto_ddmrrefto_sdmr   r   r   oner   listitemsappendto_sympyzipr   r   Zeroset)eqssymsnsymseqsdictconstAaugKArrefpivotsnzcolsPV	nonpivotssolivnpiVisymstermszeros                         U/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/matrices/linsolve.py	_linsolver9   0   s   0 IE (2NGGD1DA
 	~~**{{}!!#A&--/ &dOE6 &*% 	!a8A +5%%OLA d
C	GAJJqM* y$R3iHHJDAQLajjm 34  % +.))+
6+ha1c5k>+C
6 66DYS!A " J 7s   Gc                    [        U5      R                  " S U  5       6 n[        USSS9u  pE[        [	        X55      5      n[        U 5      n[        U5      n[        [	        U[        U5      5      5      n	/ n
[	        X5       HV  u  pUR                  5        VVs0 s H  u  pX   Xn   _M     nnnU(       a  Xl   * X'   U(       d  ME  U
R                  U5        MX     [        [        U
5      XxS-   4U5      nU$ s  snnf )z?Convert a system of dict equations to a sparse augmented matrixc              3   @   #    U  H  oR                  5       v   M     g 7f)N)values).0es     r8   	<genexpr>#sympy_dict_to_dm.<locals>.<genexpr>z   s      @ZZs   T)field	extensionr	   )r!   unionr   dictr   r   ranger   r   r
   	enumerate)
eqs_coeffseqs_rhsr#   elemsr(   elems_Kelem_mapneqsr$   	sym2indexr%   eqrhsr5   ceqdictsdm_augs                    r8   r   r   x   s    L @Z @AE!%ttDJAC'(Hz?DIESuU|,-IGz+8:
C
),+
C%]NFM6NN6" , )G$tQY&7;GN Ds   C8c                    / n/ n[        U5      nU  H  nUR                  (       a  [        UR                  U5      u  pg[        UR                  U5      u  pXh-  nU	R                  5        H  u  pX;   a  Xz==   U-  ss'   M  U* Xz'   M     UR                  5        V
Vs0 s H  u  pU(       d  M  X_M     nn
nXgpO[        XT5      u  pUR                  U5        UR                  U5        M     X#4$ s  snn
f )aI  Convert a system Expr/Eq equations into dict form, returning
the coefficient dictionaries and a list of syms-independent terms
from each expression in ``eqs```.

Examples
========

>>> from sympy.polys.matrices.linsolve import _linear_eq_to_dict
>>> from sympy.abc import x
>>> _linear_eq_to_dict([2*x + 3], {x})
([{x: 2}], [3])
)r!   is_Equality_lin_eq2dictlhsrO   r   r   )r"   r#   coeffsindsymsetr>   coeffr6   cRtRkr1   rP   ds                 r8   r   r      s     F
CYF=='v6LE!!%%0FB KE
:HMH !rEH	 # ',kkm9mdaqTQTmE9q*DAa

1% & ; :s   C1/C1c                    X;   a"  [         R                  U [         R                  04$ U R                  (       a  [	        [
        5      n/ nU R                   HM  n[        XA5      u  pVUR                  U5        UR                  5        H  u  pxX'   R                  U5        M     MO     [        U6 n	UR                  5        V
Vs0 s H  u  pU
[        U6 _M     nn
nX4$ U R                  (       a  S=p/ nU R                   HH  n[        XA5      u  pVU(       d  UR                  U5        M*  Uc  UnUnM3  [        [        SU -  5      5      e   [        R                  " U5      n	Uc  U	0 4$ UR                  5        V
Vs0 s H
  u  pXU-  _M     nn
nX-  U4$ U R!                  U5      (       d  U 0 4$ [        SU -  5      es  snn
f s  snn
f )a  return (c, d) where c is the sym-independent part of ``a`` and
``d`` is an efficiently calculated dictionary mapping symbols to
their coefficients. A PolyNonlinearError is raised if non-linearity
is detected.

The values in the dictionary will be non-zero.

Examples
========

>>> from sympy.polys.matrices.linsolve import _lin_eq2dict
>>> from sympy.abc import x, y
>>> _lin_eq2dict(x + 2*y + 3, {x, y})
(3, {x: 1, y: 2})
Nz-
                    nonlinear cross-term: %sznonlinear term: %s)r   r    Oneis_Addr   r   argsrU   r   r   r   is_Mulr   r   r   
_from_args	has_xfree)arY   
terms_list
coeff_listaicitimijcijrZ   r4   rW   r6   terms_coeffrP   s                  r8   rU   rU      s     	{vv155z!!	
 &

&&B!"-FBb!HHJ&&s+ ' 
 Z 6@6F6F6HI6H{sc6l"6HI|	
""
&&B!"-FB!!"%  ) 502354 *5 6 6  z*="927++-@-S!)^-E@'..[[  "u !5!9::5 J* As   F=;GN)collectionsr   sympy.core.addr   sympy.core.mulr   sympy.core.singletonr   sympy.polys.constructorr   sympy.polys.solversr   sdmr
   r   r   r   sympy.utilities.miscr   r9   r   r   rU        r8   <module>ry      s?   : $   " 4 2  ,EP&#L5;rx   