§
    OŠtj  ã                   óV   — d dl mZ d dlmZ d dlmZ d dlmZmZ ddl	m
Z
mZ d„ Zd„ Zd	S )
é    )ÚMul)ÚS)Údefault_sort_key)Ú
DiracDeltaÚ	Heavisideé   )ÚIntegralÚ	integratec           	      óÒ  — g }d}|                       ¦   «         \  }}t          |t          ¬¦  «        }|                     |¦  «         |D ]¤}|j        rWt          |j        t          ¦  «        r=|                     | 	                    |j        |j
        dz
  ¦  «        ¦  «         |j        }|€-t          |t          ¦  «        r|                     |¦  «        r|}Œ�|                     |¦  «         Œ¥|sîg }|D ]Á}t          |t          ¦  «        r+|                     |                     d|¬¦  «        ¦  «         ŒB|j        rct          |j        t          ¦  «        rI|                     | 	                    |j                             d|¬¦  «        |j
        ¦  «        ¦  «         Œ¬|                     |¦  «         ŒÂ||k    rt          |Ž                      ¦   «         }nd}d|fS |t          |Ž fS )a¶  change_mul(node, x)

       Rearranges the operands of a product, bringing to front any simple
       DiracDelta expression.

       Explanation
       ===========

       If no simple DiracDelta expression was found, then all the DiracDelta
       expressions are simplified (using DiracDelta.expand(diracdelta=True, wrt=x)).

       Return: (dirac, new node)
       Where:
         o dirac is either a simple DiracDelta expression or None (if no simple
           expression was found);
         o new node is either a simplified DiracDelta expressions or None (if it
           could not be simplified).

       Examples
       ========

       >>> from sympy import DiracDelta, cos
       >>> from sympy.integrals.deltafunctions import change_mul
       >>> from sympy.abc import x, y
       >>> change_mul(x*y*DiracDelta(x)*cos(x), x)
       (DiracDelta(x), x*y*cos(x))
       >>> change_mul(x*y*DiracDelta(x**2 - 1)*cos(x), x)
       (None, x*y*cos(x)*DiracDelta(x - 1)/2 + x*y*cos(x)*DiracDelta(x + 1)/2)
       >>> change_mul(x*y*DiracDelta(cos(x))*cos(x), x)
       (None, None)

       See Also
       ========

       sympy.functions.special.delta_functions.DiracDelta
       deltaintegrate
    N)Úkeyr   T©Ú
diracdeltaÚwrt)Úargs_cncÚsortedr   ÚextendÚis_PowÚ
isinstanceÚbaser   ÚappendÚfuncÚexpÚ	is_simpleÚexpandr   )	ÚnodeÚxÚnew_argsÚdiracÚcÚncÚsorted_argsÚargÚnnodes	            ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/integrals/deltafunctions.pyÚ
change_mulr%      sá  € ðN €HØ€Eð �MŠM‰OŒO�E€A€rÝ˜Õ 0Ð1Ñ1Ô1€KØ×Ò�rÑÔÐàð !ð !ˆØŒ:ð 	�* S¤X­zÑ:Ô:ð 	Ø�OŠO˜CŸHšH S¤X¨s¬w¸©{Ñ;Ô;Ñ<Ô<Ð<Ø”(ˆCØˆ=�j¨­jÑ9Ô9ˆ=¸c¿mºmÈAÑ>NÔ>Nˆ=ØˆEˆEà�OŠO˜CÑ Ô Ð Ð Øð ØˆØð 	%ð 	%ˆCÝ˜#�zÑ*Ô*ð %Ø—’ §
¢
°dÀ 
Ñ BÔ BÑCÔCÐCÐCØ”ð %¥
¨3¬8µZÑ @Ô @ð %Ø—’ §¢¨¬¯ªÀDÈa¨Ñ)PÔ)PÐRUÔRYÑ ZÔ ZÑ[Ô[Ð[Ð[à—’ Ñ$Ô$Ð$Ð$Ø�{Ò"Ð"Ý˜�N×)Ò)Ñ+Ô+ˆEˆEàˆEØ�eˆ}ÐØ•3˜�>Ð"Ð"ó    c                 óR  — |                       t          ¦  «        sdS | j        t          k    rä|                      d|¬¦  «        }|| k    rµ|                      |¦  «        ržt          | j        ¦  «        dk    s| j        d         dk    rt          | j        d         ¦  «        S t          | j        d         | j        d         dz
  ¦  «        | j        d                              ¦   «          	                    ¦   «         z  S �n¨t          ||¦  «        }|S | j        s| j        �r‡|                      ¦   «         }| |k    r+t          ||¦  «        }|�t          |t          ¦  «        s|S �nBt          | |¦  «        \  }}|s|rt          ||¦  «        }|S �nddlm} |                     d|¬¦  «        }|j        rt          ||¦  «        \  }}||z  } ||j        d         |¦  «        d         }	t          |j        ¦  «        dk    rdn|j        d         }
