+
    i                      |    ^ RI HtHtHt ^ RIHtHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt  ! R R	]4      tR
# )    )Soodiff)DefinedFunctionArgumentIndexError)	fuzzy_not)Eq)im)	Piecewise)	Heavisidec                   f   a  ] tR t^t o RtRtRR lt]R 4       tR t	R t
R tRR	 lt]
t]
tR
tV tR# )SingularityFunctionau  
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                N   V^8X  d   V P                   w  r#pV\        P                  \        P                  \        R4      \        R4      39   d   V P	                  W#V^,
          4      # VP
                  '       d    W@P	                  W#V^,
          4      ,          # R# \        W4      h)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   &&   k/var/www/html/photoedit/myenv/lib/python3.14/site-packages/sympy/functions/special/singularity_functions.pyfdiffSingularityFunction.fdiffX   s      q=iiGA!QVVQ]]AbE1R599yyqs++11---  %T44    c                R   TpTpTpWE,
          p\        \        V4      P                  4      '       d   \        R4      h\        \        V4      P                  4      '       d   \        R4      hV\        P
                  J g   V\        P
                  J d   \        P
                  # V^,           P                  '       d   \        R4      hVP                  '       d   \        P                  # VP                  '       dD   VP                  '       d   \        P                  V,          # VP                  '       d	   Wv,          # V\        P                  RRR39   dO   VP                  '       g   VP                  '       d   \        P                  # VP                  '       d   \        # R# R# )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.Nr   r   )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]]##]^^AEE>Q!%%Z55LE`aa%%%66M}}}vvqy ,,,xB++   E$>$>$>vv}}}	  ,r   c                <   V P                   w  r4pV\        P                  \        R4      \        R4      \        R4      39   d#   \        \        \        W4,
          ^ 4      3R4      # VP                  '       d%   \        W4,
          V,          W4,
          ^ 8  3R4      # R# )zF
Converts a Singularity Function expression into its Piecewise form.

Nr   r   r!   )r   T)r   r   r   r   r   r	   r'   r   r   kwargsr   r   r   s   &*,   r   _eval_rewrite_as_Piecewise.SingularityFunction._eval_rewrite_as_Piecewise   s{    
 ))a"quae44b"QUA,/;;quqj!%1*5yAA r   c                l   V P                   w  r4pVR8X  d5   \        \        W4,
          4      VP                  P	                  4       ^4      # VR8X  d5   \        \        W4,
          4      VP                  P	                  4       ^4      # VR8X  d5   \        \        W4,
          4      VP                  P	                  4       ^4      # VR8X  d5   \        \        W4,
          4      VP                  P	                  4       ^4      # VP
                  '       d'   W4,
          V,          \        W4,
          ^4      ,          # R# )zO
Rewrites a Singularity Function expression using Heavisides and DiracDeltas.

Nr!   r   r   )r   r   r   free_symbolspopr'   r2   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EA:iq111 r   c                h   V P                   w  rEpWE,
          P                  V^ 4      pV^ 8  d   \        P                  # VP                  '       d:   VP                  '       d(   VR8X  d   \        P                  # \        P
                  # VP                  '       d	   Wv,          # \        P                  # )r   r7   )r   subsr   r   r"   Oner   )r   r   logxcdirzr   r   r.   s   &&&&    r   _eval_as_leading_term)SingularityFunction._eval_as_leading_term   sw    ))aQ"q566MYYY5===!RZ1662QUU28Ovvr   Nc                   V P                   w  rVpWV,
          P                  V^ 4      pV^ 8  d   \        P                  # VP                  '       d:   VP                  '       d(   VR8X  d   \        P                  # \        P
                  # VP                  '       d!   WV,
          V,          P                  WW4R7      # \        P                  # )r   )r?   r@   r7   )r   r=   r   r   r"   r>   r   _eval_nseries)r   r   r   r?   r@   rA   r   r.   s   &&&&&   r   rE   !SingularityFunction._eval_nseries   s    ))aQ"q566MYYY5===!RZ1662QUU2UQJ--a-IIvvr    )   )Nr   )__name__
__module____qualname____firstlineno____doc__is_realr   classmethodr/   r4   r:   rB   rE   _eval_rewrite_as_DiracDelta$_eval_rewrite_as_HeavisideDiracDelta__static_attributes____classdictcell__)__classdict__s   @r   r   r      sR     EN G52 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   rG   r   r   <module>r\      s-    " " C & $ 3 : =]F/ ]Fr   