ó
    ‰*£hš   ã                   óz   • S SK JrJrJr  S SKJr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	\5      rg
)é    )ÚSÚooÚdiff)ÚDefinedFunctionÚArgumentIndexError)Ú	fuzzy_not)ÚEq)Úim)Ú	Piecewise)Ú	Heavisidec                   óZ   • \ rS rSrSrSrSS jr\S 5       rS r	S r
S rSS
 jr\
r\
rSrg	)ÚSingularityFunctioné   au  
Singularity functions are a class of discontinuous functions.

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

Singularity functions take a variable, an offset, and an exponent as
arguments. These functions are represented using Macaulay brackets as:

SingularityFunction(x, a, n) := <x - a>^n

The singularity function will automatically evaluate to
``Derivative(DiracDelta(x - a), x, -n - 1)`` if ``n < 0``
and ``(x - a)**n*Heaviside(x - a, 1)`` if ``n >= 0``.

Examples
========

>>> from sympy import SingularityFunction, diff, Piecewise, DiracDelta, Heaviside, Symbol
>>> from sympy.abc import x, a, n
>>> SingularityFunction(x, a, n)
SingularityFunction(x, a, n)
>>> y = Symbol('y', positive=True)
>>> n = Symbol('n', nonnegative=True)
>>> SingularityFunction(y, -10, n)
(y + 10)**n
>>> y = Symbol('y', negative=True)
>>> SingularityFunction(y, 10, n)
0
>>> SingularityFunction(x, 4, -1).subs(x, 4)
oo
>>> SingularityFunction(x, 10, -2).subs(x, 10)
oo
>>> SingularityFunction(4, 1, 5)
243
>>> diff(SingularityFunction(x, 1, 5) + SingularityFunction(x, 1, 4), x)
4*SingularityFunction(x, 1, 3) + 5*SingularityFunction(x, 1, 4)
>>> diff(SingularityFunction(x, 4, 0), x, 2)
SingularityFunction(x, 4, -2)
>>> SingularityFunction(x, 4, 5).rewrite(Piecewise)
Piecewise(((x - 4)**5, x >= 4), (0, True))
>>> expr = SingularityFunction(x, a, n)
>>> y = Symbol('y', positive=True)
>>> n = Symbol('n', nonnegative=True)
>>> expr.subs({x: y, a: -10, n: n})
(y + 10)**n

The methods ``rewrite(DiracDelta)``, ``rewrite(Heaviside)``, and
``rewrite('HeavisideDiracDelta')`` returns the same output. One can use any
of these methods according to their choice.

>>> expr = SingularityFunction(x, 4, 5) + SingularityFunction(x, -3, -1) - SingularityFunction(x, 0, -2)
>>> expr.rewrite(Heaviside)
(x - 4)**5*Heaviside(x - 4, 1) + DiracDelta(x + 3) - DiracDelta(x, 1)
>>> expr.rewrite(DiracDelta)
(x - 4)**5*Heaviside(x - 4, 1) + DiracDelta(x + 3) - DiracDelta(x, 1)
>>> expr.rewrite('HeavisideDiracDelta')
(x - 4)**5*Heaviside(x - 4, 1) + DiracDelta(x + 3) - DiracDelta(x, 1)

See Also
========

DiracDelta, Heaviside

References
==========

.. [1] https://en.wikipedia.org/wiki/Singularity_function

