§
    PŠtj ó  ã                   óB  — d dl mZ d dl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 d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ 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( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z< d„ Z=d„ Z>d„ Z?dCd„Z@d„ ZAd„ ZBd„ ZCdDd „ZDdDd!„ZEd"„ ZFdEd$„ZGd%„ ZHdEd&„ZId'„ ZJdFd)„ZKd*„ ZLdEd+„ZMd,„ ZNd-„ ZOd.„ ZPdEd/„ZQdDd0„ZRdDd1„ZSd2„ ZTdDd3„ZUd4„ ZVd5„ ZWe<rB eX eYe:e=e>e?eAeBeDeEeFeGeHeIeKeMeOe@ePeQeReSeNeTeUf¦  «        ¦  «        \  Z=Z>Z?ZAZBZDZEZFZGZHZIZKZMZOZ@ZPZQZRZSZNZTZUeDe=feEe=fe9gZZeKeDe=feEe=fe=gfZ[ePeGe=fePeGeJe=fe9gZ\eBeJfe9gZ]eBeAeBeMeBeOeBe=fZ^eBeAeIeBeAeKfeDeFeKeBfe\eZeHe[eBeHeHe]fe9gZ_d6„ fd7„Z`dGd8„Zad9 b                    ¦   «         Zc ed eX eeec eX eY ef¦   «         jg        ec¦  «        ¦  «        ¦  «        ¦  «        ¦  «        Zhed:„ ¦   «         Zied;„ ¦   «         Zjed<„ ¦   «         ZkdCd=„Zld>„ Zmd?„ Znd@„ ZodA„ ZpdB„ Zqd(S )Hé    )Údefaultdict©ÚAdd)Úcacheit)ÚExpr)ÚFactorsÚ	gcd_termsÚfactor_terms©Ú
expand_mul)ÚMul)ÚpiÚI)ÚPow)ÚS)Úordered©ÚDummy)Úsympify©Ú	bottom_up)Úbinomial)ÚcoshÚsinhÚtanhÚcothÚsechÚcschÚHyperbolicFunction)ÚcosÚsinÚtanÚcotÚsecÚcscÚsqrtÚTrigonometricFunction)Úperfect_power)Úfactor)Úgreedy)ÚidentityÚdebug)ÚSYMPY_DEBUGc                 ór   — |                       ¦   «                              ¦   «                              ¦   «         S )zSimplification of rational polynomials, trying to simplify
    the expression, e.g. combine things like 3*x + 2*x, etc....
    )Únormalr)   Úexpand©Úrvs    úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/simplify/fu.pyÚTR0r4       s*   € ð �9Š9‰;Œ;×ÒÑÔ×&Ò&Ñ(Ô(Ð(ó    c                 ó(   — d„ }t          | |¦  «        S )zÎReplace sec, csc with 1/cos, 1/sin

    Examples
    ========

    >>> from sympy.simplify.fu import TR1, sec, csc
    >>> from sympy.abc import x
    >>> TR1(2*csc(x) + sec(x))
    1/cos(x) + 2/sin(x)
    c                 óþ   — t          | t          ¦  «        r)| j        d         }t          j        t          |¦  «        z  S t          | t          ¦  «        r)| j        d         }t          j        t          |¦  «        z  S | S ©Nr   )Ú
isinstancer$   Úargsr   ÚOner    r%   r!   ©r2   Úas     r3   ÚfzTR1.<locals>.f5   se   € Ý�b�#ÑÔð 	 Ø”˜”
ˆAÝ”5�˜Q™œ‘<ÐÝ˜�CÑ Ô ð 	 Ø”˜”
ˆAÝ”5�˜Q™œ‘<ÐØˆ	r5   r   ©r2   r>   s     r3   ÚTR1r@   )   s#   € ðð ð õ �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )a@  Replace tan and cot with sin/cos and cos/sin

    Examples
    ========

    >>> from sympy.simplify.fu import TR2
    >>> from sympy.abc import x
    >>> from sympy import tan, cot, sin, cos
    >>> TR2(tan(x))
    sin(x)/cos(x)
    >>> TR2(cot(x))
    cos(x)/sin(x)
    >>> TR2(tan(tan(x) - sin(x)/cos(x)))
    0

    c                 ó
  — t          | t          ¦  «        r,| j        d         }t          |¦  «        t	          |¦  «        z  S t          | t
          ¦  «        r,| j        d         }t	          |¦  «        t          |¦  «        z  S | S r8   )r9   r"   r:   r!   r    r#   r<   s     r3   r>   zTR2.<locals>.fS   sm   € Ý�b�#ÑÔð 	!Ø”˜”
ˆAÝ�q‘6”6�#˜a™&œ&‘=Ð Ý˜�CÑ Ô ð 	!Ø”˜”
ˆAÝ�q‘6”6�#˜a™&œ&‘=Ð Øˆ	r5   r   r?   s     r3   ÚTR2rC   A   s#   € ð$ð ð õ �R˜ÑÔÐr5   Fc                 ó.   ‡— ˆfd„}t          | |¦  «        S )aÁ  Converts ratios involving sin and cos as follows::
        sin(x)/cos(x) -> tan(x)
        sin(x)/(cos(x) + 1) -> tan(x/2) if half=True

    Examples
    ========

    >>> from sympy.simplify.fu import TR2i
    >>> from sympy.abc import x, a
    >>> from sympy import sin, cos
    >>> TR2i(sin(x)/cos(x))
    tan(x)

    Powers of the numerator and denominator are also recognized

    >>> TR2i(sin(x)**2/(cos(x) + 1)**2, half=True)
    tan(x/2)**2

    The transformation does not take place unless assumptions allow
    (i.e. the base must be positive or the exponent must be an integer
    for both numerator and denominator)

    >>> TR2i(sin(x)**a/(cos(x) + 1)**a)
    sin(x)**a/(cos(x) + 1)**a

    c                 óf  •‡‡	‡
— | j         s| S |                      ¦   «         \  Š	Š‰	j        s‰j        r| S ˆfd„Š
‰	                     ¦   «         Š	ˆ	ˆ
fd„t	          ‰	                     ¦   «         ¦  «        D ¦   «         }‰	s| S ‰                     ¦   «         Šˆˆ
fd„t	          ‰                     ¦   «         ¦  «        D ¦   «         }‰s| S ˆˆ
fd„} |‰	|¦  «          |‰|¦  «         g }‰	D �]M}t          |t          ¦  «        rÔt          |j	        d         d¬¦  «        }|‰v rS‰|         ‰	|         k    rA| 
                    t          |j	        d         ¦  «        ‰	|         z  ¦  «         d x‰	|<   ‰|<   Œ‹‰r^d|z   }|‰v rU‰|         ‰	|         k    rC| 
                    t          |j	        d         d	z  ¦  «        ‰	|         z  ¦  «         d x‰	|<   ‰|<   Œìt          |t          ¦  «        rut          |j	        d         d¬¦  «        }|‰v rS‰|         ‰	|         k    rA| 
                    t          |j	        d         ¦  «        ‰	|          z  ¦  «         d x‰	|<   ‰|<   �Œv‰rÕ|j        rÎ|j	        d         t          j        u rµt          |j	        d         t          ¦  «        r•t          |j	        d         j	        d         d¬¦  «        }|‰v rj‰|         ‰	|         k    rX‰|         j        s|j        rD| 
                    t          |j	        d         d	z  ¦  «        ‰	|          z  ¦  «         d x‰	|<   ‰|<   �ŒO|rxt#          |d
„ ‰	                     ¦   «         D ¦   «         z   Ž t#          d„ ‰                     ¦   «         D ¦   «         Ž z  } | t#          d„ |D ¦   «         Ž t#          d„ |D ¦   «         Ž z  z  } | S )Nc                 óÈ   •— |j         s| j        oS| j        t          t          fv p>‰o<| j        o5t          | j        ¦  «        dk    ot          d„ | j        D ¦   «         ¦  «        S )Né   c              3   ól   K  — | ]/}t          d „ t          j        |¦  «        D ¦   «         ¦  «        V — Œ0dS )c              3   ój   K  — | ].}t          |t          ¦  «        p|j        o|j        t          u V — Œ/d S ©N)r9   r    Úis_PowÚbase)Ú.0Úais     r3   ú	<genexpr>z8TR2i.<locals>.f.<locals>.ok.<locals>.<genexpr>.<genexpr>Š   sR   è è € ð ,ð ,Øõ # 2¥sÑ+Ô+ÐK¨r¬yÐ/K¸R¼WÍ¸^ð ,ð ,ð ,ð ,ð ,ð ,r5   N)Úanyr   Ú	make_args©rM   r=   s     r3   rO   z.TR2i.<locals>.f.<locals>.ok.<locals>.<genexpr>Š   sf   è è € ð =ð =Ø01õ ð ,ð ,Ýœ-¨Ñ*Ô*ð,ñ ,ô ,ñ ,ô ,ð =ð =ð =ð =ð =ð =r5   )	Ú
is_integerÚis_positiveÚfuncr!   r    Úis_AddÚlenr:   rP   )ÚkÚeÚhalfs     €r3   ÚokzTR2i.<locals>.f.<locals>.okƒ   s‚   ø€ ð ”Ð. ¤ð ?Ø”�3¥˜*Ð$ð >¨ð *=Ø”ð*=å�A”F‘”˜qÒ ð*=õ ð =ð =Ø56´Vð=ñ =ô =ñ =ô =ð@r5   c                 ób   •— g | ]+} ‰|‰|         ¦  «        °|‰                      |¦  «        f‘Œ,S © ©Úpop)rM   rX   Únr[   s     €€r3   ú
<listcomp>z#TR2i.<locals>.f.<locals>.<listcomp>Ž   ó:   ø€ ÐJÐJÐJ 1¸b¸bÀÀAÀaÄD¹k¼kÐJ�!�Q—U’U˜1‘X”X�ÐJÐJÐJr5   c                 ób   •— g | ]+} ‰|‰|         ¦  «        °|‰                      |¦  «        f‘Œ,S r]   r^   )rM   rX   Údr[   s     €€r3   ra   z#TR2i.<locals>.f.<locals>.<listcomp>“   rb   r5   c                 óÌ  •— g }| D ]^}|j         rUt          |j        ¦  «        dk    r=‰rt          |¦  «        nt	          |¦  «        }||k    r|                     ||f¦  «         Œ_|r}t          |¦  «        D ]\  }\  }}| |= |||<   Œt          |Ž                      ¦   «         }|D ]<}| |         ||         z   } ‰||¦  «        r|| |<   Œ%|                     ||f¦  «         Œ=~d S d S ©Né   )	rV   rW   r:   r)   r
   ÚappendÚ	enumerater   Úas_powers_dict)	rd   ÚddoneÚnewkrX   ÚknewÚiÚvrZ   r[   s	          €€r3   Ú	factorizez"TR2i.<locals>.f.<locals>.factorize™   s  ø€ ØˆDØð /ð /�Ø”8ð /¥ A¤F¡¤¨a¢ Ø(,ÐA�6 !™9œ9˜9µ,¸q±/´/�DØ˜q’y�yØŸš Q¨ IÑ.Ô.Ð.øØð Ý$-¨d¡O¤Oð #ð #‘L�A‘y˜˜4Ø˜!˜Ø"�D˜‘G�GÝ˜D�z×0Ò0Ñ2Ô2�Øð -ð -�AØ˜!œ˜t Aœw™�AØ�r˜!˜Q‘x”xð -Ø ˜˜!™˜àŸš a¨ VÑ,Ô,Ð,Ð,Ø�D�Dðð r5   r   F©Úevaluaterg   rG   c                 ó"   — g | ]\  }}|¯||z  ‘ŒS r]   r]   ©rM   ÚbrY   s      r3   ra   z#TR2i.<locals>.f.<locals>.<listcomp>Ê   s%   € Ð<Ð<Ð<¡T Q¨¸!Ð<˜A˜q™DÐ<Ð<Ð<r5   c                 ó"   — g | ]\  }}|¯||z  ‘ŒS r]   r]   rt   s      r3   ra   z#TR2i.<locals>.f.<locals>.<listcomp>Ë   s%   € Ð6Ð6Ð6™t˜q !°AÐ6�a˜‘dÐ6Ð6Ð6r5   c                 ó   — g | ]
\  }}||z  ‘ŒS r]   r]   rt   s      r3   ra   z#TR2i.<locals>.f.<locals>.<listcomp>Ì   s    € Ð/Ð/Ð/¡  A˜˜1™Ð/Ð/Ð/r5   c                 ó   — g | ]
\  }}||z  ‘ŒS r]   r]   rt   s      r3   ra   z#TR2i.<locals>.f.<locals>.<listcomp>Ì   s    € Ð6NÐ6NÐ6NÁÀÀ1°q¸!±tÐ6NÐ6NÐ6Nr5   )Úis_MulÚas_numer_denomÚis_Atomrj   ÚlistÚkeysr9   r!   r    r:   rh   r"   rV   r   r;   rS   rT   r   Úitems)r2   Úndonerk   rp   ÚtrX   r=   Úa1rd   r`   r[   rZ   s           @@@€r3   r>   zTR2i.<locals>.f{   s  øøøø€ ØŒyð 	ØˆIà× Ò Ñ"Ô"‰ˆˆ1ØŒ9ð 	˜œ	ð 	ØˆIð	@ð 	@ð 	@ð 	@ð 	@ð ×ÒÑÔˆØJÐJÐJÐJÐJ­¨Q¯VªV©X¬X©¬ÐJÑJÔJˆØð 	ØˆIà×ÒÑÔˆØJÐJÐJÐJÐJ­¨Q¯VªV©X¬X©¬ÐJÑJÔJˆØð 	ØˆIð	ð 	ð 	ð 	ð 	ð 	ð& 	ˆ	�!�UÑÔÐØˆ	�!�UÑÔÐð ˆØð 	'ñ 	'ˆAÝ˜!�SÑ!Ô!ð 'Ý˜œ˜qœ	¨EÐ2Ñ2Ô2�Ø˜�6�6˜a œd a¨¤dšl˜lØ—H’H�S ¤¨¤™^œ^¨Q¨q¬TÑ1Ñ2Ô2Ð2Ø"&Ð&�A�a‘D˜1˜Q™4˜4Øð ,Ø˜Q™�BØ˜Q�w�w 1 R¤5¨A¨a¬D¢= =ØŸš¥# a¤f¨Q¤i°¡kÑ"2Ô"2°Q°q´TÑ!9Ñ:Ô:Ð:Ø'+Ð+˜˜!™˜q ™uøÝ˜A�sÑ#Ô#ð 'Ý˜œ˜qœ	¨EÐ2Ñ2Ô2�Ø˜�6�6˜a œd a¨¤dšl˜lØ—H’H�S ¤¨¤™^œ^¨a°¬d¨UÑ2Ñ3Ô3Ð3Ø"&Ð&�A�a‘D˜1˜Q™4ùØð '˜!œ(ð ' q¤v¨a¤yµA´EÐ'9Ð'9Ý˜qœv aœy­#Ñ.Ô.ð (:å˜œ˜qœ	œ qÔ)°EÐ:Ñ:Ô:�Ø˜�6�6˜a œd a¨¤dšl˜l°°!´´˜lØœð +à—H’H�S ¤¨¤¨1¡Ñ-Ô-°°!´¨uÑ4Ñ5Ô5Ð5Ø"&Ð&�A�a‘D˜1˜Q™4ùàð 	PÝ�qÐ<Ð<¨Q¯WªW©Y¬YÐ<Ñ<Ô<Ñ<Ð>ÝÐ6Ð6 q§w¢w¡y¤yÐ6Ñ6Ô6Ð7ñ8ˆBà•#Ð/Ð/¨Ð/Ñ/Ô/Ð0µÐ6NÐ6NÈÐ6NÑ6NÔ6NÐ1OÑOÑOˆBàˆ	r5   r   )r2   rZ   r>   s    ` r3   ÚTR2ir‚   _   s4   ø€ ð8Sð Sð Sð Sð Sõj �R˜ÑÔÐr5   c                 ój   ‡— ddl mŠ ˆfd„}|                      d„ d„ ¦  «        } t          | |¦  «        S )aR  Induced formula: example sin(-a) = -sin(a)

    Examples
    ========

    >>> from sympy.simplify.fu import TR3
    >>> from sympy.abc import x, y
    >>> from sympy import pi
    >>> from sympy import cos
    >>> TR3(cos(y - x*(y - x)))
    cos(x*(x - y) + y)
    >>> cos(pi/2 + x)
    -sin(x)
    >>> cos(30*pi/2 + x)
    -cos(x)

    r   ©Úsignsimpc                 óT  •— t          | t          ¦  «        s| S |                       ‰| j        d         ¦  «        ¦  «        } t          | t          ¦  «        s| S | j        d         t          j        dz  z
  j        t          j        dz  | j        d         z
  j        cxu rdu r†n nƒt          t          t          t          t          t          t          t          t          t          t          t          i} |t          | ¦  «                 t          j        dz  | j        d         z
  ¦  «        } | S )Nr   é   rG   T)r9   r'   rU   r:   r   ÚPirT   r    r!   r"   r#   r$   r%   Útype)r2   Úfmapr…   s     €r3   r>   zTR3.<locals>.fï   sì   ø€ Ý˜"Õ3Ñ4Ô4ð 	ØˆIØ�WŠW�X�X˜bœg aœjÑ)Ô)Ñ*Ô*ˆÝ˜"Õ3Ñ4Ô4ð 	ØˆIØŒG�AŒJ�œ˜a™ÑÔ,µ´°a±¸"¼'À!¼*Ñ1DÔ0QÐYÐYÐYÐYÐUYÐYÐYÐYÐYÐYÝ��c¥3­­Sµ#µs½CÅÅcÍ3ÐOˆDØ�•d˜2‘h”h”¥¤ Q¡¨¬°¬Ñ 3Ñ4Ô4ˆBØˆ	r5   c                 ó,   — t          | t          ¦  «        S rJ   )r9   r'   ©Úxs    r3   ú<lambda>zTR3.<locals>.<lambda>ü   s   € •*˜QÕ 5Ñ6Ô6€ r5   c                 ó2   — |                       d„ d„ ¦  «        S )Nc                 ó   — | j         o| j        S rJ   )Ú	is_numberry   ©r`   s    r3   rŽ   z'TR3.<locals>.<lambda>.<locals>.<lambda>þ   s   € �a”kÐ. a¤h€ r5   c                 ó    —  | j         | j        Ž S rJ   ©rU   r:   r’   s    r3   rŽ   z'TR3.<locals>.<lambda>.<locals>.<lambda>ÿ   s   € �f�a”f˜aœf�o€ r5   ©ÚreplacerŒ   s    r3   rŽ   zTR3.<locals>.<lambda>ý   s    € �!—)’)Ø.Ð.Ø%Ð%ñ'ô '€ r5   )Úsympy.simplify.simplifyr…   r–   r   )r2   r>   r…   s     @r3   ÚTR3r˜   Ó   sg   ø€ ð$ 1Ð0Ð0Ð0Ð0Ð0ð	ð 	ð 	ð 	ð 	ð 
