K iddlmZddlmZddlmZddlmZddlm Z m Z m Z m Z ddl mZmZmZmZddlmZddlmZmZmZmZmZdd lmZmZdd lmZdd lm Z m!Z!dd l"m#Z#dd l$m%Z%m&Z&ddl'm(Z(m)Z)ddl*m+Z,m-Z-m.Z.ddl/m0Z0m1Z1ddl2m3Z3ddl4m5Z5m6Z6m7Z7ddl8m9Z9ddl:m;Z;mm?Z?ddl@mAZAddlBmCZCddlDmEZEdZFGdde ZGedZHdZId@dAdZJGdd eGZKGd!d"eGZLGd#d$eGZMGd%d&eGZNGd'd(eGZOGd)d*eOZPGd+d,eOZQGd-d.e ZRGd/d0e ZSGd1d2eSZTGd3d4eSZUGd5d6eSZVGd7d8eSZWGd9d:eSZXGd;deSZZy?)B) annotations)Add)cacheit)Expr)DefinedFunctionArgumentIndexError PoleError expand_mul) fuzzy_notfuzzy_or FuzzyBool fuzzy_and)Mod)RationalpiIntegerFloat equal_valued)NeEq)S)SymbolDummy)sympify) factorialRisingFactorial) bernoullieuler)argimre)logexp)floor)sqrtMinMax) Piecewise) cos_table ipartfrac fermat_coords)And) factorint)symmetric_poly)numbered_symbolscbt|try|jtjS)z; Helper to extract symbolic coefficient for imaginary unit N) isinstanceras_coefficientr ImaginaryUnit)rs n/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/functions/elementary/trigonometric.py_imaginary_unit_as_coefficientr5!s$#u!!!//22cReZdZdZdZej fZdZdZ d dZ d dZ d dZ y) TrigonometricFunctionz(Base class for trigonometric functions. Tc|j|j}|j|jk(r>|jdjr$t|jdjryyy|jSNrF)funcargs is_rationalr is_zeroselfss r4_eval_is_rationalz'TrigonometricFunction._eval_is_rational3sd DIItyy ! 66TYY vvay$$166!93D3D)E*F$== r6cH|j|j}|j|jk(ret|jdjr|jdjryt |jd}||j ryyy|jSNrFT)r;r<r r> is_algebraic _pi_coeffr=)r@rApi_coeffs r4_eval_is_algebraicz(TrigonometricFunction._eval_is_algebraic;s DIItyy ! 66TYY 1--.499Q<3L3L 1.H#(<(<)=#>> !r6c \|jdd|i|\}}||tjzzS)Ndeep) as_real_imagrr3)r@rJhintsre_partim_parts r4_eval_expand_complexz*TrigonometricFunction._eval_expand_complexFs5,4,,@$@%@000r6c |jdjrV|r5d|d<|jdj|fi|tjfS|jdtjfS|r5|jdj|fi|j \}}||fS|jdj \}}||fS)NrFcomplex)r<is_extended_realexpandrZerorL)r@rJrMr!r s r4 _as_real_imagz#TrigonometricFunction._as_real_imagJs 99Q< ( (#(i + ! ++D:E:AFFCC ! aff-- (TYYq\((77DDFFBBxYYq\..0FBBxr6Nct|jd}|t|jd}|j |st j S||k(r|S||jvr||jr'|j|\}}||k(r|t|z S|jr=|j|\}}|j|d\}}||k(r|t|z Std)NrF)as_Addz%Use the periodicity function instead.) r r<tuple free_symbolshasrrUis_Mulas_independentabsis_AddNotImplementedError)r@general_periodsymbolfghas r4_periodzTrigonometricFunction._periodWs tyy| $ >1>>*1-FuuV}66M ;! ! Q^^ #xx''/1;)#a&00xx''/1''u'=1;)#a&00!"IJJr6TN) __name__ __module__ __qualname____doc__ unbranchedrComplexInfinity_singularitiesrBrHrPrVrgrKr6r4r8r8-s22J'')N! "1 Kr6r8c ddddddddd S) N))rs)rt)ru )ru)rwrv))(<) rxryrzr{xrKrKr6r4_table2rqs&          r6ctj}g}tj|D]<}|j t }|r|j r||z },|j|>|tjur|tjfS|tjz}||z }|jsd|zjr#|jdurt||t zgz|fS|tjfS)a Split ARG into two parts, a "rest" and a multiple of $\pi$. This assumes ARG to be an Add. The multiple of $\pi$ returned in the second position is always a Rational. Examples ======== >>> from sympy.functions.elementary.trigonometric import _peeloff_pi >>> from sympy import pi >>> from sympy.abc import x, y >>> _peeloff_pi(x + pi/2) (x, 1/2) >>> _peeloff_pi(x + 2*pi/3 + pi*y) (x + pi*y + pi/6, 1/2) F) rrUr make_argscoeffrr=appendHalf is_integeris_even)rrG rest_termsrfKm1m2s r4 _peeloff_pirs$vvHJ ]]3 ! GGBK  MH   a !166AFF{ QVV B BB }}!B$**rzzU/BZ2b5')+R// ;r6c|turtjS|stjS|jr |j t}|r|j \}}|jrt|dz}|dk7r`ttt|dj }d|z}||z}t|} t| |r+t| |}||z}ntt|}||z}|jr:|dz} | dk(r|S| s'|j tjSt#dS| |zS|Sy|j$rtjSy)a6 When arg is a Number times $\pi$ (e.g. $3\pi/2$) then return the Number normalized to be in the range $[0, 2]$, else `None`. When an even multiple of $\pi$ is encountered, if it is multiplying something with known parity then the multiple is returned as 0 otherwise as 2. Examples ======== >>> from sympy.functions.elementary.trigonometric import _pi_coeff >>> from sympy import pi, Dummy >>> from sympy.abc import x >>> _pi_coeff(3*x*pi) 3*x >>> _pi_coeff(11*pi/7) 11/7 >>> _pi_coeff(-11*pi/7) 3/7 >>> _pi_coeff(4*pi) 0 >>> _pi_coeff(5*pi) 1 >>> _pi_coeff(5.0*pi) 1 >>> _pi_coeff(5.5*pi) 3/2 >>> _pi_coeff(2 + pi) >>> _pi_coeff(2*Dummy(integer=True)*pi) 2 >>> _pi_coeff(2*Dummy(even=True)*pi) 0 rrN)rrOnerUr\r as_coeff_Mulis_Floatr^introundr"evalfrrrrrr>) rcyclescxcxrcpmcmic2s r4rFrFs6J byuu vv  YYr] ??$DAqzzFQJ6U3q!9??#4566A1A1BBA#Ar*$QNqS Q(A1B||U7Hyy, vv "1:%a4KI  vv r6ceZdZdZddZddZedZee dZ dfd Z dZ dZ d Zd Zd Zd Zd ZdZdZdZdZdZdZddZdZdZdZdZdZdZxZ S)sina The sine function. Returns the sine of x (measured in radians). Explanation =========== This function will evaluate automatically in the case $x/\pi$ is some rational number [4]_. For example, if $x$ is a multiple of $\pi$, $\pi/2$, $\pi/3$, $\pi/4$, and $\pi/6$. Examples ======== >>> from sympy import sin, pi >>> from sympy.abc import x >>> sin(x**2).diff(x) 2*x*cos(x**2) >>> sin(1).diff(x) 0 >>> sin(pi) 0 >>> sin(pi/2) 1 >>> sin(pi/6) 1/2 >>> sin(pi/12) -sqrt(2)/4 + sqrt(6)/4 See Also ======== csc, cos, sec, tan, cot asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Sin .. [4] https://mathworld.wolfram.com/TrigonometryAngles.html c4|jdtz|SNrrgrr@rbs r4periodz sin.period#||AbD&))r6cT|dk(rt|jdSt||Nrr)cosr<rr@argindexs r4fdiffz sin.fdiff&s) q=tyy|$ $$T84 4r6c R ddlm}ddlm}|jri|t j urt j S|jrt jS|t jt jfvr |ddS|t jurt j St||r9ddl m}|j|j }}t#|dt$zz }|t jur||dzt$zz }|t jur||dzt$zz }|||j'|t$dz t$t)ddzt j*urZ|||j'|t$t)d dzt$t)d dzt j*ur |ddS|||j'|t$dz t$t)ddzt j*ur%|t-t/|t/|dS|||j'|t$t)d dzt$t)d dzt j*ur%|dt1t/|t/|S|t-t/|t/|t1t/|t/|St||r|j3|S|j5r ||  St7|}|dd lm} t j<| |zSt?|} | | j@rt jSd| zj@r2| jBd ur$t jD| t jFz zS| jHs| t$z} | |k7r|| Sy| jHr| dz} | dkDr|| dzt$z Sd| zdkDr|d| z t$zS| t)d dzdzt$z} tK| } t| tJs| S| t$z|k7r|| t$zSy|jLrHtO|\} }|r8|t$z}t/|tK| ztK|t/| zzS|jrt jSt|tPr|jRdSt|tTr#|jRd} | tWd| dzzz St|tXr&|jR\}} |tW| dz|dzzz St|tZr |jRd} tWd| dzz St|t\r)|jRd} dtWdd| dzz z| zz St|t^r|jRd} d| z St|t`r#|jRd} tWdd| dzz z Sy)Nr AccumBoundsSetExprr FiniteSetrrtrrrw)sinhF)1!sympy.calculus.accumulationboundsrsympy.sets.setexprr is_NumberrNaNr>rUInfinityNegativeInfinityror1sympy.sets.setsrminmaxr$r intersectionrEmptySetr&rr' _eval_funccould_extract_minus_signr5%sympy.functions.elementary.hyperbolicrr3rFrr NegativeOner is_Rationalrr_rasinr<atanr%atan2acosacotacscasec)clsrrrrrrdi_coeffrrGnargrresultrys r4evalzsin.eval,s:A. ==aee|uu vv Q%7%788"2q)) !## #55L c; ' 1wwCc1R4j!A!,,,AaCFl!**$AaCFl3$11)BqD"XaQR^BS2TU::&S)66yHQPQNAR8Aq>)8+,34::>"2q))S#&33IbdBxPQST~DU4VW::&"3s3xS#:A>>S#&33Ib!Q>OQST\]^`aTbQb4cd zz*"2s3s8SX'>??"3s3xS#: #CHc#h 799 W %>>#& &  ' ' )I: 05   B??4=0 0S>  ""vv ( &&##u,==8aff+<==''{3;t9$##qLq5Q O++Q37Arz?*!HQN2a7;T!&#.!MB;#%x{++ ::s#DAqbD1vc!f}s1vc!f}44 ;;66M c4 88A;  c4  AT!ad(^# # c5 !88DAqT!Q$A+&& & c4  AAqD> ! c4  Ad1qAv:&q() ) c4  AQ3J c4  AAadF # # !r6c|dks|dzdk(rtjSt|}t|dkDr|d}| |dzz||dz zz Stj|dzz||zzt |z SNrrrrrUrlenrrnrprevious_termsrs r4 taylor_termzsin.taylor_term q5AEQJ66M A>"Q&"2&r!Q$w1q5 **}}q!t,QT1)A,>>r6c|jd}||jt||}|j|djtj tj rtd|zt|%||||SNrzCannot expand %s around 0)rlogxcdir r<subsr"r[rrror super _eval_nseriesr@rrrrr __class__s r4rzsin._eval_nseriesxiil  ((3q64(C 88Aq>  aeeQ%6%6 774@A Aw$Q!$T$BBr6c ddlm}tj}t |t |fr1|j |jdjt}t||zt| |zz d|zz SNrHyperbolicFunctionr rrrr3r1r8r;r<rewriter#)r@rkwargsrIs r4_eval_rewrite_as_expzsin._eval_rewrite_as_expsfL OO c13EF G((388A;'//4CCE S#a[(1Q3//r6c t|tr7tj}|jd}||| zzdz |||zzdz z SyNrrr1r"rr3r<r@rrrrs r4_eval_rewrite_as_Powzsin._eval_rewrite_as_PowsL c3 A AQU719qAvqy( ( r6c 0t|tdz z dSNrFevaluaterrr@rrs r4_eval_rewrite_as_coszsin._eval_rewrite_as_cos3A:..r6c Vttj|z}d|zd|dzzz SNrrtanrrr@rrtan_halfs r4_eval_rewrite_as_tanzsin._eval_rewrite_as_tans*qvvcz?z1x{?++r6c Ht|t|zt|z Srirrrs r4_eval_rewrite_as_sincoszsin._eval_rewrite_as_sincos3xC S))r6c ttj|z}tdt t t |dt t|tdfd|zd|dzzz dfS)NrrrT cotrrr(r,rr rrr@rrcot_halfs r4_eval_rewrite_as_cotzsin._eval_rewrite_as_cots^qvvcz?!SBsGQCRL!1DEFH*a(A+o6=? ?r6c Z|jtfi|jtfi|Sri)rrpowrs r4_eval_rewrite_as_powzsin._eval_rewrite_as_pows*2|t||C*6*223A&AAr6c Z|jtfi|jtfi|Sri)rrr%rs r4_eval_rewrite_as_sqrtzsin._eval_rewrite_as_sqrts*2|t||C*6*224B6BBr6c dt|z SNrcscrs r4_eval_rewrite_as_csczsin._eval_rewrite_as_cscSzr6c 6dt|tdz z dz S)NrrFrsecrrs r4_eval_rewrite_as_seczsin._eval_rewrite_as_secsS2a4Z%000r6c |t|zSri)sincrs r4_eval_rewrite_as_sinczsin._eval_rewrite_as_sincs49}r6c hddlm}tt|zdz |tj |zS)Nrbesseljrsympy.functions.special.besselr%r%rrrr@rrr%s r4_eval_rewrite_as_besseljzsin._eval_rewrite_as_besseljs':BsF1H~gaffc222r6cZ|j|jdjSNrr;r< conjugater@s r4_eval_conjugatezsin._eval_conjugate"yy1//122r6c ddlm}m}|jdd|i|\}}t |||zt |||zfSNrcoshrrJrK)rr4rrVrrr@rJrMr4rr!r s r4rLzsin.as_real_imagsHD###777BBR #b'$r("233r6c ddlm}m}|jd}d}|jr|j \}}t |dj}t |dj}t|dj} t|dj} || z|| zzS|jr|jd\} }| jr~| jr,tj| dz dz z|| t |zSttj| dz dz zt|z|| dz t |zd St |S) Nr) chebyshevt chebyshevuFrTrationalrr)rJ)#sympy.functions.special.polynomialsr7r8r<r_ as_two_termsr_eval_expand_trigrr\r is_Integeris_oddrrr ) r@rMr7r8rrrsxsyrcyrs r4r=zsin._eval_expand_trigs:Niil  ::##%DAqQ'99;BQ'99;BQ'99;BQ'99;Bb52b5= ZZ##T#2DAq||88==AE195jCF6KKK%ammacAg&>s1v&E&0QA&?'@FKMM3xr6cddlm}|jd}|j|dj }|t z }|j r1||t zz j|}tj|z|zS|tjur+|j|dt|jrdnd}|tjtjfvr |ddS|j r|j#|S|S)Nrr-+dirrrrrr<rcancelrras_leading_termrrrolimitr! is_negativerr is_finiter; r@rrrrrx0rlts r4_eval_as_leading_termzsin._eval_as_leading_termsAiil XXa^ " " $ rE <<"*--a0BMM1$b( ( "" "1aBtH,@,@ScJB !**a001 1r1% % " tyy}6$6r6c8|jdjryyNrTr<rSr.s r4_eval_is_extended_realzsin._eval_is_extended_real 99Q< ( ( )r6c<|jd}|jryyrSrTr@rs r4_eval_is_finitezsin._eval_is_finites iil    r6cjt|jd\}}|jr |jSyr+rr<r>rr@restpi_mults r4 _eval_is_zerozsin._eval_is_zero0#DIIaL1 g <<%% % r6cj|jdjs|jdjryyrSr<rS is_complexr.s r4_eval_is_complexzsin._eval_is_complex#s, 99Q< ( (99Q<**+r6rirrrh)!rjrkrlrmrr classmethodr staticmethodrrrrrrrr rrrrrr"r)r/rLr=rQrUrYr_rd __classcell__rs@r4rrs-^*5 r$r$h  ?  ?C0) /,*? BC1334 2 7 & r6rceZdZdZddZddZedZee dZ dfd Z dZ dZ d Zd Zd Zd Zd ZddZdZdZdZdZddZdZdZdZdZdZdZxZS)ra The cosine function. Returns the cosine of x (measured in radians). Explanation =========== See :func:`sin` for notes about automatic evaluation. Examples ======== >>> from sympy import cos, pi >>> from sympy.abc import x >>> cos(x**2).diff(x) -2*x*sin(x**2) >>> cos(1).diff(x) 0 >>> cos(pi) -1 >>> cos(pi/2) 0 >>> cos(2*pi/3) -1/2 >>> cos(pi/12) sqrt(2)/4 + sqrt(6)/4 See Also ======== sin, csc, sec, tan, cot asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Cos c4|jdtz|Srrrs r4rz cos.periodUrr6cV|dk(rt|jd St||r)rr<rrs r4rz cos.fdiffXs, q= ! %% %$T84 4r6c ddlm}ddlm}ddlm}|j ri|tjurtjS|jrtjS|tjtjfvr |ddS|tjurtjSt||rt|t dz zSt||r|j#|S|j$r|j&dur |ddS|j)r || St+|}|dd lm}||St1|}||j2rtj4|zSd|zj2r|j6durtj8S|j:s|t z}||k7r||Sy|j:r|j<} |j>d| zz} | | kDr|dz t z}|| Sd| z| kDrd|z t z}|| StA} | | vrb| | \} } | t z| z | t z| z } } || || }}d||fvry||z|t dz | z |t dz | z zzS| d kDrytjBtEd dzd z d }| |vr0||j<}||j>|jGSd| dzk(rZ|dzt z}||}d|k(ryd|zdzdz }d|dkrdndtItK|zz}|tEd|zdz zSy|jLrHtO|\}}|r8|t z}tQ|tQ|zt|t|zz S|jrtjSt|tRr|jTdSt|tVr#|jTd}dtEd|dzzz St|tXr&|jT\}}|tE|dz|dzzz St|tZr |jTd}tEd|dzz St|t\r&|jTd}dtEdd|dzz zz St|t^r#|jTd}tEdd|dzz z St|t`r|jTd}d|z Sy)Nrr7rrrrrF)r4r|rtrs)rrrt)1r;r7rrrrrrrr>rrrror1rrrrSrMrr5rr4rFrrrrUrqrrrr%rTrr^r_rrrr<rrrrrr)rrr7rrrr4rGrrprtable2rfbnvalanvalbcst_table_somectsnvalrsign_cosrrs r4rzcos.eval^sBA. ==aee|uu uu Q%7%788 #2q)) !## #55L c; 'sRTz? " W %>>#& &   CMMU$:r1% %  ' ' )t9 05   B= S>  "" 00( &&##u,66M''{3;t9$##JJJJ!A#&q5$qL",DI:%Q37L",DI:% !;!!9DAqR461R46qA#&q63q65Eu~-# ;RTAXs2a4!8})DDDr6vvQ! q("&(4C%hjj#6==??A:$QJ?Dt9Dt|#8a*A "QUr3s1v;&FGH#D1t8Q,$888 ::s#DAqbD1vc!f}s1vc!f}44 ;;55L c4 88A;  c4  AT!ad(^# # c5 !88DAqT!Q$A+&& & c4  AAF # # c4  AT!a1f*%% % c4  AAadF # # c4  AQ3J !r6c|dks|dzdk(rtjSt|}t|dkDr|d}| |dzz||dz zz Stj|dzz||zzt |z S)Nrrrrrrs r4rzcos.taylor_termrr6c|jd}||jt||}|j|djtj tj rtd|zt|%||||Srrrs r4rzcos._eval_nseriesrr6c tj}ddlm}t |t |fr3|j |jdjtfi|}t||zt| |zzdz Sr rr3rrr1r8r;r<rr#)r@rrrrs r4rzcos._eval_rewrite_as_expsi OOL c13EF G/#((388A;'//>v>CCE S#a[(!++r6c t|tr1tj}|jd}||zdz || zdz zSyrrrs r4rzcos._eval_rewrite_as_PowsD c3 A Aa46ArE!G# # r6c 0t|tdz zdSr)rrrs r4_eval_rewrite_as_sinzcos._eval_rewrite_as_sin rr6c Vttj|zdz}d|z d|zz Srrrs r4rzcos._eval_rewrite_as_tans+qvvcz?A%H q8|,,r6c Ht|t|zt|z Srirrs r4r zcos._eval_rewrite_as_sincosr r6c ttj|zdz}tdt t t |dt t|dtzdf|dz |dzz dfS)NrrrTr rs r4rzcos._eval_rewrite_as_cotseqvvcz?A%!SBsGQCQrTNA1FGH#a<(Q,7>@ @r6c (|j|fi|Sri)rrs r4rzcos._eval_rewrite_as_pows)t))#888r6c ddlm}t|yttrytt syt }j|vrF|j|j}jdkr|j}|SjdzsZdz}t|tzjtfi|}|dzdz }t|dzrdnd} | td|zdz zStj} | r| } n8t!jj#D cgc] \} } | | z } } } t%| }fdt'|| D}t'|t)dDcgc]}|d|dtzf}}tt+d |Dj-j/|}| rt1| dk(r|S|jtfi|Scc} } wcc}w) Nrroirrrc3VK|] \}}jt||z"ywri)rr).0rrrGs r4 z,cos._eval_rewrite_as_sqrt..Bs$M$!Q(**x1~-Ms&)zc3&K|] }|d yw)rNrK)rrs r4rz,cos._eval_rewrite_as_sqrt..Ds'qt's)r;r7rFr1rrr)rprrTrrrr%rr+r-itemsr*zipr/sumr=rr)r@rrr7rurvpico2rwrrxFCdenomsrreapartdecompXpclsrGs @r4rzcos._eval_rewrite_as_sqrtsBS>   h ((H-" :: 'HJJ(Bxzz(B(DEBzzCYY[IzzA~qLE*3urz?**4:6:DaA VaZrQHdAH>22 2 8:: & F'0'<'B'B'DEtq!adEFE6"M#eV:LM&)&2B32G&H IadAaDG_ I I3'Q''(::<AA!DSW\Kt||D+F++F Js ?HHc dt|z Srrrs r4rzcos._eval_rewrite_as_secJrr6c Hdt|jtfi|z Sr)rrrrs r4rzcos._eval_rewrite_as_cscM$!S!!#0000r6c ddlm}ttt|zdz |t j |zt|dfdS)Nrr$rrTr'r%r(r%rrrrr(s r4r)zcos._eval_rewrite_as_besseljPsA:bfQh 55r#qzB r6cZ|j|jdjSr+r,r.s r4r/zcos._eval_conjugateWr0r6c ddlm}m}|jdd|i|\}}t |||zt | ||zfSr2)rr4rrVrrr5s r4rLzcos.as_real_imagZsJD###777BBR 3r7(48"344r6c ddlm}|jd}d}|jr|j \}}t |dj }t |dj }t|dj }t|dj } || z||zz S|jr3|jd\} } | jr|| t| St|S)NrroFrTr9) r;r7r<r_r<rr=rr\rr>) r@rMr7rrrr@rArrBrtermss r4r=zcos._eval_expand_trig_sBiil  ::##%DAqQ'99;BQ'99;BQ'99;BQ'99;Bb52b5= ZZ++T+:LE5!%U443xr6c.ddlm}|jd}|j|dj }|t dz zt z }|j r;||t zz t dz zj|}tj|z|zS|tjur+|j|dt|jrdnd}|tjtjfvr |ddS|j r|j#|S|S) NrrrrDrErFrrrHrNs r4rQzcos._eval_as_leading_termpsAiil XXa^ " " $ "Q$YN <<"*r!t#44Q7BMM1$b( ( "" "1aBtH,@,@ScJB !**a001 1r1% % " tyy}6$6r6c8|jdjryyrSrTr.s r4rUzcos._eval_is_extended_real~rVr6c<|jd}|jryyrSrTrXs r4rYzcos._eval_is_finites iil    r6cj|jdjs|jdjryyrSrbr.s r4rdzcos._eval_is_complexs, 99Q< ( (yy|&&'r6ct|jd\}}|jr |r|tjz j Syyr+rr<r>rrrr\s r4r_zcos._eval_is_zeros=#DIIaL1 g <>> from sympy import tan, pi >>> from sympy.abc import x >>> tan(x**2).diff(x) 2*x*(tan(x**2)**2 + 1) >>> tan(1).diff(x) 0 >>> tan(pi/8).expand() -1 + sqrt(2) See Also ======== sin, csc, cos, sec, cot asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Tan c.|jt|Srirrs r4rz tan.period||B''r6cP|dk(rtj|dzzSt||Nrr)rrrrs r4rz tan.fdiffs( q=5547? "$T84 4r6ctSz7 Returns the inverse of this function. rrs r4inversez tan.inverse  r6c  ddlm}|jr|tjurtjS|j rtj S|tjtjfvr%|tjtjS|tjurtjSt||r|j|j}}t|tz }|tjur ||tzz }|tjur ||tzz }ddlm}|||j#|tdz tt%ddzr%|tjtjS|t'|t'|S|j)r ||  St+|}|ddlm}tj0||zSt3|d} | T| j4rtj S| j6s| tz} | |k7r|| Sy| j6r| j8} | j:| z} t=ddt=dzdz z t=ddt=dzz t=ddt=dzdz zt=ddt=dzzd } | d vrd | z| z }|dkDr d |z }| | S| |S| j8dzsl| tzdz} t?| t?| tdz z }}t|t>s0t|t>s |dk(rtjSd|z ||z z StA}| |vrA|| \}}|| tz|z || tz|z }}d||fvry||z d||zzz S| tjBzdztjBz tz} t?| t?| tdz z }}t|t>s*t|t>s|dk(rtjS||z S| |k7r|| S|jDrKtG|\}}|r;t'|tz}|tjur tI| St'|S|j rtj St|tJr|jLdSt|tNr|jL\}}||z St|tPr#|jLd}|t=d|dzz z St|tRr#|jLd}t=d|dzz |z St|tTr|jLd}d|z St|tVr)|jLd}dt=dd|dzz z |zz St|tXr&|jLd}t=dd|dzz z |zSy) Nrrrrrr)tanhrrt)rrrrrsrtrvrv)-rrrrrr>rUrrror1rrr$rrrrrrrr5rrr3rFrrrprr%rrrr_rr rr<rrrrrr)rrrrrrrrrrGrrprtable10rcresultsresultrqrfrrrsrtrrtanmrs r4rztan.evals:A ==aee|uu vv Q%7%788"1#5#5qzzBB !## #55L c; 'wwCc"f A!,,,AbDj!**$AbDj 13$11)BqD"XaQR^BS2TU"1#5#5qzzBB"3s8SX66  ' ' )I: 05   B??4=0 0S!$  ""vv ''{3;t9$##JJJJNA$q' ! O,A$q' M*A$q' ! O,A$q' M*  <1QA1uF ' {*&qz)zzA~#B;q=D'*4y#dRTk2BWG%gs3$.w$<"a<#$#4#44 y77?:: ;!!9DAq#&qtAv;AbDF 5Eu~-#!EMAe O<<!AFF*a/!&&8"<$'t9c$A+.>!'3/ *7C 8!| 000#GO,3;t9$ ::s#DAq1R4y1,,,F7Nq6M ;;66M c4 88A;  c5 !88DAqQ3J c4  AT!ad(^# # c4  AAqD>!# # c4  AQ3J c4  Ad1qAv:&q() ) c4  AAadF #A% % !r6c|dks|dzdk(rtjSt|}|dz dzd|dzz}}t|dz}t |dz}tj |z|z|dz z|z|z ||zzSNrrr)rrUrrrr)rrrrfrrBFs r4rztan.taylor_termJs q5AEQJ66M AUQJQUqA!a% A!a% A==!#A%q1u-a/1!Q$6 6r6c|jdj|ddztz }|r3|jr'|j t j |||St||||S)Nrrrr)r<rKrr>rrrr)r@rrrrrrs r4rztan._eval_nseriesYsh IIaL  q! $Q &r ) <<$2212E Ew$Q!$$77r6c t|tr;tj}|jd}||| z||zz z|| z||zzz Syr+rrs r4rztan._eval_rewrite_as_Pow_sS c3 A Aa!eadl#QUQT\2 2 r6cZ|j|jdjSr+r,r.s r4r/ztan._eval_conjugateer0r6c |jdd|i|\}}|rAddlm}m}t d|z|d|zz}t d|z|z |d|z|z fS|j |tjfSNrJrr3rrK rVrr4rrrr;rrUr@rJrMr!r r4rdenoms r4rLztan.as_real_imaghs{###777B H"IQrT *E"IeOT!B$Z%56 6IIbM166* *r6c j|jd}d}|jrt|j}g}|jD].}t|dj }|j |0t d}t|Dcgc] }t|} }ddg} t|dzD]+}| d|dzz xxt|| d|dzdzzzz cc<-| d| dz jtt| |S|jr|jd \} } | jrm| dkDrht j"} t%d d }d| |zz| zj'}t)|t+|z j|t| fgSt|Scc}w) NrFrYrrrrsTr9dummyreal)r<r_rrr=rr/rangenextr.rlistrr\rr>rr3rrTr r!)r@rMrrrTXtxYgrrrrrrrPs r4r=ztan._eval_expand_trigqsiil  ::CHH ABXX U+==? "  "#&B$)!H.q$r(.A.AA1q5\ H!a!e) q! 4bQUQJ5G GG  HaD1I##DQ$45 5 ZZ++T+:LE5EAIOO7.!A#g%--/1be ))As5z?*;<<3x/s F0c  tj}ddlm}t |t |fr1|j |jdjt}t| |zt||z}}|||z z||zz SNrrr|)r@rrrrneg_exppos_exps r4rztan._eval_rewrite_as_expsu OOL c13EF G((388A;'//4CtAv;CE 'G#$g&788r6c Bdt|dzztd|zz Srrr@rrs r4rztan._eval_rewrite_as_sins!Q{3qs8##r6c Ht|tdz z dt|z Srrrs r4rztan._eval_rewrite_as_coss 1r!t8e,SV33r6c 0t|t|z Srirrs r4r ztan._eval_rewrite_as_sincos3xC  r6c dt|z Srr rs r4rztan._eval_rewrite_as_cotrr6c t|jtfi|}t|jtfi|}||z Sri)rrrr)r@rrsin_in_sec_formcos_in_sec_forms r4rztan._eval_rewrite_as_secC*#c(**39&9*#c(**39&9..r6c t|jtfi|}t|jtfi|}||z Sri)rrrr)r@rrsin_in_csc_formcos_in_csc_forms r4rztan._eval_rewrite_as_cscrr6c |jtfi|jtfi|}|jtry|Srirrrr[r@rrrs r4rztan._eval_rewrite_as_pow< /LDLL ' ' / / >v > 55:r6c |jtfi|jtfi|}|jtry|Srirrr%r[rs r4rztan._eval_rewrite_as_sqrt< /LDLL ' ' / / ? ? 55:r6c nddlm}|tj||tj |z SNrr$r'r%rrr(s r4r)ztan._eval_rewrite_as_besseljs(:qvvs#GQVVGS$999r6cJddlm}ddlm}|jd}|j |dj }d|ztz }|jr1||tzdz z j|} |jr| Sd| z S|tjur(|j|d||jrdnd}|tjtj fvr%|tj tjS|j"r|j%|S|S) Nrrr!rrrDrErFrr$sympy.functions.elementary.complexesr!r<rrIrrrJrrrorKrLrrrMr; r@rrrrr!rrOrrPs r4rQztan._eval_as_leading_termsA;iil XXa^ " " $ bDG <<"Q,//2B2 -2 - "" "1aBtH,@,@ScJB !**a001 1q111::> > " tyy}6$6r6c4|jdjSr+rTr.s r4rUztan._eval_is_extended_realsyy|,,,r6c|jd}|jr(|tz tjz j duryyyrDr<is_realrrrrrXs r4 _eval_is_realztan._eval_is_reals:iil ;;CFQVVO775@A;r6c|jd}|jr'|tz tjz j dury|j ryyrD)r<rrrrr is_imaginaryrXs r4rYztan._eval_is_finitesCiil ;;CFQVVO775@    r6cjt|jd\}}|jr |jSyr+r[r\s r4r_ztan._eval_is_zeror`r6c|jd}|jr(|tz tjz j duryyyrDrrXs r4rdztan._eval_is_complexs:iil ;;CFQVVO775@A;r6rirerfrh)"rjrkrlrmrrrrgrrhrrrrr/rLr=rrrr rrrrrr)rQrUrrYr_rdrirjs@r4rrs#J(5  &&B  7  78 3 3+69$4!/ /   : 7- & r6rceZdZdZddZddZddZedZe e dZ d dZ d Z d!d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!y)"r a The cotangent function. Returns the cotangent of x (measured in radians). Explanation =========== See :class:`sin` for notes about automatic evaluation. Examples ======== >>> from sympy import cot, pi >>> from sympy.abc import x >>> cot(x**2).diff(x) 2*x*(-cot(x**2)**2 - 1) >>> cot(1).diff(x) 0 >>> cot(pi/12) sqrt(3) + 2 See Also ======== sin, csc, cos, sec, tan asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Cot Nc.|jt|Srirrs r4rz cot.period rr6cP|dk(rtj|dzz St||r)rrrrs r4rz cot.fdiffs) q===47* *$T84 4r6ctSrrrs r4rz cot.inverserr6c ddlm}|jr|tjurtjS|j rtj S|tjtjfvr%|tjtjS|tj urtjSt||rt|tdz z S|jr ||  St|}| ddlm}tj ||zSt#|d}||j$rtj S|j&s|tz}||k7r||Sy|j&r|j(dvrttdz |z S|j(dkDrf|j(dzsW|tzdz}t+|t+|tdz z }}t|t*st|t*s d|z ||z zS|j(} |j,| z} t/} | | vrA| | \} } || tz| z || tz| z }}d||fvryd||zz||z z S|tj0zdztj0z tz}t+|t+|tdz z }}t|t*s*t|t*s|dk(rtj S||z S||k7r||S|j2rKt5|\}}|r;t7|tz}|tj ur t7|St| S|j rtj St|t8r|j:dSt|t<r|j:d}d|z St|t>r|j:\}}||z St|t@r#|j:d}tCd|dzz |z St|tDr#|j:d}|tCd|dzz z St|tFr&|j:d}tCdd|dzz z |zSt|tHr)|j:d}dtCdd|dzz z |zz Sy)Nrrr)cothrr)%rrrrrr>rorrr1rrrr5rrr3rFrrrprrrrr_rr rr<rrrr%rrr)rrrrrrGrrrrprrqrfrrrsrtrrcotmrs r4rzcot.evals&A ==aee|uu {{(((Q%7%788"1#5#5qzzBB !## #55L c; 'bd O# #  ' ' )I: 05   BOO#DM1 1S!$  ""(((''{3;t9$##::(r!tcz?*::>(**q.#B;q=D'*4y#dRTk2BWG%gs3$.w$< y77?::JJJJN ;!!9DAq#&qtAv;AbDF 5Eu~-#e Oeem<<"QVV+q0AFF:B>$'t9c$A+.>!'3/ *7C 8!| 000"7?*3;t9$ ::s#DAq1R4y1,,,q6MF7N ;;$$ $ c4 88A;  c4  AQ3J c5 !88DAqQ3J c4  AAqD>!# # c4  AT!ad(^# # c4  AAadF #A% % c4  Ad1qAv:&q() ) !r6c |dk(rdt|z S|dks|dzdk(rtjSt|}t|dz}t |dz}tj |dzdzzd|dzzz|z|z ||zzSNrrr)rrrUrrr)rrrrrs r4rzcot.taylor_terms 6WQZ<  Ua!eqj66M A!a% A!a% A==AEA:.q1q5z9!;A=adB Br6c|jdj|dtz }|r3|jr'|j t j |||S|j tj |||S)Nrr)r<rKrr>rrrr)r@rrrrrs r4rzcot._eval_nseriessl IIaL  q! $R ' <<$2212E E||C ..qAD.AAr6cZ|j|jdjSr+r,r.s r4r/zcot._eval_conjugater0r6c |jdd|i|\}}|rBddlm}m}t d|z|d|zz }t d|z |z |d|z|z fS|j |tjfSrrrs r4rLzcot.as_real_imags~###777B H"IQrT *E2YJu$d1R4j&67 7IIbM166* *r6c ddlm}tj}t |t |fr3|j |jdjtfi|}t| |zt||z}}|||zz||z z Srr)r@rrrrrrs r4rzcot._eval_rewrite_as_exps|L OO c13EF G/#((388A;'//>v>CtAv;CE 'G#$g&788r6c t|tr > " tyy}6$6r6c4|jdjSr+rTr.s r4rUzcot._eval_is_extended_realyy|,,,r6c h|jd}d}|jrt|j}g}|jD].}t|dj }|j |0t d}t|Dcgc] }t|} }ddg} t|ddD].}| ||z dzxxt|| d||z dzdzzzz cc<0| d| dz jtt| |S|jr|jd \} } | jrj| dkDret j"} t%d d }|| z| zj'}t)|t+|z j|t| fgSt|Scc}w) NrFrrrrrsrTr9rr)r<r_rr r=rr/rrr.rrrr\rr>rr3rrTr!r )r@rMrrrCXrrrrrrrrrrs r4r=zcot._eval_expand_trigsiil  ::CHH ABXX U+==? "  "#&B$)!H.q$r(.A.AA1b"% P1q5A+.A"6A{Q>N7O"OO PaD1I##DQ$45 5 ZZ++T+:LE5EAIOO7.!ee^++-1be ))As5z?*;<<3x/s F/c|jd}|jr|tz jdury|jryyrD)r<rrrrrXs r4rYzcot._eval_is_finites;iil ;;CF..%7    r6ch|jd}|jr|tz jduryyyrDr<rrrrXs r4rzcot._eval_is_real 1iil ;;CF..%78;r6ch|jd}|jr|tz jduryyyrDrrXs r4rdzcot._eval_is_complexrr6ct|jd\}}|r*|jr|tjz j Syyr+r)r@r]pimults r4r_zcot._eval_is_zeros<"499Q<0 f dllQVVO// /#6r6c|jd}|j||}||k7r#|tz jrtj St |Sr+)r<rrrrror )r@oldnewrargnews r4 _eval_subszcot._eval_subssHiil#s# &=fRi33$$ $6{r6rirerfrh)"rjrkrlrmrrrrgrrhrrrr/rLrrrrr rrrrrr)rQrUr=rYrrdr_r&rKr6r4r r s#J(5  f*f*P  C  CB 3+94 (4!/ /   : 7-4  0 r6r ceZdZUdZdZej fZdZde d<dZ de d<e dZ dZ dZd Zd Zdd Zd Zd ZdZdZdZdZdZdZddZdZdZdZdZddZy)ReciprocalTrigonometricFunctionz@Base class for reciprocal functions of trigonometric functions. Nr _is_even_is_oddc |jr+|jr || S|jr ||  St|}|d|zjs|j ru|j }|jd|zz}||kDr|dz tz}|| Sd|z|kDr5d|z tz}|jr||S|jr || St|dr"|j|k(r|jdS|jj|}||Std|| fDrd|z jt Std|| fDrd|z jt"Sd|z S)Nrrrrc3<K|]}t|tywri)r1rrrs r4rz7ReciprocalTrigonometricFunction.eval..P5As#5c3<K|]}t|tywri)r1rr-s r4rz7ReciprocalTrigonometricFunction.eval..Rr.r/)rr)r*rFrrrprrhasattrrr<_reciprocal_ofranyrrr)rrrGrprrts r4rz$ReciprocalTrigonometricFunction.eval2sp  ' ' )||C4y {{SD z!S>  xZ++$$JJJJ!A#&q5$qL",DI:%Q37L",D{{"4y( #D z) 3 "s{{}';88A;     # #C ( 9H 5a!W5 5aC==% % 5a!W5 5aC==% %Q3Jr6cb|j|jd}t|||i|Sr+)r2r<getattr)r@ method_namer<ros r4_call_reciprocalz0ReciprocalTrigonometricFunction._call_reciprocalWs3    ! -&wq+&777r6c@|j|g|i|}|d|z S|Sr)r9)r@r7r<rr4s r4_calculate_reciprocalz5ReciprocalTrigonometricFunction._calculate_reciprocal\s3 "D ! !+ ? ? ?mqs**r6c`|j||}|||j|k7rd|z Syyr)r9r2)r@r7rr4s r4_rewrite_reciprocalz3ReciprocalTrigonometricFunction._rewrite_reciprocalbs=  ! !+s 3 =Q$"5"5c"::Q3J;=r6crt|jd}|j|j|Sr+)r r<r2r)r@rbrcs r4rgz'ReciprocalTrigonometricFunction._periodis0 tyy| $""1%,,V44r6c4|jd| |dzz S)Nrrr;rs r4rz%ReciprocalTrigonometricFunction.fdiffms!**7H==dAgEEr6c &|jd|S)Nrr=rs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_expp''(>DDr6c &|jd|S)NrrBrs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_PowsrCr6c &|jd|S)NrrBrs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_sinvrCr6c &|jd|S)NrrBrs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_cosyrCr6c &|jd|S)NrrBrs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_tan|rCr6c &|jd|S)NrrBrs r4rz4ReciprocalTrigonometricFunction._eval_rewrite_as_powrCr6c &|jd|S)NrrBrs r4rz5ReciprocalTrigonometricFunction._eval_rewrite_as_sqrts''(?EEr6cZ|j|jdjSr+r,r.s r4r/z/ReciprocalTrigonometricFunction._eval_conjugater0r6c fd|j|jdz j|fi|Sr)r2r<rL)r@rJrMs r4rLz,ReciprocalTrigonometricFunction.as_real_imags<A$%%diil33AA$KDIK Kr6c &|jdi|S)N)r=r@)r@rMs r4r=z1ReciprocalTrigonometricFunction._eval_expand_trigs)t))GGGr6cZ|j|jdjSr+)r2r<rUr.s r4rUz6ReciprocalTrigonometricFunction._eval_is_extended_reals$""499Q<0GGIIr6chd|j|jdz j|||S)Nrrrr)r2r<rQ)r@rrrs r4rQz5ReciprocalTrigonometricFunction._eval_as_leading_terms4$%%diil33JJ1SW^bJccr6cXd|j|jdz jSr)r2r<rMr.s r4rYz/ReciprocalTrigonometricFunction._eval_is_finites&$%%diil33>>>r6cfd|j|jdz j|||Sr)r2r<rr@rrrrs r4rz-ReciprocalTrigonometricFunction._eval_nseriess/$%%diil33BB1aNNr6rerhrf) rjrkrlrmr2rrorpr)__annotations__r*rgrr9r;r=rgrrrrrrrrr/rLr=rUrQrYrrKr6r4r(r($sJN'')NHiGY""H8 + 5FEEEEEEF3KHJd?Or6r(cxeZdZdZeZdZddZdZdZ dZ dZ d Z d Z dd Zd Zd ZeedZdZy)ra The secant function. Returns the secant of x (measured in radians). Explanation =========== See :class:`sin` for notes about automatic evaluation. Examples ======== >>> from sympy import sec >>> from sympy.abc import x >>> sec(x**2).diff(x) 2*x*tan(x**2)*sec(x**2) >>> sec(1).diff(x) 0 See Also ======== sin, csc, cos, tan, cot asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Sec TNc$|j|Srirgrs r4rz sec.period||F##r6c :t|dz dz}|dz|dz z Srr)r@rr cot_half_sqs r4rzsec._eval_rewrite_as_cots&#a%j!m a+/22r6c dt|z Srrrs r4rzsec._eval_rewrite_as_cos#c( r6c Ht|t|t|zz Srirrs r4r zsec._eval_rewrite_as_sincos3xS#c(*++r6c Hdt|jtfi|z Sr)rrrrs r4rzsec._eval_rewrite_as_sin$"#c(""31&112r6c Hdt|jtfi|z Sr)rrrrs r4rzsec._eval_rewrite_as_tanr`r6c 0ttdz |z dSr)rrrs r4rzsec._eval_rewrite_as_csc2a4#:..r6c|dk(r1t|jdt|jdzSt||r)rr<rrrs r4rz sec.fdiffs; q=tyy|$S1%66 6$T84 4r6c ddlm}tdtt|ztdz |t j |zz t|dfdS)Nrr$rrrrr(s r4r)zsec._eval_rewrite_as_besseljsK:DCL$q'*7AFF7C+@@A2c1:N r6c|jd}|jr(|tz tjz j duryyyrD)r<rcrrrrrXs r4rdzsec._eval_is_complexs:iil >>s2v::eCD>r6c|dks|dzdk(rtjSt|}|dz}tj|zt d|zzt d|zz |d|zzzSr)rrUrrrrrrrks r4rzsec.taylor_termsf q5AEQJ66M A1A==!#E!A#J.y1~=a!A#hF Fr6clddlm}ddlm}|jd}|j |dj }|tdz ztz }|jr;||tzz tdz zj|} tj|z| z S|tjur(|j|d||jrdnd}|tjtj fvr%|tj tjS|j"r|j%|S|S)NrrrrrDrErFrrrr!r<rrIrrrJrrrorKrLrrrMr;rs r4rQzsec._eval_as_leading_termsA;iil XXa^ " " $ "Q$YN <<"*r!t#44Q7BMM1$b( ( "" "1aBtH,@,@ScJB !**a001 1q111::> > " tyy}6$6r6rire)rjrkrlrmrr2r)rrrr rrrrr)rdrhrrrQrKr6r4rrsi!FNH$3,33/5   G G 7r6rcxeZdZdZeZdZddZdZdZ dZ dZ d Z d Z d Zdd Zd ZeedZdZy)ra The cosecant function. Returns the cosecant of x (measured in radians). Explanation =========== See :func:`sin` for notes about automatic evaluation. Examples ======== >>> from sympy import csc >>> from sympy.abc import x >>> csc(x**2).diff(x) -2*x*cot(x**2)*csc(x**2) >>> csc(1).diff(x) 0 See Also ======== sin, cos, sec, tan, cot asin, acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Trigonometric_functions .. [2] https://dlmf.nist.gov/4.14 .. [3] https://functions.wolfram.com/ElementaryFunctions/Csc TNc$|j|SrirVrs r4rz csc.period/rWr6c dt|z Srrrs r4rzcsc._eval_rewrite_as_sin2r\r6c Ht|t|t|zz Srirrs r4r zcsc._eval_rewrite_as_sincos5r^r6c :t|dz }d|dzzd|zz Srrrs r4rzcsc._eval_rewrite_as_cot8s&s1u:HaK!H*--r6c Hdt|jtfi|z Sr)rrrrs r4rzcsc._eval_rewrite_as_cos<rr6c 0ttdz |z dSrrrs r4rzcsc._eval_rewrite_as_sec?rcr6c Hdt|jtfi|z Sr)rrrrs r4rzcsc._eval_rewrite_as_tanBr`r6c ddlm}tdtz dt||tj |zz zS)Nrr$rrr&r(s r4r)zcsc._eval_rewrite_as_besseljEs1:AbDz1d3i(<<=>>r6c|dk(r2t|jd t|jdzSt||r)r r<rrrs r4rz csc.fdiffIs> q= ! %%c$))A,&77 7$T84 4r6ch|jd}|jr|tz jduryyyrDrrXs r4rdzcsc._eval_is_complexOrr6c,|dk(rdt|z S|dks|dzdk(rtjSt|}|dzdz}tj|dz zdzdd|zdz zdz zt d|zz|d|zdz zzt d|zz Sr)rrrUrrrrhs r4rzcsc.taylor_termTs 6WQZ<  Ua!eqj66M A1qAMMAE*1,a!A#'lQ.>?acN##$qsQw<009!A#? @r6cDddlm}ddlm}|jd}|j |dj }|tz }|jr1||tzz j|} tj|z| z S|tjur(|j|d||jrdnd}|tjtj fvr%|tj tjS|j"r|j%|S|S)NrrrrDrErFrkrs r4rQzcsc._eval_as_leading_termasA;iil XXa^ " " $ rE <<"*--a0BMM1$b( ( "" "1aBtH,@,@ScJB !**a001 1q111::> > " tyy}6$6r6rire)rjrkrlrmrr2r*rrr rrrrr)rrdrhrrrQrKr6r4rrsi!FNG$,.1/3?5    @  @ 7r6rcfeZdZdZej fZd dZedZ d dZ dZ dZ dZ dZeZy ) r!a Represents an unnormalized sinc function: .. math:: \operatorname{sinc}(x) = \begin{cases} \frac{\sin x}{x} & \qquad x \neq 0 \\ 1 & \qquad x = 0 \end{cases} Examples ======== >>> from sympy import sinc, oo, jn >>> from sympy.abc import x >>> sinc(x) sinc(x) * Automated Evaluation >>> sinc(0) 1 >>> sinc(oo) 0 * Differentiation >>> sinc(x).diff() cos(x)/x - sin(x)/x**2 * Series Expansion >>> sinc(x).series() 1 - x**2/6 + x**4/120 + O(x**6) * As zero'th order spherical Bessel Function >>> sinc(x).rewrite(jn) jn(0, x) See also ======== sin References ========== .. [1] https://en.wikipedia.org/wiki/Sinc_function c|jd}|dk(r t||z t||dzz z St||r)r<rrr)r@rrs r4rz sinc.fdiffsD IIaL q=q6!8c!fQTk) )$T84 4r6c^|jrtjS|jrT|tjtj fvrtj S|tjurtjS|tjurtjS|jr || St|}|i|jr&t|jrtj Syd|zjr'tj|tjz z|z Syyr)r>rrrrrrUrrorrFrr rr)rrrGs r4rz sinc.evals ;;55L ==qzz1#5#566vv uu !## #55L  ' ' )t9 S>  ""S[[)66M*H*((}}x!&&'89#==) r6c^|jd}t||z j|||Sr+)r<rrrRs r4rzsinc._eval_nseriess, IIaLAq''1d33r6c  ddlm}|d|S)Nr)jn)r'r~)r@rrr~s r4_eval_rewrite_as_jnzsinc._eval_rewrite_as_jns5!Szr6c tt||z t|tjftj tj fSri)r(rrrrUrtruers r4rzsinc._eval_rewrite_as_sins2#c(3,38155!&&/JJr6c|jdjryt|jd\}}|jr!t |j |j gS|jr|j ryyy)NrTF)r< is_infiniterr>rr is_nonzerorr\s r4r_zsinc._eval_is_zerosh 99Q< # ##DIIaL1 g <<g00'2D2DEF F >>g001>r6cj|jdjs|jdjryyrS)r<rSrr.s r4rzsinc._eval_is_reals, 99Q< ( (DIIaL,E,E-Fr6Nrerf)rjrkrlrmrrorprrgrrrrr_rrYrKr6r4r!r!qsR3h'')N 5>>.4K$Or6r!ceZdZUdZej ej ejejfZ de d<e e dZ e e dZe e dZy)InverseTrigonometricFunctionz/Base class for inverse trigonometric functions.ztuple[Expr, ...]rpc itddz tdz tddz tdz dtdz tdz tdtdz dz tdz tdtdtdz zdz tdz tdtdzdz ttddztdtdtdzzdz ttddztjtdz tdtdz dz tdz ttjtddz z tdz tdtdzdz ttddzttjtddz zttddztddz dz tdz dtdz dz t dz tddzdz ttddztddz tddz z td z td dz tddz zt d z tddz tdz td z dtdz tdz t d z tddz tddz zttdd zdtdztdz ttdd ziS) Nrrrrsrrtrwrurvr|)r%rrrrrKr6r4 _asin_tablez(InverseTrigonometricFunction._asin_tables  GAIr!t GAIr!t  d1gIr!t  !d1g+q !2a4  GDT!W% %a 'A  !d1g+q !2hq!n#4   GDT!W% %a 'HQN):  FFBqD  T!W a A  $q'!)# $bd  T!W a HQN!2  $q'!)# $b!Q&7 !Wq[!ORU a[!ObSV !Wq[!ORB/ GAIQ !2b5! "!WHQJa "RCF# $!Wq[$q' !2b5 a[$q' !B3r6 GAIQ !2hq"o#5 a[$q' !2hq"o#5+  r6ctddz tdz dtdz tdz tdtdz tddz tdz dtdz t dz dtdzttddztddtdzz tdz tddtdzzttddztddtdzdz z tdz tddtdzdz zttddzdtdz tdz d tdzt dz dtdzttddzi S) Nrrrurrrwrtrvr|rr%rrrKr6r4 _atan_tablez(InverseTrigonometricFunction._atan_tables3 GAIr!t d1gIr!t GRT GaKA QK"Q QKHQN* QtAwY A QtAwY HQN!2 QtAwYq[ !2b5 QtAwYq[ !2hq"o#5 QKB aL2#b& QKHQO+  r6cidtdzdz tdz tdtdz tddtdzdz ztdz dttddtddz z z tdz tddtdzdz z ttddzdttddtddz zz ttddzdtdz tddtdzztdz dtdtdz z tdz tddtdzz ttddzdtdtdzz ttddzdtdztdz tddz ttddztddz ttd dztdtdztd z tdtdz ttdd ztdtdz ttd d zS) Nrrrrsrtrrwrurvr|rrKr6r4 _acsc_tablez(InverseTrigonometricFunction._acsc_table$sP  d1gIaKA GRT  QtAwYq[ !2a4  d8Aq>DGAI-. .1  QtAwYq[ !2hq!n#4  d8Aq>DGAI-. .8Aq>0A   r!t  QtAwY A  d1tAw; A  QtAwY HQN!2  d1tAw; HQN!2  QKB  GaKHQO+ 1gkNBxB//  Gd1g r"u Gd1g r(1b/1! "1gQ "Xb"%5"5#  r6N)rjrkrlrmrrrrUrorprSrhrrrrrKr6r4rrs}9()q}}affaFWFW'XN$X    8    &    r6rceZdZdZddZdZdZdZedZ e e dZ dZ dfd Zd Zd Zd ZeZd ZdZdZdZddZxZS)rad The inverse sine function. Returns the arcsine of x in radians. Explanation =========== ``asin(x)`` will evaluate automatically in the cases $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the result is a rational multiple of $\pi$ (see the ``eval`` class method). A purely imaginary argument will lead to an asinh expression. Examples ======== >>> from sympy import asin, oo >>> asin(1) pi/2 >>> asin(-1) -pi/2 >>> asin(-oo) oo*I >>> asin(oo) -oo*I See Also ======== sin, csc, cos, sec, tan, cot acsc, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://dlmf.nist.gov/4.23 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcSin cf|dk(r!dtd|jddzz z St||Nrrrr%r<rrs r4rz asin.fdiffis7 q=T!diilAo-.. .$T84 4r6c|j|j}|j|jk(r|jdjryy|jSr:r;r<r=r?s r4rBzasin._eval_is_rationaloK DIItyy ! 66TYY vvay$$%== r6cX|jxr|jdjSr+)rUr< is_positiver.s r4_eval_is_positivezasin._eval_is_positivew$**,I11I1IIr6cX|jxr|jdjSr+)rUr<rLr.s r4_eval_is_negativezasin._eval_is_negativezrr6c|jr|tjurtjS|tjur!tjtj zS|tjur!tjtj zS|j rtjS|tjur tdz S|tjur t dz S|tjurtjS|jr ||  S|jr|j}||vr||St|}|ddlm}tj ||zS|j rtjSt%|t&rg|j(d}|j*rL|dtzz}|tkDr t|z }|tdz kDr t|z }|t dz kr t |z }|St%|t,r1|j(d}|j*rtdz t/|z Syy)Nrr)asinh)rrrrrr3r>rUrrrror is_numberrr5rrr1rr< is_comparablerr)rr asin_tablerrangs r4rz asin.eval}s ==aee|uu  "))!//99***zz!//11vv !t  %s1u !## #$$ $  ' ' )I:  ==*Jj !#&05   C??5>1 1 ;;66M c3 ((1+C  qt 8s(CA:s(C"Q;#)C c3 ((1+C  !td3i''! r6c,|dks|dzdk(rtjSt|}t|dk\r$|dkDr|d}||dz dzz||dz zz |dzzS|dz dz}t tj |}t |}||z ||zz|z Sr)rrUrrrrrrrrrriRrs r4rzasin.taylor_terms q5AEQJ66M A>"a'AE"2&!a%!|QAY/144UqL#AFFA.aLs1a4xz!r6c|jd}|j|dj}|tjur |j |j |S|jr|j |S|tj tjtjfvr5|jtj|||jSd|dzz jr|j||r|nd}t!|jr%|jrt" |j |z St!|j$r$|j$rMt"|j |z S|jtj|||jS|j |SNrrOrr)r<rrIrrr;rJr>rrorr"rQrTrLrGr rrr@rrrrrOndirs r4rQzasin._eval_as_leading_terms]iil XXa^ " " $ ;99S0034 4 ::&&q) ) 155&!%%!2!23 3<<$::14d:SZZ\ \ AI " "771dd2D$x##>>32..D%%>> " --||C(>>qtRV>W^^``yy}r6cddlm}|jdj|d}|tj urgt dd}ttj |dzz jtj|dd|z}tj |jdz } | j|} | | z | z } | j|ds(|dk(r|dStdz |t|zSttj | zj|||} | j!t| zj#} |j!j|| j#j%|||z|zS|tj&urht dd}ttj&|dzzjtj|dd|z}tj |jdz} | j|} | | z | z } | j|ds)|dk(r|dSt dz |t|zSttj | zj|||} | j!t| zj#} |j!j|| j#j%|||z|zSt(|=|||} |tj*ur| Sd|dzz j,r|jdj/||r|nd}t1|j,r|j,r t | z S| St1|j2r|j2r t| z S| S|jtj|||| S| S NrOr4TpositiverrrrO)sympy.series.orderrr<rrrrrrr"nseriesrJis_meromorphicrr%rremoveOrTpowsimprrrorLrGr rr@rrrrrarg0r4serarg1rcrdres1resrrs r4rzasin._eval_nseriessS(yy|  A& 155=cD)Aquuq!t|$,,S199!Q!DC55499Q<'D$$Q'AA A##Aq) Avqt<2a4!DG*+<< ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M M 1== cD)Aq}}q!t+,44S9AA!Q!LC55499Q<'D$$Q'AA A##Aq) Avqt=B3q51T!W:+== ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M Mg#A#6 1$$ $J aK $ $99Q<##Att;D$x####39$  D%%##8O ||C(66q!$T6RR r6c ,tdz t|z Srrrrs r4_eval_rewrite_as_acoszasin._eval_rewrite_as_acos !td1g~r6c Hdt|dtd|dzz zz zSr)rr%rs r4_eval_rewrite_as_atanzasin._eval_rewrite_as_atan s(aT!ad(^+,---r6c tj ttj|ztd|dzz zzSrrr3r"r%rs r4_eval_rewrite_as_logzasin._eval_rewrite_as_log s3AOOA$5QAX$F GGGr6c Hdtdtd|dzz z|z zSr)rr%rs r4_eval_rewrite_as_acotzasin._eval_rewrite_as_acot s)q4CF ++S0111r6c 2tdz td|z z Srrrrs r4_eval_rewrite_as_aseczasin._eval_rewrite_as_asec !td1S5k!!r6c td|z Sr)rrs r4_eval_rewrite_as_acsczasin._eval_rewrite_as_acsc AcE{r6cl|jd}|jxrdt|z jSNrrr<rSr^is_nonnegativer@rs r4rUzasin._eval_is_extended_real . IIaL!!Aq3q6z&A&AAr6ctSrrrs r4rz asin.inverse  r6rerf)rjrkrlrmrrBrrrgrrhrrrQrrrr_eval_rewrite_as_tractablerrrrUrrirjs@r4rr>s(T5 !JJ4(4(l  "  "0*X.H"62"Br6rceZdZdZddZdZedZee dZ dZ dZ dZ dfd Zd ZeZd Zd Zdd ZdZdZdZdZxZS)ra The inverse cosine function. Explanation =========== Returns the arc cosine of x (measured in radians). ``acos(x)`` will evaluate automatically in the cases $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the result is a rational multiple of $\pi$ (see the eval class method). ``acos(zoo)`` evaluates to ``zoo`` (see note in :class:`sympy.functions.elementary.trigonometric.asec`) A purely imaginary argument will be rewritten to asinh. Examples ======== >>> from sympy import acos, oo >>> acos(1) 0 >>> acos(0) pi/2 >>> acos(oo) oo*I See Also ======== sin, csc, cos, sec, tan, cot asin, acsc, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://dlmf.nist.gov/4.23 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcCos cf|dk(r!dtd|jddzz z St||Nrrrrrrs r4rz acos.fdiffS s7 q=d1tyy|Q.// /$T84 4r6c|j|j}|j|jk(r|jdjryy|jSr:rr?s r4rBzacos._eval_is_rationalY rr6c|jr|tjurtjS|tjur!tjtjzS|tj ur!tj tjzS|j r tdz S|tjurtjS|tjurtS|tjurtjS|jr8|j}||vrtdz ||z S| |vrtdz || zSt|}|tdz t|z S|j rrrrUrrorrr5rr\rr<r1rrr)rrrrrminusrs r4rz acos.evala s ==aee|uu  "zz!//11***))!//99!t vv  % !## #$$ $ ==*Jj !tjo--#!tj#...05  a4$s)# # ::#chh-1,!1B88A;DEDE dC ))A,C  s(Cqt 8B$*C dC ))A,C  a4$t*,,!td4j((! !r6cJ|dk(r tdz S|dks|dzdk(rtjSt|}t |dk\r$|dkDr|d}||dz dzz||dz zz |dzzS|dz dz}t tj |}t|}| |z ||zz|z Sr)rrrUrrrrrrs r4rzacos.taylor_term s 6a4K Ua!eqj66M A>"a'AE"2&!a%!|QAY/144UqL#AFFA.aLr!tAqDy{"r6c|jd}|j|dj}|tjur |j |j |S|dk(r7tdttj|z j |zS|tj tjfvr'|jtj|||Sd|dzz jr|j||r|nd}t|jr'|jrdt z|j |z St|j"r|j"rG|j | S|jtj|||j%S|j |SNrrrrO)r<rrIrrr;rJr%rrorr"rQrLrGr rrrTrs r4rQzacos._eval_as_leading_term saiil XXa^ " " $ ;99S0034 4 774 = =a @AA A 155&!++, ,<<$::14d:S S AI " "771dd2D$x##>>R4$))B-//D%%>> IIbM>)||C(>>qtRV>W^^``yy}r6cl|jd}|jxrdt|z jSrrrs r4rUzacos._eval_is_extended_real rr6c"|jSri)rUr.s r4_eval_is_nonnegativezacos._eval_is_nonnegative s**,,r6cddlm}|jdj|d}|tj ur]t dd}ttj |dzz jtj|dd|z}tj |jdz } | j|} | | z | z } | j|ds|dk(r|dS|t|Sttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zS|tj$urdt dd}ttj$|dzzjtj|dd|z}tj |jdz} | j|} | | z | z } | j|ds%|dk(r|dSt&|t|zSttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zSt(|9|||} |tj*ur| Sd|dzz j,r|jdj/||r|nd}t1|j,r|j,r dt&z| z S| St1|j2r|j2r| S| S|jtj|||| S| Sr)rrr<rrrrrrr"rrJrr%rrrTrrrrrorLrGr rrs r4rzacos._eval_nseries sC(yy|  A& 155=cD)Aquuq!t|$,,S199!Q!DC55499Q<'D$$Q'AA A##Aq) Avqt51T!W:5 ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M M 1== cD)Aq}}q!t+,44S9AA!Q!LC55499Q<'D$$Q'AA A##Aq) Avqt:2$q' ?: ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M Mg#A#6 1$$ $J aK $ $99Q<##Att;D$x####R4#:%  D%%##4K ||C(66q!$T6RR r6c tdz tjttj|zt d|dzz zzzSrrrr3r"r%rs r4rzacos._eval_rewrite_as_log s@!taoo !DQTN2 344 4r6c ,tdz t|z Srrrrs r4_eval_rewrite_as_asinzacos._eval_rewrite_as_asin rr6c ttd|dzz |z tdz d|td|dzz zz zzSr)rr%rrs r4rzacos._eval_rewrite_as_atan sADQTN1$%AAd1QT6lN0B(CCCr6ctSrr[rs r4rz acos.inverse rr6c \tdz dtdtd|dzz z|z zz Sr)rrr%rs r4rzacos._eval_rewrite_as_acot s2!taa$q36z"22C78888r6c td|z Sr)rrs r4rzacos._eval_rewrite_as_asec rr6c 2tdz td|z z Srrrrs r4rzacos._eval_rewrite_as_acsc rr6c|jd}|j|jdj}|jdur|S|jr"|dzjr|dz j r|SyyyNrFr)r<r;r-rSris_nonpositive)r@rrs r4r/zacos._eval_conjugate st IIaL IIdiil,,. /   &H   QU$:$:A?U?UH@V$: r6rerf)rjrkrlrmrrBrgrrhrrrQrUrrrrrrrrrrr/rirjs@r4rr' s)V5 !4)4)l # # .B-*X4"6D 9"r6rceZdZUdZded<ej ej fZddZdZ dZ dZ dZ d Z ed Zeed Zd Zdfd ZdZeZfdZddZdZdZdZdZdZxZS)ra The inverse tangent function. Returns the arc tangent of x (measured in radians). Explanation =========== ``atan(x)`` will evaluate automatically in the cases $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the result is a rational multiple of $\pi$ (see the eval class method). Examples ======== >>> from sympy import atan, oo >>> atan(0) 0 >>> atan(1) pi/4 >>> atan(oo) pi/2 See Also ======== sin, csc, cos, sec, tan, cot asin, acsc, acos, asec, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://dlmf.nist.gov/4.23 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcTan z tuple[Expr]r<cT|dk(rdd|jddzzz St||rr<rrs r4rz atan.fdiffC s2 q=a$))A,/)* *$T84 4r6c|j|j}|j|jk(r|jdjryy|jSr:rr?s r4rBzatan._eval_is_rationalI rr6c4|jdjSr+)r<is_extended_positiver.s r4rzatan._eval_is_positiveQ syy|000r6c4|jdjSr+)r<is_extended_nonnegativer.s r4rzatan._eval_is_nonnegativeT syy|333r6c4|jdjSr+)r<r>r.s r4r_zatan._eval_is_zeroW syy|###r6c4|jdjSr+rTr.s r4rzatan._eval_is_realZ rr6c(|jr|tjurtjS|tjur tdz S|tj ur t dz S|j rtjS|tjur tdz S|tjur t dz S|tjurddl m }|t dz tdz S|jr ||  S|jr|j}||vr||St!|}|ddlm}tj&||zS|j rtjSt)|t*r;|j,d}|j.r |tz}|tdz kDr |tz}|St)|t0rH|j,d}|j.r,tdz t3|z }|tdz kDr |tz}|Syy)Nrrsrr)atanh)rrrrrrr>rUrrrorrrrrr5rrr3r1rr<rr r)rrr atan_tablerrrs r4rz atan.eval] s ==aee|uu  "!t ***s1u vv !t  %s1u !## # Es1ubd+ +  ' ' )I:  ==*Jj !#&05   C??5>1 1 ;;66M c3 ((1+C  r A:2IC c3 ((1+C  dT#Y&A:2IC ! r6c|dks|dzdk(rtjSt|}tj|dz dzz||zz|z Sr)rrUrrrrrs r4rzatan.taylor_term sL q5AEQJ66M A==AEA:.q!t3A5 5r6c|jd}|j|dj}|tjur |j |j |S|jr|j |S|tj tjtjfvr5|jtj|||jSd|dzzjr|j||r|nd}t!|jr-t#|j$r|j |t&z St!|j$r-t#|jrM|j |t&zS|jtj|||jS|j |Sr)r<rrIrrr;rJr>r3rorr"rQrTrLrGr!r rrrs r4rQzatan._eval_as_leading_term sfiil XXa^ " " $ ;99S0034 4 ::&&q) ) 1??"AOOQ5F5FG G<<$::14d:SZZ\ \ AI " "771dd2D$x##b6%%99R=2--D%%b6%%99R=2--||C(>>qtRV>W^^``yy}r6c|jdj|d}|tjtjtjzfvr(|j t j||||St||||}|jdj||r|nd}|tjurt|dkDr |tz S|Sd|dzzjrt|jr t|jr |tz S|St|jr t|jr |tzS|S|j t j||||S|SNrrOrrr)r<rrr3rrr"rrrGror!rrLr r r@rrrrrrrrs r4rzatan._eval_nseries sLyy|  A& AOOQ]]1??%BC C<<$221ad2N Ng#A#6yy|44Q7 1$$ $$x!|RxJ aK $ $$x##d8''8O  D%%d8''8O ||C(66q!$T6RR r6c tjdz ttjtj|zz ttjtj|zzz zSr)rr3r"rrs r4rzatan._eval_rewrite_as_log sPq #aeeaooa.?&?"@!%%!//!++,#-. .r6c|dtjtjfvr6tdz t d|j dz z j |||St|!||||Sr) rrrrrr<rr _eval_aseriesr@rargs0rrrs r4r zatan._eval_aseries sc 8 A$6$67 7qD4$))A,//>>q!TJ J7(E1d; ;r6ctSrrrs r4rz atan.inverse rr6c tt|dz|z tdz tdtd|dzzz z zSrr%rrrs r4rzatan._eval_rewrite_as_asin s:CF|CAQtAQJ/?-?(@!@AAr6c `t|dz|z tdtd|dzzz zSrr%rrs r4rzatan._eval_rewrite_as_acos s1CF|CQtAQJ'7%7 888r6c td|z Srrrs r4rzatan._eval_rewrite_as_acot rr6c Zt|dz|z ttd|dzzzSrr%rrs r4rzatan._eval_rewrite_as_asec s,CF|CT!c1f*%5 666r6c nt|dz|z tdz ttd|dzzz zSrr%rrrs r4rzatan._eval_rewrite_as_acsc s5CF|CAT!c1f*-=(>!>??r6rerf)rjrkrlrmrSrr3rprrBrrr_rrgrrhrrrQrrrr rrrrrrrirjs@r4rr s$L oo'78N5 !14$-22h 6 6.2."6<  B97@r6rceZdZdZej ej fZddZdZdZ dZ dZ e dZ eedZd Zdfd Zfd Zd ZeZdd ZdZdZdZdZdZxZS)ra The inverse cotangent function. Returns the arc cotangent of x (measured in radians). Explanation =========== ``acot(x)`` will evaluate automatically in the cases $x \in \{\infty, -\infty, \tilde{\infty}, 0, 1, -1\}$ and for some instances when the result is a rational multiple of $\pi$ (see the eval class method). A purely imaginary argument will lead to an ``acoth`` expression. ``acot(x)`` has a branch cut along $(-i, i)$, hence it is discontinuous at 0. Its range for real $x$ is $(-\frac{\pi}{2}, \frac{\pi}{2}]$. Examples ======== >>> from sympy import acot, sqrt >>> acot(0) pi/2 >>> acot(1) pi/4 >>> acot(sqrt(3) - 2) -5*pi/12 See Also ======== sin, csc, cos, sec, tan, cot asin, acsc, acos, asec, atan, atan2 References ========== .. [1] https://dlmf.nist.gov/4.23 .. [2] https://functions.wolfram.com/ElementaryFunctions/ArcCot cT|dk(rdd|jddzzz St||rrrs r4rz acot.fdiff s2 q=q499Q<?*+ +$T84 4r6c|j|j}|j|jk(r|jdjryy|jSr:rr?s r4rBzacot._eval_is_rational rr6c4|jdjSr+)r<rr.s r4rzacot._eval_is_positive( syy|***r6c4|jdjSr+)r<rLr.s r4rzacot._eval_is_negative+ syy|'''r6c4|jdjSr+rTr.s r4rUzacot._eval_is_extended_real. rr6cj|jr|tjurtjS|tjurtjS|tj urtjS|j r tdz S|tjur tdz S|tjur t dz S|tjurtjS|jr ||  S|jr:|j}||vr&tdz ||z }|tdz kDr |tz}|St|}| ddlm}tj" ||zS|j rttj$zSt'|t(r;|j*d}|j,r |tz}|tdz kDr |tz}|St'|t.rH|j*d}|j,r,tdz t1|z }|tdz kDr |tz}|Syy)Nrrsr)acoth)rrrrrUrr>rrrrorrrr5rrr3rr1r r<rrr)rrrrrrs r4rz acot.eval1 s ==aee|uu  "vv ***vv 1u !t  %s1u !## #66M  ' ' )I:  ==*Jj dZ_,A:2IC 05   COO#E'N2 2 ;;aff9  c3 ((1+C  r A:2IC c3 ((1+C  dT#Y&A:2IC ! r6c|dk(r tdz S|dks|dzdk(rtjSt|}tj|dzdzz||zz|z Sr)rrrUrrrs r4rzacot.taylor_termg s\ 6a4K Ua!eqj66M A==AEA:.q!t3A5 5r6c|jd}|j|dj}|tjur |j |j |S|tjurd|z j |S|tj tjtjfvr5|jtj|||jS|jrd|dzzjr|j!||r|nd}t#|jr-t%|jr|j |t&zSt#|j(r-t%|j(rM|j |t&z S|jtj|||jS|j |S)NrrrOr)r<rrIrrr;rJror3rUrr"rQrTrrrGr!r rrLrs r4rQzacot._eval_as_leading_termr suiil XXa^ " " $ ;99S0034 4 "" "cE**1- - 1??"AOOQVV< <<<$::14d:SZZ\ \ ??BE 66771dd2D$x##b6%%99R=2--D%%b6%%99R=2--||C(>>qtRV>W^^``yy}r6c8|jdj|d}|tjtjtjzfvr(|j t j||||St||||}|tjur|S|jdj||r|nd}|jrt|dkr |tz S|S|jrd|dzzjrt|jr t!|jr |tzS|St|j"r t!|j"r |tz S|S|j t j||||S|Sr)r<rrr3rrr"rrrorGr>r!rrrr rLrs r4rzacot._eval_nseries s`yy|  A& AOOQ]]1??%BC C<<$221ad2N Ng#A#6 1$$ $Jyy|44Q7 <<$x!|RxJ   !dAg+!:!:$x##d8''8O  D%%d8''8O ||C(66q!$T6RR r6c|dtjtjfvr,td|jdz j |||St |||||Sr)rrrrr<rrr r s r4r zacot._eval_aseries sZ 8 A$6$67 7$))A,'55aDA A7(E1d; ;r6c tjdz tdtj|z z tdtj|z zz zSr)rr3r"rs r4rzacot._eval_rewrite_as_log sHq #a!//!*;&;"<!aooa''(#)* *r6ctSrrrs r4rz acot.inverse rr6c |td|dzz ztdz tt|dz t|dz dz z z zSrrrs r4rzacot._eval_rewrite_as_asin sPD36N"AT36']4a! +<<==? @r6c |td|dzz ztt|dz t|dz dz z zSrrrs r4rzacot._eval_rewrite_as_acos sA4#q&>!$tS!VG}T36'A+5F'F"GGGr6c td|z Srrrs r4rzacot._eval_rewrite_as_atan rr6c l|td|dzz zttd|dzz|dzz zSrrrs r4rzacot._eval_rewrite_as_asec s94#q&>!$tQaZa,?'@"AAAr6c |td|dzz ztdz ttd|dzz|dzz z zSrrrs r4rzacot._eval_rewrite_as_acsc sB4#q&>!2a4$tQaZa4G/H*I#IJJr6rerf)rjrkrlrmrr3rprrBrrrUrgrrhrrrQrr rrrrrrrrrirjs@r4rr s)Too'78N5 !+(-33j 6 6.6< *"6 @HBKr6rceZdZdZedZddZddZee dZ dZ dfd Z dZ d ZeZd Zd Zd Zd ZdZxZS)ra The inverse secant function. Returns the arc secant of x (measured in radians). Explanation =========== ``asec(x)`` will evaluate automatically in the cases $x \in \{\infty, -\infty, 0, 1, -1\}$ and for some instances when the result is a rational multiple of $\pi$ (see the eval class method). ``asec(x)`` has branch cut in the interval $[-1, 1]$. For complex arguments, it can be defined [4]_ as .. math:: \operatorname{sec^{-1}}(z) = -i\frac{\log\left(\sqrt{1 - z^2} + 1\right)}{z} At ``x = 0``, for positive branch cut, the limit evaluates to ``zoo``. For negative branch cut, the limit .. math:: \lim_{z \to 0}-i\frac{\log\left(-\sqrt{1 - z^2} + 1\right)}{z} simplifies to :math:`-i\log\left(z/2 + O\left(z^3\right)\right)` which ultimately evaluates to ``zoo``. As ``acos(x) = asec(1/x)``, a similar argument can be given for ``acos(x)``. Examples ======== >>> from sympy import asec, oo >>> asec(1) 0 >>> asec(-1) pi >>> asec(0) zoo >>> asec(-oo) pi/2 See Also ======== sin, csc, cos, sec, tan, cot asin, acsc, acos, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://dlmf.nist.gov/4.23 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcSec .. [4] https://reference.wolfram.com/language/ref/ArcSec.html c,|jrtjS|jr\|tjurtjS|tj urtj S|tjurtS|tjtjtjfvr tdz S|jr8|j}||vrtdz ||z S| |vrtdz || zS|jr tdz S|jrrrorrrrUrrrrrrrr\rr<r1rrrr)rr acsc_tablerrrs r4rz asec.eval s ;;$$ $ ==aee|uu vv  % 1::q1113D3DE Ea4K ==*Jj !tjo--#!tj#... ??a4K ::#chh-1,!1B88A;DEDE dC ))A,C  s(Cqt 8B$*C dC ))A,C  qD4:%!td4j((! !r6c|dk(r7d|jddztdd|jddzz z zz St||rr<r%rrs r4rz asec.fdiff4 sM q=diilAod1q1q/@+@&AAB B$T84 4r6ctSrrrs r4rz asec.inverse: rr6c|dk(rtjtd|z zS|dks|dzdk(rtjSt |}t |dkDr*|dkDr%|d}||dz |dz zz|dzzd|dzdzzz S|dz}t tj||z}t||zdz|zdz}tj |z|z ||zzdz SNrrrrrs) rr3r"rUrrrrrrs r4rzasec.taylor_term@ s 6??3q1u:- - Ua!eqj66M A>"Q&1q5"2&QUQqSM*QT111qy=AAF#AFFA.!3aL1$)A-2'!+a/!Q$6::r6c|jd}|j|dj}|tjur |j |j |S|dk(r7tdt|tjz j |zS|tj tjfvr'|jtj|||S|jrd|dzz jr|j||r|nd}t!|j"r|jr|j | St!|jr'|j"rPdt$z|j |z S|jtj|||j'S|j |Sr)r<rrIrrr;rJr%rrUrr"rQrrrGr rLrrTrs r4rQzasec._eval_as_leading_termR seiil XXa^ " " $ ;99S0034 4 774quu = =a @AA A 155&!&&! !<<$::14d:S S ::1r1u911771dd2D$x##>> IIbM>)D%%>>R4$))B-//||C(>>qtRV>W^^``yy}r6cddlm}|jdj|d}|tj ur-t dd}ttj |dzzjtj|dd|z}tj|jdz} | j|} | | z | z } ttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zS|tjur-t dd}ttj|dzz jtj|dd|z}tj|jdz } | j|} | | z | z } ttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zSt$|9|||} |tj&ur| S|j(rd|dzz j*r|jdj-||r|nd}t/|j0r|j*r| S| St/|j*r|j0r dt2z| z S| S|jtj|||| S| S Nrrr4TrrrrrO)rrr<rrrrrrr"rrrJr%rrrTrrrorrrGr rLrrs r4rzasec._eval_nseriesi s(yy|  A& 155=cD)Aquuq!t|$,,S199!Q!DC==499Q</D$$Q'AA A ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M M 1== cD)Aq}}q!t+,44S9AA!Q!LC==499Q</D$$Q'AA A ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M Mg#A#6 1$$ $J <&:!:::r6c t|dz|z }tdz d|z z|tdt|dzdz z zzSrr%rrr:s r4rzasec._eval_rewrite_as_acot sEAqDz!|!tQXd1T!Q$(^+;&>> from sympy import acsc, oo >>> acsc(1) pi/2 >>> acsc(-1) -pi/2 >>> acsc(oo) 0 >>> acsc(-oo) == acsc(oo) True >>> acsc(0) zoo See Also ======== sin, csc, cos, sec, tan, cot asin, acos, asec, atan, acot, atan2 References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://dlmf.nist.gov/4.23 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcCsc c|jrtjS|jrY|tjurtjS|tj ur t dz S|tjur t dz S|tjtjtjfvrtjS|jr ||  S|jrtjS|jr|j}||vr||St|t rg|j"d}|j$rL|dt zz}|t kDr t |z }|t dz kDr t |z }|t dz kr t |z }|St|t&r1|j"d}|j$rt dz t)|z Syy)Nrr)r>rrorrrrrrrrUrrrrr1rr<rrr)rrr+rs r4rz acsc.eval s ;;$$ $ ==aee|uu !t  %s1u 1::q1113D3DE E66M  ' ' )I:  ??66M ==*Jj !#& c3 ((1+C  qt 8s(CA:s(C"Q;#)C c3 ((1+C  !td3i''! r6c|dk(r7d|jddztdd|jddzz z zz St||rr-rs r4rz acsc.fdiff sM q=tyy|QtA$))A,/0A,A'BBC C$T84 4r6ctSrrrs r4rz acsc.inverse rr6c|dk(rCtdz tjtdzz tjt|zzS|dks|dzdk(rtjSt |}t |dkDr*|dkDr%|d}||dz |dz zz|dzzd|dzdzzz S|dz}ttj||z}t||zdz|zdz}tj|z|z ||zzdz Sr0) rrr3r"rUrrrrrrs r4rzacsc.taylor_term s 6a4!//#a&001??3q63II I Ua!eqj66M A>"Q&1q5"2&QUQqSM*QT111qy=AAF#AFFA.!3aL1$)A-2*Q.A599r6c|jd}|j|dj}|tjur |j |j |S|tj tjtjfvr5|jtj|||jS|tjurd|z j |S|jrd|dzz jr|j!||r|nd}t#|j$r$|jrt&|j |z St#|jr%|j$rNt& |j |z S|jtj|||jS|j |Sr)r<rrIrrr;rJrrUrr"rQrTrorrrGr rLrrs r4rQzacsc._eval_as_leading_term$ sjiil XXa^ " " $ ;99S0034 4 155&!%%( (<<$::14d:SZZ\ \ "" "cE**1- - ::1r1u911771dd2D$x##>> " --D%%>>32..||C(>>qtRV>W^^``yy}r6c"ddlm}|jdj|d}|tj ur-t dd}ttj |dzzjtj|dd|z}tj|jdz} | j|} | | z | z } ttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zS|tjur-t dd}ttj|dzz jtj|dd|z}tj|jdz } | j|} | | z | z } ttj | zj|||} | jt| zj!} |jj|| j!j#|||z|zSt$|9|||} |tj&ur| S|j(rd|dzz j*r|jdj-||r|nd}t/|j0r|j*r t2| z S| St/|j*r|j0r t2 | z S| S|jtj|||| S| Sr3)rrr<rrrrrrr"rrrJr%rrrTrrrorrrGr rLrrs r4rzacsc._eval_nseries; s(yy|  A& 155=cD)Aquuq!t|$,,S199!Q!DC==499Q</D$$Q'AA A ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M M 1== cD)Aq}}q!t+,44S9AA!Q!LC==499Q</D$$Q'AA A ?00ad0CD<<>$q')113C;;=%%a-446>>@1QT1:M Mg#A#6 1$$ $J < 0 \\ \arctan\left(\frac y x\right) + \pi& \qquad y \ge 0, x < 0 \\ \arctan\left(\frac y x\right) - \pi& \qquad y < 0, x < 0 \\ +\frac{\pi}{2} & \qquad y > 0, x = 0 \\ -\frac{\pi}{2} & \qquad y < 0, x = 0 \\ \text{undefined} & \qquad y = 0, x = 0 \end{cases} Attention: Note the role reversal of both arguments. The `y`-coordinate is the first argument and the `x`-coordinate the second. If either `x` or `y` is complex: .. math:: \operatorname{atan2}(y, x) = -i\log\left(\frac{x + iy}{\sqrt{x^2 + y^2}}\right) Examples ======== Going counter-clock wise around the origin we find the following angles: >>> from sympy import atan2 >>> atan2(0, 1) 0 >>> atan2(1, 1) pi/4 >>> atan2(1, 0) pi/2 >>> atan2(1, -1) 3*pi/4 >>> atan2(0, -1) pi >>> atan2(-1, -1) -3*pi/4 >>> atan2(-1, 0) -pi/2 >>> atan2(-1, 1) -pi/4 which are all correct. Compare this to the results of the ordinary `\operatorname{atan}` function for the point `(x, y) = (-1, 1)` >>> from sympy import atan, S >>> atan(S(1)/-1) -pi/4 >>> atan2(1, -1) 3*pi/4 where only the `\operatorname{atan2}` function returns what we expect. We can differentiate the function with respect to both arguments: >>> from sympy import diff >>> from sympy.abc import x, y >>> diff(atan2(y, x), x) -y/(x**2 + y**2) >>> diff(atan2(y, x), y) x/(x**2 + y**2) We can express the `\operatorname{atan2}` function in terms of complex logarithms: >>> from sympy import log >>> atan2(y, x).rewrite(log) -I*log((x + I*y)/sqrt(x**2 + y**2)) and in terms of `\operatorname(atan)`: >>> from sympy import atan >>> atan2(y, x).rewrite(atan) Piecewise((2*atan(y/(x + sqrt(x**2 + y**2))), Ne(y, 0)), (pi, re(x) < 0), (0, Ne(x, 0)), (nan, True)) but note that this form is undefined on the negative real axis. See Also ======== sin, csc, cos, sec, tan, cot asin, acsc, acos, asec, atan, acot References ========== .. [1] https://en.wikipedia.org/wiki/Inverse_trigonometric_functions .. [2] https://en.wikipedia.org/wiki/Atan2 .. [3] https://functions.wolfram.com/ElementaryFunctions/ArcTan2 c ddlm}|tjur4|jrt Sdt z|t |zt z S|tjurtjS|jr:|jr.|jr"|jrt|}t|}|jr|jr|jrt||z S|jrB|jrt||z t z S|j rht||z t zS|jrG|jr t dz S|jr t dz S|jrtj"S|jrs|j$r t tj&||z zS|jr;t)t t |dkfdt+|dftj"dfS|jrS|jrFtj, t/|tj,|zzt1|dz|dzzz zSyy)Nr) HeavisiderT)'sympy.functions.special.delta_functionsrOrrr>rr!rrUrrr rSrrrLrris_extended_nonzerorr(rr3r"r%)rrrrOs r4rz atan2.eval sE "" "yy R42a5)*R/ / !**_66M ^^1;;1;;1A1A  !"4"4}}AaCy ==!9r>)%%!9r>)==a4K]]3q5LYY55L 99$$1559Q</00{{ "beai"#R1X"#%%00 ;;1;;OO#CQ__Q&&QTAqD[(99%;; ;';r6c tj t|tj|zzt|dz|dzzz zSrrr@rrrs r4rzatan2._eval_rewrite_as_logs=Q):%:DA1rvs"$ ZZFFII("+&OBEE;5CC:))##363AKOAKH  ""JHVs sl g1 g1T Q Qh z zz uO&;uOpi7 )i7Xf7 )f7Rt$?t$xN ?N bf 'fRn 'nbR@ 'R@jWK 'WKtd 'd NG 'G Ts- (s-r6