§
    OŠtjn  ã                   óŠ   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZmZmZmZ d d	lmZ d
„ Zd„ Zd„ Zd„ ZdS )é    )Údefaultdict©ÚAdd)ÚMul)ÚS)Úconstruct_domain)ÚPolyNonlinearErroré   )ÚSDMÚ	sdm_irrefÚsdm_particular_from_rrefÚsdm_nullspace_from_rref)Ú
filldedentc                 óú  — t          |¦  «        }t          | |¦  «        \  }}t          |||¦  «        }|j        }|j        s|j        r>|                     ¦   «                              ¦   «         d                              ¦   «         }t          |¦  «        \  }}}	|r|d         |k    rdS t          ||dz   |¦  «        }
t          ||j        |||	¦  «        \  }}t          t          ¦  «        }|
                     ¦   «         D ]9\  }}|||                                       |                     |¦  «        ¦  «         Œ:t%          ||¦  «        D ]^\  }}||         }|                     ¦   «         D ]<\  }}|||                                       ||                     |¦  «        z  ¦  «         Œ=Œ_d„ |                     ¦   «         D ¦   «         }t&          j        }t+          |¦  «        t+          |¦  «        z
  D ]}|||<   Œ|S )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
   c                 ó(   — i | ]\  }}|t          |Ž “ŒS © r   )Ú.0ÚsÚtermss      ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/polys/matrices/linsolve.pyú
<dictcomp>z_linsolve.<locals>.<dictcomp>m   s"   € Ð
6Ð
6Ð
6™h˜a ˆ1�c�5ˆkÐ
6Ð
6Ð
6ó    )Ú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   ÚZeroÚset)ÚeqsÚsymsÚnsymsÚeqsdictÚconstÚAaugÚKÚArrefÚpivotsÚnzcolsÚPÚVÚ	nonpivotsÚsolÚiÚvÚnpiÚViÚsymÚzeror   s                        r   Ú	_linsolver?   0   s   € õ0 �‰IŒI€Eõ (¨¨TÑ2Ô2�N€GˆUÝ˜G U¨DÑ1Ô1€DØŒ€Að
 	„~ð 0˜Ô*ð 0Ø�{Š{‰}Œ}×!Ò!Ñ#Ô# AÔ&×-Ò-Ñ/Ô/ˆõ & d™OœOÑ€Eˆ6�6ð ð �&˜”* Ò%Ð%Øˆtõ 	! ¨¨a©°Ñ8Ô8€Aõ +¨5°!´%¸ÀÈÑOÔO�L€A€yõ •dÑ
Ô
€CØ—’‘	”	ð +ð +‰ˆˆ1ØˆD�ŒGŒ×Ò˜AŸJšJ q™MœMÑ*Ô*Ð*Ð*Ý�y !Ñ$Ô$ð 5ð 5‰ˆˆRØ�3ŒiˆØ—H’H‘J”Jð 	5ð 	5‰DˆAˆqØ��Q”ŒL×Ò  a§j¢j°¡m¤mÑ 3Ñ4Ô4Ð4Ð4ð	5ð 7Ð
6¨#¯)ª)©+¬+Ð
6Ñ
6Ô
6€Cõ Œ6€DÝ�‰YŒY�˜S™œÑ!ð ð ˆØˆˆA‰ˆð €Jr   c                 óB  ‡‡—  t          |¦  «        j        d„ | D ¦   «         Ž }t          |dd¬¦  «        \  }}t          t	          ||¦  «        ¦  «        Št          | ¦  «        }t          |¦  «        }t          t	          |t          |¦  «        ¦  «        ¦  «        Šg }t	          | |¦  «        D ]K\  }	}
ˆˆfd„|	                     ¦   «         D ¦   «         }|
r‰|
          ||<   |r|                     |¦  «         ŒLt          t          |¦  «        ||dz   f|¦  «        }|S )z?Convert a system of dict equations to a sparse augmented matrixc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S )N)Úvalues)r   Úes     r   ú	<genexpr>z#sympy_dict_to_dm.<locals>.<genexpr>z   s*   è è € Ð @Ð @° §¢¡¤Ð @Ð @Ð @Ð @Ð @Ð @r   T)ÚfieldÚ	extensionc                 ó4   •— i | ]\  }}‰|         ‰|         “ŒS r   r   )r   r   ÚcÚelem_mapÚ	sym2indexs      €€r   r   z$sympy_dict_to_dm.<locals>.<dictcomp>‚   s'   ø€ ÐCÐCÐC±°°1�)˜A”, ¨¤ÐCÐCÐCr   r
   )r*   Úunionr   Údictr(   r   Úranger%   r&   r   Ú	enumerate)Ú
eqs_coeffsÚeqs_rhsr,   Úelemsr1   Úelems_KÚneqsr-   r.   ÚeqÚrhsÚeqdictÚsdm_augrI   rJ   s                @@r   r   r   x   s)  øø€ à�C�‰LŒLÔÐ @Ð @°ZÐ @Ñ @Ô @ÐA€EÝ! %¨t¸tÐDÑDÔD�J€A€wÝ•C˜˜wÑ'Ô'Ñ(Ô(€HÝˆz‰?Œ?€DÝ�‰IŒI€EÝ•S˜�u U™|œ|Ñ,Ô,Ñ-Ô-€IØ€GÝ�z 7Ñ+Ô+ð #ð #‰ˆˆCØCÐCÐCÐCÐC¸¿º¹
¼
ÐCÑCÔCˆØð 	+Ø% cœ]˜NˆF�5‰MØð 	#Ø�NŠN˜6Ñ"Ô"Ð"øÝ•)˜GÑ$Ô$ t¨U°Q©YÐ&7¸Ñ;Ô;€GØ€Nr   c                 óÜ  — g }g }t          |¦  «        }| D ]Ó}|j        r�t          |j        |¦  «        \  }}t          |j        |¦  «        \  }}	||z  }|	                     ¦   «         D ] \  }
}|
|v r||
xx         |z  cc<   Œ| ||
<   Œ!d„ |                     ¦   «         D ¦   «         }||}}nt          ||¦  «        \  }}|                     |¦  «         |                     |¦  «         ŒÔ||fS )am  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])
    c                 ó   — i | ]
