§
    PŠtj	·  ã                   ó,  — d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZm Z m!Z! d d
l"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl$m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG g dddfd„ZHe2e0fZId„ ZJd0d„ZKd„ ZLddœd „ZMd!„ ZNd"aOd#„ ZPd$„ ZQd%„ ZRd&„ ZSd'„ ZTd(„ ZUd0d)„ZVed0d*„¦   «         ZWdd+œd,„ZXd-„ ZYd.„ ZZd1d/„Z[d"S )2é    )Údefaultdict)Úreduce)ÚsympifyÚBasicÚSÚExprÚfactor_termsÚMulÚAddÚ	bottom_up)Úcacheit)Ú	count_opsÚ_mexpandÚFunctionClassÚexpandÚ
expand_mulÚ_coeff_isnegÚ
Derivative)ÚIÚInteger)Úigcd)Ú_nodes)ÚDummyÚsymbolsÚWild)Ú
SYMPY_INTS)	ÚsinÚcosÚexpÚcoshÚtanhÚsinhÚtanÚcotÚcoth)Úatan2)ÚHyperbolicFunction)ÚTrigonometricFunction)ÚPolyÚfactorÚcancelÚparallel_poly_from_expr)ÚZZ)ÚPolificationFailed)Úgroebner)Úcse)Úidentity)Úgreedy)Úiterable)ÚdebugFÚgrlexc                 ó¶  ‡‡‡‡‡‡‡‡‡‡‡— d„ Šd„ Šˆˆˆfd„}t          d¦  «        Š|                      t          j        ‰¦  «        } ‰t          j        fg}t	          | ¦  «                             ¦   «         \  }Š	 t          |‰g¦  «        \  \  }}	}
n# t          $ r | cY S w xY wt          d|
j	        ¦  «          ||
j	        |¦  «        \  }ŠŠt          d|¦  «         t          d‰dt          ‰¦  «        ¦  «         t          d	‰dt          ‰¦  «        ¦  «         ‰s| S t          |‰‰t          ¬
¦  «        Št          dt          ‰¦  «        dt          ‰¦  «        ¦  «         ddlmŠ ‰�r² |	j        t#          ‰¦  «                             |	j	        ¦  «        Ž �r‚ t'          |‰‰z   ¬¦  «        j        ‰Ž }g }|                     ¦   «         D �]E\  }}t#          t          |‰g¦  «        d         j	        ¦  «        Šd}|r�d}|D ]ˆ}t'          |¦  «        }‰                     |j	        ¦  «        s] |j        t#          |j	        ¦  «                             ‰¦  «        Ž s.d}‰                     |                     ¦   «         j	        ¦  «         Œ‰|°�ˆfd„‰D ¦   «         }ˆfd„‰j        D ¦   «         }|                     t9          d„ t;          ‰|¦  «        D ¦   «         Ž  ‰|‰z  |‰|‰t          |¬¦  «                             |¦  «        z  ¦  «         �ŒGt=          |Ž S  ‰| t          ‰¦  «        ‰‰‰z   ‰t          |¬¦  «                             |¦  «        S )a   
    Simplify trigonometric expressions using a groebner basis algorithm.

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

    This routine takes a fraction involving trigonometric or hyperbolic
    expressions, and tries to simplify it. The primary metric is the
    total degree. Some attempts are made to choose the simplest possible
    expression of the minimal degree, but this is non-rigorous, and also
    very slow (see the ``quick=True`` option).

    If ``polynomial`` is set to True, instead of simplifying numerator and
    denominator together, this function just brings numerator and denominator
    into a canonical form. This is much faster, but has potentially worse
    results. However, if the input is a polynomial, then the result is
    guaranteed to be an equivalent polynomial of minimal degree.

    The most important option is hints. Its entries can be any of the
    following:

    - a natural number
    - a function
    - an iterable of the form (func, var1, var2, ...)
    - anything else, interpreted as a generator

    A number is used to indicate that the search space should be increased.
    A function is used to indicate that said function is likely to occur in a
    simplified expression.
    An iterable is used indicate that func(var1 + var2 + ...) is likely to
    occur in a simplified .
    An additional generator also indicates that it is likely to occur.
    (See examples below).

    This routine carries out various computationally intensive algorithms.
    The option ``quick=True`` can be used to suppress one particularly slow
    step (at the expense of potentially more complicated results, but never at
    the expense of increased total degree).

    Examples
    ========

    >>> from sympy.abc import x, y
    >>> from sympy import sin, tan, cos, sinh, cosh, tanh
    >>> from sympy.simplify.trigsimp import trigsimp_groebner

    Suppose you want to simplify ``sin(x)*cos(x)``. Naively, nothing happens:

    >>> ex = sin(x)*cos(x)
    >>> trigsimp_groebner(ex)
    sin(x)*cos(x)

    This is because ``trigsimp_groebner`` only looks for a simplification
    involving just ``sin(x)`` and ``cos(x)``. You can tell it to also try
    ``2*x`` by passing ``hints=[2]``:

    >>> trigsimp_groebner(ex, hints=[2])
    sin(2*x)/2
    >>> trigsimp_groebner(sin(x)**2 - cos(x)**2, hints=[2])
    -cos(2*x)

    Increasing the search space this way can quickly become expensive. A much
    faster way is to give a specific expression that is likely to occur:

    >>> trigsimp_groebner(ex, hints=[sin(2*x)])
    sin(2*x)/2

    Hyperbolic expressions are similarly supported:

    >>> trigsimp_groebner(sinh(2*x)/sinh(x))
    2*cosh(x)

    Note how no hints had to be passed, since the expression already involved
    ``2*x``.

    The tangent function is also supported. You can either pass ``tan`` in the
    hints, to indicate that tan should be tried whenever cosine or sine are,
    or you can pass a specific generator:

    >>> trigsimp_groebner(sin(x)/cos(x), hints=[tan])
    tan(x)
    >>> trigsimp_groebner(sinh(x)/cosh(x), hints=[tanh(x)])
    tanh(x)

    Finally, you can use the iterable form to suggest that angle sum formulae
    should be tried:

    >>> ex = (tan(x) + tan(y))/(1 - tan(x)*tan(y))
    >>> trigsimp_groebner(ex, hints=[(tan, x, y)])
    tan(x + y)
    c                 ó  ‡— d}g g g }}}| D ]ùŠt          ‰t          t          f¦  «        r‰}Œ!t          ‰t          ¦  «        r|                     ‰¦  «         ŒLt          ‰¦  «        r‰|                     ‰d         ‰dd…         f¦  «         |                     t          ˆfd„‰dd…         D ¦   «          ‰d         t          ‰dd…         Ž ¦  «        gz   ¦  «        d         j	        ¦  «         Œä|                     ‰¦  «         Œú||||fS )z-Split hints into (n, funcs, iterables, gens).é   r   Nc                 ó2   •— g | ]} ‰d          |¦  «        ‘ŒS ©r   © )Ú.0ÚxÚes     €úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/simplify/trigsimp.pyú
<listcomp>z:trigsimp_groebner.<locals>.parse_hints.<locals>.<listcomp>Þ   s%   ø€ Ð,Ð,Ð, �T�Q�q”T˜!‘W”WÐ,Ð,Ð,ó    )
Ú
isinstancer   r   r   Úappendr3   Úextendr,   r   Úgens)ÚhintsÚnÚfuncsÚ	iterablesrE   r>   s        @r?   Úparse_hintsz&trigsimp_groebner.<locals>.parse_hintsÏ   s6  ø€ àˆØ!# R¨˜$ˆyˆØð 	ð 	ˆAÝ˜!�j­'Ð2Ñ3Ô3ð Ø��Ý˜A�}Ñ-Ô-ð 
Ø—’˜Q‘”��Ý˜!‘”ð Ø× Ò  ! A¤$¨¨!¨"¨"¬ Ñ/Ô/Ð/ð —’Õ3Ø,Ð,Ð,Ð, a¨¨¨¤eÐ,Ñ,Ô,°°°!´µS¸!¸A¸B¸B¼%°[Ñ0AÔ0AÐ/BÑBñDô DØDEôGÜGKñMô Mð Mð Mð —’˜A‘”��Ø�%˜ DÐ(Ð(rA   c           	      óÞ  — g }t          d¦  «        }|D �]=\  }}t          t          t          t          | ¦  «        dz  t          | ¦  «        dz  z   dz
  gt          t
          t          t	          | ¦  «        dz  t          | ¦  «        dz  z
  dz
  gfD ]À\  }}}}	|dk    r|||fv r |j        |	¦  «         Œ$||k    r; |j         ||| z  ¦  «         ||| z  ¦  «        z   ||| z  ¦  «        z
  ¦  «         Œe|||fv rU |||z  ¦  «                             d¬¦  «         	                    || ¦  «        }
 |j         ||| z  ¦  «        |
z
  ¦  «         ŒÁ�Œ?t          t          |¦  «        ¦  «        S )av  
        Build generators for our ideal. ``Terms`` is an iterable with elements of
        the form (fn, coeff), indicating that we have a generator fn(coeff*x).

        If any of the terms is trigonometric, sin(x) and cos(x) are guaranteed
        to appear in terms. Similarly for hyperbolic functions. For tan(n*x),
        sin(n*x) and cos(n*x) are guaranteed.
        Úyé   r8   T©Útrig)r   r   r   r#   r    r"   r!   rC   r   ÚsubsÚlistÚset)r=   Útermsr   rL   ÚfnÚcoeffÚcÚsÚtÚrelÚcns              r?   Úbuild_idealz&trigsimp_groebner.<locals>.build_idealã   s…  € ð ˆÝ�#‰JŒJˆØð 
	/ñ 
	/‰IˆB�å�#�s¥C¨¡F¤F¨A¡Iµ°A±´¸±	Ñ$9¸AÑ$=Ð>Ý�4¥¥t¨A¡w¤w°¡zµD¸±G´G¸Q±JÑ'>ÀÑ'BÐCð!Eð 	/ð 	/‘��1�a˜ð ˜A’:�: "¨¨A¨ , ,Ø�A”H˜S‘M”M�M�MØ˜1’W�WØ�A”H˜Q˜Q˜u Q™w™ZœZ¨¨¨%°©'©
¬
Ñ2°Q°Q°u¸Q±w±Z´ZÑ?Ñ@Ô@Ð@Ð@Ø˜A˜q˜6�\�\Ø˜˜E !™G™œ×+Ò+°Ð+Ñ6Ô6×;Ò;¸A¸qÑAÔA�BØ�A”H˜R˜R  a¡™[œ[¨2Ñ-Ñ.Ô.Ð.øñ	/õ •C˜‘F”F‰|Œ|ÐrA   c           
      óü	  •‡‡‡‡‡—  ‰!|¦  «        \  }}}}t          d|||f¦  «         t          | ¦  «        } |                      |¦  «         t          t          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }t          t          | ¦  «        ¦  «        } t          t
          t          t          t          t          hŠˆfd„| D ¦   «         }ˆfd„| D ¦   «         }g }i }	|D ]3\  \  }
}Š|	 
                    |g ¦  «                             |
