+
    ‹°³j˜/  ã                   óp  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHtHtHtHtHt ^ RIHtHtHtHtHtHtHtHtHt ^ RIHt RR
 lt]P<                  R	3R lt]P<                  R	3R lt ]P<                  R	3R lt!]P<                  R	3R lt"]P<                  R	3R lt#]P<                  R	3R lt$R	# )af  
Singularities
=============

This module implements algorithms for finding singularities for a function
and identifying types of functions.

The differential calculus methods in this module include methods to identify
the following function types in the given ``Interval``:
- Increasing
- Strictly Increasing
- Decreasing
- Strictly Decreasing
- Monotonic

)ÚPow)ÚS)ÚSymbol)Úsympify)Úlog)ÚsecÚcscÚcotÚtanÚcos)	ÚsechÚcschÚcothÚtanhÚcoshÚasechÚacschÚatanhÚacoth)Ú
filldedentNc                óâ  € ^ RI Hp Vf3   VP                  '       d   \        P                  M\        P
                  p \        P                  pV P                  \        \        \        \        .\        4      pVP                  \        \        \        \         .\"        4      pVP%                  \&        4       F\  pVP(                  P*                  '       d   \,        hVP(                  P.                  '       g   KC  WC! VP0                  W4      ,          pK^  	  V P%                  \2        \4        \6        4       F#  pWC! VP8                  ^ ,          W4      ,          pK%  	  V P%                  \:        \<        4       FQ  pWC! VP8                  ^ ,          ^,
          W4      ,          pWC! VP8                  ^ ,          ^,           W4      ,          pKS  	  V#   \,         d    \-        \?        R4      4      hi ; i)añ  
Find singularities of a given function.

Parameters
==========

expression : Expr
    The target function in which singularities need to be found.
symbol : Symbol
    The symbol over the values of which the singularity in
    expression in being searched for.

Returns
=======

Set
    A set of values for ``symbol`` for which ``expression`` has a
    singularity. An ``EmptySet`` is returned if ``expression`` has no
    singularities for any given value of ``Symbol``.

Raises
======

NotImplementedError
    Methods for determining the singularities of this function have
    not been developed.

Notes
=====

This function does not find non-isolated singularities
nor does it find branch points of the expression.

Currently supported functions are:
    - univariate continuous (real or complex) functions

References
==========

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

Examples
========

>>> from sympy import singularities, Symbol, log
>>> x = Symbol('x', real=True)
>>> y = Symbol('y', real=False)
>>> singularities(x**2 + x + 1, x)
EmptySet
>>> singularities(1/(x + 1), x)
{-1}
>>> singularities(1/(y**2 + 1), y)
{-I, I}
>>> singularities(1/(y**3 + 1), y)
{-1, 1/2 - sqrt(3)*I/2, 1/2 + sqrt(3)*I/2}
>>> singularities(log(x), x)
{0}

©Úsolvesetzl
            Methods for determining the singularities
            of this function have not been developed.) Úsympy.solvers.solvesetr   Úis_realr   ÚRealsÚ	ComplexesÚEmptySetÚrewriter   r   r	   r
   r   r   r   r   r   r   Úatomsr   ÚexpÚis_infiniteÚNotImplementedErrorÚis_negativeÚbaser   r   r   Úargsr   r   r   )Ú
expressionÚsymbolÚdomainr   ÚsingsÚeÚis   &&&    Ú]/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/calculus/singularities.pyÚsingularitiesr-      sg  € õx 0à‚~Ø"ŸNŸN˜N”—’´·±ˆð;Ü—
‘
ˆØ×Ñ¤¤S¬#¬sÐ3´SÓ9ˆØ�I‰I”tœT¤4¬Ð.´Ó5ˆØ—‘œ–ˆAØ�u‰u× × Ð Ü)Ð)Ø�u‰u× × Ò à˜ !§&¡&¨&Ó9Õ9’ñ ð ×!Ñ!¤#¤u¬eÖ4ˆAØ�X˜aŸf™f Q�i¨Ó8Õ8ŠEñ 5à×!Ñ!¤%¬Ö/ˆAØ�X˜aŸf™f Q�i¨!�m¨VÓ<Õ<ˆEØ�X˜aŸf™f Q�i¨!�m¨VÓ<Õ<ŠEñ 0ð ˆøÜô ;Ü!¤*ð .9ó #:ó ;ð 	;ð;ús   ¾B7G Ã:CG Ç G.c                óT  € ^ RI Hp \        V 4      p V P                  pVf   \	        V4      ^8”  d   \        R4      hT;'       g$    V'       d   VP                  4       M
\        R4      pV P                  V4      pV! V! V4      V\        P                  4      pVP                  V4      # )a„  
Helper function for functions checking function monotonicity.

Parameters
==========

expression : Expr
    The target function which is being checked