\  }}|¯||“ŒS r   r   )r   Úkr:   s      r   r   z&_linear_eq_to_dict.<locals>.<dictcomp>¨   s#   € Ð9Ð9Ð9™d˜a °qÐ9�Q˜Ð9Ð9Ð9r   )r*   Úis_EqualityÚ_lin_eq2dictÚlhsrU   r%   r&   )r+   r,   ÚcoeffsÚindÚsymsetrC   Úcoeffr   ÚcRÚtRrZ   r:   rH   Úds                 r   r   r   ‹   s  € ð €FØ
€CÝ�‰YŒY€FØð ð ˆØŒ=ð 	+Ý'¨¬¨vÑ6Ô6‰LˆE�5Ý! !¤%¨Ñ0Ô0‰FˆB�ð �R‰KˆEØŸš™
œ
ð "ð "‘��1Ø˜�:�:Ø˜!�H�H”H ‘M�H�H‘H�Hà !˜r�E˜!‘H�Hà9Ð9 e§k¢k¡m¤mÐ9Ñ9Ô9ˆEØ˜%ˆqˆAˆAå  6Ñ*Ô*‰DˆAˆqØ�Š�aÑÔÐØ�
Š
�1‰ŒˆˆØ�3ˆ;Ðr   c                 óD  ‡— | |v rt           j        | t           j        ifS | j        r¨t	          t
          ¦  «        }g }| j        D ]_}t          ||¦  «        \  }}|                     |¦  «         | 	                    ¦   «         D ] \  }}||                              |¦  «         Œ!Œ`t          |Ž Šd„ | 	                    ¦   «         D ¦   «         }	‰|	fS | j        r¡dx}	}
g }| j        D ]R}t          ||¦  «        \  }}|s|                     |¦  «         Œ-|	€|}	|}
Œ4t          t          d| z  ¦  «        ¦  «        ‚t          j        |¦  «        Š|	€‰i fS ˆfd„|	 	                    ¦   «         D ¦   «         }	‰|
z  |	fS |                      |¦  «        s| i fS t          d| z  ¦  «        ‚)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})
    c                 ó(   — i | ]\  }}|t          |Ž “ŒS r   r   )r   r=   r^   s      r   r   z _lin_eq2dict.<locals>.<dictcomp>Ì   s"   € ÐIÐIÐI¡{ s¨F�•c˜6�lÐIÐIÐIr   Nz-
                    nonlinear cross-term: %sc                 ó"   •— i | ]\  }}|‰|z  “ŒS r   r   )r   r=   rH   ra   s      €r   r   z _lin_eq2dict.<locals>.<dictcomp>á   s#   ø€ Ð@Ð@Ð@©¨¨Q�S˜% !™)Ð@Ð@Ð@r   znonlinear term: %s)r   r)   ÚOneÚis_Addr   r$   Úargsr\   r&   r%   r   Úis_Mulr	   r   r   Ú
_from_argsÚ	has_xfree)Úar`   Ú
terms_listÚ
coeff_listÚaiÚciÚtiÚmijÚcijr   Úterms_coeffra   s              @r   r\   r\   ±   sý  ø€ ð  	ˆF€{€{ÝŒv˜�1œ5�zÐ!Ð!Ø	
Œð #;Ý ¥Ñ&Ô&ˆ
Øˆ
Ø”&ð 	,ð 	,ˆBÝ! " fÑ-Ô-‰FˆB�Ø×Ò˜bÑ!Ô!Ð!ØŸHšH™JœJð ,ð ,‘��SØ˜3”×&Ò& sÑ+Ô+Ð+Ð+ð,å�ZÐ ˆØIÐI°j×6FÒ6FÑ6HÔ6HÐIÑIÔIˆØ�eˆ|ÐØ	
Œð ;Ø"Ð"ˆ�Øˆ
Ø”&ð 	6ð 	6ˆBÝ! " fÑ-Ô-‰FˆB�Øð 	6Ø×!Ò! "Ñ%Ô%Ð%Ð%Ø�Ø�Ø ��õ )­ð 50Ø23ñ54ñ *5ô *5ñ 6ô 6ð 6å”˜zÑ*Ô*ˆØˆ=Ø˜"�9Ðà@Ð@Ð@Ð@°%·+²+±-´-Ð@Ñ@Ô@ˆEØ˜KÑ'¨Ð.Ð.Ø�[Š[˜Ñ Ô ð ;Ø�"ˆuˆå Ð!5¸Ñ!9Ñ:Ô:Ð:r   N)Úcollectionsr   Úsympy.core.addr   Úsympy.core.mulr   Úsympy.core.singletonr   Úsympy.polys.constructorr   Úsympy.polys.solversr	   Úsdmr   r   r   r   Úsympy.utilities.miscr   r?   r   r   r\   r   r   r   ú<module>r      s  ðð: $Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +ðEð Eð EðPð ð ð&#ð #ð #ðL5;ð 5;ð 5;ð 5;ð 5;r   