�ŠØ6Ð6ð	'ð 	'ñ
(ô 
(€Bõ �R˜ÑÔÐr5   c                 ó2   — |                       d„ d„ ¦  «        S )aœ  Identify values of special angles.

        a=  0   pi/6        pi/4        pi/3        pi/2
    ----------------------------------------------------
    sin(a)  0   1/2         sqrt(2)/2   sqrt(3)/2   1
    cos(a)  1   sqrt(3)/2   sqrt(2)/2   1/2         0
    tan(a)  0   sqt(3)/3    1           sqrt(3)     --

    Examples
    ========

    >>> from sympy import pi
    >>> from sympy import cos, sin, tan, cot
    >>> for s in (0, pi/6, pi/4, pi/3, pi/2):
    ...    print('%s %s %s %s' % (cos(s), sin(s), tan(s), cot(s)))
    ...
    1 0 0 zoo
    sqrt(3)/2 1/2 sqrt(3)/3 sqrt(3)
    sqrt(2)/2 sqrt(2)/2 1 1
    1/2 sqrt(3)/2 sqrt(3) sqrt(3)/3
    0 1 zoo 0
    c                 óv   — t          | t          ¦  «        o$| j        d         t          z  x}j        o|j        dv S )Nr   )rg   rG   é   r‡   é   )r9   r'   r:   r   Úis_RationalÚq)r�   Úrs     r3   rŽ   zTR4.<locals>.<lambda>  s?   € Ý�qÕ/Ñ0Ô0ð EØ”�q”	�"‘ˆ_ˆQÔ)ðEØ./¬c°_Ð.Dð r5   c                 ór   — |                        | j        d         j         | j        d         j        Ž ¦  «        S r8   r”   rŒ   s    r3   rŽ   zTR4.<locals>.<lambda>   s-   € Ø�FŠF�>�1”6˜!”9”> 1¤6¨!¤9¤>Ð2Ñ3Ô3ð r5   r•   r1   s    r3   ÚTR4r¡     s0   € ð0 �:Š:ð	Eð 	Eð	4ð 	4ñ	5ô 5ð 5r5   c                 ó>   ‡‡‡‡‡— ˆˆˆˆˆfd„}t          | |¦  «        S )a+  Helper for TR5 and TR6 to replace f**2 with h(g**2)

    Options
    =======

    max :   controls size of exponent that can appear on f
            e.g. if max=4 then f**4 will be changed to h(g**2)**2.
    pow :   controls whether the exponent must be a perfect power of 2
            e.g. if pow=True (and max >= 6) then f**6 will not be changed
            but f**8 will be changed to h(g**2)**4

    >>> from sympy.simplify.fu import _TR56 as T
    >>> from sympy.abc import x
    >>> from sympy import sin, cos
    >>> h = lambda x: 1 - x
    >>> T(sin(x)**3, sin, cos, h, 4, False)
    (1 - cos(x)**2)*sin(x)
    >>> T(sin(x)**6, sin, cos, h, 6, False)
    (1 - cos(x)**2)**3
    >>> T(sin(x)**6, sin, cos, h, 6, True)
    sin(x)**6
    >>> T(sin(x)**8, sin, cos, h, 10, True)
    (1 - cos(x)**2)**4
    c                 ó¶  •— | j         r| j        j        ‰k    s| S | j        j        s| S | j        dk     dk    r| S | j        ‰k    dk    r| S | j        dk    r| S | j        dk    r' ‰ ‰| j        j        d         ¦  «        dz  ¦  «        S | j        dz  dk    rP| j        dz  } ‰| j        j        d         ¦  «         ‰ ‰| j        j        d         ¦  «        dz  ¦  «        |z  z  S | j        dk    rd}n;‰s| j        dz  r| S | j        dz  }n"t          | j        ¦  «        }|s| S | j        dz  } ‰ ‰| j        j        d         ¦  «        dz  ¦  «        |z  S )Nr   Trg   rG   r‡   )rK   rL   rU   ÚexpÚis_realr:   r(   )r2   rY   Úpr>   ÚgÚhÚmaxÚpows      €€€€€r3   Ú_fz_TR56.<locals>._f>  s‹  ø€ ð
 ”	ð 	˜bœgœl¨aÒ/Ð/ØˆIØŒvŒ~ð 	ØˆIàŒF�QŠJ˜4ÒÐØˆIØŒF�SŠL˜TÒ!Ð!ØˆIØŒ6�QŠ;ˆ;ØˆIØŒ6�QŠ;ˆ;Ø�1�Q�Q�r”w”| A”Ñ'Ô'¨Ñ*Ñ+Ô+Ð+àŒv˜‰z˜QŠˆØ”F˜A‘I�Ø�q˜œœ aœÑ)Ô)¨!¨!¨A¨A¨b¬g¬l¸1¬oÑ,>Ô,>ÀÑ,AÑ*BÔ*BÀAÑ*EÑEÐEØ”˜1’�Ø��Øð Ø”6˜A‘:ð Ø�IØ”F˜A‘I��å! "¤&Ñ)Ô)�Øð Ø�IØ”F˜A‘I�Ø�1�Q�Q�r”w”| A”Ñ'Ô'¨Ñ*Ñ+Ô+¨QÑ.Ð.r5   r   )r2   r>   r§   r¨   r©   rª   r«   s    ````` r3   Ú_TR56r¬   $  sG   øøøøø€ ð4!/ð !/ð !/ð !/ð !/ð !/ð !/ð !/ð !/õF �R˜ÑÔÐr5   r‡   c                 óB   — t          | t          t          d„ ||¬¦  «        S )a�  Replacement of sin**2 with 1 - cos(x)**2.

    See _TR56 docstring for advanced use of ``max`` and ``pow``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR5
    >>> from sympy.abc import x
    >>> from sympy import sin
    >>> TR5(sin(x)**2)
    1 - cos(x)**2
    >>> TR5(sin(x)**-2)  # unchanged
    sin(x)**(-2)
    >>> TR5(sin(x)**4)
    (1 - cos(x)**2)**2
    c                 ó   — d| z
  S rf   r]   rŒ   s    r3   rŽ   zTR5.<locals>.<lambda>v  ó
   € ¨¨Q©€ r5   ©r©   rª   )r¬   r!   r    ©r2   r©   rª   s      r3   ÚTR5r²   d  ó!   € õ$ �•S�#˜˜°C¸SÐAÑAÔAÐAr5   c                 óB   — t          | t          t          d„ ||¬¦  «        S )a€  Replacement of cos**2 with 1 - sin(x)**2.

    See _TR56 docstring for advanced use of ``max`` and ``pow``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR6
    >>> from sympy.abc import x
    >>> from sympy import cos
    >>> TR6(cos(x)**2)
    1 - sin(x)**2
    >>> TR6(cos(x)**-2)  #unchanged
    cos(x)**(-2)
    >>> TR6(cos(x)**4)
    (1 - sin(x)**2)**2
    c                 ó   — d| z
  S rf   r]   rŒ   s    r3   rŽ   zTR6.<locals>.<lambda>‹  r¯   r5   r°   )r¬   r    r!   r±   s      r3   ÚTR6r¶   y  r³   r5   c                 ó(   — d„ }t          | |¦  «        S )a  Lowering the degree of cos(x)**2.

    Examples
    ========

    >>> from sympy.simplify.fu import TR7
    >>> from sympy.abc import x
    >>> from sympy import cos
    >>> TR7(cos(x)**2)
    cos(2*x)/2 + 1/2
    >>> TR7(cos(x)**2 + 1)
    cos(2*x)/2 + 3/2

    c                 ó¤   — | j         r | j        j        t          k    r| j        dk    s| S dt          d| j        j        d         z  ¦  «        z   dz  S )NrG   rg   r   )rK   rL   rU   r    r¤   r:   r1   s    r3   r>   zTR7.<locals>.fž  sN   € Ø”	ð 	˜bœgœl­cÒ1Ð1°b´fÀ²k°kØˆIØ•C˜˜"œ'œ, qœ/Ñ)Ñ*Ô*Ñ*¨AÑ-Ð-r5   r   r?   s     r3   ÚTR7r¹   Ž  s#   € ð .ð .ð .õ
 �R˜ÑÔÐr5   Tc                 ó.   ‡— ˆfd„}t          | |¦  «        S )aq  Converting products of ``cos`` and/or ``sin`` to a sum or
    difference of ``cos`` and or ``sin`` terms.

    Examples
    ========

    >>> from sympy.simplify.fu import TR8
    >>> from sympy import cos, sin
    >>> TR8(cos(2)*cos(3))
    cos(5)/2 + cos(1)/2
    >>> TR8(cos(2)*sin(3))
    sin(5)/2 + sin(1)/2
    >>> TR8(sin(2)*sin(3))
    -cos(5)/2 + cos(1)/2
    c                 óD	  •— | j         s;| j        r2| j        j        t          t
          fv r| j        j        s| j        j        s| S ‰rÁd„ |  	                    ¦   «         D ¦   «         \  }}t          |d¬¦  «        }t          |d¬¦  «        }||k    s||k    rpt          ||z  ¦  «        } | j         rW| j        d         j        rEt          | j        ¦  «        dk    r-| j        d         j        rt!          |                      ¦   «         Ž } | S t          g t
          g d g i}t!          j        | ¦  «        D ]å}|j        t          t
          fv r4|t'          |¦  «                                      |j        d         ¦  «         ŒK|j        rx|j        j        rl|j        dk    ra|j        j        t          t
          fv rG|t'          |j        ¦  «                                      |j        j        d         g|j        z  ¦  «         ŒÊ|d                               |¦  «         Œæ|t                   }|t
                   }|r|s(t          |¦  «        dk    st          |¦  «        dk    s| S |d          }t/          t          |¦  «        t          |¦  «        ¦  «        }t1          |¦  «        D ]e}	|                     ¦   «         }
|                     ¦   «         }|                     t          |
|z   ¦  «        t          |
|z
  ¦  «        z   dz  ¦  «         Œft          |¦  «        dk    rv|                     ¦   «         }
|                     ¦   «         }|                     t	          |
|z   ¦  «        t	          |
|z
  ¦  «        z   dz  ¦  «         t          |¦  «        dk    °v|r4|                     t	          |                     ¦   «         ¦  «        ¦  «         t          |¦  «        dk    rw|                     ¦   «         }
|                     ¦   «         }|                     t	          |
|z   ¦  «         t	          |
|z
  ¦  «        z   dz  ¦  «         t          |¦  «        dk    °w|r4|                     t          |                     ¦   «         ¦  «        ¦  «         t          t5          t!          |Ž ¦  «        ¦  «        S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r]   r   ©rM   rn   s     r3   ra   z"TR8.<locals>.f.<locals>.<listcomp>À  s   € Ð?Ð?Ð? a•J˜q‘M”MÐ?Ð?Ð?r5   F©Úfirstr   rG   rg   )ry   rK   rL   rU   r    r!   r¤   rS   rT   rz   ÚTR8r	   r:   r�   rW   rV   r   Úas_coeff_MulrQ   r‰   rh   Ú