predicate : function
    The property being tested for. The function takes in an integer
    and returns a boolean. The integer input is the derivative and
    the boolean result should be true if the property is being held,
    and false otherwise.
interval : Set, optional
    The range of values in which we are testing, defaults to all reals.
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

It returns a boolean indicating whether the interval in which
the function's derivative satisfies given predicate is a superset
of the given interval.

Returns
=======

Boolean
    True if ``predicate`` is true for all the derivatives when ``symbol``
    is varied in ``range``, False otherwise.

r   zKThe function has not yet been implemented for all multivariate expressions.Úx)r   r   r   Úfree_symbolsÚlenr"   Úpopr   Údiffr   r   Ú	is_subset)	r&   Ú	predicateÚintervalr'   r   ÚfreeÚvariableÚ
derivativeÚpredicate_intervals	   &&&&     r,   Úmonotonicity_helperr;   x   s“   € õ> 0ä˜Ó$€JØ×"Ñ"€Dà‚~Üˆt‹9�qŒ=Ü%ð5óð ð
 ×>Ð>¯˜$Ÿ(™(œ*´&¸³+€HØ—‘ Ó*€JÙ!¡)¨JÓ"7¸Ä1Ç7Á7ÓKÐØ×ÑÐ0Ó1Ð1ó    c                ó   € \        V R W4      # )a   
Return whether the function is increasing in the given interval.

Parameters
==========

expression : Expr
    The target function which is being checked.
interval : Set, optional
    The range of values in which we are testing (defaults to set of
    all real numbers).
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

Returns
=======

Boolean
    True if ``expression`` is increasing (either strictly increasing or
    constant) in the given ``interval``, False otherwise.

Examples
========

>>> from sympy import is_increasing
>>> from sympy.abc import x, y
>>> from sympy import S, Interval, oo
>>> is_increasing(x**3 - 3*x**2 + 4*x, S.Reals)
True
>>> is_increasing(-x**2, Interval(-oo, 0))
True
>>> is_increasing(-x**2, Interval(0, oo))
False
>>> is_increasing(4*x**3 - 6*x**2 - 72*x + 30, Interval(-2, 3))
False
>>> is_increasing(x**2 + y, Interval(1, 2), x)
True

c                 ó   € V ^ 8¬  # ©é    © ©r/   s   &r,   Ú<lambda>Úis_increasing.<locals>.<lambda>Ñ   ó   € °Q¸!²Vr<   ©r;   ©r&   r6   r'   s   &&&r,   Úis_increasingrH   ©   s   € ôP ˜zÑ+;¸XÓNÐNr<   c                ó   € \        V R W4      # )aø  
Return whether the function is strictly increasing in the given interval.

Parameters
==========

expression : Expr
    The target function which is being checked.
interval : Set, optional
    The range of values in which we are testing (defaults to set of
    all real numbers).
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

Returns
=======

Boolean
    True if ``expression`` is strictly increasing in the given ``interval``,
    False otherwise.

Examples
========

>>> from sympy import is_strictly_increasing
>>> from sympy.abc import x, y
>>> from sympy import Interval, oo
>>> is_strictly_increasing(4*x**3 - 6*x**2 - 72*x + 30, Interval.Ropen(-oo, -2))
True
>>> is_strictly_increasing(4*x**3 - 6*x**2 - 72*x + 30, Interval.Lopen(3, oo))
True
>>> is_strictly_increasing(4*x**3 - 6*x**2 - 72*x + 30, Interval.open(-2, 3))
False
>>> is_strictly_increasing(-x**2, Interval(0, oo))
False
>>> is_strictly_increasing(-x**2 + y, Interval(-oo, 0), x)
False

c                 ó   € V ^ 8„  # r?   rA   rB   s   &r,   rC   Ú(is_strictly_increasing.<locals>.<lambda>ü   ó   € °Q¸²Ur<   rF   rG   s   &&&r,   Úis_strictly_increasingrM   Ô   ó   € ôP ˜z©?¸HÓMÐMr<   c                ó   € \        V R W4      # )a>  
Return whether the function is decreasing in the given interval.

Parameters
==========

expression : Expr
    The target function which is being checked.
interval : Set, optional
    The range of values in which we are testing (defaults to set of
    all real numbers).
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

Returns
=======

Boolean
    True if ``expression`` is decreasing (either strictly decreasing or
    constant) in the given ``interval``, False otherwise.

Examples
========

>>> from sympy import is_decreasing
>>> from sympy.abc import x, y
>>> from sympy import S, Interval, oo
>>> is_decreasing(1/(x**2 - 3*x), Interval.open(S(3)/2, 3))
True
>>> is_decreasing(1/(x**2 - 3*x), Interval.open(1.5, 3))
True
>>> is_decreasing(1/(x**2 - 3*x), Interval.Lopen(3, oo))
True
>>> is_decreasing(1/(x**2 - 3*x), Interval.Ropen(-oo, S(3)/2))
False
>>> is_decreasing(1/(x**2 - 3*x), Interval.Ropen(-oo, 1.5))
False
>>> is_decreasing(-x**2, Interval(-oo, 0))
False
>>> is_decreasing(-x**2 + y, Interval(-oo, 0), x)
False

c                 ó   € V ^ 8*  # r?   rA   rB   s   &r,   rC   Úis_decreasing.<locals>.<lambda>+  rE   r<   rF   rG   s   &&&r,   Úis_decreasingrR   ÿ   s   € ôX ˜zÑ+;¸XÓNÐNr<   c                ó   € \        V R W4      # )aÞ  
Return whether the function is strictly decreasing in the given interval.

Parameters
==========

expression : Expr
    The target function which is being checked.
interval : Set, optional
    The range of values in which we are testing (defaults to set of
    all real numbers).
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

Returns
=======

Boolean
    True if ``expression`` is strictly decreasing in the given ``interval``,
    False otherwise.

Examples
========

>>> from sympy import is_strictly_decreasing
>>> from sympy.abc import x, y
>>> from sympy import S, Interval, oo
>>> is_strictly_decreasing(1/(x**2 - 3*x), Interval.Lopen(3, oo))
True
>>> is_strictly_decreasing(1/(x**2 - 3*x), Interval.Ropen(-oo, S(3)/2))
False
>>> is_strictly_decreasing(1/(x**2 - 3*x), Interval.Ropen(-oo, 1.5))
False
>>> is_strictly_decreasing(-x**2, Interval(-oo, 0))
False
>>> is_strictly_decreasing(-x**2 + y, Interval(-oo, 0), x)
False

c                 ó   € V ^ 8  # r?   rA   rB   s   &r,   rC   Ú(is_strictly_decreasing.<locals>.<lambda>V  rL   r<   rF   rG   s   &&&r,   Úis_strictly_decreasingrV   .  rN   r<   c                óF  € ^ RI Hp \        V 4      p V P                  pVf   \	        V4      ^8”  d   \        R4      hT;'       g$    V'       d   VP                  4       M
\        R4      pV! V P                  V4      WQ4      pVP                  V4      \        P                  J # )a  
Return whether the function is monotonic in the given interval.

Parameters
==========

expression : Expr
    The target function which is being checked.
interval : Set, optional
    The range of values in which we are testing (defaults to set of
    all real numbers).
symbol : Symbol, optional
    The symbol present in expression which gets varied over the given range.

Returns
=======

Boolean
    True if ``expression`` is monotonic in the given ``interval``,
    False otherwise.

Raises
======

NotImplementedError
    Monotonicity check has not been implemented for the queried function.

Examples
========

>>> from sympy import is_monotonic
>>> from sympy.abc import x, y
>>> from sympy import S, Interval, oo
>>> is_monotonic(1/(x**2 - 3*x), Interval.open(S(3)/2, 3))
True
>>> is_monotonic(1/(x**2 - 3*x), Interval.open(1.5, 3))
True
>>> is_monotonic(1/(x**2 - 3*x), Interval.Lopen(3, oo))
True
>>> is_monotonic(x**3 - 3*x**2 + 4*x, S.Reals)
True
>>> is_monotonic(-x**2, S.Reals)
False
>>> is_monotonic(x**2 + y + 1, Interval(1, 2), x)
True

r   zKis_monotonic has not yet been implemented for all multivariate expressions.r/   )r   r   r   r0   r1   r"   r2   r   r3   Úintersectionr   r   )r&   r6   r'   r   r7   r8   Úturning_pointss   &&&    r,   Úis_monotonicrZ   Y  sŠ   € õ` 0ä˜Ó$€Jà×"Ñ"€DØ‚~œ#˜d›) aœ-Ü!ð1ó
ð 	
ð
 ×>Ð>¯˜$Ÿ(™(œ*´&¸³+€HÙ˜jŸo™o¨hÓ7¸ÓL€NØ× Ñ  Ó0´A·J±JÐ>Ð>r<   )N)%Ú__doc__Úsympy.core.powerr   Úsympy.core.singletonr   Úsympy.core.symbolr   Úsympy.core.sympifyr   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.trigonometricr   r   r	   r
   r   Ú%sympy.functions.elementary.hyperbolicr   r   r   r   r   r   r   r   r   Úsympy.utilities.miscr   r-   r   r;   rH   rM   rR   rV   rZ   rA   r<   r,   Ú<module>rd      s£   ðñõ" !Ý "Ý $Ý &Ý 6ß LÕ L÷>÷ >õ >å +ôS;ðv 9:¿¹Èô .2ðb ()§w¡w°tô (OðV 12·±Àô (NðV ()§w¡w°tô ,Oð^ 12·±Àô (NðV '(§g¡g°dö =?r<   