‰f¦  «         Œ4g }|	                     ¦   «         D �]l\  }}d„ |D ¦   «         }d„ |D ¦   «         }t          t          |¦  «        Šˆfd„t          ||¦  «        D ¦   «         }t          ||z   ¦  «        Št
          t          t          gt          t          t          gfD ]N\  }}}t!          ˆfd„|||fD ¦   «         ¦  «        r*‰                     |¦  «         ‰                     |¦  «         ŒO‰D ]4Š|                     ˆfd„t%          d	|d	z   ¦  «        D ¦   «         ¦  «         Œ5g }|D ]õ\  Š}‰t          k    r8|                     t          |f¦  «         |                     t
          |f¦  «         ‰t          t
          fv r%t          ‰v r|                     t          |f¦  «         ‰t          k    r8|                     t          |f¦  «         |                     t          |f¦  «         ‰t          t          fv r%t          ‰v r|                     t          |f¦  «         Œö|                     |¦  «         ‰t'          |Ž z  Š ‰‰|¦  «        }|                     |¦  «         |                     ˆfd
„|D ¦   «         ¦  «         �Œn|D �]
\  Š}‰t          k    r&|                     t          |ft
          |fg¦  «         Œ7‰t          k    r&|                     t          |ft          |fg¦  «         Œht)          dt+          |¦  «        z  t,          ¬¦  «        } ‰t/          |Ž ¦  «                             d¬¦  «                             t          t          ||¦  «        ¦  «        ¦  «        }|                      ‰t/          |Ž ¦  «        |z
  ¦  «         �Œ‰ | v rE|                     ‰ dz  d	z   ¦  «         |                     ‰ ¦  «         |                     ‰ ¦  «         |||fS )zì
        Analyse the generators ``gens``, using the hints ``hints``.

        The meaning of ``hints`` is described in the main docstring.
        Return a new list of generators, and also the ideal we should
        work with.
        z1n=%s   funcs: %s   iterables: %s    extragens: %sc                 ón   •— g | ]1}|j         ‰v ¯|j        d                               ¦   «         |j         f‘Œ2S r:   )ÚfuncÚargsÚas_coeff_mul©r<   ÚgÚallfuncss     €r?   r@   z;trigsimp_groebner.<locals>.analyse_gens.<locals>.<listcomp>  sH   ø€ ð ,ð ,ð ,¸AØœ (Ð*Ð*ð ”f˜Q”i×,Ò,Ñ.Ô.°´Ð7Ø*Ð*Ð*rA   c                 ó&   •— g | ]}|j         ‰v¯|‘ŒS r;   )r^   ra   s     €r?   r@   z;trigsimp_groebner.<locals>.analyse_gens.<locals>.<listcomp>  s%   ø€ Ð>Ð>Ð>˜! q¤v°XÐ'=Ð'=�AÐ'=Ð'=Ð'=rA   c                 ó   — g | ]
}|d          ‘ŒS )r8   r;   ©r<   r=   s     r?   r@   z;trigsimp_groebner.<locals>.analyse_gens.<locals>.<listcomp>0  ó   € Ð%Ð%Ð%˜A�1�Q”4Ð%Ð%Ð%rA   c                 ó   — g | ]
}|d          ‘ŒS r:   r;   rf   s     r?   r@   z;trigsimp_groebner.<locals>.analyse_gens.<locals>.<listcomp>1  rg   rA   c                 ó$   •— g | ]\  }}||‰z  f‘ŒS r;   r;   )r<   rT   ÚvÚgcds      €r?   r@   z;trigsimp_groebner.<locals>.analyse_gens.<locals>.<listcomp>3  s%   ø€ Ð>Ð>Ð>¡W b¨!�b˜!˜C™%�[Ð>Ð>Ð>rA   c              3   ó    •K  — | ]}|‰v V — Œ	d S ©Nr;   )r<   r=   Úfss     €r?   ú	<genexpr>z:trigsimp_groebner.<locals>.analyse_gens.<locals>.<genexpr>6  s'   øè è € Ð2Ð2 1�q˜B�wÐ2Ð2Ð2Ð2Ð2Ð2rA   c              3   ó    •K  — | ]}‰|fV — Œ	d S rm   r;   )r<   ÚkrT   s     €r?   ro   z:trigsimp_groebner.<locals>.analyse_gens.<locals>.<genexpr>:  s'   øè è € Ð>Ð>¨˜b !˜WÐ>Ð>Ð>Ð>Ð>Ð>rA   r8   c                 ó2   •— h | ]\  }} ||‰z  ¦  «        ’ŒS r;   r;   )r<   rT   rj   r=   s      €r?   ú	<setcomp>z:trigsimp_groebner.<locals>.analyse_gens.<locals>.<setcomp>K  s)   ø€ Ð7Ð7Ð7©¨¨A˜B˜B˜q ™s™GœGÐ7Ð7Ð7rA   zd:%i©ÚclsTrN   rM   )r4   rQ   rD   rR   r   r   r#   r"   r    r!   Ú
setdefaultrC   Úitemsr   r   ÚzipÚanyÚaddÚranger
   r   Úlenr   r   r   rP   Úremove)"rE   rF   rG   rH   rI   Ú	extragensÚ	trigtermsÚfreegensÚnewgensÚtrigdictrU   ÚvarÚresÚkeyÚvalÚfnsrS   rV   rW   rX   Úextrarj   Úrr_   ÚdummysÚexprrc   rT   rn   rk   r=   r[   ÚmyIrJ   s"                             @@@@@€€€r?   Úanalyse_gensz'trigsimp_groebner.<locals>.analyse_gensû   s  øøøøøø€ ð *5¨°UÑ);Ô);Ñ&ˆˆ5�)˜YÝÐAØ�i Ð+ñ	-ô 	-ð 	-õ �D‰zŒzˆØ�Š�IÑÔÐõ •S˜‘Z”ZÑ Ô ˆÝ�˜Y™œÑ(Ô(ˆ	Ý•C˜‘I”I‰Œˆõ ��c¥4­­tÐ4ˆð,ð ,ð ,ð ,Àð ,ñ ,ô ,ˆ	ð ?Ð>Ð>Ð>˜tÐ>Ñ>Ô>ˆØˆØˆØ )ð 	=ð 	=Ñ‰LˆU�C˜"Ø×Ò  RÑ(Ô(×/Ò/°¸°Ñ<Ô<Ð<Ð<Øˆà ŸšÑ(Ô(ð ,	9ñ ,	9‰HˆC�ð" &Ð% Ð%Ñ%Ô%ˆCØ%Ð% Ð%Ñ%Ô%ˆCÝ�˜sÑ#Ô#ˆCØ>Ð>Ð>Ð>µ°C¸±´Ð>Ñ>Ô>ˆEÝ�U˜S‘[Ñ!Ô!ˆBÝ ¥#¥s˜O­dµD½$Ð-?Ð@ð ð ‘��1�aÝÐ2Ð2Ð2Ð2¨¨A¨q¨	Ð2Ñ2Ô2Ñ2Ô2ð Ø—F’F˜1‘I”I�IØ—F’F˜1‘I”I�IøØð ?ð ?�Ø—’Ð>Ð>Ð>Ð>­e°A°q¸1±u©o¬oÐ>Ñ>Ô>Ñ>Ô>Ð>Ð>ØˆEØð 
,ð 
,‘��AØ�’9�9Ø—L’L¥# q Ñ*Ô*Ð*Ø—L’L¥# q Ñ*Ô*Ð*Ø�#�s˜Ð#Ð#­¨r¨	¨	Ø—L’L¥# q Ñ*Ô*Ð*Ø�’:�:Ø—L’L¥$¨ Ñ+Ô+Ð+Ø—L’L¥$¨ Ñ+Ô+Ð+Ø�$¥˜Ð%Ð%­$°"¨*¨*Ø—L’L¥$¨ Ñ+Ô+Ð+øØ�LŠL˜ÑÔÐØ•C˜�I‘ˆAØ�˜A˜uÑ%Ô%ˆAØ�JŠJ�q‰MŒMˆMØ�NŠNÐ7Ð7Ð7Ð7°Ð7Ñ7Ô7Ñ8Ô8Ð8Ñ8ð "ð 
	2ñ 
	2‰HˆB�Ø•SŠyˆyà× Ò ¥3¨ +µ°T¨{Ð!;Ñ<Ô<Ð<Ð<Ø•t’�à× Ò ¥4¨ ,µ°t°Ð!=Ñ>Ô>Ð>Ð>å  ­#¨d©)¬)Ñ!3½Ð?Ñ?Ô?�Ø�r�3 ˜<Ñ(Ô(×/Ò/°TÐ/Ñ:Ô:×?Ò?ÅÅSÈÐQUÑEVÔEVÑ@WÔ@WÑXÔX�Ø—
’
˜2˜2�c 4˜j™>œ>¨DÑ0Ñ1Ô1Ð1Ñ1à�$ˆ;ˆ;Ø�JŠJ�s˜A‘v ‘zÑ"Ô"Ð"Ø�OŠO˜CÑ Ô Ð Ø�NŠN˜3ÑÔÐà�H˜gÐ%Ð%rA   r   zinitial gens:zideal:z	new gens:z -- lenz
free gens:)ÚorderrE   Údomainzgroebner basis:r   )Úratsimpmodprime)rE   r8   TFc                 ó   •— g | ]}|‰v ¯|‘Œ	S r;   r;   )r<   r=   Úourgenss     €r?   r@   z%trigsimp_groebner.<locals>.<listcomp>Œ  s   ø€ Ð8Ð8Ð8˜a¨1°¨<¨<˜¨<¨<¨<rA   c                 ó|   •— g | ]8} |j         ‰                     |j        ¦  «        Ž ¯$|                     ¦   «         ‘Œ9S r;   )Úhas_only_gensÚintersectionrE   Úas_expr)r<   rb   r’   s     €r?   r@   z%trigsimp_groebner.<locals>.<listcomp>–  sU   ø€ ð Dð Dð D AØ#�A”O W×%9Ò%9¸!¼&Ñ%AÔ%AÐBðD�A—I’I‘K”Kð Dð Dð DrA   c                 ó   — g | ]
\  }}||z  ‘ŒS r;   r;   )r<   ÚaÚbs      r?   r@   z%trigsimp_groebner.<locals>.<listcomp>˜  s    € ÐCÐCÐC¡d a¨˜Q ™TÐCÐCÐCrA   )rŽ   rE   Úquickr�   Ú
polynomial)r   rP   r   ÚImaginaryUnitr+   Úas_numer_denomr,   r.   r4   rE   r|   r/   r-   rQ   Úsympy.simplify.ratsimpr�   r”   rR   r•   r)   ÚejectrS   Ú
issupersetÚ
differenceÚupdateÚexcludeÚpolysrC   r
   rx   r   )r‹   rF   rš   rŽ   r›   r�   rP   ÚnumÚpnumÚpdenomÚoptÚidealr„   ÚmonomrU   ÚchangedÚpÚrealgensÚourGÚGr[   Údenomr€   rE   rŒ   r’   rJ   r�   s     ``               @@@@@@@@@r?   Útrigsimp_groebnerr±      sò  øøøøøøøøøøø€ ðf)ð )ð )ð(ð ð ð0d&ð d&ð d&ð d&ð d&ð d&ð d&õL �‰*Œ*€CØ�9Š9•Q”_ cÑ*Ô*€DØ•!”/Ð"Ð#€Då˜‘”×,Ò,Ñ.Ô.�J€CˆðÝ5°s¸E°lÑCÔCÑ‰ˆˆv˜˜øÝð ð ð Øˆˆˆðøøøå	ˆ/˜3œ8Ñ$Ô$Ð$Ø(˜L¨¬°5Ñ9Ô9Ñ€Eˆ8�TÝ	ˆ(�EÑÔÐÝ	ˆ+�t˜Y­¨D©	¬	Ñ2Ô2Ð2Ý	ˆ,˜ )­S°©Y¬YÑ7Ô7Ð7ð ð ØˆÝ�˜e¨$µrÐ:Ñ:Ô:€AÝ	Ð
�T !™WœW iµ°Q±´Ñ8Ô8Ð8ð
 7Ð6Ð6Ð6Ð6Ð6àñ ,FÐ(�FÔ(­#¨d©)¬)×*@Ò*@ÀÄÑ*MÔ*MÐNñ ,FØ1�d�3˜T (™]Ð+Ñ+Ô+Ô1°4Ð8ˆØˆØŸIšI™KœKð 	Jñ 	J‰LˆE�5ÝÕ1°5¸%°.ÑAÔAÀ!ÔDÔIÑJÔJˆGð ˆGØð 9Ø�Øð 9ð 9�AÝ˜Q™œ�AØ"×-Ò-¨a¬fÑ5Ô5ð 9Ø*˜1œ?­C°´©K¬K×,BÒ,BÀ7Ñ,KÔ,KÐLð9à"&˜ØŸš q§y¢y¡{¤{Ô'7Ñ8Ô8Ð8øð ð 9ð 9Ð8Ð8Ð8 4Ð8Ñ8Ô8ˆHðDð Dð Dð D¨¬ð Dñ Dô DˆDà�JŠJ•sÐCÐC­c°(¸EÑ.BÔ.BÐCÑCÔCÐDØ&� u¨U¡{°DÀØ,4¸EÍ"Ø2<ð>ñ >ô >ç>BºdÀ4¹j¼jñIñ Jô Jð Jñ Jõ �CˆyÐð ˆØ•$�q‘'”' ¨X°d©]Ø¥¨zð;ñ ;ô ;ç;?º4À¹:¼:ð	Fs   Á<B ÂB#Â"B#c                 ó8   ‡‡— d„ Šˆˆfd„Št          | ‰¦  «        S )Nc                 ó^   — 	 | j         d         |j         d         k    S # t          $ r Y dS w xY w)Nr   F)r_   Ú
IndexError)r=   rL   s     r?   Ú
check_argsz%_trigsimp_inverse.<locals>.check_args¯  s@   € ð	Ø”6˜!”9 ¤ q¤	Ò)Ð)øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ ž
,«,c                 ó  •— t          | dd ¦  «        }|�at          | j        d          |¦   «         ¦  «        r>t            |¦   «         d¦  «        t          ¦  «        r| j        d         j        d         S t          | t          ¦  «        rô| j        \  }}t          |¦  «        r ‰t	          | |¦  «        ¦  «         S t          |¦  «        r't          j         ‰t	          || ¦  «        ¦  «        z
  S  ‰||¦  «        r~t          |t          ¦  «        r"t          |t          ¦  «        r|j        d         S t          |t          ¦  «        r2t          |t          ¦  «        rt          j        dz  |j        d         z
  S | S )NÚinverser   r8   rM   )