is_IntegerÚextendÚminÚranger_   r   )r2   r`   rd   ÚnewnÚnewdr:   r=   ÚcÚsrn   r�   Úa2r¿   s               €r3   r>   zTR8.<locals>.f·  s  ø€ àŒIð	àŒIð	ð ŒGŒL�S¥#˜JÐ&Ð&ØŒVÔð 'Ø"$¤'Ô"5ð 'àˆIàð 		Ø?Ð?¨2×+<Ò+<Ñ+>Ô+>Ð?Ñ?Ô?‰DˆAˆqÝ�q Ð&Ñ&Ô&ˆDÝ�q Ð&Ñ&Ô&ˆDØ�qŠyˆy˜D AšI˜IÝ˜t D™yÑ)Ô)�Ø”9ð 1 ¤¨¤Ô!7ð 1Ý˜BœG™œ¨Ò)Ð)¨b¬g°a¬jÔ.?Ð)Ý˜bŸošoÑ/Ô/Ð0�BØˆIå�R�˜b $¨Ð+ˆÝ”˜rÑ"Ô"ð 		%ð 		%ˆAØŒv�#�s˜Ð#Ð#Ø•T˜!‘W”W”×$Ò$ Q¤V¨A¤YÑ/Ô/Ð/Ð/Ø”(ð %˜qœuÔ/ð %°A´E¸A²I°IØ”F”K¥C­ :Ð-Ð-ð •T˜!œ&‘\”\Ô"×)Ò)¨1¬6¬;°q¬>Ð*:¸1¼5Ñ*@ÑAÔAÐAÐAà�T”
×!Ò! !Ñ$Ô$Ð$Ð$Ø•ŒIˆØ•ŒIˆØð 	�að 	�3˜q™6œ6 Aš:˜:­¨Q©¬°!ª¨ØˆIà�DŒzˆÝ•�A‘”�˜A™œÑÔˆÝ�q‘”ð 	9ð 	9ˆAØ—’‘”ˆBØ—’‘”ˆBØ�KŠK�˜R "™W™œ­¨B°©G©¬Ñ4°aÑ7Ñ8Ô8Ð8Ð8Ý�!‰fŒf�qŠjˆjØ—’‘”ˆBØ—’‘”ˆBØ�KŠK�˜R "™W™œ­¨B°©G©¬Ñ4°aÑ7Ñ8Ô8Ð8õ �!‰fŒf�qŠjˆjð ð 	&Ø�KŠK�˜AŸEšE™GœG™œÑ%Ô%Ð%Ý�!‰fŒf�qŠjˆjØ—’‘”ˆBØ—’‘”ˆBØ�KŠK�#˜b 2™g™,œ,˜­¨R°"©W©¬Ñ5°qÑ8Ñ9Ô9Ð9õ �!‰fŒf�qŠjˆjð ð 	&Ø�KŠK�˜AŸEšE™GœG™œÑ%Ô%Ð%Ý•:�c 4˜jÑ)Ô)Ñ*Ô*Ð*r5   r   ©r2   r¿   r>   s    ` r3   rÀ   rÀ   ¦  s/   ø€ ð"5+ð 5+ð 5+ð 5+ð 5+õn �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )ac  Sum of ``cos`` or ``sin`` terms as a product of ``cos`` or ``sin``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR9
    >>> from sympy import cos, sin
    >>> TR9(cos(1) + cos(2))
    2*cos(1/2)*cos(3/2)
    >>> TR9(cos(1) + 2*sin(1) + 2*sin(2))
    cos(1) + 4*sin(3/2)*cos(1/2)

    If no change is made by TR9, no re-arrangement of the
    expression will be made. For example, though factoring
    of common term is attempted, if the factored expression
    was not changed, the original expression will be returned:

    >>> TR9(cos(3) + cos(3)*cos(2))
    cos(3) + cos(2)*cos(3)

    c                 óB   ‡— | j         s| S dˆfd„	Št          | ‰¦  «        S )NTc                 óÐ  •— | j         s| S t          t          | j        ¦  «        ¦  «        }t	          |¦  «        dk    r§d}t          t	          |¦  «        ¦  «        D ]_}||         }|€Œt          |dz   t	          |¦  «        ¦  «        D ]1}||         }|€Œ||z   } ‰|¦  «        }	|	|k    r|	||<   d ||<   d} nŒ2Œ`|r%t          d„ |D ¦   «         Ž } | j         r ‰| ¦  «        } | S t          |Ž }
|
s| S |
\  }}}}}}|ru||k    r4||z  dz  t          ||z   dz  ¦  «        z  t          ||z
  dz  ¦  «        z  S |dk     r||}}d|z  t          ||z   dz  ¦  «        z  t          ||z
  dz  ¦  «        z  S ||k    r4||z  dz  t          ||z   dz  ¦  «        z  t          ||z
  dz  ¦  «        z  S |dk     r||}}d|z  t          ||z   dz  ¦  «        z  t          ||z
  dz  ¦  «        z  S )NrG   Frg   Tc                 ó   — g | ]}|¯|‘ŒS r]   r]   ©rM   r«   s     r3   ra   z.TR9.<locals>.f.<locals>.do.<locals>.<listcomp>0  ó   € Ð7Ð7Ð7 b°BÐ7˜rÐ7Ð7Ð7r5   r   éþÿÿÿ©
rV   r|   r   r:   rW   rÅ   r   Ú
trig_splitr    r!   )r2   r¿   r:   Úhitrn   rN   ÚjÚajÚwasÚnewÚsplitÚgcdÚn1Ún2r=   ru   ÚiscosÚdos                    €r3   rß   zTR9.<locals>.f.<locals>.do  sT  ø€ ð ”9ð Ø�	å� ¤Ñ(Ô(Ñ)Ô)ˆDÝ�4‰yŒy˜AŠ~ˆ~Ø�Ý�s 4™yœyÑ)Ô)ð "ð "�AØ˜aœ�BØ�zØ Ý" 1 q¡5­#¨d©)¬)Ñ4Ô4ð 
"ð 
"˜Ø! !œW˜Ø˜:Ø$Ø  2™g˜Ø ˜b ™gœg˜Ø #š:˜:Ø&)˜D ™GØ&*˜D ™GØ"&˜CØ!˜Eð	 &øð
 ð $ÝÐ7Ð7¨DÐ7Ñ7Ô7Ð8�BØ”yð $Ø˜R ™VœV˜à�	õ  Ð%ˆEØð Ø�	Ø',Ñ$ˆC��R˜˜A˜uð ð ;Ø˜’8�8Ø˜r™6 !™8¥C¨¨Q©°©	¡N¤NÑ2µ3¸¸A¹¸q±y±>´>ÑAÐAØ˜’6�6Ø˜a�q�AØ˜#‘v�c 1 q¡5¨!¡)™nœnÑ,­S°!°a±%¸±©^¬^Ñ;Ð;à˜’8�8Ø˜r™6 !™8¥C¨¨Q©°©	¡N¤NÑ2µ3¸¸A¹¸q±y±>´>ÑAÐAØ˜’6�6Ø˜a�q�AØ˜‘u�S ! a¡%¨¡™^œ^Ñ+­C°°Q±¸±	©N¬NÑ:Ð:r5   ©T)rV   Úprocess_common_addends)r2   rß   s    @r3   r>   zTR9.<locals>.f  sC   ø€ ØŒyð 	ØˆIð<	;ð <	;ð <	;ð <	;ð <	;ð <	;õ| & b¨"Ñ-Ô-Ð-r5   r   r?   s     r3   ÚTR9râ   ñ  s'   € ð.B.ð B.ð B.õH �R˜ÑÔÐr5   c                 ó.   ‡— ˆfd„}t          | |¦  «        S )a§  Separate sums in ``cos`` and ``sin``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR10
    >>> from sympy.abc import a, b, c
    >>> from sympy import cos, sin
    >>> TR10(cos(a + b))
    -sin(a)*sin(b) + cos(a)*cos(b)
    >>> TR10(sin(a + b))
    sin(a)*cos(b) + sin(b)*cos(a)
    >>> TR10(sin(a + b + c))
    (-sin(a)*sin(b) + cos(a)*cos(b))*sin(c) +     (sin(a)*cos(b) + sin(b)*cos(a))*cos(c)
    c                 óØ  •— | j         t          t          fvr| S | j         }| j        d         }|j        �rµ‰r"t          t          |j        ¦  «        ¦  «        }nt          |j        ¦  «        }|                     ¦   «         }t          j	        |¦  «        }|j        rÅ|t          k    r]t          |¦  «        t          t          |¦  «        d¬¦  «        z  t          |¦  «        t          t          |¦  «        d¬¦  «        z  z   S t          |¦  «        t          t          |¦  «        d¬¦  «        z  t          |¦  «        t          t          |¦  «        d¬¦  «        z  z
  S |t          k    r?t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z   S t          |¦  «        t          |¦  «        z  t          |¦  «        t          |¦  «        z  z
  S | S )Nr   Fr¾   )rU   r    r!   r:   rV   r|   r   r_   r   Ú
_from_argsÚTR10)r2   r>   Úargr:   r=   ru   r¿   s         €r3   r>   zTR10.<locals>.fa  s’  ø€ ØŒ7�3¥˜*Ð$Ð$ØˆIàŒGˆØŒg�aŒjˆØŒ:ñ 	9Øð &Ý�G C¤HÑ-Ô-Ñ.Ô.��å˜CœH‘~”~�Ø—’‘
”
ˆAÝ”˜tÑ$Ô$ˆAØŒxð 9Ø�’8�8Ý˜q™6œ6¥$¥s¨1¡v¤v°UÐ";Ñ";Ô";Ñ;Ý˜A™œ�t¥C¨¡F¤F°%Ð8Ñ8Ô8Ñ8ñ9ð 9õ ˜q™6œ6¥$¥s¨1¡v¤v°UÐ";Ñ";Ô";Ñ;Ý˜A™œ�t¥C¨¡F¤F°%Ð8Ñ8Ô8Ñ8ñ9ð 9ð �’8�8Ý˜q™6œ6¥# a¡&¤&™=­3¨q©6¬6µ#°a±&´&©=Ñ8Ð8å˜q™6œ6¥# a¡&¤&™=­3¨q©6¬6µ#°a±&´&©=Ñ8Ð8Øˆ	r5   r   rË   s    ` r3   ræ   ræ   O  s.   ø€ ð$ð ð ð ð õ6 �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )aŽ  Sum of products to function of sum.

    Examples
    ========

    >>> from sympy.simplify.fu import TR10i
    >>> from sympy import cos, sin, sqrt
    >>> from sympy.abc import x

    >>> TR10i(cos(1)*cos(3) + sin(1)*sin(3))
    cos(2)
    >>> TR10i(cos(1)*sin(3) + sin(1)*cos(3) + cos(3))
    cos(3) + sin(4)
    >>> TR10i(sqrt(2)*cos(x)*x + sqrt(6)*sin(x)*x)
    2*sqrt(2)*x*sin(x + pi/6)

    c           	      ó  ‡— | j         s| S dˆfd„	Št          | ‰d„ ¦  «        } | j         �rÙt          t          ¦  «        }| j        D ]�}d}|j        rO|j        D ]G}|j        r>|j        t          j	        u r+|j
        j        r||                              |¦  «         d} nŒH|s%|t          j                                      |¦  «         Œ‚g }|D ]ø}t          ¦   «         |z  t          ¦   «         fD ]Ö}||v rÐt!          t#          ||         ¦  «        ¦  «        D ]­}||         |         €Œt!          t#          ||         ¦  «        ¦  «        D ]y}||         |         €Œt%          ||         |         ||         |         z   ¦  «        }	 ‰|	¦  «        }
