K i;XddlmZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z mZmZddlmZdd lmZdd lmZmZmZdd lmZmZdd lmZdd lmZmZddl m!Z!m"Z"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:Gdde3eZ;Gdde3eZ<Gdde<Z=Gdde3eZ>Gdd e4eZ?Gd!d"e3Z@Gd#d$e3ZAd%e'eB<d&ZCGd'd(e3ZDGd)d*eDZEGd+d,eDZFGd-d.eEeZGy/)0)reduce)product)Basic)Tuple)Expr)Lambda) fuzzy_notfuzzy_or fuzzy_and)Mod)igcd)ooRationalInteger)Eqis_eq) NumberKind) SingletonS)DummysymbolsSymbol)_sympifysympify_sympy_converter)ceilingfloor)sincos)AndOr)tfnSetIntervalUnion FiniteSet ProductSetSetKind) filldedentcneZdZdZdZej ZejZ dZ dZ dZ dZ edZdZy) RationalsaS Represents the rational numbers. This set is also available as the singleton ``S.Rationals``. Examples ======== >>> from sympy import S >>> S.Half in S.Rationals True >>> iterable = iter(S.Rationals) >>> [next(iterable) for i in range(12)] [0, 1, -1, 1/2, 2, -1/2, -2, 1/3, 3, -1/3, -3, 2/3] TFcht|tstjSt|j SN) isinstancerrfalser# is_rationalselfothers Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/sets/fancysets.py _containszRationals._contains.s&%&77N5$$%%c#<Ktjtjtjd} t |D]L}t ||dk(st ||t ||t | |t | |N|dz }`w)Nr")rZeroOne NegativeOneranger r)r3dns r5__iter__zRationals.__iter__3sff ee mm 1X *1:?"1a.("1a.("A2q/)"A2q/)  * FAs ABABc"tjSr.)rRealsr3s r5 _boundaryzRationals._boundaryAs wwr7c ttSr.r)rrCs r5_kindzRationals._kindE z""r7N)__name__ __module__ __qualname____doc__ is_iterablerNegativeInfinity_infInfinity_supis_empty is_finite_setr6r@propertyrDrGr7r5r,r,sO K  D ::DHM& #r7r,) metaclassceZdZUdZdZej Zee d<ejZ dZ dZ dZdZdZdZed Zd Zd Zy ) Naturalsak Represents the natural numbers (or counting numbers) which are all positive integers starting from 1. This set is also available as the singleton ``S.Naturals``. Examples ======== >>> from sympy import S, Interval, pprint >>> 5 in S.Naturals True >>> iterable = iter(S.Naturals) >>> next(iterable) 1 >>> next(iterable) 2 >>> next(iterable) 3 >>> pprint(S.Naturals.intersect(Interval(0, 10))) {1, 2, ..., 10} See Also ======== Naturals0 : non-negative integers (i.e. includes 0, too) Integers : also includes negative integers TrOFct|tstjS|jr|j rtj S|j dus|jdurtjSyNF)r/rrr0 is_positive is_integertruer2s r5r6zNaturals._containslsY%&77N   5#3#366M    &%*;*;u*D77N+Er7c@tdtj|SNr"Ranger is_subsetr2s r5_eval_is_subsetzNaturals._eval_is_subsettsQ|%%e,,r7c@tdtj|Sr_rar is_supersetr2s r5_eval_is_supersetzNaturals._eval_is_supersetwsQ|''..r7c#8K|j} ||dz} wr_)rOr3is r5r@zNaturals.__iter__zs% IIGAAsc|Sr.rUrCs r5rDzNaturals._boundary r7cjttt||||jk\|tkSr.)r rrinfrr3xs r5 as_relationalzNaturals.as_relationals'2eAh?AM1r6::r7c ttSr.rFrCs r5rGzNaturals._kindrHr7N)rIrJrKrLrMrr;rOr__annotations__rPrQrRrSr6rcrgr@rTrDrqrGrUr7r5rXrXIsa8KEED' ::DHM-/ ;#r7rXc:eZdZdZej ZdZdZdZ y) Naturals0zRepresents the whole numbers which are all the non-negative integers, inclusive of zero. See Also ======== Naturals : positive integers; does not include 0 Integers : also includes the negative integers ct|tstjS|jr|j rtj S|jdus|j durtjSyrZ)r/rrr0r\is_nonnegativer]r2s r5r6zNaturals0._containssY%&77N   %"6"666M    &%*>*>%*G77N+Hr7c>ttj|Sr.r`r2s r5rczNaturals0._eval_is_subsetsRy""5))r7c>ttj|Sr.rer2s r5rgzNaturals0._eval_is_supersetsRy$$U++r7N) rIrJrKrLrr:rOr6rcrgrUr7r5rurus! 66D*,r7rucpeZdZdZdZdZdZdZdZe dZ e dZ e dZ d Z d Zd Zd Zy )IntegersaH Represents all integers: positive, negative and zero. This set is also available as the singleton ``S.Integers``. Examples ======== >>> from sympy import S, Interval, pprint >>> 5 in S.Naturals True >>> iterable = iter(S.Integers) >>> next(iterable) 0 >>> next(iterable) 1 >>> next(iterable) -1 >>> next(iterable) 2 >>> pprint(S.Integers.intersect(Interval(-4, 4))) {-4, -3, ..., 4} See Also ======== Naturals0 : non-negative integers Integers : positive and negative integers and zero TFcht|tstjSt|j Sr.)r/rrr0r#r\r2s r5r6zIntegers._containss&%&77N5##$$r7c#nKtjtj} || |dz}wr_)rr:r;ris r5r@zIntegers.__iter__s5ff EEG"HAAs35c"tjSr.rrNrCs r5rOz Integers._inf!!!r7c"tjSr.rrPrCs r5rQz Integers._sup zzr7c|Sr.rUrCs r5rDzIntegers._boundaryrlr7c ttSr.rFrCs r5rGzIntegers._kindrHr7c`ttt||t |k|tkSr.)r rrrros r5rqzIntegers.as_relationals%2eAh?RC!GQV44r7cJtt tj|Sr.r`r2s r5rczIntegers._eval_is_subsetsbS"~''..r7cJtt tj|Sr.rer2s r5rgzIntegers._eval_is_supersetsbS"~))%00r7N)rIrJrKrLrMrRrSr6r@rTrOrQrDrGrqrcrgrUr7r5r{r{sr<KHM% ""#5/1r7r{c\eZdZdZedZedZedZedZdZ dZ y) rBa Represents all real numbers from negative infinity to positive infinity, including all integer, rational and irrational numbers. This set is also available as the singleton ``S.Reals``. Examples ======== >>> from sympy import S, Rational, pi, I >>> 5 in S.Reals True >>> Rational(-1, 2) in S.Reals True >>> pi in S.Reals True >>> 3*I in S.Reals False >>> S.Reals.contains(pi) True See Also ======== ComplexRegion c"tjSr.rrCs r5startz Reals.start rr7c"tjSr.rrCs r5endz Reals.endrr7cyNTrUrCs r5 left_openzReals.left_openr7cyrrUrCs r5 right_openzReals.right_openrr7cX|ttjtjk(Sr.)r%rrNrPr2s r5__eq__z Reals.__eq__s!3!3QZZ@@@r7cdtttjtjSr.)hashr%rrNrPrCs r5__hash__zReals.__hash__sHQ//<==r7N) rIrJrKrLrTrrrrrrrUr7r5rBrBsb8""A>r7rBceZdZdZdZedZedZedZedZ e dZ dZ d Z d Zed Zd Zd Zy)ImageSetaY Image of a set under a mathematical function. The transformation must be given as a Lambda function which has as many arguments as the elements of the set upon which it operates, e.g. 1 argument when acting on the set of integers or 2 arguments when acting on a complex region. This function is not normally called directly, but is called from ``imageset``. Examples ======== >>> from sympy import Symbol, S, pi, Dummy, Lambda >>> from sympy import FiniteSet, ImageSet, Interval >>> x = Symbol('x') >>> N = S.Naturals >>> squares = ImageSet(Lambda(x, x**2), N) # {x**2 for x in N} >>> 4 in squares True >>> 5 in squares False >>> FiniteSet(0, 1, 2, 3, 4, 5, 6, 7, 9, 10).intersect(squares) {1, 4, 9} >>> square_iterable = iter(squares) >>> for i in range(4): ... next(square_iterable) 1 4 9 16 If you want to get value for `x` = 2, 1/2 etc. (Please check whether the `x` value is in ``base_set`` or not before passing it as args) >>> squares.lamda(2) 4 >>> squares.lamda(S(1)/2) 1/4 >>> n = Dummy('n') >>> solutions = ImageSet(Lambda(n, n*pi), S.Integers) # solutions of sin(x) = 0 >>> dom = Interval(-1, 1) >>> dom.intersect(solutions) {0} See Also ======== sympy.sets.sets.imageset ct|ts td|j}t |t |k7r td|Dcgc] }t |}}t d|Ds tdt fdt||Dstd|d||tjurt |dk(r|d St|j|jjzsAtd |D}|d k(rtj S|d k(rt#|jSt%j&|g|Scc}w) NzFirst argument must be a LambdaIncompatible signaturec3<K|]}t|tywr.)r/r$.0ss r5 z#ImageSet.__new__..fs4!:a%4sz,Set arguments to ImageSet should of type Setc3HK|]\}}j||ywr. _check_sig)rsgstclss r5rz#ImageSet.__new__..is Mfb"3>>"b)M"z Signature z does not match sets r"rc34K|]}|jywr.)rRrs r5rz#ImageSet.__new__..ps9q 9TF)r/r ValueError signaturelenrall TypeErrorziprIdentityFunctionset variablesexpr free_symbolsr EmptySetr'r__new__)rflambdasetsrrrRs` r5rzImageSet.__new__[s)'6*>? ?%% y>SY &56 6%)* **4t44JK KMIt8LMMiQUVW W a(( (SY!^7N7$$% (A(AA9D99H4zz!U" ..}}S'1D11%+sEc |jdSNrargsrCs r5zImageSet.x$))A,r7c |jddSr_rrCs r5rzImageSet.ysdiimr7cl|j}t|dk(r|dSt|jS)Nr"r) base_setsrr(flatten)r3rs r5base_setzImageSet.base_set{s5~~ t9>7Nt$,,. .r7c&t|jSr.)r(rrCs r5 base_psetzImageSet.base_psets4>>**r7c|jryt|trB|j}t |t |k7ryt fdt ||DSy)NTFc3HK|]\}}j||ywr.r)rtspsrs r5rz&ImageSet._check_sig..s M&"bs~~b"-Mr) is_symbolr/r(rrrr)rsig_iset_irs` r5rzImageSet._check_sigsP ?? z *::D5zSY&MCt.get_symsetmapsY 23EI!& X==%-IcN++#==D3x3t9,()ABBLLS$0   r7c3K||fg}|D]l\}}t|tst||%t|trt|t|k7rdy|j t ||nyw)z:Find the equations relating symbols in expr and candidate.FN)r/rrrrr)r candidaterecs r5 get_equationsz)ImageSet._contains..get_equationssnI&'E ,1!!U+Q(N#Au-Q3q61AKLLQ+ ,sA8A:Fc34K|]}|jywr.)r)reqs r5rz%ImageSet._contains..s5R5r)sympy.solvers.solvesetrrrrrrrrnamesubsrr0appendrruniontupler#r rR)r3r4rrrrrrrvrep equationsrrsymsssolnsets r5r6zImageSet._containss|: ( ,zzjj""JJ(( NN *33Aq%-33*34QQVVC[4 4hhsmyy~ e, !BU{ww   R  !"#y1  695 NVCIIuce%DD )$ +45aYq\5 5!)Y B ?9W--.//;4406s*F  F Fc:td|jDS)Nc34K|]}|jywr.)rMrs r5rz'ImageSet.is_iterable..s9Q1==9r)rrrCs r5rMzImageSet.is_iterables9$..999r7c ddlm}|jj}t |dk(rY|dj rJt jtr0|jd}||jjStd|jDr!tfdt|jDS|S)Nr)SetExprr"c34K|]}|jywr. is_FiniteSetrs r5rz ImageSet.doit..s6!q~~6rc3(K|] }| ywr.rU)rafs r5rz ImageSet.doit..sGq!uGs)sympy.sets.setexprrrrrrr/rrr _eval_funcrrr'r)r3hintsrrrrs @r5doitz ImageSet.doits. JJkk s8q=SV--*QVVT2J~~a(H8$//266 6 6t~~6 6Ggt~~.FGH H r7cTt|jjjSr.)r)rrkindrCs r5rGzImageSet._kindstzz++,,r7N)rIrJrKrLrrTrrrr classmethodrr@rr6rMrrGrUr7r5rr#s6n2: . /E34I //++$-I0V:: -r7rceZdZdZdZedZedZedZedZ dZ dZ d Z ed Z d Zed Zed ZedZdZdZedZedZedZdZy)raa Represents a range of integers. Can be called as ``Range(stop)``, ``Range(start, stop)``, or ``Range(start, stop, step)``; when ``step`` is not given it defaults to 1. ``Range(stop)`` is the same as ``Range(0, stop, 1)`` and the stop value (just as for Python ranges) is not included in the Range values. >>> from sympy import Range >>> list(Range(3)) [0, 1, 2] The step can also be negative: >>> list(Range(10, 0, -2)) [10, 8, 6, 4, 2] The stop value is made canonical so equivalent ranges always have the same args: >>> Range(0, 10, 3) Range(0, 12, 3) Infinite ranges are allowed. ``oo`` and ``-oo`` are never included in the set (``Range`` is always a subset of ``Integers``). If the starting point is infinite, then the final value is ``stop - step``. To iterate such a range, it needs to be reversed: >>> from sympy import oo >>> r = Range(-oo, 1) >>> r[-1] 0 >>> next(iter(r)) Traceback (most recent call last): ... TypeError: Cannot iterate over Range with infinite start >>> next(iter(r.reversed)) 0 Although ``Range`` is a :class:`Set` (and supports the normal set operations) it maintains the order of the elements and can be used in contexts where ``range`` would be used. >>> from sympy import Interval >>> Range(0, 10, 2).intersect(Interval(3, 7)) Range(4, 8, 2) >>> list(_) [4, 6] Although slicing of a Range will always return a Range -- possibly empty -- an empty set will be returned from any intersection that is empty: >>> Range(3)[:0] Range(0, 0, 1) >>> Range(3).intersect(Interval(4, oo)) EmptySet >>> Range(3).intersect(Range(4, oo)) EmptySet Range will accept symbolic arguments but has very limited support for doing anything other than displaying the Range: >>> from sympy import Symbol, pprint >>> from sympy.abc import i, j, k >>> Range(i, j, k).start i >>> Range(i, j, k).inf Traceback (most recent call last): ... ValueError: invalid method for symbolic range Better success will be had when using integer symbols: >>> n = Symbol('n', integer=True) >>> r = Range(n, n + 20, 3) >>> r.inf n >>> pprint(r) {n, n + 3, ..., n + 18} c"t|dk(r$t|dtrtd|dzt |}|j dk(r t d|jxsd|j|j xsd}}} g}|||fD]}t|}|tjtjfvs$|jtr!|jdk7r|j!|f|j"s|j$r t dt |j!| |\}}}d}t)d|||fDr||z } | |z } | j*rX| dk(rd }nLt-| } || |zz} | j*r| |z j.r| |z } n| |z dz j.r| |z } n| j0rd }n|} n|j$rs|||z z} | tj2us| dkrd }n|j"rB|j$r6t5|dk7r(t t'd |dkDr dzd z|} nl|j$} | r%|dkDrtj6ntj8}t;||z |z } | dkrd }n | rtj6}||z} n|| |zz} |r"tj<x}} tj6}t?j@|| |S#t $rt t'dwxYw) Nr"rz)use sympify(%s) to convert range to Rangezstep cannot be 0Fzinfinite symbols not allowedz Finite arguments to Range must be integers; `imageset` can define other cases, e.g. use `imageset(i, i/10, Range(3))` to give [0, 1/10, 1/5].c3FK|]}|jtywr.)hasrrrjs r5rz Range.__new__..|s:quuV}:s!Tz7 Step size must be %s in this case.)!rr/r=rslicesteprrstoprrrNrPrrr\r is_Integer is_infiniter*any is_Rationalr is_negativeis_extended_negativeNaNabsr;r<rr:rr)rrslcrr r okwnulldifr?rspanoosteps r5rz Range.__new__Zs t9>$q'5)?$q'IKKTl 88q=/0 0IINCHHchhm!Tt BT4( !AJ++QZZ88f !,,%*?IIaL}}()GHH$$IIaL ! tT :udD&9: :,CDA}}!8DaA!D&.C$J334KCHqL554KC''   &Dquu} T%5%5#d)q. -:BF(Q-T"UVVPR-T"UVV%%F $qquuammt+,AAvuudlafn && EC55D}}S%d33g Z)  s B)K00Lc |jdSrrrCs r5rzRange.rr7c |jdSr_rrCs r5rzRange.1r7c |jdS)Nr9rrCs r5rzRange.rr7c|jtrY|j|jz |jz }|j rt d|jDs td|j|jk(r|S|j|j|jz |j|jz |j S)zReturn an equivalent Range in the opposite order. Examples ======== >>> from sympy import Range >>> Range(10).reversed Range(9, -1, -1) c3PK|]}|jxs |j ywr.r\r rs r5rz!Range.reversed..'5F67ALL1AMM15F$&!invalid method for symbolic range) rrr rr is_extended_positiverrrfunc)r3r?s r5reversedzRange.reverseds 88F TZZ'2A))5F;?995F2F !DEE :: "Kyy II !4:: #9DII:G Gr7c ttSr.rFrCs r5rGz Range._kindrHr7c|j|jk(rtjS|jrtjS|j st |j S|jtrO|j|jz |jz }|jrtd|jDs y|j}|jjr |j}n3|jjr |j}ntjS|dk(rt!||dS||z |jz}|tj"k(rg|jtr,t%d}|j'|j)||St+||j,k\||j.kS|j0rtjSy)Nc3PK|]}|jxs |j ywr.r rs r5rz"Range._contains..r!r"r"rrj)rr rr0r r\r#rrr r$rrsize is_finiter]rr:rrqrr rnsupr )r3r4r?refresr>s r5r6zRange._containssm :: "77N   77Nu''( ( 88F TZZ'2A))5F;?995F2F A ::  **C YY ))C66M 6eT!W% %U{dii' !&&=xx#J))!,11!U;;u(%488*;< < ^^77Nr7c#K|j}|jtjs6|jtjs|j s t d|jtjtjfvr t d|j|jk7rQ|j}|jr |||jz }t|D]}|||jz }yyw)Nz"Cannot iterate over symbolic Rangez-Cannot iterate over Range with infinite start) r*rrrPrNr rrr r r r=)r3r?rj_s r5r@zRange.__iter__s IIajj!QUU1+=+=%>!,,@A A ::!,,ajj9 9KL L ZZ499 $ A}}GNAq#AGNA#%sDDc|j|jz }||jz }|jtj s,|jtj s |jsy|jtj tj fvry|jrtd|jDsyy)NFc34K|]}|jywr.r\rs r5rz$Range.is_iterable..s1R1!,,1RrT) r rr rrrPrNr is_extended_nonnegativerrr3rr?s r5rMzRange.is_iterablesii$**$  Majj!QUU1+=+=%>!,, ::!,,ajj9 9))c1R 1R.Rr7cj|j}|tjur tdt |S)Nz0Use .size to get the length of an infinite Range)r*rrPrint)r3rvs r5__len__z Range.__len__s, YY  OP P2wr7cj|j|jk(rtjS|j|jz }||jz }|j rtj S|jr0td|jDrtt|Std)Nc34K|]}|jywr.r3rs r5rzRange.size..s-Nqall-Nr!Invalid method for symbolic Range) rr rr:r r rPr4rrrrrr5s r5r*z Range.size s :: "66Mii$**$  M ==::  % %#-NDII-N*NuQx= <==r7c|jjr|jjry|jjSr)rr\r r*r+rCs r5rSzRange.is_finite_sets. :: TYY%9%9yy"""r7cN |jjS#t$rYywxYwr.)r*is_zerorrCs r5rRzRange.is_emptys) 99$$ $  s  $$ctt|j|j}| tdt | S)Nz#cannot tell if Range is null or not)rrr rbool)r3bs r5__bool__zRange.__bool__#s5 $**dii ( 9BC C7{r7c d}d}d}d}t|tr7|jjr|j|j k(r t dS|j|j\}}}t||z |z } | dkr t dS|| |zz} | |z } ||jz} t |||| | z| S|j}|j }|jdk(r t||jxsd}||jz} |jjr!|j jr t||j jr)|j||n| dz||n| |jS||1|dkrt |d|j| S|dkDr t||S|dkr2|dkrt |d||| St |j||| S|dk(r|dkDr t dSt||dk(r|dkDr t|t|t||dkr|9|dkrt |||j| St |||j | S|dkrt ||||| S|dk(r|dkr t|t dS|dkDrt||dk(rn|"|dkr t||dkDr t||S|dkr:|dkDr t||dk(rt |j||| St dSt||dkDr t|yy|j|j k(r tdtd |jDr0|j |jz |jz j s td |dk(r-|jjr t||jS|dk(r:|j jr t||j |jz S|j} |dkr |j n |j||jzz} | jr t|| |jz |jz }t#|jt%|j&| |z j&gg}|r| S| td td) Nz0cannot slice from the end with an infinite valuezslice step cannot be zeroz1slicing not possible on range with infinite startzBcannot unambiguously re-stride from the end with an infinite valuerr"rzRange index out of rangec3PK|]}|jxs |j ywr.r rs r5rz$Range.__getitem__..s(( 5 5(r"r<)r/rr*r+rr raindicesrr rr r& IndexErrorrrr$r r rw)r3rjooslicezerostepinfinite ambiguousrr r r?canonical_stoprssr8rrels r5 __getitem__zRange.__getitem__,sD.F% a yy""::* 8O$%IIdii$8!tTTE\4/06 8O!&4$t+$))^T%[$s)b."==vv66Q;$X..vv{$))^ ::))dii.C.C$X.. 99(( == $ 4%!)!&UF'h'=|!8#(b4::r#BB!AX",Y"77#'K!8#(b4:r#BB#(T$Z#DD!8#(8O",W"55!8",W"55",W"55(11QY|!8#(edjj"#EE#(edii#DD$T%[$t*bAA!8",W"55#(8O(11aZ|!8",W"55!AX",Y"77#'K!8",Y"77!QY#(T$Z#DD#(8O(11QY$W--'",zzTYY& !;<<(!YY((.2ii$**.DII.33-4 !DEEAv::))$W--zz!Bw99(($W--yy499,, A 1u$))$**$)) CB~~ )) ?DII-CCOO%s'9'9AcE;Q;Q&RSUVC { !DEE78 8r7c|stjjS|jtrt d|j Dr|j|jz }|jjr|jr |jS|jjr%|jr|j|jz Std|jdkDr |jS|j|jz S)Nc3PK|]}|jxs |j ywr.r rs r5rzRange._inf.. DQ1<<01==0Dr"r#r) rrrnrrrrr rr r[rrr3rs r5rOz Range._infs::>> ! 88F D$))DDii$**,99((S__::%YY**s99tyy00@A A 99q=:: 99tyy( (r7c|stjjS|jtrt d|j Dr|j|jz }|jjr%|jr|j|jz S|jjr|jr |jStd|jdkDr|j|jz S|jS)Nc3PK|]}|jxs |j ywr.r rs r5rzRange._sup..rRr"r#r) rrr,rrrrr rr r[rrrSs r5rQz Range._sups::>> ! 88F D$))DDii$**,99((S__99tyy00YY**s::%@A A 99q=99tyy( (:: r7c|Sr.rUrCs r5rDzRange._boundaryrlr7c `|jjr/|jjrJ|jj}n |j}|j}t t ||z |d}tt t |ddt t |dd}|j|jz |jz }|dk(rtjj|S|dk(rtt |||S |j|j}}|5t|jr||kDn||k\jr||kn||k}n|j|j|jz }}tt|jdk\|jr||kDn||k\|jr||kn||kt|jdk|jr||kn||k|jr||kDn||k\}t|||S#t$rd}YwxYw)z >##  J9X))  -r7racXt|j|j|jSr.)rarr r )rs r5rrsE!''166166$Br7c *ddlm}|jr|j}|dtj zk\r|dtj zk(r|j ru|jri||j}ttd|tj zddt|tj zdtj zddStddtj zddS||j||j}}|| td|tj z}|tj z}||kDrWtttj|d|jt|dtj z|j dSt|||j |jS|jrHg}|D]9} || }| td|j|tj z;t!|S|j"r)t|j$D cgc] } t'| c} S|j)tj*rtdt-|zt/d |zcc} w) a Normalize a Real Set `theta` in the interval `[0, 2\pi)`. It returns a normalized value of theta in the Set. For Interval, a maximum of one cycle $[0, 2\pi]$, is returned i.e. for theta equal to $[0, 10\pi]$, returned normalized value would be $[0, 2\pi)$. As of now intervals with end points as non-multiples of ``pi`` is not supported. Raises ====== NotImplementedError The algorithms for Normalizing theta Set are not yet implemented. ValueError The input is not valid, i.e. the input is not a real set. RuntimeError It is a bug, please report to the github issue tracker. Examples ======== >>> from sympy.sets.fancysets import normalize_theta_set >>> from sympy import Interval, FiniteSet, pi >>> normalize_theta_set(Interval(9*pi/2, 5*pi)) Interval(pi/2, pi) >>> normalize_theta_set(Interval(-3*pi/2, pi/2)) Interval.Ropen(0, 2*pi) >>> normalize_theta_set(Interval(-pi/2, pi/2)) Union(Interval(0, pi/2), Interval.Ropen(3*pi/2, 2*pi)) >>> normalize_theta_set(Interval(-4*pi, 3*pi)) Interval.Ropen(0, 2*pi) >>> normalize_theta_set(Interval(-3*pi/2, -pi/2)) Interval(pi/2, 3*pi/2) >>> normalize_theta_set(FiniteSet(0, pi, 3*pi)) {0, pi} r) _pi_coeffr9FTzBNormalizing theta without pi as coefficient is not yet implementedz@Normalizing theta without pi as coefficient, is not Implemented.z;Normalizing theta when, it is of type %s is not implementedz %s is not a real set)(sympy.functions.elementary.trigonometricr^ is_IntervalmeasurerPirrrr&r%rNotImplementedErrorr:rrr'is_Unionrnormalize_theta_setrbrBtyper) thetar^ interval_lenkk_startk_end new_startnew_end new_thetaelementintervals r5reres9LC }} 1QTT6 !qv%%//e>N>Nekk*Xa144= 144144t<>>Aqvud3 3"5;;/5991E ?em%':; ;ADDL * w !&&'5%:J:JK!)QqttVU__dKM MIwAQAQR R     )G'"Ay)+MNN  144(  ))$$ UZZP*84PQQ  !!#026u+#>? ?0E:;; Qs6JceZdZdZdZd dZedZedZedZ edZ edZ d Z e d Zd Zy ) ComplexRegionaA Represents the Set of all Complex Numbers. It can represent a region of Complex Plane in both the standard forms Polar and Rectangular coordinates. * Polar Form Input is in the form of the ProductSet or Union of ProductSets of the intervals of ``r`` and ``theta``, and use the flag ``polar=True``. .. math:: Z = \{z \in \mathbb{C} \mid z = r\times (\cos(\theta) + I\sin(\theta)), r \in [\texttt{r}], \theta \in [\texttt{theta}]\} * Rectangular Form Input is in the form of the ProductSet or Union of ProductSets of interval of x and y, the real and imaginary parts of the Complex numbers in a plane. Default input type is in rectangular form. .. math:: Z = \{z \in \mathbb{C} \mid z = x + Iy, x \in [\operatorname{re}(z)], y \in [\operatorname{im}(z)]\} Examples ======== >>> from sympy import ComplexRegion, Interval, S, I, Union >>> a = Interval(2, 3) >>> b = Interval(4, 6) >>> c1 = ComplexRegion(a*b) # Rectangular Form >>> c1 CartesianComplexRegion(ProductSet(Interval(2, 3), Interval(4, 6))) * c1 represents the rectangular region in complex plane surrounded by the coordinates (2, 4), (3, 4), (3, 6) and (2, 6), of the four vertices. >>> c = Interval(1, 8) >>> c2 = ComplexRegion(Union(a*b, b*c)) >>> c2 CartesianComplexRegion(Union(ProductSet(Interval(2, 3), Interval(4, 6)), ProductSet(Interval(4, 6), Interval(1, 8)))) * c2 represents the Union of two rectangular regions in complex plane. One of them surrounded by the coordinates of c1 and other surrounded by the coordinates (4, 1), (6, 1), (6, 8) and (4, 8). >>> 2.5 + 4.5*I in c1 True >>> 2.5 + 6.5*I in c1 False >>> r = Interval(0, 1) >>> theta = Interval(0, 2*S.Pi) >>> c2 = ComplexRegion(r*theta, polar=True) # Polar Form >>> c2 # unit Disk PolarComplexRegion(ProductSet(Interval(0, 1), Interval.Ropen(0, 2*pi))) * c2 represents the region in complex plane inside the Unit Disk centered at the origin. >>> 0.5 + 0.5*I in c2 True >>> 1 + 2*I in c2 False >>> unit_disk = ComplexRegion(Interval(0, 1)*Interval(0, 2*S.Pi), polar=True) >>> upper_half_unit_disk = ComplexRegion(Interval(0, 1)*Interval(0, S.Pi), polar=True) >>> intersection = unit_disk.intersect(upper_half_unit_disk) >>> intersection PolarComplexRegion(ProductSet(Interval(0, 1), Interval(0, pi))) >>> intersection == upper_half_unit_disk True See Also ======== CartesianComplexRegion PolarComplexRegion Complexes TcT|dur t|S|dur t|Std)NFTz$polar should be either True or False)CartesianComplexRegionPolarComplexRegionr)rrpolars r5rzComplexRegion.__new__s2 E>)$/ / d]%d+ +CD Dr7c |jdS)a Return raw input sets to the self. Examples ======== >>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.sets ProductSet(Interval(2, 3), Interval(4, 5)) >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.sets Union(ProductSet(Interval(2, 3), Interval(4, 5)), ProductSet(Interval(4, 5), Interval(1, 7))) rrrCs r5rzComplexRegion.setss(yy|r7c|jjrd}||jfz}|S|jj}|S)a Return a tuple of sets (ProductSets) input of the self. Examples ======== >>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.psets (ProductSet(Interval(2, 3), Interval(4, 5)),) >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.psets (ProductSet(Interval(2, 3), Interval(4, 5)), ProductSet(Interval(4, 5), Interval(1, 7))) rU)rrr)r3psetss r5ryzComplexRegion.psetssA( 99 " "ETYYM)E IINNE r7cxg}|jD] }|j|jd"t|}|S)a2 Return the union of intervals of `x` when, self is in rectangular form, or the union of intervals of `r` when self is in polar form. Examples ======== >>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.a_interval Interval(2, 3) >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.a_interval Union(Interval(2, 3), Interval(4, 5)) rryrrr&)r3 a_intervalros r5r|zComplexRegion.a_intervalD, zz /G   gll1o . /J' r7cxg}|jD] }|j|jd"t|}|S)a Return the union of intervals of `y` when, self is in rectangular form, or the union of intervals of `theta` when self is in polar form. Examples ======== >>> from sympy import Interval, ComplexRegion, Union >>> a = Interval(2, 3) >>> b = Interval(4, 5) >>> c = Interval(1, 7) >>> C1 = ComplexRegion(a*b) >>> C1.b_interval Interval(4, 5) >>> C2 = ComplexRegion(Union(a*b, b*c)) >>> C2.b_interval Interval(1, 7) r"r{)r3 b_intervalros r5rzComplexRegion.b_intervalr}r7c.|jjS)ay The measure of self.sets. Examples ======== >>> from sympy import Interval, ComplexRegion, S >>> a, b = Interval(2, 5), Interval(4, 8) >>> c = Interval(0, 2*S.Pi) >>> c1 = ComplexRegion(a*b) >>> c1.measure 12 >>> c2 = ComplexRegion(a*c, polar=True) >>> c2.measure 6*pi )r_measurerCs r5rzComplexRegion._measures&yy!!!r7c4|jdjSr)rrrCs r5rGzComplexRegion._kind.syy|   r7c|jtjs tdt |t dzS)a2 Converts given subset of real numbers to a complex region. Examples ======== >>> from sympy import Interval, ComplexRegion >>> unit = Interval(0,1) >>> ComplexRegion.from_real(unit) CartesianComplexRegion(ProductSet(Interval(0, 1), {0})) z&sets must be a subset of the real liner)rbrrBrrtr')rrs r5 from_realzComplexRegion.from_real1s4~~agg&EF F%dYq\&9::r7cddlm}m}t|t}|rt |dk7r t dt|ttfstjS|js=|r|n|j\ttfd|jDS|jr|jr#ttd|jDS|r|\n||||cj rIj"r<dtj$zzttfd|jDSyyy)Nr)argAbsr9zexpecting Tuple of length 2c3K|]I}t|jdj|jdjgKywrr"Nr rr6)rpsetimres r5rz*ComplexRegion._contains..RsQ (!* ! &&r* ! &&r*+,!- (AAc3tK|]0}|jdjtj2yw)rN)rr6rr:)rrs r5rz*ComplexRegion._contains..[s/$,%)IIaL$:$:166$B$,s68c3K|]I}t|jdj|jdjgKywrr)rrr\rgs r5rz*ComplexRegion._contains..dsQ$,%.IIaL**1-IIaL**51/3%4$,r)sympy.functionsrrr/rrrrrr0rv as_real_imagr#r ryr?is_real is_numberrb) r3r4rrisTuplerr\rrgs @@@@r5r6zComplexRegion._containsDs/,UE* s5zQ:; ;%$/77Nzz%U5+=+=+?FBx (!JJ (() ) ZZ}}8$, $ $,,-- 5u:s5z5}}1448$,!% $,,--"1}r7N)F)rIrJrKrLis_ComplexRegionrrTrryr|rrrGrrr6rUr7r5rrrrVsLZE*488""(!;;$#-r7rrc>eZdZdZdZedeZdZe dZ y)rta Set representing a square region of the complex plane. .. math:: Z = \{z \in \mathbb{C} \mid z = x + Iy, x \in [\operatorname{re}(z)], y \in [\operatorname{im}(z)]\} Examples ======== >>> from sympy import ComplexRegion, I, Interval >>> region = ComplexRegion(Interval(1, 3) * Interval(4, 6)) >>> 2 + 5*I in region True >>> 5*I in region False See also ======== ComplexRegion PolarComplexRegion Complexes Fzx, yrc|tjtjzk(rtjStd|jDrot |jdk(rWg}|jdD];}|jdD]'}|j |tj|zz)=t|Stj||S)Nc34K|]}|jywr.r)r_as r5rz1CartesianComplexRegion.__new__..s32r3rr9rr") rrB Complexesrrrr ImaginaryUnitr'r$r)rr complex_numrpys r5rzCartesianComplexRegion.__new__s 177177? ";;  33 3TYY19LKYYq\ >1>A&&q1??1+<'<=> >k* *;;sD) )r7cL|j\}}|tj|zzSr.)rrr)r3rprs r5rzCartesianComplexRegion.exprs#~~11??1$$$r7N rIrJrKrLrvrrrrrTrrUr7r5rtrtjs3. EE*I**%%r7rtc>eZdZdZdZedeZdZe dZ y)ruaX Set representing a polar region of the complex plane. .. math:: Z = \{z \in \mathbb{C} \mid z = r\times (\cos(\theta) + I\sin(\theta)), r \in [\texttt{r}], \theta \in [\texttt{theta}]\} Examples ======== >>> from sympy import ComplexRegion, Interval, oo, pi, I >>> rset = Interval(0, oo) >>> thetaset = Interval(0, pi) >>> upper_half_plane = ComplexRegion(rset * thetaset, polar=True) >>> 1 + I in upper_half_plane True >>> 1 - I in upper_half_plane False See also ======== ComplexRegion CartesianComplexRegion Complexes Tzr, thetarcLg}|js#|jD]}|j|n|j|t|D]7\}}t |jdt |jd||<9t |}tj||S)Nrr") rrr enumerater(rer&r$r)rrnew_setsrirs r5rzPolarComplexRegion.__new__s!!YY #" # OOD !h' EDAq$QVVAY%8%CEHQK Eh{{3%%r7cv|j\}}|t|tjt |zzzSr.)rrrrr)r3r\rgs r5rzPolarComplexRegion.exprs0>>5#e*qs5z99::r7NrrUr7r5rurus34 E .I&";;r7ruc.eZdZdZdZdZedZdZy)rz The :class:`Set` of all complex numbers Examples ======== >>> from sympy import S, I >>> S.Complexes Complexes >>> 1 + I in S.Complexes True See also ======== Reals ComplexRegion FcRttjtjSr.)r(rrBrCs r5rzComplexes.setss!''177++r7c,tj|Sr.)r$rrs r5rzComplexes.__new__s{{3r7N) rIrJrKrLrRrSrTrrrUr7r5rrs,(HM,, r7rN)H functoolsr itertoolsrsympy.core.basicrsympy.core.containersrsympy.core.exprrsympy.core.functionrsympy.core.logicr r r sympy.core.modr sympy.core.intfuncr sympy.core.numbersrrrsympy.core.relationalrrsympy.core.kindrsympy.core.singletonrrsympy.core.symbolrrrsympy.core.sympifyrrr#sympy.functions.elementary.integersrrr_rrsympy.logic.boolalgr r!rr#r$r%r&r'r(r)sympy.utilities.miscr*r,rXrur{rBrrar=rerrrtrurrUr7r5rs"' &;;#44+&-44BB>='KKK+.#y.#b?#si?#D,,6F1siF1R1>H 1>ha-sa-Hu-Cu-pCR