ÚgetattrrB   r_   r(   r&   r   r   ÚPir   r   )Úrvrb   rL   r=   rµ   Úfs       €€r?   r»   z_trigsimp_inverse.<locals>.fµ  s^  ø€ å�B˜	 4Ñ(Ô(ˆØˆM�j¨¬°¬°Q°Q±S´SÑ9Ô9ˆMÝ˜3˜1˜1™3œ3˜q™6œ6Õ#8Ñ9Ô9ð à”7˜1”:”? 1Ô%Ð%õ �b�%Ñ Ô ð 	0Ø”7‰DˆAˆqÝ˜A‰Œð .Ø˜�%   A™,œ,™œÐ'Ð'Ý˜a‘”ð .Ý”t˜a˜a¥ a¨!¨¡¤™oœoÑ-Ð-àˆz˜!˜QÑÔð 0Ý˜a¥Ñ%Ô%ð %­*°Q½Ñ*<Ô*<ð %Øœ6 !œ9Ð$Ý˜a¥Ñ%Ô%ð 0­*°Q½Ñ*<Ô*<ð 0Ýœ4 !™8 a¤f¨Q¤iÑ/Ð/àˆ	rA   )r   )rº   rµ   r»   s    @@r?   Ú_trigsimp_inverser¼   ­  sC   øø€ ðð ð ðð ð ð ð ð õ. �R˜ÑÔÐrA   c                 óž  ‡‡‡	— ddl mŠ t          | ¦  «        } t          | dd¦  «        }|� |di ‰¤ŽS ‰                     dd¦  «        }|sC‰                     dd¦  «         ‰                     dd¦  «         ‰                     d	d
¦  «        }nd}d„ Š	ˆˆfd„d„ ˆ	ˆfd„ˆ	fd„ˆfd„dœ|         } || ¦  «        }|rt          |¦  «        }|S )a6  Returns a reduced expression by using known trig identities.

    Parameters
    ==========

    inverse : bool, optional
        If ``inverse=True``, it will be assumed that a composition of inverse
        functions, such as sin and asin, can be cancelled in any order.
        For example, ``asin(sin(x))`` will yield ``x`` without checking whether
        x belongs to the set where this relation is true. The default is False.
        Default : True

    method : string, optional
        Specifies the method to use. Valid choices are:

        - ``'matching'``, default
        - ``'groebner'``
        - ``'combined'``
        - ``'fu'``
        - ``'old'``

        If ``'matching'``, simplify the expression recursively by targeting
        common patterns. If ``'groebner'``, apply an experimental groebner
        basis algorithm. In this case further options are forwarded to
        ``trigsimp_groebner``, please refer to
        its docstring. If ``'combined'``, it first runs the groebner basis
        algorithm with small default parameters, then runs the ``'matching'``
        algorithm. If ``'fu'``, run the collection of trigonometric
        transformations described by Fu, et al. (see the
        :py:func:`~sympy.simplify.fu.fu` docstring). If ``'old'``, the original
        SymPy trig simplification function is run.
    opts :
        Optional keyword arguments passed to the method. See each method's
        function docstring for details.

    Examples
    ========

    >>> from sympy import trigsimp, sin, cos, log
    >>> from sympy.abc import x
    >>> e = 2*sin(x)**2 + 2*cos(x)**2
    >>> trigsimp(e)
    2

    Simplification occurs wherever trigonometric functions are located.

    >>> trigsimp(log(e))
    log(2)

    Using ``method='groebner'`` (or ``method='combined'``) might lead to
    greater simplification.

    The old trigsimp routine can be accessed as with method ``method='old'``.

    >>> from sympy import coth, tanh
    >>> t = 3*tanh(x)**7 - 2/coth(x)**7
    >>> trigsimp(t, method='old') == t
    True
    >>> trigsimp(t)
    tanh(x)**7

    r   )ÚfuÚ_eval_trigsimpNÚoldFÚdeepÚ	recursiveÚmethodÚmatchingc                 óp   ‡‡— ˆˆfd„Š ‰| ¦  «        }t          |t          ¦  «        s|S t          |fi ‰¤ŽS )Nc                 óˆ   •— | j         r| S ˆfd„| j        D ¦   «         }| j        s| j        rˆfd„|D ¦   «         } | j        |Ž S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r;   r;   ©r<   r=   Útraverses     €r?   r@   zDtrigsimp.<locals>.groebnersimp.<locals>.traverse.<locals>.<listcomp>"  ó!   ø€ Ð0Ð0Ð0 A�H�H˜Q‘K”KÐ0Ð0Ð0rA   c                 ó*   •— g | ]}t          |fi ‰¤Ž‘ŒS r;   ©r±   ©r<   r=   Úoptss     €r?   r@   zDtrigsimp.<locals>.groebnersimp.<locals>.traverse.<locals>.<listcomp>$  ó*   ø€ ÐCÐCÐC¸Õ)¨!Ð4Ð4¨tÐ4Ð4ÐCÐCÐCrA   ©Úis_Atomr_   Úis_FunctionÚis_Powr^   ©r>   r_   rÎ   rÉ   s     €€r?   rÉ   z0trigsimp.<locals>.groebnersimp.<locals>.traverse  ói   ø€ ØŒyð Ø�Ø0Ð0Ð0Ð0¨¬Ð0Ñ0Ô0ˆDØŒ}ð D ¤ð DØCÐCÐCÐC¸dÐCÑCÔC�Ø�1”6˜4�=Ð rA   )rB   r   r±   )ÚexrÎ   ÚnewrÉ   s    ` @r?   Úgroebnersimpztrigsimp.<locals>.groebnersimp  s^   øø€ ð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð ˆh�r‰lŒlˆÝ˜#�tÑ$Ô$ð 	ØˆJÝ  Ð-Ð-¨Ð-Ð-Ð-rA   c                 ó   •—  ‰| fi ‰¤ŽS rm   r;   )r=   r¾   rÎ   s    €€r?   ú<lambda>ztrigsimp.<locals>.<lambda>,  s   ø€ ˜˜˜A˜˜ ˜˜€ rA   c                 ó    — t          | ¦  «        S rm   )Úfutrig©r=   s    r?   rÚ   ztrigsimp.<locals>.<lambda>-  s   € �v a™yœy€ rA   c                 ó   •—  ‰| fi ‰¤ŽS rm   r;   )r=   rØ   rÎ   s    €€r?   rÚ   ztrigsimp.<locals>.<lambda>.  s   ø€ ˜|˜|¨AÐ6Ð6°Ð6Ð6€ rA   c                 óH   •— t           ‰| ddt          g¬¦  «        ¦  «        S ©NTrM   )r›   rF   )rÜ   r#   )r=   rØ   s    €r?   rÚ   ztrigsimp.<locals>.<lambda>/  s4   ø€ �v l l°1Ø*.°q½#°hð'@ñ '@ô '@ñ  Aô  A€ rA   c                 ó   •— t          | fi ‰¤ŽS rm   )Útrigsimp_old)r=   rÎ   s    €r?   rÚ   ztrigsimp.<locals>.<lambda>1  s   ø€ � aÐ0Ð0¨4Ð0Ð0€ rA   )r¾   rÄ   r/   ÚcombinedrÀ   r;   )Úsympy.simplify.fur¾   r   r¸   Úpopr¼   )