|
|	k    r-|                     |
¦  «         d ||         |<   d ||         |<    nŒzŒ®Œ×Œù|r)t%          |d„ |                     ¦   «         D ¦   «         z   Ž } n ‰| ¦  «        } n| j         �°Ù| S )NTc                 óÖ  •— | j         s| S t          t          | j        ¦  «        ¦  «        }t	          |¦  «        dk    r§d}t          t	          |¦  «        ¦  «        D ]_}||         }|€Œt          |dz   t	          |¦  «        ¦  «        D ]1}||         }|€Œ||z   } ‰|¦  «        }	|	|k    r|	||<   d ||<   d} nŒ2Œ`|r%t          d„ |D ¦   «         Ž } | j         r ‰| ¦  «        } | S t          |ddiŽ}
|
s| S |
\  }}}}}}|r5||z  }||k    r|t          ||z
  ¦  «        z  S |t          ||z   ¦  «        z  S ||z  }||k    r|t          ||z   ¦  «        z  S |t          ||z
  ¦  «        z  S )NrG   Frg   Tc                 ó   — g | ]}|¯|‘ŒS r]   r]   rÐ   s     r3   ra   z0TR10i.<locals>.f.<locals>.do.<locals>.<listcomp>µ  rÑ   r5   ÚtworÓ   )r2   r¿   r:   rÕ   rn   rN   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   r=   ru   Úsamerß   s                    €r3   rß   zTR10i.<locals>.f.<locals>.do•  sÒ  ø€ ð ”9ð Ø�	å� ¤Ñ(Ô(Ñ)Ô)ˆDÝ�4‰yŒy˜AŠ~ˆ~Ø�Ý�s 4™yœyÑ)Ô)ð "ð "�AØ˜aœ�BØ�zØ Ý" 1 q¡5­#¨d©)¬)Ñ4Ô4ð 
"ð 
"˜Ø! !œW˜Ø˜:Ø$Ø  2™g˜Ø ˜b ™gœg˜Ø #š:˜:Ø&)˜D ™GØ&*˜D ™GØ"&˜CØ!˜Eð	 &øð
 ð $ÝÐ7Ð7¨DÐ7Ñ7Ô7Ð8�BØ”yð $Ø˜R ™VœV˜à�	õ  Ð/¨$Ð/Ð/ˆEØð Ø�	Ø&+Ñ#ˆC��R˜˜A˜tð ð 	&Ø˜‘f�Ø˜’8�8Ø�s 1 q¡5™zœz™>Ð)Ø�3˜q 1™u™:œ:‘~Ð%à˜‘f�Ø˜’8�8Ø�s 1 q¡5™zœz™>Ð)Ø�3˜q 1™u™:œ:‘~Ð%r5   c                 óD   — t          t          | j        ¦  «        ¦  «        S rJ   )Útupler   Úfree_symbolsrŒ   s    r3   rŽ   z"TR10i.<locals>.f.<locals>.<lambda>Î  s   € �e¥G¨A¬NÑ$;Ô$;Ñ<Ô<€ r5   r   rg   c                 ó4   — g | ]}t          d „ |D ¦   «         Ž ‘ŒS )c                 ó   — g | ]}|¯|‘ŒS r]   r]   rÐ   s     r3   ra   z/TR10i.<locals>.f.<locals>.<listcomp>.<listcomp>ô  s   € Ð(>Ð(>Ð(>°¸2Ð(>¨Ð(>Ð(>Ð(>r5   r   )rM   ro   s     r3   ra   z$TR10i.<locals>.f.<locals>.<listcomp>ô  s<   € ð #-ð #-ð #-Øõ $'Ð(>Ð(>°aÐ(>Ñ(>Ô(>Ð#?ð #-ð #-ð #-r5   rà   )rV   rá   r   r|   r:   ry   rK   r¤   r   ÚHalfrL   rÂ   rh   r;   Ú_ROOT3Ú	_invROOT3rÅ   rW   r   Úvalues)r2   Úbyradr=   rÕ   rN   r:   ru   rn   rÖ   rØ   rÙ   rß   s              @r3   r>   zTR10i.<locals>.f‘  s‚  ø€ ØŒyð 	ØˆIð6	&ð 6	&ð 6	&ð 6	&ð 6	&ð 6	&õp $Ø�Ð<Ð<ñ>ô >ˆð
 Œiñ &	Ý¥Ñ%Ô%ˆEØ”Wð 
+ð 
+�Ø�Ø”8ð "Øœfð "ð "˜Øœ9ð "¨¬µ1´6Ð)9Ð)9Ø "¤Ô 2ð *:à! "œI×,Ò,¨QÑ/Ô/Ð/Ø"#˜CØ!˜EøØð +Ø�!œ%”L×'Ò'¨Ñ*Ô*Ð*øð ˆDØð *ð *�Ý ™(œ( 1™*¥i¡k¤kÐ2ð *ð *�AØ˜E�z�zÝ!&¥s¨5°¬8¡}¤}Ñ!5Ô!5ð *ð *˜AØ$ Qœx¨œ{Ð2Ø (Ý%*­3¨u°Q¬x©=¬=Ñ%9Ô%9ð 	*ð 	* Ø#(¨¤8¨A¤;Ð#6Ø$,Ý&)¨%°¬(°1¬+¸¸a¼À¼Ñ*CÑ&DÔ&D Ø&( b¨¡g¤g Ø#&¨#¢: :Ø$(§K¢K°Ñ$4Ô$4Ð$4Ø26 E¨!¤H¨Q¡KØ26 E¨!¤H¨Q¡KØ$) Eð	 $.øøð*ð ð Ý˜4ð #-ð #-Ø"Ÿ\š\™^œ^ð#-ñ #-ô #-ñ -ð /��ð �R˜‘V”V�ØðM Œiñ &	ðP ˆ	r5   r   r?   s     r3   ÚTR10irø     s'   € ð$ið ið iõV �R˜ÑÔÐr5   Nc                 ó.   ‡— ˆfd„}t          | |¦  «        S )an  Function of double angle to product. The ``base`` argument can be used
    to indicate what is the un-doubled argument, e.g. if 3*pi/7 is the base
    then cosine and sine functions with argument 6*pi/7 will be replaced.

    Examples
    ========

    >>> from sympy.simplify.fu import TR11
    >>> from sympy import cos, sin, pi
    >>> from sympy.abc import x
    >>> TR11(sin(2*x))
    2*sin(x)*cos(x)
    >>> TR11(cos(2*x))
    -sin(x)**2 + cos(x)**2
    >>> TR11(sin(4*x))
    4*(-sin(x)**2 + cos(x)**2)*sin(x)*cos(x)
    >>> TR11(sin(4*x/3))
    4*(-sin(x/3)**2 + cos(x/3)**2)*sin(x/3)*cos(x/3)

    If the arguments are simply integers, no change is made
    unless a base is provided:

    >>> TR11(cos(2))
    cos(2)
    >>> TR11(cos(4), 2)
    -sin(2)**2 + cos(2)**2

    There is a subtle issue here in that autosimplification will convert
    some higher angles to lower angles

    >>> cos(6*pi/7) + cos(3*pi/7)
    -cos(pi/7) + cos(3*pi/7)

    The 6*pi/7 angle is now pi/7 but can be targeted with TR11 by supplying
    the 3*pi/7 base:

    >>> TR11(_, 3*pi/7)
    -sin(3*pi/7)**2 + cos(3*pi/7)**2 + cos(3*pi/7)

    c                 ó  •— | j         t          t          fvr| S ‰r´| j         } |‰dz  ¦  «        }t          j        }|j        r|                     ¦   «         \  }}|j         t          t          fvr| S | j        d         |j        d         k    r@t          ‰¦  «        }t          ‰¦  «        }|t          u r|dz  |dz  z
  |z  S d|z  |z  |z  S | S | j        d         j        s£| j        d                              d¬¦  «        \  }}|j	        dz  dk    rq|j	        dz  |z  |j
        z  }t          t          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }| j         t          k    r	d|z  |z  } n|dz  |dz  z
  } | S )NrG   r   T)Úrational)rU   r    r!   r   r;   ry   rÁ   r:   Ú	is_Numberr¦   rž   ÚTR11)	r2   r>   r€   ÚcorÈ   rÉ   Úmrç   rL   s	           €r3   r>   zTR11.<locals>.f)  s  ø€ ØŒ7�3¥˜*Ð$Ð$ØˆIàð 	%Ø”ˆAØ��$�q‘&‘	”	ˆAÝ”ˆBØŒxð )ØŸšÑ(Ô(‘��AØŒv�c¥3˜ZÐ'Ð'Ø�	ØŒw�qŒz˜QœV AœYÒ&Ð&Ý˜‘I”I�Ý˜‘I”I�Ø��8�8Ø˜q™D 1 a¡4™K¨Ñ+Ð+à˜Q™3˜q™5 ™8�OØˆIà”˜”Ô%ð 	%ð ”7˜1”:×*Ò*°DÐ*Ñ9Ô9‰DˆAˆqØŒs�Q‰w˜!Š|ˆ|Ø”c˜1‘f˜Q‘h˜qœs‘l�Ý�˜S™œ‘N”N�Ý�˜S™œ‘N”N�Ø”7�c’>�>Ø˜1™˜Q™�B�Bà˜A™  1¡™�BØˆ	r5   r   )r2   rL   r>   s    ` r3   rý   rý   ÿ  s0   ø€ ðT!ð !ð !ð !ð !õF �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )aî  
    Helper for TR11 to find half-arguments for sin in factors of
    num/den that appear in cos or sin factors in the den/num.

    Examples
    ========

    >>> from sympy.simplify.fu import TR11, _TR11
    >>> from sympy import cos, sin
    >>> from sympy.abc import x
    >>> TR11(sin(x/3)/(cos(x/6)))
    sin(x/3)/cos(x/6)
    >>> _TR11(sin(x/3)/(cos(x/6)))
    2*sin(x/6)
    >>> TR11(sin(x/6)/(sin(x/3)))
    sin(x/6)/sin(x/3)
    >>> _TR11(sin(x/6)/(sin(x/3)))
    1/(2*cos(x/6))

    c                 ó¾   — t          | t          ¦  «        s| S d„ }t          ||                      ¦   «         ¦  «        \  }}d„ } || ||¦  «        }  || ||¦  «        } | S )Nc                 ó4  — t          t          ¦  «        }t          j        | ¦  «        D ]n}|                     ¦   «         \  }}|j        rN|dk    rH|j        t          t          fv r3|t          |¦  «                  
                    |j        d         ¦  «         Œo|S r8   )r   Úsetr   rQ   Úas_base_exprÂ   rU   r    r!   r‰   Úaddr:   )Úflatr:   Úfiru   rY   s        r3   Úsincos_argsz%_TR11.<locals>.f.<locals>.sincos_argsh  sŠ   € õ �sÑ#Ô#ˆDÝ”m DÑ)Ô)ð 5ð 5�Ø—~’~Ñ'Ô'‘��1Ø”<ð 5 A¨¢E EØ”v¥#¥s Ð+Ð+Ø�T !™WœWœ×)Ò)¨!¬&°¬)Ñ4Ô4Ð4øØˆKr5   c                 óä   — |t                    D ]a}|dz  }||t                   v rt          }n||t                    v rt           }nŒ6t          | |¦  «        } ||                              |¦  «         Œb| S ©NrG   )r!   r    rý   Úremove)r2   Únum_argsÚden_argsÚnargrZ   rU   s         r3   Úhandle_matchz&_TR11.<locals>.f.<locals>.handle_matcht  s|   € ð !¥œð 	,ð 	,�Ø˜A‘v�Ø˜8¥Cœ=Ð(Ð(Ý�D�DØ˜X¥cœ]Ð*Ð*Ý�D�DàÝ˜"˜d‘^”^�Ø˜”×%Ò% dÑ+Ô+Ð+Ð+ØˆIr5   )r9   r   Úmaprz   )r2   r  r  r  r  s        r3   r>   z_TR11.<locals>.fd  s†   € Ý˜"�dÑ#Ô#ð 	ØˆIð
	ð 
	ð 
	õ ! ¨b×.?Ò.?Ñ.AÔ.AÑBÔBÑˆ�(ð	ð 	ð 	ð  ˆ\˜"˜h¨Ñ1Ô1ˆàˆ\˜"˜h¨Ñ1Ô1ˆØˆ	r5   r   r?   s     r3   Ú_TR11r  O  s$   € ð*#ð #ð #õJ �R˜ÑÔÐr5   c                 ó.   ‡— ˆfd„}t          | |¦  «        S )zêSeparate sums in ``tan``.

    Examples
    ========

    >>> from sympy.abc import x, y
    >>> from sympy import tan
    >>> from sympy.simplify.fu import TR12
    >>> TR12(tan(x + y))
    (tan(x) + tan(y))/(-tan(x)*tan(y) + 1)
    c                 óÎ  •— | j         t          k    s| S | j        d         }|j        r½‰r"t	          t          |j        ¦  «        ¦  «        }nt	          |j        ¦  «        }|                     ¦   «         }t          j        |¦  «        }|j        rt          t          |¦  «        d¬¦  «        }nt          |¦  «        }t          |¦  «        |z   dt          |¦  «        |z  z
  z  S | S )Nr   Fr¾   rg   )
rU   r"   r:   rV   r|   r   r_   r   rå   ÚTR12)r2   rç   r:   r=   ru   Útbr¿   s         €r3   r>   zTR12.<locals>.f™  sÉ   ø€ ØŒw�#Š~ˆ~ØˆIàŒg�aŒjˆØŒ:ð 	1Øð &Ý�G C¤HÑ-Ô-Ñ.Ô.��å˜CœH‘~”~�Ø—’‘
”
ˆAÝ”˜tÑ$Ô$ˆAØŒxð Ý�#˜a™&œ&¨Ð.Ñ.Ô.��å˜‘V”V�Ý˜‘F”F˜R‘K !¥c¨!¡f¤f¨R¡i¡-Ñ0Ð0Øˆ	r5   r   rË   s    ` r3   r  r  Œ  s.   ø€ ðð ð ð ð õ& �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )aK  Combine tan arguments as
    (tan(y) + tan(x))/(tan(x)*tan(y) - 1) -> -tan(x + y).

    Examples
    ========

    >>> from sympy.simplify.fu import TR12i
    >>> from sympy import tan
    >>> from sympy.abc import a, b, c
    >>> ta, tb, tc = [tan(i) for i in (a, b, c)]
    >>> TR12i((ta + tb)/(-ta*tb + 1))
    tan(a + b)
    >>> TR12i((ta + tb)/(ta*tb - 1))
    -tan(a + b)
    >>> TR12i((-ta - tb)/(ta*tb - 1))
    tan(a + b)
    >>> eq = (ta + tb)/(-ta*tb + 1)**2*(-3*ta - 3*tc)/(2*(ta*tc - 1))
    >>> TR12i(eq.expand())
    -3*tan(a + b)*tan(a + c)/(2*(tan(a) + tan(b) - 1))
    c                 ó\  — | j         s| j        s	| j        s| S |                      ¦   «         \  }}|j        r|j        s| S i }d„ }t          t          j        |¦  «        ¦  «        }t          |¦  «        D �]1\  }} ||¦  «        }|r2|\  }	}
t          d„ |
j        D ¦   «         Ž }t          j        ||<   |	||<   ŒE|j         r@t          |¦  «        }|j        r)|                     |j        ¦  «         t          j        ||<   ŒŒ|j        rž|j        j        s|j        j        r† ||j        ¦  «        }|r5|\  }	}
t          d„ |
j        D ¦   «         Ž }|j        ||<   |	|j        z  ||<   Œòt          |¦  «        }|j        r)|                     |j        ¦  «         t          j        ||<   �Œ3|s| S d„ }t          t          j        t%          |¦  «        ¦  «        ¦  «        }d}t          |¦  «        D �]‚\  }} ||¦  «        }|sç || ¦  «        }|rt          j        ||<   nØ|j         r@t          |¦  «        }|j        r)|                     |j        ¦  «         t          j        ||<   Œx|j        rz|j        j        s|j        j        rb ||j        ¦  «        }|rt          j        ||<   nPt          |¦  «        }|j        r)|                     |j        ¦  «         t          j        ||<   ŒùŒút          j        ||<   d}t          d„ |D ¦   «         Ž }||         }|                     t          j        ¦  «        }|�|r|||<   n|                     |¦  «         ||xx         t-          |¦  «         z  cc<   �Œ„|r9t          |Ž t          |Ž z  t          d„ |                     ¦   «         D ¦   «         Ž z  } | S )	Nc                 óâ   — t          | ¦  «        }|rU|\  }}}|t          j        u rC|j        r>t	          |j        ¦  «        dk    r(t          d„ |j        D ¦   «         ¦  «        r||fS d S d S d S d S d S )NrG   c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rJ   )r9   r"   )rM   r  s     r3   rO   z/TR12i.<locals>.f.<locals>.ok.<locals>.<genexpr>Ó  s,   è è € ÐAÐA°B�J r­3Ñ/Ô/ÐAÐAÐAÐAÐAÐAr5   )Úas_f_sign_1r   ÚNegativeOnery   rW   r:   Úall)Údirÿ   r§   r>   rÉ   s        r3   r[   zTR12i.<locals>.f.<locals>.okÎ  s“   € Ý˜B‘”ˆAØð  Ø‘��1�aØ�œÐ%Ð%¨!¬(Ð%µs¸1¼6±{´{ÀaÒ7GÐ7GÝÐAÐA¸!¼&ÐAÑAÔAÑAÔAð 8Hà˜a˜4�Kð	 ð  à%Ð%Ð%Ð%Ð7GÐ7GÐ7GÐ7Gr5   c                 ó(   — g | ]}|j         d          ‘ŒS ©r   ©r:   ©rM   Ú_s     r3   ra   z$TR12i.<locals>.f.<locals>.<listcomp>Û  s   € Ð4Ð4Ð4¨˜!œ& œ)Ð4Ð4Ð4r5   c                 ó(   — g | ]}|j         d          ‘ŒS r  r   r!  s     r3   ra   z$TR12i.<locals>.f.<locals>.<listcomp>è  s   € Ð8Ð8Ð8¨A˜aœf QœiÐ8Ð8Ð8r5   c                 óÀ   — | j         rPt          | j        ¦  «        dk    r:| j        \  }}t          |t          ¦  «        rt          |t          ¦  «        r
||fS d S d S d S d S r
  )rV   rW   r:   r9   r"   )Únir=   ru   s      r3   r[   zTR12i.<locals>.f.<locals>.okó  sy   € ØŒyð  �S ¤™\œ\¨QÒ.Ð.Ø”w‘��1Ý˜a¥Ñ%Ô%ð  ­*°Q½Ñ*<Ô*<ð  Ø˜a˜4�Kð ð  Ð.Ð.ð ð  ð  ð  r5   FTc                 ó(   — g | ]}|j         d          ‘ŒS r  r   r!  s     r3   ra   z$TR12i.<locals>.f.<locals>.<listcomp>  s   € Ð+Ð+Ð+ A�a”f˜Q”iÐ+Ð+Ð+r5   c                 óP   — g | ]#\  }}t          d „ |j        D ¦   «         Ž dz
  |z  ‘Œ$S )c                 ó,   — g | ]}t          |¦  «        ‘ŒS r]   )r"   rR   s     r3   ra   z/TR12i.<locals>.f.<locals>.<listcomp>.<listcomp>"  s+   € ð 8(ð 8(ð 8(Ø•�A‘”ð8(ð 8(ð 8(r5   rg   )r   r:   )rM   rn   rY   s      r3   ra   z$TR12i.<locals>.f.<locals>.<listcomp>"  se   € ð 1Jð 1Jð 1JÙ59°Q¸õ 36ð 8(ð 8(Ø !¤ð8(ñ 8(ô 8(ð 3)Ø+,ñ3-Ø/0ñ21ð 1Jð 1Jð 1Jr5   )rV   ry   rK   rz   r:   r|   r   rQ   ri   r   r   r;   r)   rÃ   r¤   rS   rL   rT   r
   r  Úextract_additivelyr_   r"   r~   )r2   r`   rd   Údokr[   Úd_argsrn   r  rÿ   r§   r€   rÉ   Ún_argsrÕ   r%  ÚedÚneweds                    r3   r>   zTR12i.<locals>.fÄ  s  € Ø”	ð 	˜RœYð 	¨"¬)ð 	ØˆIà× Ò Ñ"Ô"‰ˆˆ1ØŒvð 	˜QœVð 	ØˆIàˆð	 ð 	 ð 	 õ •c”m AÑ&Ô&Ñ'Ô'ˆÝ˜vÑ&Ô&ð 	*ñ 	*‰EˆAˆrØ��2‘”ˆAØð Ø‘��1ÝÐ4Ð4¨Q¬VÐ4Ñ4Ô4Ð5�Ýœ��A‘Ø��q‘	ØØŒyð *Ý˜B‘Z”Z�Ø”9ð &Ø—M’M "¤'Ñ*Ô*Ð*Ý !¤�F˜1‘IøØ”ð * ¤Ô 1ð *°R´WÔ5Hð *Ø�B�r”w‘K”K�Øð 	*Ø‘D�A�qÝÐ8Ð8°´Ð8Ñ8Ô8Ð9�AØœV�C˜‘FØ ! 2¤6¡	�F˜1‘I�Iå ™œ�BØ”yð *ØŸš b¤gÑ.Ô.Ð.Ý$%¤E˜˜q™	ùØð 	ØˆIð	 ð 	 ð 	 õ
 •c”m¥L°¡O¤OÑ4Ô4Ñ5Ô5ˆØˆÝ˜vÑ&Ô&ð %	!ñ %	!‰EˆAˆrØ��2‘”ˆAØð "Ø�B˜�s‘G”G�Øð !Ý !¤�F˜1‘I�Ià”yð !Ý# B™ZœZ˜Øœ9ð .Ø"ŸMšM¨"¬'Ñ2Ô2Ð2Ý()¬˜F 1™IØ Øœð !ØœFÔ-ð!Ø13´Ô1Dð!à˜B˜rœw™KœK˜Øð %Ý()¬˜F 1™I˜Iå!'¨¡¤˜BØ!œyð 2Ø &§¢¨b¬gÑ 6Ô 6Ð 6Ý,-¬E  q¡	Ø$à åœE��q‘	ØˆCÝÐ+Ð+¨Ð+Ñ+Ô+Ð,ˆAØ�Q”ˆBØ×)Ò)­!¬%Ñ0Ô0ˆEØÐ Øð Ø"�C˜‘F�Fà—G’G˜A‘J”J�JØ�1ˆIˆIŒI�#˜a™&œ&˜Ñ ˆIˆI‰I‰Iàð 	KÝ�f��c 6˜lÑ*­3ð 1Jð 1JØ=@¿YºY¹[¼[ð1Jñ 1Jô 1Jð ,Kñ KˆBð ˆ	r5   r   r?   s     r3   ÚTR12ir/  ¯  s'   € ð*að að aõF �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )a  Change products of ``tan`` or ``cot``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR13
    >>> from sympy import tan, cot
    >>> TR13(tan(3)*tan(2))
    -tan(2)/tan(5) - tan(3)/tan(5) + 1
    >>> TR13(cot(3)*cot(2))
    cot(2)*cot(5) + 1 + cot(3)*cot(5)
    c           	      óP  — | j         s| S t          g t          g d g i}t          j        | ¦  «        D ]f}|j        t          t          fv r4|t          |¦  «                                      |j        d         ¦  «         ŒK|d                               |¦  «         Œg|t                   }|t                   }t          |¦  «        dk     rt          |¦  «        dk     r| S |d          }t          |¦  «        dk    r–| 
                    ¦   «         }| 
                    ¦   «         }|                     dt          |¦  «        t          ||z   ¦  «        z  t          |¦  «        t          ||z   ¦  «        z  z   z
  ¦  «         t          |¦  «        dk    °–|r4|                     t          | 
                    ¦   «         ¦  «        ¦  «         t          |¦  «        dk    r–| 
                    ¦   «         }| 
                    ¦   «         }|                     dt          |¦  «        t          ||z   ¦  «        z  z   t          |¦  «        t          ||z   ¦  «        z  z   ¦  «         t          |¦  «        dk    °–|r4|                     t          | 
                    ¦   «         ¦  «        ¦  «         t          |Ž S )Nr   rG   rg   )ry   r"   r#   r   rQ   rU   r‰   rh   r:   rW   r_   )r2   r:   r=   r€   rÈ   Út1Út2s          r3   r>   zTR13.<locals>.f8  s,  € ØŒyð 	ØˆIõ �R�˜b $¨Ð+ˆÝ”˜rÑ"Ô"ð 	%ð 	%ˆAØŒv�#�s˜Ð#Ð#Ø•T˜!‘W”W”×$Ò$ Q¤V¨A¤YÑ/Ô/Ð/Ð/à�T”
