ó
    ‰*£h  ã                   ó†   • S r SSKJr  SSKJr  SSKJr   " S S\5      r\" SSS	S
9r " S S5      r	\S 5       r
\S 5       rg)zThread-safe global parametersé   )Úclear_cacheé    )Úcontextmanager)Úlocalc                   ó2   ^ • \ rS rSrSrS rU 4S jrSrU =r$ )Ú_global_parametersé   aí  
Thread-local global parameters.

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

This class generates thread-local container for SymPy's global parameters.
Every global parameters must be passed as keyword argument when generating
its instance.
A variable, `global_parameters` is provided as default instance for this class.

WARNING! Although the global parameters are thread-local, SymPy's cache is not
by now.
This may lead to undesired result in multi-threading operations.

Examples
========

>>> from sympy.abc import x
>>> from sympy.core.cache import clear_cache
>>> from sympy.core.parameters import global_parameters as gp

>>> gp.evaluate
True
>>> x+x
2*x

>>> log = []
>>> def f():
...     clear_cache()
...     gp.evaluate = False
...     log.append(x+x)
...     clear_cache()
>>> import threading
>>> thread = threading.Thread(target=f)
>>> thread.start()
>>> thread.join()

>>> print(log)
[x + x]

>>> gp.evaluate
True
>>> x+x
2*x

References
==========

.. [1] https://docs.python.org/3/library/threading.html

c                 ó:   • U R                   R                  U5        g ©N)Ú__dict__Úupdate)ÚselfÚkwargss     ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/core/parameters.pyÚ__init__Ú_global_parameters.__init__<   s   € Ø�‰×Ñ˜VÕ$ó    c                 óT   >• [        X5      U:w  a
  [        5         [        TU ]  X5      $ r   )Úgetattrr   ÚsuperÚ__setattr__)r   ÚnameÚvalueÚ	__class__s      €r   r   Ú_global_parameters.__setattr__?   s%   ø€ Ü�4Ó %Ó'ÜŒMÜ‰wÑ" 4Ó/Ð/r   © )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s   ø† ñ3òh%÷0ó 0r   r   TF)ÚevaluateÚ
distributeÚ
exp_is_powc                   ó*   • \ rS rSrSrS rS rS rSrg)r$   éF   aÀ  Control automatic evaluation

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

This context manager controls whether or not all SymPy functions evaluate
by default.

Note that much of SymPy expects evaluated expressions.  This functionality
is experimental and is unlikely to function as intended on large
expressions.

Examples
========

>>> from sympy import evaluate
>>> from sympy.abc import x
>>> print(x + x)
2*x
>>> with evaluate(False):
...     print(x + x)
x + x
c                 ó   • Xl         / U l        g r   ©ÚxÚold)r   r+   s     r   r   Úevaluate.__init__^   s   € ØŒØˆ�r   c                 ó€   • U R                   R                  [        R                  5        U R                  [        l        g r   )r,   ÚappendÚglobal_parametersr$   r+   )r   s    r   Ú	__enter__Úevaluate.__enter__b   s&   € Ø�‰�‰Ô)×2Ñ2Ô3Ø%)§V¡VÔÕ"r   c                 óJ   • U R                   R                  5       [        l        g r   )r,   Úpopr0   r$   )r   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__Úevaluate.__exit__f   s   € Ø%)§X¡X§\¡\£^ÔÕ"r   )r,   r+   N)	r   r   r   r    r!   r   r1   r8   r"   r   r   r   r$   r$   F   s   † ñò.ò,õ4r   r$   c              #   ó‚   #   • [         R                  n U [         l        Sv •  U[         l        g! U[         l        f = f7f)aÍ  Control automatic distribution of Number over Add

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

This context manager controls whether or not Mul distribute Number over
Add. Plan is to avoid distributing Number over Add in all of sympy. Once
that is done, this contextmanager will be removed.

Examples
========

>>> from sympy.abc import x
>>> from sympy.core.parameters import distribute
>>> print(2*(x + 1))
2*x + 2
>>> with distribute(False):
...     print(2*(x + 1))
2*(x + 1)
N)r0   r%   r*   s     r   r%   r%   i   s5   é € ô. ×
&Ñ
&€Cð+Ø'(ÔÔ$Ûà'*ÔÕ$ø sÔÕ$üs   ‚?”/ £?¯<¼?c              #   ó¾   #   • [         R                  n[        5          U [         l        Sv •  [        5         U[         l        g! [        5         U[         l        f = f7f)aO  
Control whether `e^x` should be represented as ``exp(x)`` or a ``Pow(E, x)``.

Examples
========

>>> from sympy import exp
>>> from sympy.abc import x
>>> from sympy.core.parameters import _exp_is_pow
>>> with _exp_is_pow(True): print(type(exp(x)))
<class 'sympy.core.power.Pow'>
>>> with _exp_is_pow(False): print(type(exp(x)))
exp
N)r0   r&   r   r*   s     r   Ú_exp_is_powr<   ‰   sG   é € ô  ×
&Ñ
&€Cä„Mð+Ø'(ÔÔ$ÛäŒØ'*ÔÕ$øô 	ŒØ'*ÔÕ$üs   ‚AžA ­AÁAÁAN)r!   Úcacher   Ú
contextlibr   Ú	threadingr   r   r0   r$   r%   r<   r   r   r   Ú<module>r@      sc   ðÙ #å Ý %Ý ô;0˜ô ;0ñz '°ÀÐRWÑXÐ ÷!4ñ !4ðF ñ+ó ð+ð> ñ+ó ñ+r   