
    Ed                     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          rt'          | 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    8lib/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 	!&( 	%CC&)C&= 	3JsF##$z#v'>'>>> !c3Z   $AF||dOO 	 	DAq::f%% 1f%%A1vv{ !HqL qrrU122"  HdDGGQ46> 	3J## 
aB999927CCDDD
4yyA~ -$q'V+ -VVDGV$$!Wtj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   [   so    6 3xx1} 1v
a&++fc!f
%
%C
3xx1} 
SECGOV,,,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   