×!Ò! !Ñ$Ô$Ð$Ð$Ø•ŒIˆØ•ŒIˆÝˆq‰6Œ6�AŠ:ˆ:�#˜a™&œ& 1š*˜*ØˆIØ�DŒzˆÝ�!‰fŒf�qŠjˆjØ—’‘”ˆBØ—’‘”ˆBØ�KŠK˜�S ™WœW¥S¨¨b©¡\¤\Ñ1µC¸±G´G½CÀÀRÁ¹L¼LÑ4HÑHÑIÑJÔJÐJõ �!‰fŒf�qŠjˆjð ð 	&Ø�KŠK�˜AŸEšE™GœG™œÑ%Ô%Ð%Ý�!‰fŒf�qŠjˆjØ—’‘”ˆBØ—’‘”ˆBØ�KŠK˜�C ™GœG¥C¨¨R©¡L¤LÑ0Ñ0µ3°r±7´7½3¸rÀB¹w¹<¼<Ñ3GÑGÑHÔHÐHõ �!‰fŒf�qŠjˆjð ð 	&Ø�KŠK�˜AŸEšE™GœG™œÑ%Ô%Ð%Ý�DˆzÐr5   r   r?   s     r3   ÚTR13r4  *  s#   € ðð ð õ< �R˜ÑÔÐr5   c                 ó0   ‡— dˆfd„	Št          | ‰¦  «        S )a±  Returns cos(x)*cos(2*x)*...*cos(2**(k-1)*x) -> sin(2**k*x)/(2**k*sin(x))

    Examples
    ========

    >>> from sympy.simplify.fu import TRmorrie, TR8, TR3
    >>> from sympy.abc import x
    >>> from sympy import Mul, cos, pi
    >>> TRmorrie(cos(x)*cos(2*x))
    sin(4*x)/(4*sin(x))
    >>> TRmorrie(7*Mul(*[cos(x) for x in range(10)]))
    7*sin(12)*sin(16)*cos(5)*cos(7)*cos(9)/(64*sin(1)*sin(3))

    Sometimes autosimplification will cause a power to be
    not recognized. e.g. in the following, cos(4*pi/7) automatically
    simplifies to -cos(3*pi/7) so only 2 of the 3 terms are
    recognized:

    >>> TRmorrie(cos(pi/7)*cos(2*pi/7)*cos(4*pi/7))
    -sin(3*pi/7)*cos(3*pi/7)/(4*sin(pi/7))

    A touch by TR8 resolves the expression to a Rational

    >>> TR8(_)
    -1/8

    In this case, if eq is unsimplified, the answer is obtained
    directly:

    >>> eq = cos(pi/9)*cos(2*pi/9)*cos(3*pi/9)*cos(4*pi/9)
    >>> TRmorrie(eq)
    1/16

    But if angles are made canonical with TR3 then the answer
    is not simplified without further work:

    >>> TR3(eq)
    sin(pi/18)*cos(pi/9)*cos(2*pi/9)/2
    >>> TRmorrie(_)
    sin(pi/18)*sin(4*pi/9)/(8*sin(pi/9))
    >>> TR8(_)
    cos(7*pi/18)/(16*sin(pi/9))
    >>> TR3(_)
    1/16

    The original expression would have resolve to 1/16 directly with TR8,
    however:

    >>> TR8(eq)
    1/16

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Morrie%27s_law

    Tc                 ó`  •‡— | j         s| S |r0|                      ¦   «         \  }} ‰|d¦  «         ‰|d¦  «        z  S t          t          ¦  «        Ši }g }| j        D ]�}|                     ¦   «         \  }}|j        rXt          |t          ¦  «        rC|j        d          	                    ¦   «         \  }	}
‰|
          
                    |	¦  «         |||<   Œx| 
                    |¦  «         ŒŽg }‰D �] }
‰|
         }|                     ¦   «          |�r~d}|d         x}}||v r|dz  }|dz  }||v °|dk    �rt          d|z  |z  |
z  ¦  «        d|z  z  t          ||
z  ¦  «        z  }d }g }t          |¦  «        D ]N}|dz  }t          |
|z  d¬¦  «        }| 
                    |¦  «         t          ||         |p||         ¦  «        }ŒOt          |¦  «        D ]W}|                     ¦   «         }t          |
|z  d¬¦  «        }||xx         |z  cc<   ||         s|                     |¦  «         ŒX| 
                    ||z  ¦  «         nCt          |                     d¦  «        |
z  ¦  «        }| 
                    |||         z  ¦  «         |�°~�Œ¢|rt#          ||z   ˆfd„‰D ¦   «         z   Ž } | S )Nr   rg   rG   Frq   c                 óN   •— g | ]!}‰|         D ]}t          ||z  d ¬¦  «        ‘ŒŒ"S )Frq   )r    )rM   r=   rX   r:   s      €r3   ra   z'TRmorrie.<locals>.f.<locals>.<listcomp>È  sX   ø€ ð &Ið &Ið &IØ-.ÀÀQÄð&Ið &IØ;<•�A�a‘C %Ð(Ñ(Ô(ð&Ið &Ið &Ið &Ir5   )ry   rz   r   r|   r:   r  rÂ   r9   r    rÁ   rh   Úsortr!   rÅ   rÄ   r_   r  r   )r2   r¿   r`   rd   ÚcossÚotherrÈ   ru   rY   rþ   r=   rÙ   rX   ÚccÚciÚnewargÚtakeÚccsrn   Úkeyr:   r>   s                       @€r3   r>   zTRmorrie.<locals>.f”  s  øø€ ØŒyð 	ØˆIØð 	#Ø×$Ò$Ñ&Ô&‰DˆAˆqØ�1�Q˜‘7”7˜1˜1˜Q ™7œ7‘?Ð"å�4Ñ Ô ˆØˆØˆØ”ð 	 ð 	 ˆAØ—=’=‘?”?‰DˆAˆqØŒ|ð  ¥
¨1­cÑ 2Ô 2ð  Øœ˜qœ	×.Ò.Ñ0Ô0‘��AØ�Q”—’˜rÑ"Ô"Ð"Ø��Q‘�à—’˜Q‘”��àˆØð 	-ñ 	-ˆAØ�Q”ˆAØ�FŠF‰HŒHˆHØñ -Ø�Ø˜Aœ$���RØ˜A�g�gØ˜‘F�AØ˜!‘G�Bð ˜A�g�gð �q’5‘5Ý   A¡ b¡¨¡™^œ^¨A¨q©DÑ0µ°R¸±T±´Ñ:�Fà�DØ�CÝ" 1™XœXð Að A˜Ø˜a™˜Ý! ! B¡$°Ð7Ñ7Ô7˜ØŸ
š
 2™œ˜Ý" 4¨¤9¨dÐ.?°d¸3´iÑ@Ô@˜˜å" 1™XœXð )ð )˜Ø ŸWšW™YœY˜Ý! ! B¡$°Ð7Ñ7Ô7˜Ø˜S˜	˜	œ	 TÑ)˜	˜	™	Ø# Cœyð )ØŸHšH R™LœL˜LøØ—J’J˜v t™|Ñ,Ô,Ð,Ð,å˜AŸEšE !™HœH Q™J™œ�AØ—L’L  D¨¤G¡Ñ,Ô,Ð,ð5 ñ -ùð8 ð 	KÝ�s˜U‘{ð &Ið &Ið &Ið &IØ26ð&Iñ &Iô &Iñ Ið KˆBð ˆ	r5   rà   r   r?   s    @r3   ÚTRmorrierA  Y  s5   ø€ ðv7ð 7ð 7ð 7ð 7ð 7õr �R˜ÑÔÐr5   c                 ó.   ‡— ˆfd„}t          | |¦  «        S )a  Convert factored powers of sin and cos identities into simpler
    expressions.

    Examples
    ========

    >>> from sympy.simplify.fu import TR14
    >>> from sympy.abc import x, y
    >>> from sympy import cos, sin
    >>> TR14((cos(x) - 1)*(cos(x) + 1))
    -sin(x)**2
    >>> TR14((sin(x) - 1)*(sin(x) + 1))
    -cos(x)**2
    >>> p1 = (cos(x) + 1)*(cos(x) - 1)
    >>> p2 = (cos(y) - 1)*2*(cos(y) + 1)
    >>> p3 = (3*(cos(y) - 1))*(3*(cos(y) + 1))
    >>> TR14(p1*p2*p3*(x - 1))
    -18*(x - 1)*sin(x)**2*sin(y)**4

    c           	      ó~  •‡‡— | j         s| S ‰rZ|                      ¦   «         \  }}|t          j        ur5t	          |d¬¦  «        }t	          |d¬¦  «        }||k    s||k    r||z  } | S g }g }| j        D ]â}|j        r>|                     ¦   «         \  }}	|	j        s|j	        s| 
                    |¦  «         ŒD|}nt          j        }	t          |¦  «        }
|
r|
d         j        t          t          fvr=|	t          j        u r| 
                    |¦  «         n| 
                    ||	z  ¦  «         Œ¼|
\  }}}| 
                    ||	j        |	|||f¦  «         Œãt!          t#          |¦  «        ¦  «        }t%          |¦  «        }t!          t'          d¦  «        ¦  «        x}\  }}}	}}}|�rw|                     d¦  «        Š|�r8|d         Š‰|	         j        �r[‰|	         j        �rM‰|         ‰|         k    �r9‰|         ‰|         k    �r&|                     d¦  «        Št+          ‰|	         ‰|	         ¦  «        }‰|	         |k    r5ˆfd„|D ¦   «         }||	xx         |z  cc<   |                     d|¦  «         n@‰|	         |k    r4ˆfd„|D ¦   «         }||	xx         |z  cc<   |                     d|¦  «         t/          ‰|         t          ¦  «        rt          }nt          }| 
                    ‰|          ‰|         z   |‰|         j        d         ¦  «        dz  z  |z  ¦  «         �Œ‹nÇ‰|	         ‰|	         k    rµ‰|         ‰|         k    r£‰|         ‰|         k    r‘|                     d¦  «        Š‰|	         }t/          ‰|         t          ¦  «        rt          }nt          }| 
                    ‰|          ‰|         z   |‰|         j        d         ¦  «        dz  z  |z  ¦  «         �ŒS| 
                    ‰|         ‰|	         z  ¦  «         |�°wt%          |¦  «        |k    r	t1          |Ž } | S )	NFr¾   rg   rœ   r   c                 ó    •— g | ]
}‰|         ‘ŒS r]   r]   )rM   rn   ÚBs     €r3   ra   z#TR14.<locals>.f.<locals>.<listcomp>"  ó   ø€ Ð&:Ð&:Ð&:° q¨¤tÐ&:Ð&:Ð&:r5   c                 ó    •— g | ]
}‰|         ‘ŒS r]   r]   )rM   rn   ÚAs     €r3   ra   z#TR14.<locals>.f.<locals>.<listcomp>&  rF  r5   rG   )ry   rz   r   r;   ÚTR14r:   rK   r  rS   rT   rh   r  rU   r    r!   rü   r|   r   rW   rÅ   r_   rÄ   Úinsertr9   r   )r2   r`   rd   rÆ   rÇ   r:  Úprocessr=   ru   rY   rÿ   r§   r>   ÚsiÚnotherr}   r€   r>  ÚremrH  rE  r¿   s                      @@€r3   r>   zTR14.<locals>.fæ  sO  øøø€ ØŒyð 	ØˆIàð 		ð ×$Ò$Ñ&Ô&‰DˆAˆqØ�œˆ~ˆ~Ý˜A UÐ+Ñ+Ô+�Ý˜A UÐ+Ñ+Ô+�Ø˜1’9�9 ¨¢	 	Ø˜d™�BØ�	àˆØˆØ”ð 	:ð 	:ˆAØŒxð Ø—}’}‘”‘��1Øœð ¨¬ð Ø—L’L ‘O”O�OØØ��å”E�Ý˜A‘”ˆAØð ˜˜!œœ	­#­s¨Ð3Ð3Ø�œ�:�:Ø—L’L ‘O”O�O�Oà—L’L  A¡Ñ&Ô&Ð&ØØ‰HˆAˆq�"Ø�NŠN˜A˜qœ{¨A¨q°"°aÐ8Ñ9Ô9Ð9Ð9õ •w˜wÑ'Ô'Ñ(Ô(ˆõ �U‘”ˆõ &*­%°©(¬(¡^¤^Ð3ˆÑ"��1�a˜˜B àñ ,	%Ø—’˜A‘”ˆAØñ '%Ø˜A”J�à�Q”4”>ñ $% a¨¤d¤nñ $%à˜”t˜q œt’|‘|Ø˜Rœ5 A b¤Eš>™>Ø '§¢¨A¡¤˜AÝ#& q¨¤t¨Q¨q¬T¡?¤?˜Dð  ! œt tš|˜|Ø&:Ð&:Ð&:Ð&:°TÐ&:Ñ&:Ô&: Ø # A  ¤¨$¡  ¡Ø '§¢¨q°#Ñ 6Ô 6Ð 6Ð 6Ø!" 1¤¨¢ Ø&:Ð&:Ð&:Ð&:°TÐ&:Ñ&:Ô&: Ø # A  ¤¨$¡  ¡Ø '§¢¨q°#Ñ 6Ô 6Ð 6å)¨!¨A¬$µÑ4Ô4ð (Ý$'  å$' Ø!ŸLšL¨1¨Q¬4¨%°°!´©*°Q°Q°q¸´t´yÀ´|±_´_ÀaÑ5GÑ*GÈ$Ñ)NÑOÔOÐOÙ$øà�q”T˜Q˜qœT’\�\à˜”t˜q œt’|�|Ø˜Rœ5 A b¤Eš>˜>Ø '§¢¨A¡¤˜AØ#$ Q¤4˜DÝ)¨!¨A¬$µÑ4Ô4ð (Ý$'  å$' Ø!ŸLšL¨1¨Q¬4¨%°°!´©*°Q°Q°q¸´t´yÀ´|±_´_ÀaÑ5GÑ*GÈ$Ñ)NÑOÔOÐOÙ$ð �LŠL˜˜1œ˜q œt™Ñ$Ô$Ð$ðY ñ ,	%õ\ ˆu‰:Œ:˜ÒÐÝ�e�ˆBàˆ	r5   r   rË   s    ` r3   rI  rI  Ð  s4   ø€ ð,^ð ^ð ^ð ^ð ^õ@ �R˜ÑÔÐr5   c                 ó2   ‡‡— ˆˆfd„}t          | |¦  «        S )a  Convert sin(x)**-2 to 1 + cot(x)**2.

    See _TR56 docstring for advanced use of ``max`` and ``pow``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR15
    >>> from sympy.abc import x
    >>> from sympy import sin
    >>> TR15(1 - 1/sin(x)**2)
    -cot(x)**2

    c                 ó(  •— t          | t          ¦  «        rt          | j        t          ¦  «        s| S | j        }|dz  dk    r"t          | j        |dz   z  ¦  «        | j        z  S d| z  }t          |t          t          d„ ‰‰¬¦  «        }||k    r|} | S )NrG   rg   c                 ó   — d| z   S rf   r]   rŒ   s    r3   rŽ   z!TR15.<locals>.f.<locals>.<lambda>b  ó
   € ¨!¨a©%€ r5   r°   )r9   r   rL   r!   r¤   ÚTR15r¬   r#   ©r2   rY   Úiar=   r©   rª   s       €€r3   r>   zTR15.<locals>.fY  ó™   ø€ Ý˜2�sÑ#Ô#ð 	­