r‹   r·   rÎ   r¿   rÀ   rÃ   ÚtrigsimpfuncÚexpr_simplifiedr¾   rØ   s
     `     @@r?   Útrigsimprè   Ï  sK  øøø€ ð~ %Ð$Ð$Ð$Ð$Ð$å�4‰=Œ=€Då˜TÐ#3°TÑ:Ô:€NØÐ!Øˆ~Ð%Ð% Ð%Ð%Ð%à
�(Š(�5˜%Ñ
 Ô
 €CØð Ø�Š�˜ÑÔÐØ�Š�˜dÑ#Ô#Ð#Ø—’˜( JÑ/Ô/ˆˆàˆð.ð .ð .ð 'Ð&Ð&Ð&Ð&Ø(Ð(Ø6Ð6Ð6Ð6Ð6ðAð Að Að Aà0Ð0Ð0Ð0ðð ð ô€Lð #�l 4Ñ(Ô(€OØð =Ý+¨OÑ<Ô<ˆàÐrA   c                 ó–  ‡— ddl m}m} d„ }t          | |¦  «        }ˆfd„Št          |‰¦  «        }|                     t
          ¦  «        r" ||¦  «        \  }Š ‰ ||¦  «        ¦  «        }|                     t          ¦  «        r ||¦  «        }|                     t          ¦  «        r|                      t          ¦  «        r|} | S )a#  
    Simplifies exponential / trigonometric / hyperbolic functions.

    Examples
    ========

    >>> from sympy import exptrigsimp, exp, cosh, sinh
    >>> from sympy.abc import z

    >>> exptrigsimp(exp(z) + exp(-z))
    2*cosh(z)
    >>> exptrigsimp(cosh(z) - sinh(z))
    exp(-z)
    r   )Úhyper_as_trigÚTR2ic                 óü   — | g} | j         t          Ž r-|                     |                      t          ¦  «        ¦  «         |                     |                      t
          ¦  «        ¦  «         t          |dt          iŽS )Nr…   )ÚhasÚ_trigsrC   Úrewriter   r   Úminr   )r>   Úchoicess     r?   Úexp_trigzexptrigsimp.<locals>.exp_trigL  sf   € ð �#ˆØˆ1Œ5•&ˆ>ð 	+Ø�NŠN˜1Ÿ9š9¥S™>œ>Ñ*Ô*Ð*Ø�Š�q—y’y¥‘~”~Ñ&Ô&Ð&Ý�GÐ+¥Ð+Ð+Ð+rA   c                 ó®  •‡
‡— | j         s| S |                      ¦   «         \  }}t          |¦  «        dk    r ‰t          |Ž ¦  «        t          |Ž z  S |                      ¦   «         }|                     ¦   «         Š
t          j        fˆfd„	Š|t          j                 }|D �] }|j	        �r•t          |j
        ¦  «        dk    �r||j
        d         } ‰|j
        d         |z  ¦  «        \  }}|sŒP||         }	‰
|xx         |	z  cc<   || |	z  dz  k    rp‰
t          j        xx         |z  cc<   d}|dk    r'‰
d|z  t          |dz  ¦  «        z  xx         |	z  cc<   Œ¾‰
d|z  t          |dz  ¦  «        z  xx         |	z  cc<   Œå‰
d|t          j        |z  z  z
           |	 k    rh‰
d|t          j        |z  z  z
  = |dk    r&‰
| t          |dz  ¦  «        z  xx         |	z  cc<   �ŒG‰
| t          |dz  ¦  «        z  xx         |	z  cc<   �Œm‰
d|t          j        |z  z  z   xx         |	z  cc<   ‰
|xx         |	z  cc<   �Œ¢t          ˆ
fd„‰
D ¦   «         Ž S )Nr8   c                 ó  •— | t           j        u r|t           j        fS t          | t          ¦  «        s| j        r| j        t           j        k    r	|| j        fS |t           j        u r ‰|  t           j         ¬¦  «        S dS )N)Úsign)NN)r   ÚExp1ÚOnerB   r   rÓ   Úbase)r‹   rõ   Úsignlogs     €r?   rù   z'exptrigsimp.<locals>.f.<locals>.signlogb  sz   ø€ Ø•q”vˆ~ˆ~Ø�QœU�{Ð"Ý˜D¥#Ñ&Ô&ð "¨4¬;ð "¸4¼9ÍÌÒ;NÐ;NØ˜TœX�~Ð%Ø�œ��Ø�w ˜u­A¬E¨6Ð2Ñ2Ô2Ð2à!�zrA   rM   r   éþÿÿÿc                 ó&   •— g | ]}|‰|         z  ‘ŒS r;   r;   )r<   rq   Únewds     €r?   r@   z*exptrigsimp.<locals>.f.<locals>.<listcomp>‰  s!   ø€ Ð.Ð.Ð. A�Q˜˜Qœ‘ZÐ.Ð.Ð.rA   )Úis_MulÚargs_cncr|   r
   Úas_powers_dictÚcopyr   r÷   rö   Úis_Addr_   r    r"   r!   )rº   Úcommutative_partÚnoncommutative_partÚrvdÚeerq   rV   rõ   r=   Úmrü   rù   r»   s             @@€r?   r»   zexptrigsimp.<locals>.fV  sÄ  øøø€ ØŒyð 	ØˆIØ02·²±´Ñ-ÐÐ-õ Ð#Ñ$Ô$ qÒ(Ð(Ø�1•SÐ*Ð+Ñ,Ô,­SÐ2EÐ-FÑFÐFØ×ÒÑ!Ô!ˆØ�xŠx‰zŒzˆå œuð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð •”Œ[ˆØð 	!ñ 	!ˆAØŒxñ !�C ¤™KœK¨1Ò,Ñ,à”F˜1”I�Ø!˜' !¤&¨¤)¨A¡+Ñ.Ô.‘��aØð ØØ˜”F�Ø�Q��”˜1‘��‘Ø˜!˜˜A™˜a™’<�<à�œ�L�L”L BÑ&�L�L‘LØ�BØ˜q’y�yØ˜Q˜q™S¥ a¨¡c¡¤™]Ð+Ð+Ô+¨qÑ0Ð+Ð+Ñ+Ð+à˜R ™T¥$ q¨¡s¡)¤)™^Ð,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ð,Ø˜!˜d¥1¤6¨1¡9™nÑ,Ô-°!°Ò3Ð3à˜Q ¥a¤f¨a¡i¡Ñ/Ð0Ø˜q’y�yØ˜a˜R¥ Q q¡S¡	¤	™\Ð*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ñ*à˜a˜R¥ Q q¡S¡	¤	™\Ð*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ñ*à˜˜T¥!¤&¨!¡)™^Ñ+Ð,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ø˜�G�G”G˜q‘L�G�G‘GùåÐ.Ð.Ð.Ð.¨Ð.Ñ.Ô.Ð/Ð/rA   )rä   rê   rë   r   rí   r'   r(   r   )r‹   rê   rë   rò   Únewexprr>   r»   s         @r?   Úexptrigsimpr  ;  sø   ø€ ð 6Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð,ð ,ð ,õ ˜˜hÑ'Ô'€Gð30ð 30ð 30ð 30ð 30õh ˜ Ñ#Ô#€Gð ‡{‚{Õ%Ñ&Ô&ð Øˆ}˜WÑ%Ô%‰ˆˆ1Ø�!�D�D˜‘G”G‘*”*ˆØ‡{‚{Õ(Ñ)Ô)ð  Ø�$�w‘-”-ˆð �KŠK�‰NŒNð  4§8¢8­A¡;¤;ð ØˆØ€KrA   T)Úfirstc                ód  ‡‡— | }|�r | j         t          Ž s| S  t          ¦   «         j        d„  | j        t          Ž D ¦   «         Ž }t          |¦  «        dk    rÎddlm}  || ¦  «        }|j        r ||d¬¦  «        p|}t          |t          ¦  «        rLd} |                     ¦   «         D ]2}|}t          |¦  «        }d‰d<   t          |fi ‰¤Ž}	|	|k    r|}	| |	z  } Œ3| }nF|j        r?|D ]:}
|                      |
¦  «        \  }}|rd‰d<   |t          |fi ‰¤Žz   } | j        s nŒ;| }‰                     d	d¦  «        }‰                     d
d¦  «        }‰                     dd¦  «        }d„ Šd„ ˆˆfd„ˆfd„dœ|         }|rgt#          | ¦  «        \  }} ||d         |¦  «        }t%          |¦  «        D ]0}|                     |d         |d         ¦  «        } |||¦  «        }Œ1|}n || |¦  «        }‰                     dd¦  «        r%t+          |¦  «        }||k    rt-          d|¦  «         |S )aC  
    Reduces expression by using known trig identities.

    Notes
    =====

    deep:
    - Apply trigsimp inside all objects with arguments

    recursive:
    - Use common subexpression elimination (cse()) and apply
    trigsimp recursively (this is quite expensive if the
    expression is large)

    method:
    - Determine the method to use. Valid choices are 'matching' (default),
    'groebner', 'combined', 'fu' and 'futrig'. If 'matching', simplify the
    expression recursively by pattern matching. If 'groebner', apply an
    experimental groebner basis algorithm. In this case further options
    are forwarded to ``trigsimp_groebner``, please refer to its docstring.
    If 'combined', first run the groebner basis algorithm with small
    default parameters, then run the 'matching' algorithm. 'fu' runs the
    collection of trigonometric transformations described by Fu, et al.
    (see the `fu` docstring) while `futrig` runs a subset of Fu-transforms
    that mimic the behavior of `trigsimp`.

    compare:
    - show input and output from `trigsimp` and `futrig` when different,
    but returns the `trigsimp` value.

    Examples
    ========

    >>> from sympy import trigsimp, sin, cos, log, cot
    >>> from sympy.abc import x
    >>> e = 2*sin(x)**2 + 2*cos(x)**2
    >>> trigsimp(e, old=True)
    2
    >>> trigsimp(log(e), old=True)
    log(2*sin(x)**2 + 2*cos(x)**2)
    >>> trigsimp(log(e), deep=True, old=True)
    log(2)

    Using `method="groebner"` (or `"combined"`) can sometimes lead to a lot
    more simplification:

    >>> e = (-sin(x) + 1)/cos(x) + cos(x)/(-sin(x) + 1)
    >>> trigsimp(e, old=True)
    (1 - sin(x))/cos(x) + cos(x)/(1 - sin(x))
    >>> trigsimp(e, method="groebner", old=True)
    2/cos(x)

    >>> trigsimp(1/cot(x)**2, compare=True, old=True)
          futrig: tan(x)**2
    cot(x)**(-2)

    c                 ó   — g | ]	}|j         ‘Œ
S r;   )Úfree_symbols)r<   rX   s     r?   r@   z trigsimp_old.<locals>.<listcomp>Ù  s   € Ð MÐ MÐ M°A ¤Ð MÐ MÐ MrA   r8   r   )ÚseparatevarsT)ÚdictFr	  rÂ   rÁ   rÃ   rÄ   c                 óF   ‡‡— ˆˆfd„Š|r ‰| ¦  «        } t          | fi ‰¤ŽS )Nc                 óˆ   •— | j         r| S ˆfd„| j        D ¦   «         }| j        s| j        rˆfd„|D ¦   «         } | j        |Ž S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r;   r;   rÈ   s     €r?   r@   zHtrigsimp_old.<locals>.groebnersimp.<locals>.traverse.<locals>.<listcomp>ÿ  rÊ   rA   c                 ó*   •— g | ]}t          |fi ‰¤Ž‘ŒS r;   rÌ   rÍ   s     €r?   r@   zHtrigsimp_old.<locals>.groebnersimp.<locals>.traverse.<locals>.<listcomp>  rÏ   rA   rÐ   rÔ   s     €€r?   rÉ   z4trigsimp_old.<locals>.groebnersimp.<locals>.traverseü  rÕ   rA   rÌ   )rÖ   rÁ   rÎ   rÉ   s     `@r?   rØ   z"trigsimp_old.<locals>.groebnersimpû  sO   øø€ ð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð ð 	Ø�˜"‘”ˆBÝ  Ð,Ð, tÐ,Ð,Ð,rA   c                 ó"   — t          | |¦  «        S rm   ©Ú	_trigsimp)r=   Úds     r?   rÚ   ztrigsimp_old.<locals>.<lambda>  s   € ¥)¨A¨q¡/¤/€ rA   c                 ó   •—  ‰| |fi ‰¤ŽS rm   r;   )r=   r  rØ   rÎ   s     €€r?   rÚ   ztrigsimp_old.<locals>.<lambda>	  s   ø€  , ,¨q°!Ð"<Ð"<°tÐ"<Ð"<€ rA   c           	      óL   •— t           ‰| |ddt          g¬¦  «        |¦  «        S rà   )r  r#   )r=   r  rØ   s     €r?   rÚ   ztrigsimp_old.<locals>.<lambda>
  s7   ø€ ¥)¨L¨L¸Ø'(°TÀ!ÅSÀð-Kñ -Kô -Kà#$ñ#&ô #&€ rA   )rÄ   r/   rã   Úcomparez	futrig:)rí   rî   rR   ÚunionÚatomsr|   Úsympy.simplify.simplifyr  rý   rB   r  Úvaluesr   rè   r  Úas_independentrå   r0   ÚreversedrP   ÚgetrÜ   Úprint)r‹   r	  rÎ   rÀ   Útrigsymsr  r  rj   ÚwasÚvnewrW   r‰   r>   rÂ   rÁ   rÃ   ræ   Úwrb   ÚsubÚresultr»   rØ   s     `                   @r?   râ   râ   š  sæ  øø€ ðt €CØñ  ØˆtŒx�Ð ð 	ØˆKà•3‘5”5”;Ð MÐ M¸¸¼ÅVÐ9LÐ MÑ MÔ MÐNˆÝˆx‰=Œ=˜1ÒÐØ<Ð<Ð<Ð<Ð<Ð<à�˜TÑ"Ô"ˆAØŒxð 4Ø �L ¨Ð.Ñ.Ô.Ð3°!�Ý˜!�TÑ"Ô"ð Ø�ØŸš™œð !ð !�Aà�CÝ" 1™œ�AØ$)�D˜‘MÝ# AÐ.Ð.¨Ð.Ð.�DØ˜q’y�yØ"˜Ø˜D‘L�D�DØ��à”8ð Ø%ð &ð &˜Ø#×2Ò2°1Ñ5Ô5™˜˜1Øð &Ø,1˜D ™MØ#$¥x°Ð':Ð':°TÐ':Ð':Ñ#:˜DØ#'¤;ð &Ø % øØ�Cà—’˜ eÑ,Ô,€IØ�8Š8�F˜EÑ"Ô"€DØ�XŠX�h 