d}|
dk    rƒt$          j        |
z  |                     ||
¦  «                             ||	¦  «        z  }|j        r|
dz  }
|dz  }n1|dk    r|t          ||	z
  ¦  «        z  S |t          ||dz
  ¦  «        z  S |
dk    °ƒt$          j        S dS )aß  
    deltaintegrate(f, x)

    Explanation
    ===========

    The idea for integration is the following:

    - If we are dealing with a DiracDelta expression, i.e. DiracDelta(g(x)),
      we try to simplify it.

      If we could simplify it, then we integrate the resulting expression.
      We already know we can integrate a simplified expression, because only
      simple DiracDelta expressions are involved.

      If we couldn't simplify it, there are two cases:

      1) The expression is a simple expression: we return the integral,
         taking care if we are dealing with a Derivative or with a proper
         DiracDelta.

      2) The expression is not simple (i.e. DiracDelta(cos(x))): we can do
         nothing at all.

    - If the node is a multiplication node having a DiracDelta term:

      First we expand it.

      If the expansion did work, then we try to integrate the expansion.

      If not, we try to extract a simple DiracDelta term, then we have two
      cases:

      1) We have a simple DiracDelta term, so we return the integral.

      2) We didn't have a simple term, but we do have an expression with
         simplified DiracDelta terms, so we integrate this expression.

    Examples
    ========

        >>> from sympy.abc import x, y, z
        >>> from sympy.integrals.deltafunctions import deltaintegrate
        >>> from sympy import sin, cos, DiracDelta
        >>> deltaintegrate(x*sin(x)*cos(x)*DiracDelta(x - 1), x)
        sin(1)*cos(1)*Heaviside(x - 1)
        >>> deltaintegrate(y**2*DiracDelta(x - z)*DiracDelta(y - z), y)
        z**2*DiracDelta(x - z)*Heaviside(y - z)

    See Also
    ========

    sympy.functions.special.delta_functions.DiracDelta
    sympy.integrals.integrals.Integral
    NTr   r   r   )Úsolve)Úhasr   r   r   r   ÚlenÚargsr   Úas_polyÚLCr
   Úis_Mulr   r   r	   r%   Úsympy.solversr(   r   ÚNegativeOneÚdiffÚsubsÚis_zeroÚZero)Úfr   ÚhÚfhÚgÚ	deltatermÚ	rest_multr(   Úrest_mult_2ÚpointÚnÚmÚrs                r$   Údeltaintegrater@   Q   sÈ  € ðp �5Š5•ÑÔð Øˆtð 	„v•ÒÐØ�HŠH ¨!ˆHÑ,Ô,ˆØ�Š6ˆ6ð �{Š{˜1‰~Œ~ð 2Ý˜œ‘K”K 1Ò$Ð$¨¬¨q¬	°Qª¨Ý$ Q¤V¨A¤YÑ/Ô/Ð/å& q¤v¨a¤y°!´&¸´)¸a±-Ñ@Ô@Øœ˜qœ	×)Ò)Ñ+Ô+×.Ò.Ñ0Ô0ñ1ð 2ñ	2õ ˜1˜a‘”ˆBØˆIØ	
Œð -�Q”Xñ -Ø�HŠH‰JŒJˆØ�Š6ˆ6Ý˜1˜a‘”ˆBØˆ~¥j°µXÑ&>Ô&>ˆ~Ø�	ùõ $.¨a°Ñ#3Ô#3Ñ ˆI�yàð #Øð Ý" 9¨aÑ0Ô0�BØ�Iñð 0Ð/Ð/Ð/Ð/Ð/Ø%×,Ò,¸À!Ð,ÑDÔD�	ØÔ#ð 6Ý-7¸	À1Ñ-EÔ-EÑ*�I˜{Ø )¨+Ñ 5�IØ˜˜iœn¨QÔ/°Ñ3Ô3°AÔ6�õ ˜iœnÑ-Ô-¨qÒ0Ð0�Q�Q°i´nÀQÔ6G�Ø�Ø˜1’f�fÝœ qÑ(¨¯ª¸¸1Ñ)=Ô)=×)BÒ)BÀ1ÀeÑ)LÔ)LÑL�AØ”yð 7Ø˜Q™˜Ø˜Q™˜˜à š6˜6Ø#$¥Y¨q°5©yÑ%9Ô%9Ñ#9Ð9à#$¥Z°°!°A±#Ñ%6Ô%6Ñ#6Ð6ð ˜1’f�fõ ”v�Øˆ4r&   N)Úsympy.core.mulr   Úsympy.core.singletonr   Úsympy.core.sortingr   Úsympy.functionsr   r   Ú	integralsr	   r
   r%   r@   © r&   r$   ú<module>rG      sœ   ðØ Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ðF#ð F#ð F#ðRxð xð xð xð xr&   