°2´7½CÑ(@Ô(@ð 	ØˆIàŒFˆØˆq‰5�AŠ:ˆ:Ý˜œ ! a¡%Ñ(Ñ)Ô)¨"¬'Ñ1Ð1àˆr‰TˆÝ�"•c�3  °S¸cÐBÑBÔBˆØ�Š7ˆ7ØˆBØˆ	r5   r   ©r2   r©   rª   r>   s    `` r3   rS  rS  I  ó4   øø€ ð ð ð ð ð ð õ �R˜ÑÔÐr5   c                 ó2   ‡‡— ˆˆfd„}t          | |¦  «        S )a  Convert cos(x)**-2 to 1 + tan(x)**2.

    See _TR56 docstring for advanced use of ``max`` and ``pow``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR16
    >>> from sympy.abc import x
    >>> from sympy import cos
    >>> TR16(1 - 1/cos(x)**2)
    -tan(x)**2

    c                 ó(  •— t          | t          ¦  «        rt          | j        t          ¦  «        s| S | j        }|dz  dk    r"t          | j        |dz   z  ¦  «        | j        z  S d| z  }t          |t          t          d„ ‰‰¬¦  «        }||k    r|} | S )NrG   rg   c                 ó   — d| z   S rf   r]   rŒ   s    r3   rŽ   z!TR16.<locals>.f.<locals>.<lambda>ƒ  rR  r5   r°   )r9   r   rL   r    r¤   rS  r¬   r"   rT  s       €€r3   r>   zTR16.<locals>.fz  rV  r5   r   rW  s    `` r3   ÚTR16r\  j  rX  r5   c                 ó(   — d„ }t          | |¦  «        S )aD  Convert f(x)**-i to g(x)**i where either ``i`` is an integer
    or the base is positive and f, g are: tan, cot; sin, csc; or cos, sec.

    Examples
    ========

    >>> from sympy.simplify.fu import TR111
    >>> from sympy.abc import x
    >>> from sympy import tan
    >>> TR111(1 - 1/tan(x)**2)
    1 - cot(x)**2

    c                 ó  — t          | t          ¦  «        r$| j        j        s| j        j        r| j        j        s| S t          | j        t          ¦  «        r(t          | j        j	        d         ¦  «        | j         z  S t          | j        t          ¦  «        r(t          | j        j	        d         ¦  «        | j         z  S t          | j        t          ¦  «        r(t          | j        j	        d         ¦  «        | j         z  S | S r8   )r9   r   rL   rT   r¤   rS   Úis_negativer"   r#   r:   r!   r%   r    r$   r1   s    r3   r>   zTR111.<locals>.fš  sà   € å�r�3ÑÔð	àŒWÔ ð	à$&¤FÔ$5ð	à:<¼&Ô:Lð	ð ˆIå�b”g�sÑ#Ô#ð 	1Ý�r”w”| A”Ñ'Ô'¨"¬&¨Ñ0Ð0Ý˜œ¥Ñ%Ô%ð 	1Ý�r”w”| A”Ñ'Ô'¨"¬&¨Ñ0Ð0Ý˜œ¥Ñ%Ô%ð 	1Ý�r”w”| A”Ñ'Ô'¨"¬&¨Ñ0Ð0Øˆ	r5   r   r?   s     r3   ÚTR111r`  ‹  s#   € ðð ð õ �R˜ÑÔÐr5   c                 ó2   ‡‡— ˆˆfd„}t          | |¦  «        S )ah  Convert tan(x)**2 to sec(x)**2 - 1 and cot(x)**2 to csc(x)**2 - 1.

    See _TR56 docstring for advanced use of ``max`` and ``pow``.

    Examples
    ========

    >>> from sympy.simplify.fu import TR22
    >>> from sympy.abc import x
    >>> from sympy import tan, cot
    >>> TR22(1 + tan(x)**2)
    sec(x)**2
    >>> TR22(1 + cot(x)**2)
    csc(x)**2

    c                 óê   •— t          | t          ¦  «        r| j        j        t          t
          fv s| S t          | t
          t          d„ ‰‰¬¦  «        } t          | t          t          d„ ‰‰¬¦  «        } | S )Nc                 ó   — | dz
  S rf   r]   rŒ   s    r3   rŽ   z!TR22.<locals>.f.<locals>.<lambda>Á  ó
   € ¨1¨q©5€ r5   r°   c                 ó   — | dz
  S rf   r]   rŒ   s    r3   rŽ   z!TR22.<locals>.f.<locals>.<lambda>Â  rd  r5   )	r9   r   rL   rU   r#   r"   r¬   r$   r%   r±   s    €€r3   r>   zTR22.<locals>.f½  si   ø€ Ý˜2�sÑ#Ô#ð 	¨¬¬½½c¸
Ð(BÐ(BØˆIå�2•s�C  °c¸sÐCÑCÔCˆÝ�2•s�C  °c¸sÐCÑCÔCˆØˆ	r5   r   rW  s    `` r3   ÚTR22rf  «  s4   øø€ ð$ð ð ð ð ð õ �R˜ÑÔÐr5   c                 ó(   — d„ }t          | |¦  «        S )a  Convert sin(x)**n and cos(x)**n with positive n to sums.

    Examples
    ========

    >>> from sympy.simplify.fu import TRpower
    >>> from sympy.abc import x
    >>> from sympy import cos, sin
    >>> TRpower(sin(x)**6)
    -15*cos(2*x)/32 + 3*cos(4*x)/16 - cos(6*x)/32 + 5/16
    >>> TRpower(sin(x)**3*cos(2*x)**4)
    (3*sin(x)/4 - sin(3*x)/4)*(cos(4*x)/2 + cos(8*x)/8 + 3/8)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Power-reduction_formulae

    c                 óè  ‡‡— t          | t          ¦  «        r!t          | j        t          t          f¦  «        s| S |                      ¦   «         \  }Š|j        d         Š‰j        �r‹‰j        �rƒ‰j	        rIt          |t          ¦  «        r4dd‰z
  z  t          ˆˆfd„t          ‰dz   dz  ¦  «        D ¦   «         Ž z  } �n‰j	        r^t          |t          ¦  «        rIdd‰z
  z  t          j        ‰dz
  dz  z  z  t          ˆˆfd„t          ‰dz   dz  ¦  «        D ¦   «         Ž z  } nª‰j        rEt          |t          ¦  «        r0dd‰z
  z  t          ˆˆfd„t          ‰dz  ¦  «        D ¦   «         Ž z  } n^‰j        rWt          |t          ¦  «        rBdd‰z
  z  t          j        ‰dz  z  z  t          ˆˆfd„t          ‰dz  ¦  «        D ¦   «         Ž z  } ‰j        r| d‰ z  t          ‰‰dz  ¦  «        z  z  } | S )Nr   rG   rg   c                 ób   •— g | ]+}t          ‰|¦  «        t          ‰d |z  z
  ‰z  ¦  «        z  ‘Œ,S ©rG   ©r   r    ©rM   rX   r`   r�   s     €€r3   ra   z&TRpower.<locals>.f.<locals>.<listcomp>ä  sJ   ø€ ð $/ð $/ð $/Øõ %-¨Q°¡N¤Nµ3¸¸A¸a¹C¹À±{Ñ3CÔ3CÑ$Cð $/ð $/ð $/r5   c                 ó‚   •— g | ];}t          ‰|¦  «        t          j        |z  z  t          ‰d |z  z
  ‰z  ¦  «        z  ‘Œ<S rj  )r   r   r  r!   rl  s     €€r3   ra   z&TRpower.<locals>.f.<locals>.<listcomp>ç  sc   ø€ ð =Qð =Qð =QØ:;õ >FÀaÈ¹^¼^Ý”M 1Ñ$ñ>%Ý%(¨!¨a°©c©'°1©Ñ%5Ô%5ñ>6ð =Qð =Qð =Qr5   c                 ób   •— g | ]+}t          ‰|¦  «        t          ‰d |z  z
  ‰z  ¦  «        z  ‘Œ,S rj  rk  rl  s     €€r3   ra   z&TRpower.<locals>.f.<locals>.<listcomp>ê  sJ   ø€ ð $)ð $)ð $)Øõ %-¨Q°¡N¤Nµ3¸¸A¸a¹C¹À±{Ñ3CÔ3CÑ$Cð $)ð $)ð $)r5   c                 ó‚   •— g | ];}t          ‰|¦  «        t          j        |z  z  t          ‰d |z  z
  ‰z  ¦  «        z  ‘Œ<S rj  )r   r   r  r    rl  s     €€r3   ra   z&TRpower.<locals>.f.<locals>.<listcomp>í  sc   ø€ ð 9Kð 9Kð 9KØ:;õ :BÀ!ÀQ¹¼Ý”M 1Ñ$ñ:%Ý%(¨!¨a°©c©'°1©Ñ%5Ô%5ñ:6ð 9Kð 9Kð 9Kr5   )r9   r   rL   r!   r    r  r:   rÂ   rT   Úis_oddr   rÅ   r   r  Úis_evenr   )r2   ru   r`   r�   s     @@r3   r>   zTRpower.<locals>.fÝ  s‹  øø€ Ý˜2�sÑ#Ô#ð 	­
°2´7½SÅ#¸JÑ(GÔ(Gð 	ØˆIØ�~Š~ÑÔ‰ˆˆ1ØŒF�1ŒIˆØŒ<ñ 	/˜AœMñ 	/ØŒxð L�J q­#Ñ.Ô.ð LØ˜˜1™‘X�cð $/ð $/ð $/ð $/ð $/Ý" A¨¡E¨1¡9Ñ-Ô-ð$/ñ $/ô $/ð 0ñ 0�‘à”ð L�j¨­CÑ0Ô0ð LØ˜˜1™‘X�aœm¨q°©s°A©gÑ6Ñ6µsð =Qð =Qð =Qð =Qð =QÝ?DÀaÈ!ÁeÈQÁYÑ?OÔ?Oð=Qñ =Qô =Qð 8Rñ R��à”ð L�z¨!­SÑ1Ô1ð LØ˜˜1™‘X�cð $)ð $)ð $)ð $)ð $)Ý" 1 Q¡3™ZœZð$)ñ $)ô $)ð *ñ *��à”ð L�z¨!­SÑ1Ô1ð LØ˜˜1™‘X�aœm¨a°©cÑ2Ñ2µ3ð 9Kð 9Kð 9Kð 9Kð 9KÝ?DÀQÀqÁS¹z¼zð9Kñ 9Kô 9Kð 4Lñ L�àŒyð /Ø�a˜1˜"‘g�h q¨!¨A©#Ñ.Ô.Ñ.Ñ.�Øˆ	r5   r   r?   s     r3   ÚTRpowerrr  È  s#   € ð*ð ð õ, �R˜ÑÔÐr5   c                 óP   — t          |                      t          ¦  «        ¦  «        S )záReturn count of trigonometric functions in expression.

    Examples
    ========

    >>> from sympy.simplify.fu import L
    >>> from sympy.abc import x
    >>> from sympy import cos, sin
    >>> L(cos(x)+sin(x))
    2
    )r   Úcountr'   r1   s    r3   ÚLru  ö  s   € õ ˆR�XŠXÕ+Ñ,Ô,Ñ-Ô-Ð-r5   c                 óH   — t          | ¦  «        |                      ¦   «         fS rJ   )ru  Ú	count_opsrŒ   s    r3   rŽ   rŽ   *  s   € �a ™dœd A§K¢K¡M¤MÐ2€ r5   c                 óÖ  ‡— t          t          ‰¦  «        }t          t          ‰¦  «        }| }t          | ¦  «        } t	          | t
          ¦  «        s | j        ˆfd„| j        D ¦   «         Ž S t          | ¦  «        } |  	                    t          t          ¦  «        rT || ¦  «        } ‰|¦  «         ‰| ¦  «        k     r|} |  	                    t          t          ¦  «        rt          | ¦  «        } |  	                    t          t          ¦  «        r< || ¦  «        }t          t!          |¦  «        ¦  «        }t#          || ||g‰¬¦  «        } t#          t%          | ¦  «        | ‰¬¦  «        S )a7  Attempt to simplify expression by using transformation rules given
    in the algorithm by Fu et al.

    :func:`fu` will try to minimize the objective function ``measure``.
    By default this first minimizes the number of trig terms and then minimizes
    the number of total operations.

    Examples
    ========

    >>> from sympy.simplify.fu import fu
    >>> from sympy import cos, sin, tan, pi, S, sqrt
    >>> from sympy.abc import x, y, a, b

    >>> fu(sin(50)**2 + cos(50)**2 + sin(pi/6))
    3/2
    >>> fu(sqrt(6)*cos(x) + sqrt(2)*sin(x))
    2*sqrt(2)*sin(x + pi/3)

    CTR1 example

    >>> eq = sin(x)**4 - cos(y)**2 + sin(y)**2 + 2*cos(x)**2
    >>> fu(eq)
    cos(x)**4 - 2*cos(y)**2 + 2

    CTR2 example

    >>> fu(S.Half - cos(2*x)/2)
    sin(x)**2

    CTR3 example

    >>> fu(sin(a)*(cos(b) - sin(b)) + cos(a)*(sin(b) + cos(b)))
    sqrt(2)*sin(a + b + pi/4)

    CTR4 example

    >>> fu(sqrt(3)*cos(x)/2 + sin(x)/2)
    sin(x + pi/3)

    Example 1

    >>> fu(1-sin(2*x)**2/4-sin(y)**2-cos(x)**4)
    -cos(x)**2 + cos(y)**2

    Example 2

    >>> fu(cos(4*pi/9))
    sin(pi/18)
    >>> fu(cos(pi/9)*cos(2*pi/9)*cos(3*pi/9)*cos(4*pi/9))
    1/16

    Example 3

    >>> fu(tan(7*pi/18)+tan(5*pi/18)-sqrt(3)*tan(5*pi/18)*tan(7*pi/18))
    -sqrt(3)

    Objective function example

    >>> fu(sin(x)/cos(x))  # default objective function
    tan(x)
    >>> fu(sin(x)/cos(x), measure=lambda x: -x.count_ops()) # maximize op count
    sin(x)/cos(x)

    References
    ==========

    .. [1] https://www.sciencedirect.com/science/article/pii/S0895717706001609
    c                 ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS ))Úmeasure)Úfu)rM   r=   rz  s     €r3   ra   zfu.<locals>.<listcomp>v  s&   ø€ ÐAÐAÐA°A�˜A wÐ/Ñ/Ô/ÐAÐAÐAr5   )r@  )r*   ÚRL1ÚRL2r   r9   r   rU   r:   r@   Úhasr"   r#   rC   r!   r    rÀ   rA  rÄ   r‚   )r2   rz  ÚfRL1ÚfRL2rØ   Úrv1Úrv2s    `     r3   r{  r{  *  sH  ø€ õL •#�wÑÔ€DÝ•#�wÑÔ€Dà