Ñ+Ô+€Fð
-ð 
-ð 
-ð 2Ð1Ø<Ð<Ð<Ð<Ð<ð&ð &ð &ð &ðð ð ô€Lð ð 	*Ý�4‰yŒy‰ˆˆ1ØˆL˜˜1œ˜tÑ$Ô$ˆå˜A‘;”;ð 	&ð 	&ˆCØ—’�s˜1”v˜s 1œvÑ&Ô&ˆAØ�˜Q Ñ%Ô%ˆAˆAØˆˆà�˜d DÑ)Ô)ˆà‡x‚x�	˜5Ñ!Ô!ð "Ý�3‰KŒKˆØ�Š;ˆ;Ý�+˜qÑ!Ô!Ð!à€MrA   c                 óò   — | j         |j         k    og|                      t          ¦  «        r|                     t          ¦  «        p3|                      t          ¦  «        o|                     t          ¦  «        S )z²Helper to tell whether ``a`` and ``b`` have the same sorts
    of symbols in them -- no need to test hyperbolic patterns against
    expressions that have no hyperbolics in them.)r^   rí   r(   r'   )r˜   r™   s     r?   Ú_dotrigr)  "  sf   € ð Œ6�Q”VÒð AØ	�ŠÕ#Ñ$Ô$ÐE¨¯ªÕ/DÑ)EÔ)Eð 	@Ø	�ŠÕ Ñ!Ô!Ð? a§e¢eÕ,>Ñ&?Ô&?ðArA   Nc                  óL  — t          dt          ¬¦  «        \  } }}t          dd¬¦  «        }| t          |¦  «        |z  z  t          |¦  «        |z  z  | t	          |¦  «        |z  z  t          |¦  «        t          |¦  «        f| t	          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          |¦  «        t          |¦  «        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          |¦  «        t          |¦  «        f| t	          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          |¦  «        t          |¦  «        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          |¦  «        t          |¦  «        f| t          |¦  «        |z  z  t	          |¦  «        |z  z  | t          |¦  «        t          |¦  «        f| t          |¦  «        dz   |z  z  t          |¦  «        dz
  |z  z  | t          |¦  «        dz   |z  z  t          |¦  «        dz   t          |¦  «        dz
  f| t          |¦  «        dz   |z  z  t          |¦  «        dz
  |z  z  | t          |¦  «        dz   |z  z  t          |¦  «        dz   t          |¦  «        dz
  f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          j
        t          j
        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          j
        t          j
        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          j
        t          j
        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          j
        t          j
        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          |¦  «        |z  z  t          j
        t          j
        f| t          |¦  «        |z  z  t          |¦  «        |z  z  | t          j
        t          j
        f|t          | ¦  «        t          |¦  «        z   z  dt          | ¦  «        t          |¦  «        z  z   z  t          | |z   ¦  «        |z  t          j
        t          j
        ff}|t          | ¦  «        z  t          |¦  «        z  |t          | ¦  «        z  t          |¦  «        z  z   |z   t          | |z   ¦  «        |z  |z   f|t          | ¦  «        z  t          |¦  «        z  |t          | ¦  «        z  t          |¦  «        z  z
  |z   t          | |z   ¦  «        |z  |z   f|t          | ¦  «        z  t          |¦  «        z  |t          | ¦  «        z  t          |¦  «        z  z
  |z   t          | |z
  ¦  «        |z  |z   f|t          | ¦  «        z  t          |¦  «        z  |t          | ¦  «        z  t          |¦  «        z  z   |z   t          | |z
  ¦  «        |z  |z   f|t          | ¦  «        z  t          |¦  «        z  |t          |¦  «        z  t          | ¦  «        z  z   |z   t          | |z   ¦  «        |z  |z   f|t          | ¦  «        z  t          |¦  «        z  |t          | ¦  «        z  t          |¦  «        z  z   |z   t          | |z   ¦  «        |z  |z   ff}| t          |¦  «        dz  z  | | t          |¦  «        dz  z  z
  f| t	          |¦  «        dz  z  | dt          |¦  «        z  dz  z  | z
  f| t          |¦  «        dz  z  | dt          |¦  «        z  dz  z  | z
  f| t          ||z   ¦  «        z  | t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z   z  f| t          ||z   ¦  «        z  | t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z
  z  f| t	          ||z   ¦  «        z  | t	          |¦  «        t	          |¦  «        z   dt	          |¦  «        t	          |¦  «        z  z
  z  z  f| t          |¦  «        dz  z  | t          |¦  «        dz  z  | z
  f| t          |¦  «        dz  z  | | dt          |¦  «        z  dz  z  z
  f| t          |¦  «        dz  z  | | dt          |¦  «        z  dz  z  z   f| t          ||z   ¦  «        z  | t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z   z  f| t          ||z   ¦  «        z  | t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z   z  f| t          ||z   ¦  «        z  | t          |¦  «        t          |¦  «        z   dt          |¦  «        t          |¦  «        z  z   z  z  ff}| | t          |¦  «        dz  z  z
  |z   | t          |¦  «        dz  z  |z   t          f| | dt          |¦  «        z  dz  z  z
  |z   |  t	          |¦  «        dz  z  |z   t          f| | dt          |¦  «        z  dz  z  z
  |z   |  t          |¦  «        dz  z  |z   t          f| | t          |¦  «        dz  z  z
  |z   |  t          |¦  «        dz  z  |z   t          f| | dt          |¦  «        z  dz  z  z
  |z   | t          |¦  «        dz  z  |z   t          f| | dt          |¦  «        z  dz  z  z   |z   | t          |¦  «        dz  z  |z   t          f| |z  | |z  t          |¦  «        dz  z  z
  |z   | |z  t          |¦  «        dz  z  |z   t          f| |z  | |z  dt          |¦  «        z  dz  z  z
  |z   |  |z  t	          |¦  «        dz  z  |z   t          f| |z  | |z  dt          |¦  «        z  dz  z  z
  |z   |  |z  t          |¦  «        dz  z  |z   t          f| |z  | |z  t          |¦  «        dz  z  z
  |z   |  |z  t          |¦  «        dz  z  |z   t          f| |z  | |z  dt          |¦  «        z  dz  z  z
  |z   | |z  t          |¦  «        dz  z  |z   t          f| |z  | |z  dt          |¦  «        z  dz  z  z   |z   | |z  t          |¦  «        dz  z  |z   t          ff}| |||||||fat          S )Nza b crt   r  F)Úcommutativer8   rM   )r   r   r   r   r#   r$   r"   r    r!   r   r÷   r%   Ú_trigpat)r˜   r™   rV   r  Úmatchers_divisionÚmatchers_addÚmatchers_identityÚ	artifactss           r?   Ú	_trigpatsr1  ,  s´  € å�g¥4Ð(Ñ(Ô(�G€A€qˆ!ÝˆS˜eÐ$Ñ$Ô$€Að 
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥# a¡&¤&¨!¡)¡­S°©V¬VµS¸±V´VÐ<Ø	
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥# a¡&¤&¨!¡)¡­S°©V¬VµS¸±V´VÐ<Ø	
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥# a¡&¤&¨!¡)¡­S°©V¬VµS¸±V´VÐ<Ø	
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥# a¡&¤&¨!¡)¡­S°©V¬VµS¸±V´VÐ<Ø	
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥# a¡&¤&¨!¡)¡­S°©V¬VµS¸±V´VÐ<Ø	
�3ˆq‰6Œ6�1‰9‰•S˜‘V”V˜Q‘YÑ	 ¥3 q¡6¤6­3¨q©6¬6Ð2Ø	
�C�‰FŒF�Q‰J˜‰?Ñ	�C ™FœF Q™J¨™?Ñ	*Ø•�A‘”˜‘	ˆz˜A‰oÑ�s 1™vœv¨™z­3¨q©6¬6°A©:ð	7à	
�C�‰FŒF�Q‰J˜‰?Ñ	�C ™FœF Q™J¨™?Ñ	*Ø•�A‘”˜‘	ˆz˜A‰oÑ�s 1™vœv¨™z­3¨q©6¬6°A©:ð	7ð 
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥D¨¡G¤G¨Q¡J¡,µ´µq´uÐ=Ø	
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥D¨¡G¤G¨Q¡J¡,µ´µq´uÐ=Ø	
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥D¨¡G¤G¨Q¡J¡,µ´µq´uÐ=Ø	
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥D¨¡G¤G¨Q¡J¡,µ´µq´uÐ=Ø	
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥D¨¡G¤G¨Q¡J¡,µ´µq´uÐ=Ø	
�4�‰7Œ7�A‰:‰•d˜1‘g”g˜q‘jÑ	  !¥Q¤U­A¬EÐ2à	
�D�‰GŒG•d˜1‘g”gÑÑ	 ¥D¨¡G¤G­D°©G¬G¡OÑ 3Ñ	4Ý��Q‘‰KŒK˜‰M�1œ5¥!¤%ð	)ð'Ðð0 
�3ˆq‰6Œ6‰•#�a‘&”&‰˜1�S ™VœV™8¥C¨¡F¤F™?Ñ	*¨QÑ	.µ°A¸±E±
´
¸1±¸qÑ0@ÐAØ	
�3ˆq‰6Œ6‰•#�a‘&”&‰˜1�S ™VœV™8¥C¨¡F¤F™?Ñ	*¨QÑ	.µ°A¸±E±
´
¸1±¸qÑ0@ÐAØ	
�3ˆq‰6Œ6‰•#�a‘&”&‰˜1�S ™VœV™8¥C¨¡F¤F™?Ñ	*¨QÑ	.µ°A¸±E±
´
¸1±¸qÑ0@ÐAØ	
�3ˆq‰6Œ6‰•#�a‘&”&‰˜1�S ™VœV™8¥C¨¡F¤F™?Ñ	*¨QÑ	.µ°A¸±E±
´
¸1±¸qÑ0@ÐAØ	
�4�‰7Œ7‰•4˜‘7”7Ñ	˜Q�t A™wœw™Y¥t¨A¡w¤wÑ.Ñ	.°Ñ	2µD¸¸Q¹±K´KÀ±MÀAÑ4EÐFØ	
�4�‰7Œ7‰•4˜‘7”7Ñ	˜Q�t A™wœw™Y¥t¨A¡w¤wÑ.Ñ	.°Ñ	2µD¸¸Q¹±K´KÀ±MÀAÑ4EÐFð€Lð 
�3ˆq‰6Œ6�1‰9‰�a˜!�C ™FœF A™I™+‘oÐ&Ø	
�3ˆq‰6Œ6�1‰9‰�a˜�3˜q™6œ6™ A™‘o¨Ñ)Ð*Ø	
�3ˆq‰6Œ6�1‰9‰�a˜�3˜q™6œ6™ A™‘o¨Ñ)Ð*Ø	
�3ˆq�1‰u‰:Œ:‰�q�#˜a™&œ&¥ Q¡¤™-­#¨a©&¬&µ°Q±´©-Ñ7Ñ8Ð9Ø	
�3ˆq�1‰u‰:Œ:‰�q�#˜a™&œ&¥ Q¡¤™-­#¨a©&¬&µ°Q±´©-Ñ7Ñ8Ð9Ø	
�3ˆq�1‰u‰:Œ:‰�q�3˜q™6œ6¥C¨¡F¤F™?¨Qµ°Q±´½¸A¹¼±Ñ->Ñ?Ñ@ÐAà	
�4�‰7Œ7�A‰:‰�q�˜a™œ !™‘| aÑ'Ð(Ø	
�4�‰7Œ7�A‰:‰�q˜1˜a¥ Q¡¤™i¨!™^Ñ+Ñ+Ð,Ø	
�4�‰7Œ7�A‰:‰�q˜1˜a¥ Q¡¤™i¨!™^Ñ+Ñ+Ð,Ø	
�4��A‘‰;Œ;‰˜�4 ™7œ7¥4¨¡7¤7™?­T°!©W¬WµT¸!±W´W©_Ñ<Ñ=Ð>Ø	
�4��A‘‰;Œ;‰˜�4 ™7œ7¥4¨¡7¤7™?­T°!©W¬WµT¸!±W´W©_Ñ<Ñ=Ð>Ø	
�4��A‘‰;Œ;‰˜�D ™GœG¥d¨1¡g¤gÑ-°µD¸±G´G½DÀ¹G¼G±OÑ0CÑDÑEÐFðÐð( 
ˆQ�s�1‰vŒv�q‰y‰[‰˜1Ñ	˜a¥ A¡¤¨¡	™k¨A™o­sÐ3Ø	
ˆQ�•#�a‘&”&‘˜1‰}‰_Ñ	˜qÑ	  1 "¥S¨¡V¤V¨Q¡Y¡,°Ñ"2µCÐ8Ø	
ˆQ�•#�a‘&”&‘˜1‰}‰_Ñ	˜qÑ	  1 "¥S¨¡V¤V¨Q¡Y¡,°Ñ"2µCÐ8à	
ˆQ�t�A‰wŒw˜‰z‰\Ñ	˜AÑ	 ˜r¥$ q¡'¤'¨1¡*™}¨qÑ0µ$Ð7Ø	
ˆQ�•$�q‘'”'‘	˜A‰~ÑÑ	 Ñ	! 1¥T¨!¡W¤W¨a¡Z¡<°!Ñ#3µTÐ:Ø	
ˆQ�•$�q‘'”'‘	˜A‰~ÑÑ	 Ñ	! 1¥T¨!¡W¤W¨a¡Z¡<°!Ñ#3µTÐ:ð 
ˆ1‰ˆq�‰s•3�q‘6”6˜1‘9‰}Ñ	˜qÑ	  ! A¡#¥c¨!¡f¤f¨a¡i¡-°!Ñ"3µSÐ9Ø	
ˆ1‰ˆq�‰s�A•c˜!‘f”f‘H˜q‘=Ñ Ñ	  1Ñ	$ q b¨¡d­3¨q©6¬6°1©9¡n°qÑ&8½#Ð>Ø	
ˆ1‰ˆq�‰s�A•c˜!‘f”f‘H˜q‘=Ñ Ñ	  1Ñ	$ q b¨¡d­3¨q©6¬6°1©9¡n°qÑ&8½#Ð>à	
ˆ1‰ˆq�‰s•4˜‘7”7˜A‘:‰~Ñ	 Ñ	! A 2 a¡4­¨Q©¬°©
¡?°QÑ#6½Ð=Ø	
ˆ1‰ˆq�‰s�A•d˜1‘g”g‘I ‘>Ñ!Ñ	! AÑ	% q¨¡s­4°©7¬7°A©:¡~¸Ñ'9½4Ð@Ø	
ˆ1‰ˆq�‰s�A•d˜1‘g”g‘I ‘>Ñ!Ñ	! AÑ	% q¨¡s­4°©7¬7°A©:¡~¸Ñ'9½4Ð@ð!€Ið& �1�a˜Ð-¨|Ø˜9ð&€Hå€OrA   c                 óú  — t          t          ¦  «        }t          t          ¦  «        }g }| j        D ]œ}	|	j        s|	j        ||fv rs|	                     ¦   «         \  }
}|
j        s|j        rN|
j        |k    r||
j        d         xx         |z  cc<   Œ`|
j        |k    r||
j        d         xx         |z  cc<   Œ‡|                     |	¦  «         Œ�t          |¦  «        t          |¦  «        z  }d}|r†| 
                    ¦   «         }| 
                    |¦  «        }| 
                    |¦  «        }| ||¦  «        k    r-|                      ||¦  «         ||¦  «        z  ¦  «         d}n
|||<   |||<   |°†|s| S |r:|                     ¦   «         \  }}|                      ||¦  «        |z  ¦  «         |°:|r:|                     ¦   «         \  }}|                      ||¦  «        |z  ¦  «         |°:t          |Ž S )z¡Helper for _match_div_rewrite.

    Replace f(b_)**c_*g(b_)**(rexp(c_)) with h(b)**rexph(c) if f(b_)
    and g(b_) are both positive or if c_ is an integer.
    r   FT)r   Úintr_   rÓ   r^   Úas_base_expÚis_positiveÚ
is_integerrC   rR   rå   Úpopitemr
   )r‹   r»   rb   ÚrexpÚhÚrexphÚfargsÚgargsr_   r=   r™   r>   ÚcommonÚhitr…   ÚfeÚges                    r?   Ú_replace_mul_fpowxgpowrA  €  s+  € õ �ÑÔ€EÝ�ÑÔ€EØ€DØŒYð 
ð 
ˆØŒ8ð 	�q”v ! Q Ð'Ð'Ø—=’=‘?”?‰DˆAˆqØŒ}ð  ¤ð Ø”6˜Q’;�;Ø˜!œ& œ)Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$ØØ”V˜q’[�[Ø˜!œ& œ)Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$ØØ�Š�A‰ŒˆˆÝ�‰ZŒZ�#˜e™*œ*Ñ$€FØ
€CØ
ð 	Ø�jŠj‰lŒlˆØ�YŠY�s‰^Œ^ˆØ�YŠY�s‰^Œ^ˆØ���b‘”Š>ˆ>Ø�KŠK˜˜˜#™œ   b¡	¤	Ñ)Ñ*Ô*Ð*ØˆCˆCàˆE�#‰JØˆE�#‰Jð ð 	ð ð ØˆØ
ð Ø—’‘”‰ˆˆQØ�Š�A�A�c‘F”F˜A‘IÑÔÐð ð ð ð Ø—’‘”‰ˆˆQØ�Š�A�A�c‘F”F˜A‘IÑÔÐð ð õ �ˆ:ÐrA   c                 ó   — | S rm   r;   rÝ   s    r?   rÚ   rÚ   ¬  s   € �€ rA   c                 ó   — |  S rm   r;   rÝ   s    r?   rÚ   rÚ   ­  s   € �1�"€ rA   c                 ó   — t           j        S rm   )r   r÷   rÝ   s    r?   rÚ   rÚ   ®  s   € •”€ rA   c                 óø  — |dk    r/t          | t          t          t          t          t
          ¦  «        } �nD|dk    r/t          | t          t          t
          t          t
          ¦  «        } �n|dk    r/t          | t          t          t
          t          t
          ¦  «        } �nÚ|dk    r/t          | t          t          t          t          t          ¦  «        } �n¥|dk    r/t          | t          t          t          t          t          ¦  «        } �np|dk    r/t          | t          t          t
          t          t
          ¦  «        } �n;|dk    r/t          | t          t          t          t          t
          ¦  «        } �n|dk    r.t          | t          t          t
          t          t
          ¦  «        } nÒ|d	k    r.t          | t          t          t
          t          t
          ¦  «        } nž|d
k    r.t          | t          t          t          t          t          ¦  «        } nj|dk    r.t          | t          t          t          t          t          ¦  «        } n6|dk    r.t          | t          t          t
          t          t
          ¦  «        } ndS | S )zhelper for __trigsimpr   r8   rM   é   é   é   é   é	   é
   é   é   é   N)rA  r   r   Ú_midnr#   Ú_idnr$   Ú_oner"   r    r!   r%   )r‹   Úis     r?   Ú_match_div_rewriterS  °  sä  € àˆA‚v€vÝ% d­CµÝ•3�ñô ˆ‰à	
ˆaŠˆÝ% d­CµÝ•#•tñô ˆ‰à	
ˆaŠˆÝ% d­CµÝ•#•tñô ˆ‰à	
ˆaŠˆÝ% d­CµÝ•3�ñô ˆ‰à	
ˆaŠˆÝ% d­CµÝ•3�ñô ˆ‰à	
ˆaŠˆÝ% d­CµÝ•$�ñô ˆ‰ð 
ˆaŠˆÝ% d­Dµ$Ý•4�ñô ˆ‰à	
ˆaŠˆÝ% d­Dµ$Ý•$�ñô ˆˆà	
ˆbŠˆÝ% d­Dµ$Ý•$�ñô ˆˆà	
ˆbŠˆÝ% d­Dµ$Ý•4�ñ ô  ˆˆà	
ˆbŠˆÝ% d­Dµ$Ý•4�ñ ô  ˆˆà	
ˆbŠˆÝ% d­Dµ$Ý•$�ñô ˆˆð ˆtØ€KrA   c                 óD   —  | j         t          Ž rt          | |¦  «        S | S rm   )rí   rî   Ú
__trigsimp)r‹   rÁ   s     r?   r  r  Ü  s*   € ð €t„x•Ðð &Ý˜$ Ñ%Ô%Ð%Ø€KrA   c                 ó   ‡‡‡‡— ddl m} t          €t          ¦   «          t          \  ŠŠ}}}}}}| j        �rm| j        sP|                      ¦   «         \  }	}
t          t          j	        |	¦  «        ‰¦  «        t          j	        |
¦  «        z  } �nt          |¦  «        D �]\  }\  }}}}t          | |¦  «        sŒt          | |¦  «        }|�|| k    r|}  nÏŒ9|                      |¦  «        Š‰rµ‰                     |d¦  «        rŸ‰|         j        s:|                     ‰¦  «        }|j        sŒ�|                     ‰¦  «        }|j        sŒ­t%          ˆˆfd„‰‰                              t(          t*          ¦  «        D ¦   «         ¦  «        rŒî|                     ‰¦  «        }  n�Œ| j        �rÛg }| j        D ]³}|j        s@|                     ¦   «         \  }	}
t          j	        |
¦  «        }
t          j	        |	¦  «        }nt0          j        }
t          |‰¦  «        }|D ]3\  }}|                     |¦  «        Š‰�|                     ‰¦  «        } nŒ4|                     ||
z  ¦  «         Œ´|| j        k    r-t7          |Ž } t9          | t;          | ¦  «        t<          ¬¦  «        } | j        r¶|D ]³\  }}t          | |¦  «        sŒ || ¦  «        } |                      t*          ¦  «        rx|                      |¦  «        Š‰�I‰‰v rE‰‰v rAt%          ˆˆˆfd„‰|                              t(          t*          ¦  «        D ¦   «         ¦  «        rŒœ|                     ‰¦  «        }  nŒ´|D �]$\  }}}t          | |¦  «        sŒtA          d|g¬¦  «        }|                     ‰|¦  «        }|                     ‰|¦  «        }|                      |¦  «        }d}|rµ|| k    r¯| }||         dk    s+||          ||         j        v s||         ||         z   dk    rnu||v r||         ||         z  ||         z   dk    rnR|                     |¦  «        } |                      |¦  «        }| !                    |t0          j"        ¦  «         |r|| k    °¯�Œ&n2| j        s| j#        s	‰r"| j        r | j$        ˆfd	„| j        D ¦   «         Ž } 	  | j        tJ          Ž stL          ‚|                      tN          ¦  «        }|  (                    tN          ‰¬
¦  «        }||k    rtL          ‚tS          |¦  «        }||k    r%t9          |tS          |¦  «        gt<          ¬¦  «        }|                     tN          ¦  «        |z
  s|} n# tL          $ r Y nw xY w| S )zrecursive helper for trigsimpr   )ÚTR10iNc              3   óF   •K  — | ]}|j         d          ‰‰         k    V — ŒdS ©r   N©r_   )r<   r%  r™   r„   s     €€r?   ro   z__trigsimp.<locals>.<genexpr>  sJ   øè è € ð Hð H°1˜1œ6 !œ9¨¨A¬Ò.ð Hð Hð Hð Hð Hð HrA   )r…   c              3   óR   •K  — | ]!}|j         d          ‰‰         ‰‰         fv V — Œ"dS rY  rZ  )r<   r%  r˜   r™   r„   s     €€€r?   ro   z__trigsimp.<locals>.<genexpr>0  s\   øè è € ð IHð IHØ:;˜œ˜qœ	 c¨!¤f¨c°!¬fÐ%5Ð5ðIHð IHð IHð IHð IHð IHrA   r˜   )r£   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r;   r  )r<   r˜   rÁ   s     €r?   r@   z__trigsimp.<locals>.<listcomp>Q  s#   ø€ ÐAÐAÐA°!�9 Q¨Ñ-Ô-ÐAÐAÐArA   )rÁ   )*rä   rW  r,  r1  rý   Úis_commutativerþ   r  r
   Ú
_from_argsÚ	enumerater)  rS  Úmatchr   r6  rP   r5  ry   r  r(   r'   r  r_   r   r÷   rC   r   rð   r   r   rí   r   rv   ÚZerorÓ   r^   rî   Ú	TypeErrorr   rï   r*   )r‹   rÁ   rW  rV   r  r-  r.  r/  r0  ÚcomÚncrR  ÚpatternÚsimpÚok1Úok2r  Úokr_   Útermr'  rÖ   Úa_tr  r#  r>   r×   Úfnewr˜   r™   r„   s    `                          @@@r?   rU  rU  ä  sP  øøøø€ ð (Ð'Ð'Ð'Ð'Ð'åÐÝ‰Œˆå#+ñ!€A€qˆ!ˆQÐ! <Ø�yà„{ñ #àÔ"ð !	Ø—m’m‘o”o‰GˆC�Ý�Sœ^¨CÑ0Ô0°$Ñ7Ô7½¼ÀrÑ8JÔ8JÑJˆD‰Då09Ð:KÑ0LÔ0Lð ñ Ñ,�Ñ,�G˜T 3¨Ý˜t WÑ-Ô-ð Øå,¨T°1Ñ5Ô5�ØÐ&Ø $’�Ø&˜Ø˜à ð —j’j Ñ)Ô)�Øð ˜3Ÿ7š7 1 a™=œ=ð Ø˜qœ6Ô,ð %Ø ŸXšX c™]œ]˜Ø!œ~ð %Ø$Ø ŸXšX c™]œ]˜Ø!œ~ð %Ø$õ ð Hð Hð Hð Hð H¸¸A¼¿ºÝ1Õ3Eñ9Gô 9Gð Hñ Hô Hñ Hô Hð !à àŸ9š9 S™>œ>�DØ�Eùà„{ñ >CØˆØ”Ið 	!ð 	!ˆDØÔ&ð ØŸ-š-™/œ/‘��RÝ”^ BÑ'Ô'�Ý”~ cÑ*Ô*��å”U�Ý˜T 4Ñ(Ô(ˆDØ#4ð ð ‘�˜Ø—j’j Ñ)Ô)�Ø�?Ø!Ÿ;š; sÑ+Ô+�DØ�Eð #ð �KŠK˜˜R™Ñ Ô Ð Ð Ø�4”9ÒÐÝ˜�:ˆDÝ�t�V D™\œ\­yÐ9Ñ9Ô9ˆDØŒ;ð 	Ø#/ð ð ‘�˜Ý˜t WÑ-Ô-ð ØØ�u˜T‘{”{�Ø—8’8Õ.Ñ/Ô/ð 
ØŸ*š* WÑ-Ô-�Cð �{¨1°¨8¨8¸¸S¸¸ÅSð IHð IHð IHð IHð IHð IHØ?BÀ1¼v¿|º|Ý1Õ3Eñ@Gô @GðIHñ IHô IHñ FHô FH¸ð !Ø!Ÿ;š; sÑ+Ô+�DØ�Eð
ð $-ð 	(ñ 	(ÑˆG�V˜RÝ˜4 Ñ)Ô)ð Øõ �s R DÐ)Ñ)Ô)ˆCØ—l’l 1 cÑ*Ô*ˆGØ—[’[  CÑ(Ô(ˆFà—
’
˜7Ñ#Ô#ˆAØˆCØð 	(˜˜tš˜Ø�Ø�S”6˜Q’;�;Ø˜3œ˜ 1 Q¤4¤9Ð,Ð,°°#´¸¸1¼±ÀÒ0BÐ0BØØ˜�6�6˜a œf Q q¤T™k¨A¨a¬DÑ0°AÒ5Ð5ØØ—{’{ 1‘~”~�Ø—J’J˜wÑ'Ô'�Ø—’˜Q¥¤Ñ'Ô'Ð'ð ð 	(˜˜tš˜ùð	(ð. 
Œð C˜œð C tð C°´	ð CØˆtŒyÐAÐAÐAÐA°t´yÐAÑAÔAÐBˆðØˆtŒx�Ð ð 	ÝˆOØ�JŠJ•s‰OŒOˆØ�lŠl�3 TˆlÑ*Ô*ˆØ�!Š8ˆ8ÝˆOÝ�c‰{Œ{ˆØ�3Š;ˆ;Ý�s�F 3™KœKÐ(­iÐ8Ñ8Ô8ˆCà—	’	�#‘” Ñ"ð 	ØˆDøøÝð ð ð Øˆðøøøð €Ks   Ò;B2U. Õ.
U;Õ:U;)Úhyperc                ó¢  — ddl m} t          | ¦  «        } t          | t          ¦  «        s| S | j        s| S | }t          | t          ¦  «        } |rF|                      t          ¦  «        r, || ¦  «        \  } } |t          | t          ¦  «        ¦  «        } | |k    r4| j
        r-| j        d         j        rt          |                      ¦   «         Ž } | S )a  Return simplified ``e`` using Fu-like transformations.
    This is not the "Fu" algorithm. This is called by default
    from ``trigsimp``. By default, hyperbolics subexpressions
    will be simplified, but this can be disabled by setting
    ``hyper=False``.

    Examples
    ========

    >>> from sympy import trigsimp, tan, sinh, tanh
    >>> from sympy.simplify.trigsimp import futrig
    >>> from sympy.abc import x
    >>> trigsimp(1/tan(x)**2)
    tan(x)**(-2)

    >>> futrig(sinh(x)/tanh(x))
    cosh(x)

    r   )rê   )rä   rê   r   rB   r   r_   r   Ú_futrigrí   r'   rý   Úis_Rationalr
   Úas_coeff_Mul)r>   rm  Úkwargsrê   rÀ   r»   s         r?   rÜ   rÜ   g  sØ   € ð( 0Ð/Ð/Ð/Ð/Ð/å�‰
Œ
€Aå�a�ÑÔð ØˆàŒ6ð Øˆà
€CÝ�!•WÑÔ€Aàð %�—’Õ)Ñ*Ô*ð %Øˆ}˜QÑÔ‰ˆˆ1ØˆA�i˜�7Ñ#Ô#Ñ$Ô$ˆàˆC‚x€x�A”H€x ¤¨¤Ô!6€xå�—’Ñ!Ô!Ð"ˆØ€HrA   c           !      óT  ‡‡‡‡‡‡‡‡‡‡— ddl m}mŠm}mŠm}mŠm}m}m	Šm
ŠmŠm}mŠm}m}m}	m}
mŠmŠ |                      t*          ¦  «        s| S | j        r|                      t*          ¦  «        \  }} nd}ˆfd„}d„ Št0          ||‰ˆfd„‰t0          ˆfd„g‰ˆfd„|
‰|||	‰ˆfd	„|
t0          ˆfd
„g||t0          |gt0          ˆˆfd„gˆˆfd„ˆˆfd„gˆˆfd„ˆˆfd„g|t0          ‰gt0          ˆˆfd„g|‰‰t0          ˆˆfd„gfg} t3          ||¬¦  «        | ¦  «        } |�|| z  } | S )zHelper for futrig.r   )ÚTR1ÚTR2ÚTR3rë   ÚTR10ÚLrW  ÚTR8ÚTR6ÚTR15ÚTR16ÚTR111ÚTR5ÚTRmorrieÚTR11Ú_TR11ÚTR14ÚTR22ÚTR12Nc                 ó�   •—  ‰| ¦  «        |                       ¦   «         t          | ¦  «        t          | j        ¦  «        | j        fS rm   )r   r   r|   r_   r  )r=   rx  s    €r?   rÚ   z_futrig.<locals>.<lambda>¡  s2   ø€ �a�a˜‘d”d˜AŸKšK™MœM­6°!©9¬9µc¸!¼&±k´kÀ1Ä8ÐL€ rA   c                 ó6   — |                       t          ¦  «        S rm   )rí   r(   rÝ   s    r?   rÚ   z_futrig.<locals>.<lambda>¢  s   € �a—e’eÕ1Ñ2Ô2€ rA   c                 ó0   •— t          t          | ‰¦  «        S rm   ©Ú_eapplyr*   ©r=   Útrigss    €r?   rÚ   z_futrig.<locals>.<lambda>©  ó   ø€ •'�& ! UÑ+Ô+€ rA   c                 ó0   •— t          t          | ‰¦  «        S rm   ©r‰  r   rŠ  s    €r?   rÚ   z_futrig.<locals>.<lambda>«  ó   ø€ �W¥X¨q°%Ñ8Ô8€ rA   c                 ó(   •— t          d„ | ‰¦  «        S )Nc                 óD   — t          |                      ¦   «         ¦  «        S rm   )r*   Únormal)rR  s    r?   rÚ   z+_futrig.<locals>.<lambda>.<locals>.<lambda>­  s   € ¥F¨1¯8ª8©:¬:Ñ$6Ô$6€ rA   ©r‰  rŠ  s    €r?   rÚ   z_futrig.<locals>.<lambda>­  s   ø€ •'Ð6Ð6¸¸5ÑAÔA€ rA   c                 ó0   •— t          t          | ‰¦  «        S rm   rˆ  rŠ  s    €r?   rÚ   z_futrig.<locals>.<lambda>²  rŒ  rA   c                 ó0   •— t          t          | ‰¦  «        S rm   rŽ  rŠ  s    €r?   rÚ   z_futrig.<locals>.<lambda>´  r�  rA   c                 ó,   •—  ‰ ‰| ¦  «        ¦  «        S rm   r;   )r=   ru  rë   s    €€r?   rÚ   z_futrig.<locals>.<lambda>¸  s   ø€ ˜T˜T # # a¡&¤&™\œ\€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   ©r‰  r   )r=   r~  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>º  s   ø€ •g�j¨#¨#¨a©&¬&°%Ñ8Ô8€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   r˜  )r=   r{  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>»  s    ø€ •gÝ˜D˜D ™GœG Uñ,ô ,€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   r˜  )r=   rz  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>¾  s   ø€ •w�z¨3¨3¨q©6¬6°5Ñ9Ô9€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   r˜  )r=   r|  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>¿  s    ø€ •wÝ˜D˜D ™GœG Uñ,ô ,€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   r˜  )r=   rƒ  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>Ã  s    ø€ �WÝ˜˜˜Q™œ ñ(ô (€ rA   c                 óB   •— t          t           ‰| ¦  «        ‰¦  «        S rm   )r‰  r	   )r=   r„  r‹  s    €€r?   rÚ   z_futrig.<locals>.<lambda>Æ  s    ø€ �WÝ˜$˜$˜q™'œ' 5ñ*ô *€ rA   )Ú	objective)rä   rt  ru  rv  rë   rw  rx  rW  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  rí   r(   rý   r  r1   r2   )r>   rt  rv  rw  rW  ry  r}  r  r€  r�  r‚  rU   ÚLopsÚtreerx  r„  r{  r|  ru  rƒ  rë   r~  rz  r‹  s                 @@@@@@@@@@r?   ro  ro  ’  sº  øøøøøøøøøø€ ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
 �5Š5Õ&Ñ'Ô'ð Øˆà„xð Ø×#Ò#Õ$9Ñ:Ô:‰ˆˆqˆqàˆàLÐLÐLÐL€DØ2Ð2€EåàØØØ+Ð+Ð+Ð+ØÝ	Ð8Ð8Ð8Ð8Ð9ØØAÐAÐAÐAØØØØˆe�SØ+Ð+Ð+Ð+ØÝ	Ð8Ð8Ð8Ð8Ð9ØØÝ	�3ˆÝ	Ð)Ð)Ð)Ð)Ð)Ð*à8Ð8Ð8Ð8Ð8ð,ð ,ð ,ð ,ð ,ð	-ð
 :Ð9Ð9Ð9Ð9ð,ð ,ð ,ð ,ð ,ð	-ð 	Ý	�4ÐÝ	ð (ð (ð (ð (ð (ð 	)àˆS�$Ý	ð *ð *ð *ð *ð *ð 	+ðC#	
ð$€DðJ 	%�ˆt˜tÐ$Ñ$Ô$ QÑ'Ô'€AàÐØ�A‰Iˆà€HrA   c                 ó¾   — t          | t          ¦  «        rt          | j        ¦  «        S t          | t          ¦  «        sdS t          d„ | j        D ¦   «         ¦  «        S )zD_eapply helper to tell whether ``e`` and all its args
    are Exprs.Fc              3   ó4   K  — | ]}t          |¦  «        V — Œd S rm   )Ú_is_Expr)r<   rR  s     r?   ro   z_is_Expr.<locals>.<genexpr>Ø  s(   è è € Ð+Ð+˜q�x˜‰{Œ{Ð+Ð+Ð+Ð+Ð+Ð+rA   )rB   r   r£  r‹   r   Úallr_   )r>   s    r?   r£  r£  Ñ  s\   € õ �!•ZÑ Ô ð  Ý˜œÑÔÐÝ�a�ÑÔð ØˆuÝÐ+Ð+ A¤FÐ+Ñ+Ô+Ñ+Ô+Ð+rA   c                 ó®   ‡ ‡— t          |t          ¦  «        s|S t          |¦  «        s|j        s ‰ |¦  «        S  |j        ˆˆ fd„|j        D ¦   «         Ž S )zdApply ``func`` to ``e`` if all args are Exprs else only
    apply it to those args that *are* Exprs.c                 óN   •— g | ]!}‰� ‰|¦  «        rt          ‰|¦  «        n|‘Œ"S rm   r“  )r<   ÚeiÚcondr^   s     €€r?   r@   z_eapply.<locals>.<listcomp>â  sH   ø€ ð ð ð àð #˜l¨d¨d°2©h¬h˜l���bÑÔÐ¸Rðð ð rA   )rB   r   r£  r_   r^   )r^   r>   r¨  s   ` `r?   r‰  r‰  Û  s   øø€ õ �a�ÑÔð ØˆÝ��{„{ð ˜!œ&ð Øˆt�A‰wŒwˆØˆ1Œ6ð ð ð ð ð à”&ðñ ô ð ð rA   )Frm   )\Úcollectionsr   Ú	functoolsr   Ú
