Ë
    7^(h­  ã                   ól   — d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZ d„ Zd„ Zy	)
é    )ÚFunctionÚPowÚsympifyÚExpr)Ú
Relational)ÚS)ÚPolyÚ	decompose)Ú	func_name)ÚMinÚMaxc                 ó   ‡— t        | «      } t        | t        «      rt        | t        «      rt	        dt        | «      z  «      ‚‰| j                  vr| gS t        | t        t        f«      rm| j                  r*| j                  t        j                  k(  r| j                  }n| j                  d   }|‰k(  r| gS | j                  |‰«      gt!        |‰«      z   S t        | t"        t$        f«      r—t'        | j                  «      }d}t)        |«      D ]T  \  }}|j+                  ‰«      sŒt!        |‰«      }t-        |«      dk(  r‰g|z   }|€|dd }n|dd |k7  r‰g} n
|d   ||<   ŒV d   ‰k(  r| gS  | j.                  |Ž g|z   S t1        | «      }t'        t3        ˆfd„|j4                  «      «      }	t-        |	«      dk(  r2|	d   ‰k7  r*| j                  |	d   ‰«      }
|	d   }|
gt!        |‰«      z   S 	 t7        | «      S # t8        $ r | gcY S w xY w)a9  
    Computes General functional decomposition of ``f``.
    Given an expression ``f``, returns a list ``[f_1, f_2, ..., f_n]``,
    where::
              f = f_1 o f_2 o ... f_n = f_1(f_2(... f_n))

    Note: This is a General decomposition function. It also decomposes
    Polynomials. For only Polynomial decomposition see ``decompose`` in polys.

    Examples
    ========

    >>> from sympy.abc import x
    >>> from sympy import decompogen, sqrt, sin, cos
    >>> decompogen(sin(cos(x)), x)
    [sin(x), cos(x)]
    >>> decompogen(sin(x)**2 + sin(x) + 1, x)
    [x**2 + x + 1, sin(x)]
    >>> decompogen(sqrt(6*x**2 - 5), x)
    [sqrt(x), 6*x**2 - 5]
    >>> decompogen(sin(sqrt(cos(x**2 + 1))), x)
    [sin(x), sqrt(x), cos(x), x**2 + 1]
    >>> decompogen(x**4 + 2*x**3 - x - 1, x)
    [x**2 - x - 1, x**2 + x]

    zexpecting Expr but got: `%s`r   Né   c                 ó    •— ‰| j                   v S )N)Úfree_symbols)ÚxÚsymbols    €úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/solvers/decompogen.pyú<lambda>zdecompogen.<locals>.<lambda>M   s   ø€  ¨1¯>©>Ð!9€ ó    )r   Ú
isinstancer   r   Ú	TypeErrorr   r   r   r   Úis_PowÚbaser   ÚExp1ÚexpÚargsÚsubsÚ
decompogenr   r   ÚlistÚ	enumerateÚhas_freeÚlenÚfuncr	   ÚfilterÚgensr
   Ú
ValueError)Úfr   Úargr   Úd0ÚiÚaÚdÚfpr&   Úf1Úf2s    `          r   r   r   	   s  ø€ ô6 	�‹
€AÜ�aœÔ¤*¨Q´
Ô";ÜÐ6¼À1»ÑEÓFÐFØ�Q—^‘^Ñ#Øˆsˆ
ô �!”h¤�_Ô%Ø�8Š8˜Ÿ™¤!§&¡&Ò(Ø—%‘%‰Cà—&‘&˜‘)ˆCØ�&Š=Ø�3ˆJØ—‘�s˜FÓ#Ð$¤z°#°vÓ'>Ñ>Ð>ô �!”cœ3�ZÔ Ü�A—F‘F‹|ˆØˆÜ˜d“Oò 	‰DˆAˆqØ—:‘:˜fÔ%ØÜ˜1˜fÓ%ˆAÜ�1‹v˜Š{Ø�H˜q‘L�ØˆzØ�q�r�U‘Ø�1�2�˜"’ð �H�ÙØ˜‘dˆD�ŠGð	ð ˆQ‰4�6Š>Ø�3ˆJØ�—‘˜�ˆ Ñ#Ð#ô 
ˆa‹€BÜ”Ó9¸2¿7¹7ÓCÓD€Dä
ˆ4ƒy�A‚~˜$˜q™' VÒ+Ø�V‰V�D˜‘G˜VÓ$ˆØ�!‰WˆØˆt”j  VÓ,Ñ,Ð,ðÜ˜‹|ÐøÜò ØˆsŠ
ðús   Ç3
G> Ç>HÈHc                 óž   — t        | «      dk(  r| d   S | d   j                  || d   «      }t        | «      dk(  r|S t        |g| dd z   |«      S )a0  
    Returns the composition of functions.
    Given a list of functions ``g_s``, returns their composition ``f``,
    where:
        f = g_1 o g_2 o .. o g_n

    Note: This is a General composition function. It also composes Polynomials.
    For only Polynomial composition see ``compose`` in polys.

    Examples
    ========

    >>> from sympy.solvers.decompogen import compogen
    >>> from sympy.abc import x
    >>> from sympy import sqrt, sin, cos
    >>> compogen([sin(x), cos(x)], x)
    sin(cos(x))
    >>> compogen([x**2 + x + 1, sin(x)], x)
    sin(x)**2 + sin(x) + 1
    >>> compogen([sqrt(x), 6*x**2 - 5], x)
    sqrt(6*x**2 - 5)
    >>> compogen([sin(x), sqrt(x), cos(x), x**2 + 1], x)
    sin(sqrt(cos(x**2 + 1)))
    >>> compogen([x**2 - x - 1, x**2 + x], x)
    -x**2 - x + (x**2 + x)**2 - 1
    r   r   é   N)r#   r   Úcompogen)Úg_sr   Úfoos      r   r3   r3   [   sY   € ô6 ˆ3ƒx�1‚}Ø�1‰vˆà
ˆa‰&�+‰+�f˜c !™fÓ
%€Cä
ˆ3ƒx�1‚}Øˆ
ä�S�E˜C  ˜G‘O VÓ,Ð,r   N)Ú
sympy.corer   r   r   r   Úsympy.core.relationalr   Úsympy.core.singletonr   Úsympy.polysr	   r
   Úsympy.utilities.miscr   Ú(sympy.functions.elementary.miscellaneousr   r   r   r3   © r   r   ú<module>r=      s&   ðß 5Ó 5Ý ,Ý "ß 'Ý *ß =òOód#-r   