€CÝ	�‰Œ€BÝ�b�$ÑÔð CØˆrŒwÐAÐAÐAÐA¸¼ÐAÑAÔAÐBÐBÝ	ˆR‰Œ€BØ	‡v‚v�c•3ÑÔð Øˆd�2‰hŒhˆØˆG�C‰LŒL˜7˜7 2™;œ;Ò&Ð&ØˆBØ�6Š6•#•sÑÔð 	Ý�R‘”ˆBØ	‡v‚v�c•3ÑÔð 3Øˆd�2‰hŒhˆÝ•(˜3‘-”-Ñ Ô ˆÝ�#�r˜3 Ð$¨'Ð2Ñ2Ô2ˆÝ�t�B‰xŒx˜ Ð)Ñ)Ô)Ð)r5   c                 ó’  — t          t          ¦  «        }|rX| j        D ]O}|                     ¦   «         \  }}|dk     r| }| }|||r ||¦  «        ndf                              |¦  «         ŒPnL|r;| j        D ]2}|t
          j         ||¦  «        f                              |¦  «         Œ3nt          d¦  «        ‚g }d}|D ]z}	||	         }
|	\  }}t          |
¦  «        dk    r:t          |
ddiŽ} ||¦  «        }||k    r|}d}|                     ||z  ¦  «         Œ\|                     ||
d         z  ¦  «         Œ{|r	t          |Ž } | S )a  Apply ``do`` to addends of ``rv`` that (if ``key1=True``) share at least
    a common absolute value of their coefficient and the value of ``key2`` when
    applied to the argument. If ``key1`` is False ``key2`` must be supplied and
    will be the only key applied.
    r   rg   zmust have at least one keyFrr   T)
r   r|   r:   rÁ   rh   r   r;   Ú
ValueErrorrW   r   )r2   rß   Úkey2Úkey1Úabscr=   rÈ   r:   rÕ   rX   ro   r"  rY   rÙ   s                 r3   rá   rá   …  sŸ  € õ •tÑÔ€DØð 7Ø”ð 	8ð 	8ˆAØ—>’>Ñ#Ô#‰DˆAˆqØ�1ŠuˆuØ�B�Ø�B�Ø�! Ð+�T�T˜!‘W”W�W¨!Ð,Ô-×4Ò4°QÑ7Ô7Ð7Ð7ð	8ð 
ð 7Ø”ð 	-ð 	-ˆAØ•!”%˜˜˜a™œÐ!Ô"×)Ò)¨!Ñ,Ô,Ð,Ð,ð	-õ Ð5Ñ6Ô6Ð6à€DØ
€CØð  ð  ˆØ�ŒGˆØ‰ˆˆ1Ýˆq‰6Œ6�AŠ:ˆ:Ý�QÐ' Ð'Ð'ˆAØ�"�Q‘%”%ˆCØ�aŠxˆxØ�Ø�Ø�KŠK˜˜!™ÑÔÐÐà�KŠK˜˜!˜Aœ$™ÑÔÐÐØ
ð Ý�$ˆZˆà€Ir5   z~
    TR0 TR1 TR2 TR3 TR4 TR5 TR6 TR7 TR8 TR9 TR10 TR10i TR11
    TR12 TR13 L TR2i TRmorrie TR12i
    TR14 TR15 TR16 TR111 TR22c                  ó    — t          d¦  «        S r
  ©r&   r]   r5   r3   Ú_ROOT2rŠ  ¶  ó   € å�‰7Œ7€Nr5   c                  ó    — t          d¦  «        S )Nr›   r‰  r]   r5   r3   rô   rô   »  r‹  r5   c                  ó&   — dt          d¦  «        z  S )Nrg   r›   r‰  r]   r5   r3   rõ   rõ   À  s   € à�T�!‰WŒW‰9Ðr5   c           	      ó  ‡— d„ | |fD ¦   «         \  } }|                       |¦  «        \  }}|                      |¦  «                             ¦   «         }dx}}t          j        |j        v r#|                     t          j        ¦  «        }| }n5t          j        |j        v r"|                     t          j        ¦  «        }| }d„ ||fD ¦   «         \  } }d„ } || |¦  «        }	|	€dS |	\  }
}} |||¦  «        }	|	€dS |	\  }}}|s|s|r(t          |t          ¦  «        r||||
||f\  }
}}}}}||}}|sP|p|}|p|}t          ||j	        ¦  «        sdS ||||j
        d         |j
        d         t          |t          ¦  «        fS |
s”|s’|r�|rŽ|rŒ|rŠt          ||j	        ¦  «        t          ||j	        ¦  «        urdS d„ ||fD ¦   «         Št          ˆfd„||fD ¦   «         ¦  «        sdS ||||j
        d         |j
        d         t          ||j	        ¦  «        fS |r|s|r|s
|r
|€|�|€|€dS |p|}|p|}|j
        |j
        k    rdS |
st          j        }
|st          j        }|
|u r,|t          ¦   «         z  }||||j
        d         t          d	z  d
fS |
|z  t!          ¦   «         k    r#|d|z  z  }||||j
        d         t          dz  d
fS |
|z  t#          ¦   «         k    r#|d|
z  z  }||||j
        d         t          dz  d