Tc                 ó.  • US:X  a…  U R                   u  p#nU[        R                  [        R                  [        S5      [        S5      4;   a  U R	                  X#US-
  5      $ UR
                  (       a  X@R	                  X#US-
  5      -  $ g[        X5      e)aû  
Returns the first derivative of a DiracDelta Function.

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

The difference between ``diff()`` and ``fdiff()`` is: ``diff()`` is the
user-level function and ``fdiff()`` is an object method. ``fdiff()`` is
a convenience method available in the ``Function`` class. It returns
the derivative of the function without considering the chain rule.
``diff(function, x)`` calls ``Function._eval_derivative`` which in turn
calls ``fdiff()`` internally to compute the derivative of the function.

é   éþÿÿÿéýÿÿÿN)Úargsr   ÚZeroÚNegativeOneÚfuncÚis_positiver   )ÚselfÚargindexÚxÚaÚns        Új/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/functions/special/singularity_functions.pyÚfdiffÚSingularityFunction.fdiffX   s   € ð  �q‹=Ø—i‘i‰GˆA�!Ø”Q—V‘VœQŸ]™]¬A¨b«E´1°R³5Ð9Ó9Ø—y‘y  q¨¡sÓ+Ð+Ø——ØŸ™ 1¨¨1©Ó-Ñ-Ð-ð ô % TÓ4Ð4ó    c                 ó  • UnUnUnXE-
  n[        [        U5      R                  5      (       a  [        S5      e[        [        U5      R                  5      (       a  [        S5      eU[        R
                  L d  U[        R
                  L a  [        R
                  $ US-   R                  (       a  [        S5      eUR                  (       a  [        R                  $ UR                  (       a9  UR                  (       a  [        R                  U-  $ UR                  (       a  Xv-  $ U[        R                  SSS4;   aJ  UR                  (       d  UR                  (       a  [        R                  $ UR                  (       a  [        $ gg)	a@  
Returns a simplified form or a value of Singularity Function depending
on the argument passed by the object.

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

The ``eval()`` method is automatically called when the
``SingularityFunction`` class is about to be instantiated and it
returns either some simplified instance or the unevaluated instance
depending on the argument passed. In other words, ``eval()`` method is
not needed to be called explicitly, it is being called and evaluated
once the object is called.

Examples
========

>>> from sympy import SingularityFunction, Symbol, nan
>>> from sympy.abc import x, a, n
>>> SingularityFunction(x, a, n)
SingularityFunction(x, a, n)
>>> SingularityFunction(5, 3, 2)
4
>>> SingularityFunction(x, a, nan)
nan
>>> SingularityFunction(x, 3, 0).subs(x, 3)
1
>>> SingularityFunction(4, 1, 5)
243
>>> x = Symbol('x', positive = True)
>>> a = Symbol('a', negative = True)
>>> n = Symbol('n', nonnegative = True)
>>> SingularityFunction(x, a, n)
(-a + x)**n
>>> x = Symbol('x', negative = True)
>>> a = Symbol('a', positive = True)
>>> SingularityFunction(x, a, n)
0

z8Singularity Functions are defined only for Real Numbers.z>Singularity Functions are not defined for imaginary exponents.é   zASingularity Functions are not defined for exponents less than -4.r   r   éüÿÿÿN)r   r
   Úis_zeroÚ
ValueErrorr   ÚNaNÚis_negativeÚis_extended_negativer   Úis_nonnegativeÚis_extended_nonnegativer   Úis_extended_positiver   )ÚclsÚvariableÚoffsetÚexponentr   r   r   Úshifts           r   ÚevalÚSingularityFunction.evalq   s  € ðV ˆØˆØˆØ‘ˆä”R˜“Y×&Ñ&×'Ñ'ÜÐWÓXÐXÜ”R˜“U—]‘]×#Ñ#ÜÐ]Ó^Ð^Ø”A—E‘EŠ>˜Q¤!§%¡%šZÜ—5‘5ˆLØ�‰E××ÜÐ`ÓaÐaØ×%×%Ü—6‘6ˆMØ××Ø�}�}Ü—v‘v˜q‘yÐ Ø×,×,Ø‘x�Ø”—‘  B¨Ð+Ó+Ø× ×  E×$>×$>Ü—v‘v�Ø�}�}Ü�	ð ð ,r!   c                 ó  • U R                   u  p4nU[        R                  [        S5      [        S5      [        S5      4;   a  [        [        [        X4-
  S5      4S5      $ UR                  (       a  [        X4-
  U-  X4-
  S:¬  4S5      $ g)zF
Converts a Singularity Function expression into its Piecewise form.

r   r   r$   r   )r   TN)r   r   r   r   r   r	   r*   ©r   r   Úkwargsr   r   r   s         r   Ú_eval_rewrite_as_PiecewiseÚ.SingularityFunction._eval_rewrite_as_Piecewise¶   sx   € ð
 —)‘)‰ˆˆaà”—‘¤ "£¤q¨£u¬a°«eÐ4Ó4Üœb¤" Q¡U¨A£,Ð/°Ó;Ð;Ø××Ü˜q™u q™j¨!©%°1©*Ð5°yÓAÐAð r!   c                 ó   • U R                   u  p4nUS:X  a0  [        [        X4-
  5      UR                  R	                  5       S5      $ US:X  a0  [        [        X4-
  5      UR                  R	                  5       S5      $ US:X  a0  [        [        X4-
  5      UR                  R	                  5       S5      $ US:X  a0  [        [        X4-
  5      UR                  R	                  5       S5      $ UR
                  (       a  X4-
  U-  [        X4-
  S5      -  $ g	)
zO
Rewrites a Singularity Function expression using Heavisides and DiracDeltas.

r$   r#   r   é   r   é   éÿÿÿÿr   N)r   r   r   Úfree_symbolsÚpopr*   r5   s         r   Ú_eval_rewrite_as_HeavisideÚ.SingularityFunction._eval_rewrite_as_HeavisideÂ   sá   € ð
 —)‘)‰ˆˆaà�‹7Üœ	 !¡%Ó(¨!¯.©.×*<Ñ*<Ó*>ÀÓBÐBØ�‹7Üœ	 !¡%Ó(¨!¯.©.×*<Ñ*<Ó*>ÀÓBÐBØ�‹7Üœ	 !¡%Ó(¨!¯.©.×*<Ñ*<Ó*>ÀÓBÐBØ�‹7Üœ	 !¡%Ó(¨!¯.©.×*<Ñ*<Ó*>ÀÓBÐBØ××Ø‘E˜A‘:œi¨©¨qÓ1Ñ1Ð1ð r!   c                 óN  • U R                   u  pEnXE-
  R                  US5      nUS:  a  [        R                  $ UR                  (       a7  UR                  (       a&  US:X  a  [        R                  $ [        R
                  $ UR                  (       a  Xv-  $ [        R                  $ )Nr   r<   )r   Úsubsr   r   r%   ÚOner   )r   r   ÚlogxÚcdirÚzr   r   r1   s           r   Ú_eval_as_leading_termÚ)SingularityFunction._eval_as_leading_termÔ   sp   € Ø—)‘)‰ˆˆaØ‘—‘˜Q Ó"ˆØˆq‹5Ü—6‘6ˆMØ�Y�Y˜5Ÿ=Ÿ=Ø! R›Z”1—6‘6Ð2¬Q¯U©UÐ2Ø××Ø‘8ˆOÜ�v‰vˆr!   Nc                 óp  • U R                   u  pVnXV-
  R                  US5      nUS:  a  [        R                  $ UR                  (       a7  UR                  (       a&  US:X  a  [        R                  $ [        R
                  $ UR                  (       a  XV-
  U-  R                  XX4S9$ [        R                  $ )Nr   r<   )rD   rE   )r   rB   r   r   r%   rC   r   Ú_eval_nseries)r   r   r   rD   rE   rF   r   r1   s           r   rJ   Ú!SingularityFunction._eval_nseriesß   s…   € Ø—)‘)‰ˆˆaØ‘—‘˜Q Ó"ˆØˆq‹5Ü—6‘6ˆMØ�Y�Y˜5Ÿ=Ÿ=Ø! R›Z”1—6‘6Ð2¬Q¯U©UÐ2Ø××Ø‘U˜Q‘J×-Ñ-¨a¸Ð-ÐIÐIÜ�v‰vˆr!   © )r   )Nr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úis_realr   Úclassmethodr2   r7   r?   rG   rJ   Ú_eval_rewrite_as_DiracDeltaÚ$_eval_rewrite_as_HeavisideDiracDeltaÚ__static_attributes__rL   r!   r   r   r      sO   † ñEðN €Gô5ð2 ñBó ðBòH
Bò2ò$	ô	ð #=ÐØ+EÓ(r!   r   N)Ú
sympy.corer   r   r   Úsympy.core.functionr   r   Úsympy.core.logicr   Úsympy.core.relationalr	   Ú$sympy.functions.elementary.complexesr
   Ú$sympy.functions.elementary.piecewiser   Ú'sympy.functions.special.delta_functionsr   r   rL   r!   r   Ú<module>r^      s-   ðß "Ñ "ß CÝ &Ý $Ý 3Ý :Ý =ô]F˜/õ ]Fr!   