sympy.corer   r   r   r   r	   r
   r   r   Úsympy.core.cacher   Úsympy.core.functionr   r   r   r   r   r   r   Úsympy.core.numbersr   r   Úsympy.core.intfuncr   Úsympy.core.sortingr   Úsympy.core.symbolr   r   r   Úsympy.external.gmpyr   Úsympy.functionsr   r   r   r    r!   r"   r#   r$   r%   r&   Ú%sympy.functions.elementary.hyperbolicr'   Ú(sympy.functions.elementary.trigonometricr(   Úsympy.polysr)   r*   r+   r,   Úsympy.polys.domainsr-   Úsympy.polys.polyerrorsr.   Úsympy.polys.polytoolsr/   Úsympy.simplify.cse_mainr0   Úsympy.strategies.corer1   Úsympy.strategies.treer2   Úsympy.utilities.iterablesr3   Úsympy.utilities.miscr4   r±   rî   r¼   rè   r  râ   r)  r,  r1  rA  rP  rO  rQ  rS  r  rU  rÜ   ro  r£  r‰  r;   rA   r?   ú<module>r¿     s/  ðØ #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð ð-ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -à $Ð $Ð $Ð $Ð $Ð $ðGð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gà )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø *Ð *Ð *Ð *Ð *Ð *Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ !Ð !Ð !Ð !Ð !Ð !Ø DÐ DÐ DÐ DÐ DÐ DØ JÐ JÐ JÐ JÐ JÐ JØ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ "Ð "Ð "Ð "Ð "Ð "Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø (Ð (Ð (Ð (Ð (Ð (Ø .Ð .Ð .Ð .Ð .Ð .Ø &Ð &Ð &Ð &Ð &Ð &à"$¨E¸Ø!&ðKFð KFð KFð KFð\  Ð!3Ð	4€ðð ð ðDið ið ið iðX[ð [ð [ð~ !%ð Eð Eð Eð Eð EðPAð Að Að €ðQð Qð Qðh)ð )ð )ðX €{€Øˆ€Ø€€ð)ð )ð )ðXð ð ð ð 	ð~ð ~ð ~ñ 	„ð~ðD ð (ð (ð (ð (ð (ðV<ð <ð <ð~,ð ,ð ,ð	ð 	ð 	ð 	ð 	ð 	rA   