fS dS )a)  Return the gcd, s1, s2, a1, a2, bool where

    If two is False (default) then::
        a + b = gcd*(s1*f(a1) + s2*f(a2)) where f = cos if bool else sin
    else:
        if bool, a + b was +/- cos(a1)*cos(a2) +/- sin(a1)*sin(a2) and equals
            n1*gcd*cos(a - b) if n1 == n2 else
            n1*gcd*cos(a + b)
        else a + b was +/- cos(a1)*sin(a2) +/- sin(a1)*cos(a2) and equals
            n1*gcd*sin(a + b) if n1 = n2 else
            n1*gcd*sin(b - a)

    Examples
    ========

    >>> from sympy.simplify.fu import trig_split
    >>> from sympy.abc import x, y, z
    >>> from sympy import cos, sin, sqrt

    >>> trig_split(cos(x), cos(y))
    (1, 1, 1, x, y, True)
    >>> trig_split(2*cos(x), -2*cos(y))
    (2, 1, -1, x, y, True)
    >>> trig_split(cos(x)*sin(y), cos(y)*sin(y))
    (sin(y), 1, 1, x, y, True)

    >>> trig_split(cos(x), -sqrt(3)*sin(x), two=True)
    (2, 1, -1, x, pi/6, False)
    >>> trig_split(cos(x), sin(x), two=True)
    (sqrt(2), 1, 1, x, pi/4, False)
    >>> trig_split(cos(x), -sin(x), two=True)
    (sqrt(2), 1, -1, x, pi/4, False)
    >>> trig_split(sqrt(2)*cos(x), -sqrt(6)*sin(x), two=True)
    (2*sqrt(2), 1, -1, x, pi/6, False)
    >>> trig_split(-sqrt(6)*cos(x), -sqrt(2)*sin(x), two=True)
    (-2*sqrt(2), 1, 1, x, pi/3, False)
    >>> trig_split(cos(x)/sqrt(6), sin(x)/sqrt(2), two=True)
    (sqrt(6)/3, 1, 1, x, pi/6, False)
    >>> trig_split(-sqrt(6)*cos(x)*sin(y), -sqrt(2)*sin(x)*sin(y), two=True)
    (-2*sqrt(2)*sin(y), 1, 1, x, pi/3, False)

    >>> trig_split(cos(x), sin(x))
    >>> trig_split(cos(x), sin(z))
    >>> trig_split(2*cos(x), -sin(x))
    >>> trig_split(cos(x), -sqrt(3)*sin(x))
    >>> trig_split(cos(x)*cos(y), sin(x)*sin(z))
    >>> trig_split(cos(x)*cos(y), sin(x)*sin(y))
    >>> trig_split(-sqrt(6)*cos(x), sqrt(2)*sin(x)*sin(y), two=True)
    c                 ó,   — g | ]}t          |¦  «        ‘ŒS r]   ©r   r½   s     r3   ra   ztrig_split.<locals>.<listcomp>÷  ó   € Ð'Ð'Ð'˜1�G�A‰JŒJÐ'Ð'Ð'r5   rg   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r]   ©Úas_exprr½   s     r3   ra   ztrig_split.<locals>.<listcomp>  ó    € Ð*Ð*Ð*˜AˆA�IŠI‰KŒKÐ*Ð*Ð*r5   c                 ó2  — dx}}t           j        }| j        �r4|                      ¦   «         \  }} t	          | j        ¦  «        dk    s|sdS | j        rt          | j        ¦  «        }n| g}|                     d¦  «        } t          | t          ¦  «        r| }n:t          | t          ¦  «        r| }n"| j        r| j        t           j        u r|| z  }ndS |rd|d         }t          |t          ¦  «        r|r|}nB|}n?t          |t          ¦  «        r|r|}n%|}n"|j        r|j        t           j        u r||z  }ndS |t           j        ur|nd||fS t          | t          ¦  «        r| }nt          | t          ¦  «        r| }|€|€dS |t           j        ur|nd}|||fS )a½  Return ``a`` as a tuple (r, c, s) such that
        ``a = (r or 1)*(c or 1)*(s or 1)``.

        Three arguments are returned (radical, c-factor, s-factor) as
        long as the conditions set by ``two`` are met; otherwise None is
        returned. If ``two`` is True there will be one or two non-None
        values in the tuple: c and s or c and r or s and r or s or c with c
        being a cosine function (if possible) else a sine, and s being a sine
        function (if possible) else oosine. If ``two`` is False then there
        will only be a c or s term in the tuple.

        ``two`` also require that either two cos and/or sin be present (with
        the condition that if the functions are the same the arguments are
        different or vice versa) or that a single cosine or a single sine
        be present with an optional radical.

        If the above conditions dictated by ``two`` are not met then None
        is returned.
        NrG   r   )r   r;   ry   rÁ   rW   r:   r|   r_   r9   r    r!   rK   r¤   ró   )r=   rì   rÈ   rÉ   rþ   r:   ru   s          r3   Úpow_cos_sinztrig_split.<locals>.pow_cos_sin  sÐ  € ð( ˆˆˆAÝŒUˆØŒ8ñ %	Ø—N’NÑ$Ô$‰EˆB�Ý�1”6‰{Œ{˜QŠˆ cˆØ�tØŒxð Ý˜AœF‘|”|��à�s�Ø—’˜‘”ˆAÝ˜!�SÑ!Ô!ð Ø��Ý˜A�sÑ#Ô#ð Ø��Ø”ð ˜aœe¥q¤v˜o˜oØ�a‘��à�tØð  Ø˜”G�Ý˜a¥Ñ%Ô%ð  Øð Ø˜˜à˜˜Ý ¥3Ñ'Ô'ð  Øð Ø˜˜à˜˜Ø”Xð   !¤%­1¬6 / /Ø˜!‘G�B�Bà˜4Ø¥1¤5˜˜�2�2¨d°A°qÐ8Ð8Ý˜�3ÑÔð 	ØˆAˆAÝ˜�3ÑÔð 	ØˆAØˆ9˜˜ØˆFØ�QœU�?�?ˆRˆR¨ˆØ�1�aˆxˆr5   Nr   c                 ó   — h | ]	}|j         ’Œ
S r]   r   )rM   rÖ   s     r3   ú	<setcomp>ztrig_split.<locals>.<setcomp>]  s   € Ð1Ð1Ð1 1˜œÐ1Ð1Ð1r5   c              3   ó*   •K  — | ]}|j         ‰v V — Œd S rJ   r   )rM   rn   r:   s     €r3   rO   ztrig_split.<locals>.<genexpr>^  s)   øè è € Ð<Ð<¨a˜1œ6 T˜>Ð<Ð<Ð<Ð<Ð<Ð<r5   r‡   FrG   r›   rœ   )r/   rÛ   r”  r   r  ÚfactorsÚquor9   r!   rU   r:   r    r  r;   rŠ  r   rô   rõ   )r=   ru   rì   ÚuaÚubrÛ   rÜ   rÝ   r—  rÿ   ÚcoaÚcaÚsaÚcobÚcbÚsbrÈ   rÉ   r:   s                     @r3   rÔ   rÔ   Å  sÐ  ø€ ðd (Ð'  A Ð'Ñ'Ô'�D€A€qØ�XŠX�a‰[Œ[�F€BˆØ
�%Š%�‰(Œ(×
Ò
Ñ
Ô
€CØ€K€BˆÝ„}˜œ
Ð"Ð"Ø�VŠV•A”MÑ"Ô"ˆØˆSˆˆÝ	
Œ˜"œ*Ð	$Ð	$Ø�VŠV•A”MÑ"Ô"ˆØˆSˆØ*Ð* " b Ð*Ñ*Ô*�D€A€qð?ð ?ð ?ðD 	ˆ�A�sÑÔ€AØ€yØˆØ�K€CˆˆRØˆ�A�sÑÔ€AØ€yØˆØ�K€CˆˆRð ð �Bð ˜"ð ¥¨BµÑ!4Ô!4ð Ø#&¨¨B°°R¸Ð#;Ñ ˆˆR��S˜"˜bØ�RˆBˆØð "7ØˆH�"ˆØˆH�"ˆÝ˜!˜QœVÑ$Ô$ð 	Ø�4Ø�B˜˜AœF 1œI q¤v¨a¤yµ*¸QÅÑ2DÔ2DÐDÐDàð 	T˜3ð 	TØð T�rð T˜bð T Rð TÝ˜b "¤'Ñ*Ô*µ*¸RÀÄÑ2IÔ2IÐIÐIØ�FØ1Ð1¨¨R¨Ð1Ñ1Ô1�ÝÐ<Ð<Ð<Ð<°B¸°8Ð<Ñ<Ô<Ñ<Ô<ð Ø�FØ˜B  B¤G¨A¤J°´¸´
½JÀrÈ2Ì7Ñ<SÔ<SÐSÐSØð 	�"ð 	˜ð 	˜rð 	Øð	Ø�Z B J°"°*ÀÀØˆFØˆH�"ˆØˆH�"ˆØŒ6�Q”VÒÐØˆFØð 	Ý”%ˆCØð 	Ý”%ˆCØ�#ˆ:ˆ:Ø•6‘8”8‰OˆCØ˜˜B ¤ q¤	­2¨a©4°Ð6Ð6Ø�‰W�™œÒ Ð Ø�1�S‘5‰LˆCØ˜˜B ¤ q¤	­2¨a©4°Ð6Ð6Ø�‰W�	™œÒ#Ð#Ø�1�S‘5‰LˆCØ˜˜B ¤ q¤	­2¨a©4°Ð6Ð6ð $Ð#r5   c                 ó.  — | j         rt          | j        ¦  «        dk    rdS | j        \  }}|t          j        t          j        fv rDt          j        }|j        r,|j        d         j        r|j        d         dk     r	| | }}| }|||fS d„ | j        D ¦   «         \  }}|                     |¦  «        \  }}| 	                    |¦  «         
                    ¦   «         }t          j        |j        v r$|                     t          j        ¦  «        }d}d}n;t          j        |j        v r$|                     t          j        ¦  «        }d}d}ndx}}d„ ||fD ¦   «         \  }}|t          j        u r||}}||}}|dk    r| }| }|t          j        u r|||fS dS )aø  If ``e`` is a sum that can be written as ``g*(a + s)`` where
    ``s`` is ``+/-1``, return ``g``, ``a``, and ``s`` where ``a`` does
    not have a leading negative coefficient.

    Examples
    ========

    >>> from sympy.simplify.fu import as_f_sign_1
    >>> from sympy.abc import x
    >>> as_f_sign_1(x + 1)
    (1, x, 1)
    >>> as_f_sign_1(x - 1)
    (1, x, -1)
    >>> as_f_sign_1(-x + 1)
    (-1, x, -1)
    >>> as_f_sign_1(-x - 1)
    (-1, x, 1)
    >>> as_f_sign_1(2*x + 2)
    (2, x, 1)
    rG   Nr   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r]   r�  r½   s     r3   ra   zas_f_sign_1.<locals>.<listcomp>—  r‘  r5   éÿÿÿÿrg   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r]   r“  r½   s     r3   ra   zas_f_sign_1.<locals>.<listcomp>¤  r•  r5   )rV   rW   r:   r   r  r;   ry   rü   r/   rÛ   r”  r›  rœ  )	rY   r=   ru   r§   r�  rž  rÛ   rÜ   rÝ   s	            r3   r  r  w  s«  € ð* Œ8ð •s˜1œ6‘{”{ aÒ'Ð'ØˆàŒ6�D€A€qØ�QŒ]�AœEÐ"Ð"Ð"ÝŒEˆØŒ8ð 	˜œ˜qœ	Ô+ð 	°´°q´	¸A²°Ø�2˜�rˆqˆAØ�ˆAØ�!�Qˆwˆà'Ð' ¤Ð'Ñ'Ô'�D€A€qØ�XŠX�a‰[Œ[�F€BˆØ
�%Š%�‰(Œ(×
Ò
Ñ
Ô
€CÝ„}˜œ
Ð"Ð"Ø�VŠV•A”MÑ"Ô"ˆØˆØˆˆÝ	
Œ˜"œ*Ð	$Ð	$Ø�VŠV•A”MÑ"Ô"ˆØˆØˆˆàˆˆˆRØ*Ð* " b Ð*Ñ*Ô*�D€A€qØ�AŒE€z€zØ�!ˆ1ˆØ�RˆBˆØ	ˆR‚x€xØˆdˆØˆSˆà�AŒE€z€zØ�A�rˆzÐð €zr5   c                 ó.   ‡— ˆfd„}t          | |¦  «        S )a2  Replace all hyperbolic functions with trig functions using
    the Osborne rule.

    Notes
    =====

    ``d`` is a dummy variable to prevent automatic evaluation
    of trigonometric/hyperbolic functions.


    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hyperbolic_function
    c                 óÌ  •— t          | t          ¦  «        s| S | j        d         }|j        s|‰z  n$t	          j        ˆfd„|j        D ¦   «         ¦  «        }t          | t          ¦  «        rt          t          |¦  «        z  S t          | t          ¦  «        rt          |¦  «        S t          | t          ¦  «        rt          t          |¦  «        z  S t          | t          ¦  «        rt          |¦  «        t          z  S t          | t          ¦  «        rt!          |¦  «        S t          | t"          ¦  «        rt%          |¦  «        t          z  S t'          d| j        z  ¦  «        ‚)Nr   c                 ó   •— g | ]}|‰z  ‘ŒS r]   r]   )rM   rn   rd   s     €r3   ra   z'_osborne.<locals>.f.<locals>.<listcomp>Å  s   ø€ Ð4IÐ4IÐ4I¸Q°Q°q±SÐ4IÐ4IÐ4Ir5   úunhandled %s)r9   r   r:   rV   r   rå   r   r   r!   r   r    r   r"   r   r#   r   r$   r   r%   ÚNotImplementedErrorrU   )r2   r=   rd   s     €r3   r>   z_osborne.<locals>.fÁ  s4  ø€ Ý˜"Õ0Ñ1Ô1ð 	ØˆIØŒG�AŒJˆØ”xÐJˆAˆa‰CˆC¥S¤^Ð4IÐ4IÐ4IÐ4IÀ!Ä&Ð4IÑ4IÔ4IÑ%JÔ%JˆÝ�b�$ÑÔð 	@Ý•S˜‘V”V‘8ˆOÝ˜�DÑ!Ô!ð 	@Ý�q‘6”6ˆMÝ˜�DÑ!Ô!ð 		@Ý•S˜‘V”V‘8ˆOÝ˜�DÑ!Ô!ð 	@Ý�q‘6”6�!‘8ˆOÝ˜�DÑ!Ô!ð 	@Ý�q‘6”6ˆMÝ˜�DÑ!Ô!ð 	@Ý�q‘6”6�!‘8ˆOå% n°r´wÑ&>Ñ?Ô?Ð?r5   r   ©rY   rd   r>   s    ` r3   Ú_osborner¯  °  s1   ø€ ð"@ð @ð @ð @ð @õ( �Q˜‰?Œ?Ðr5   c                 ó.   ‡— ˆfd„}t          | |¦  «        S )a1  Replace all trig functions with hyperbolic functions using
    the Osborne rule.

    Notes
    =====

    ``d`` is a dummy variable to prevent automatic evaluation
    of trigonometric/hyperbolic functions.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hyperbolic_function
    c                 óò  •— t          | t          ¦  «        s| S | j        d                              ‰d¬¦  «        \  }}|                     ‰t
          j        i¦  «        |t          z  z   }t          | t          ¦  «        rt          |¦  «        t          z  S t          | t          ¦  «        rt          |¦  «        S t          | t          ¦  «        rt          |¦  «        t          z  S t          | t          ¦  «        rt          |¦  «        t          z  S t          | t           ¦  «        rt#          |¦  «        S t          | t$          ¦  «        rt'          |¦  «        t          z  S t)          d| j        z  ¦  «        ‚)Nr   T)Úas_Addr¬  )r9   r'   r:   Úas_independentÚxreplacer   r;   r   r!   r   r    r   r"   r   r#   r   r$   r   r%   r   r­  rU   )r2   Úconstr�   r=   rd   s       €r3   r>   z_osbornei.<locals>.fè  s:  ø€ Ý˜"Õ3Ñ4Ô4ð 	ØˆIØ”7˜1”:×,Ò,¨Q°tÐ,Ñ<Ô<‰ˆˆqØ�JŠJ˜�1œ5�zÑ"Ô" U­1¡WÑ,ˆÝ�b�#ÑÔð 	@Ý˜‘7”7�1‘9ÐÝ˜�CÑ Ô ð 	@Ý˜‘7”7ˆNÝ˜�CÑ Ô ð 		@Ý˜‘7”7�1‘9ÐÝ˜�CÑ Ô ð 	@Ý˜‘7”7�1‘9ÐÝ˜�CÑ Ô ð 	@Ý˜‘7”7ˆNÝ˜�CÑ Ô ð 	@Ý˜‘7”7�1‘9Ðå% n°r´wÑ&>Ñ?Ô?Ð?r5   r   r®  s    ` r3   Ú	_osborneir¶  Ø  s1   ø€ ð @ð @ð @ð @ð @õ( �Q˜‰?Œ?Ðr5   c                 ó  ‡‡‡‡— ddl mŠ ddlmŠ |                      t
          ¦  «        }d„ |D ¦   «         Š|                      t          ‰¦  «        ¦  «        }d„ ‰D ¦   «         Št          ¦   «         Št          |‰¦  «        ˆˆˆˆfd„fS )aÎ  Return an expression containing hyperbolic functions in terms
    of trigonometric functions. Any trigonometric functions initially
    present are replaced with Dummy symbols and the function to undo
    the masking and the conversion back to hyperbolics is also returned. It
    should always be true that::

        t, f = hyper_as_trig(expr)
        expr == f(t)

    Examples
    ========

    >>> from sympy.simplify.fu import hyper_as_trig, fu
    >>> from sympy.abc import x
    >>> from sympy import cosh, sinh
    >>> eq = sinh(x)**2 + cosh(x)**2
    >>> t, f = hyper_as_trig(eq)
    >>> f(fu(t))
    cosh(2*x)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Hyperbolic_function
    r   r„   )Úcollectc                 ó.   — g | ]}|t          ¦   «         f‘ŒS r]   r   )rM   r€   s     r3   ra   z!hyper_as_trig.<locals>.<listcomp>  s    € Ð(Ð(Ð(˜QˆQ•‘”ˆLÐ(Ð(Ð(r5   c                 ó   — g | ]	\  }}||f‘Œ
S r]   r]   )rM   rX   ro   s      r3   ra   z!hyper_as_trig.<locals>.<listcomp>"  s    € Ð$Ð$Ð$‘t�q˜!ˆQ�ˆFÐ$Ð$Ð$r5   c           	      óž   •—  ‰ ‰t          | ‰¦  «                             t          ‰¦  «        ¦  «        ¦  «        t          j        ¦  «        S rJ   )r¶  r´  Údictr   ÚImaginaryUnit)r�   r¸  rd   Úrepsr…   s    €€€€r3   rŽ   zhyper_as_trig.<locals>.<lambda>&  sG   ø€ ¨'¨'°(°(Ý�!�Q‰Œ× Ò ¥ d¡¤Ñ,Ô,ñ3.ô 3.Ý/0¬ñ+@ô +@€ r5   )
r—   r…   Úsympy.simplify.radsimpr¸  Úatomsr'   r´  r¼  r   r¯  )r2   ÚtrigsÚmaskedr¸  rd   r¾  r…   s      @@@@r3   Úhyper_as_trigrÃ  ÿ  sË   øøøø€ ð4 1Ð0Ð0Ð0Ð0Ð0Ø.Ð.Ð.Ð.Ð.Ð.ð �HŠHÕ*Ñ+Ô+€EØ(Ð( %Ð(Ñ(Ô(€DØ�[Š[�˜d™œÑ$Ô$€Fð %Ð$˜tÐ$Ñ$Ô$€Då‰Œ€Aå�F˜AÑÔð !@ð !@ð !@ð !@ð !@ð !@ð !@ð @ð @r5   c                 ó˜   — |                       t          t          ¦  «        s| S t          t	          t          | ¦  «        ¦  «        ¦  «        S )a½  Convert products and powers of sin and cos to sums.

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

    Applied power reduction TRpower first, then expands products, and
    converts products to sums with TR8.

    Examples
    ========

    >>> from sympy.simplify.fu import sincos_to_sum
    >>> from sympy.abc import x
    >>> from sympy import cos, sin
    >>> sincos_to_sum(16*sin(x)**3*cos(2*x)**2)
    7*sin(x) - 5*sin(3*x) + 3*sin(5*x) - sin(7*x)
    )r~  r    r!   rÀ   r   rr  )Úexprs    r3   Úsincos_to_sumrÆ  *  s;   € ð& �8Š8•C�ÑÔð .Øˆå•:�g d™mœmÑ,Ô,Ñ-Ô-Ð-r5   )F)r‡   Frà   rJ   )NT)rÚcollectionsr   Úsympy.core.addr   Úsympy.core.cacher   Úsympy.core.exprr   Úsympy.core.exprtoolsr   r	   r
   Úsympy.core.functionr   Úsympy.core.mulr   Úsympy.core.numbersr   r   Úsympy.core.powerr   Úsympy.core.singletonr   Úsympy.core.sortingr   Úsympy.core.symbolr   Úsympy.core.sympifyr   Úsympy.core.traversalr   Ú(sympy.functions.combinatorial.factorialsr   Ú%sympy.functions.elementary.hyperbolicr   r   r   r   r   r   r   Ú(sympy.functions.elementary.trigonometricr    r!   r"   r#   r$   r%   r&   r'   Úsympy.ntheory.factor_r(   Úsympy.polys.polytoolsr)   Úsympy.strategies.treer*   Úsympy.strategies.corer+   r,   Úsympyr-   r4   r@   rC   r‚   r˜   r¡   r¬   r²   r¶   r¹   rÀ   râ   ræ   rø   rý   r  r  r/  r4  rA  rI  rS  r\  r`  rf  rr  ru  r|   r  ÚCTR1ÚCTR2ÚCTR3ÚCTR4r|  r}  r{  rá   rÚ   Úfufuncsr¼  ÚzipÚlocalsÚgetÚFUrŠ  rô   rõ   rÔ   r  r¯  r¶  rÃ  rÆ  r]   r5   r3   ú<module>ræ     s×  ðØ #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø #Ð #Ð #Ð #Ð #Ð #Ø &Ð &Ð &Ð &Ð &Ð &Ø *Ð *Ð *Ð *Ð *Ð *Ø =Ð =Ð =Ð =Ð =Ð =ð<ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð <ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?à /Ð /Ð /Ð /Ð /Ð /Ø (Ð (Ð (Ð (Ð (Ð (Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à Ð Ð Ð Ð Ð ð)ð )ð )ðð ð ð0ð ð ð<qð qð qð qðh.ð .ð .ðb5ð 5ð 5ð@=ð =ð =ð@Bð Bð Bð Bð*Bð Bð Bð Bð*ð ð ð0Hð Hð Hð HðV[ð [ð [ð|-ð -ð -ð -ð`}ð }ð }ð@Mð Mð Mð Mð`:ð :ð :ðz ð  ð  ð  ðFxð xð xðv,ð ,ð ,ð^tð tð tðnvð vð vð vðrð ð ð ðBð ð ð ðBð ð ð@ð ð ð ð:+ð +ð +ð\.ð .ð .ð" ð <ð €tˆCˆC�Øˆ#ˆs�C˜˜c 3¨¨S°#°t¸TÀ4ÈØˆ(�D˜$  e¨U°Dð:ñ;ô ;ñ <ô <ñ€Sˆ#ˆs�C˜˜c 3¨¨S°#°t¸TÀ4ÈØˆ(�D˜$  e¨U°Dð 
ˆcˆ
�S˜#�J Ð)€à��Sˆz˜C ˜: sÐ+Ð,€à	�3˜Ð˜x¨¨e°SÐ9¸8ÐD€à	ˆeˆ�hÐ€à
ˆC��d˜C  s¨CÐ0€ð 	ˆ#ˆt�S˜#˜tÐ$Øˆ#ˆt�SÐØ	ˆ4��d˜C  c¨4Ð0Øð	€ð 3Ð2ð X*ð X*ð X*ð X*ðv'ð 'ð 'ð 'ðT!÷ "'¢¡¤ð ð 
€Tˆ$ˆ$ˆsˆs�7˜D˜D   V V¡X¤X¤\°7Ñ!;Ô!;Ñ<Ô<Ñ=Ô=Ñ
>Ô
>Ñ?Ô?€ð 	ðð ñ 	„ðð 	ðð ñ 	„ðð 	ðð ñ 	„ððo7ð o7ð o7ð o7ðd6ð 6ð 6ðr%ð %ð %ðP$ð $ð $ðN(@ð (@ð (@ðV.ð .ð .ð .ð .r5   