§
    PŠtj­  ã                   ón   — 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d	S )
é    )Ú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¦  «        rb| j	        r| j
        t          j        k    r| j        }n| j        d         }|‰k    r| gS |                      |‰¦  «        gt!          |‰¦  «        z   S t          | t"          t$          f¦  «        r²t'          | j        ¦  «        }d}t)          |¦  «        D ]o\  }}|                     ‰¦  «        sŒt!          |‰¦  «        }t-          |¦  «        dk    r‰g|z   }|€|dd…         }n|dd…         |k    r‰g} n|d         ||<   Œp|d         ‰k    r| gS  | j        |Ž g|z   S t1          | ¦  «        }t'          t3          ˆfd„|j        ¦  «        ¦  «        }	t-          |	¦  «        dk    rD|	d         ‰k    r8|                      |	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/html/CA-Chatbot/venv/lib/python3.11/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�ÑÔð G¥*¨Qµ
Ñ";Ô";ð GÝÐ6½À1¹¼ÑEÑFÔFÐFØ�Q”^Ð#Ð#Øˆsˆ
õ �!•h¥�_Ñ%Ô%ð ?ØŒ8ð 	˜œ¥!¤&Ò(Ð(Ø”%ˆCˆCà”&˜”)ˆCØ�&Š=ˆ=Ø�3ˆJØ—’�s˜FÑ#Ô#Ð$¥z°#°vÑ'>Ô'>Ñ>Ð>õ �!•c�3�ZÑ Ô ð $Ý�A”F‰|Œ|ˆØˆÝ˜d‘O”Oð 	ð 	‰DˆAˆqØ—:’:˜fÑ%Ô%ð ØÝ˜1˜fÑ%Ô%ˆAÝ�1‰vŒv˜Š{ˆ{Ø�H˜q‘L�ØˆzØ�q�r�r”U��Ø�1�2�2”˜"’�ð �H�Ø�Ø˜”dˆD�‰GˆGØˆQŒ4�6Š>ˆ>Ø�3ˆJØ�”˜�ˆ Ñ#Ð#õ 
ˆa‰Œ€BÝ•Ð9Ð9Ð9Ð9¸2¼7ÑCÔCÑDÔD€Då
ˆ4�y„y�A‚~€~˜$˜qœ' VÒ+Ð+Ø�VŠV�D˜”G˜VÑ$Ô$ˆØ�!ŒWˆØˆt•j  VÑ,Ô,Ñ,Ð,ðÝ˜‰|Œ|ÐøÝð ð ð Øˆsˆ
ˆ
ˆ
ðøøøs   È>I ÉIÉIc                 óÞ   — t          | ¦  «        dk    r| d         S | d                              || 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   [   si   € õ6 ˆ3�x„x�1‚}€}Ø�1Œvˆà
ˆaŒ&�+Š+�f˜c !œfÑ
%Ô
%€Cå
ˆ3�x„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Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ðOð Oð Oðd#-ð #-ð #-ð #-ð #-r   