K iddlmZmZddlZGddeZGddeZGddeZGd d eZeZeZ y) )BasicIntegerNcNeZdZdZdZedZedZdZdZ dZ dZ y ) OmegaPowerz Represents ordinal exponential and multiplication terms one of the building blocks of the :class:`Ordinal` class. In ``OmegaPower(a, b)``, ``a`` represents exponent and ``b`` represents multiplicity. ct|tr t|}t|tr|dkr tdt|tstj |}t j|||S)Nrz'multiplicity must be a positive integer) isinstanceintr TypeErrorOrdinalconvertr__new__)clsabs Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/sets/ordinals.pyr zOmegaPower.__new__ s\ a  A!W%aEF F!W%"A}}S!Q''c |jdSNrargsselfs rexpzOmegaPower.expyy|rc |jdSNrrs rmultzOmegaPower.multrrc|j|jk(r||j|jS||j|jSN)rr)rotherops r _compare_termzOmegaPower._compare_terms< 88uyy dii, ,dhh * *rct|ts td|}|j|jk(S#t$r tcYSwxYwr)rrr NotImplementedrrr!s r__eq__zOmegaPower.__eq__$sI%, &"1e,yyEJJ&& &%% &s 7A A c,tj|Sr )r__hash__rs rr)zOmegaPower.__hash__,s~~d##rct|ts td|}|j |t j S#t$r tcYSwxYwr)rrr r%r#operatorltr&s r__lt__zOmegaPower.__lt__/sM%, &"1e,!!%55 &%% &s >AAN) __name__ __module__ __qualname____doc__r propertyrrr#r'r)r-rrrrsH (+ '$6rrceZdZdZfdZedZedZedZedZ edZ edZ e d Z d Zd Zd Zd ZdZdZdZeZdZdZdZdZdZxZS)r a Represents ordinals in Cantor normal form. Internally, this class is just a list of instances of OmegaPower. Examples ======== >>> from sympy import Ordinal, OmegaPower >>> from sympy.sets.ordinals import omega >>> w = omega >>> w.is_limit_ordinal True >>> Ordinal(OmegaPower(w + 1, 1), OmegaPower(3, 2)) w**(w + 1) + w**3*2 >>> 3 + w w >>> (w + 1) * w w**2 References ========== .. [1] https://en.wikipedia.org/wiki/Ordinal_arithmetic ct||g|}|jDcgc]}|jc}t fdt t dz Ds td|Scc}w)Nc3:K|]}||dzk\yw)rNr3).0ipowerss r z"Ordinal.__new__..Ts"L6!9qs +Lsrz"powers must be in decreasing order)superr rrallrangelen ValueError)rtermsobjr8r9 __class__s @rr zOrdinal.__new__Qs_goc*E*!$*A!%%*LU3v;?5KLLAB B +sA-c|jSr rrs rr@z Ordinal.termsXs yyrcH|tk(r td|jdS)Nz ordinal zero has no leading termrord0r?r@rs r leading_termzOrdinal.leading_term\s# 4<?@ @zz!}rcH|tk(r td|jdS)Nz!ordinal zero has no trailing termrErs r trailing_termzOrdinal.trailing_termbs# 4<@A Azz"~rc\ |jjtk(S#t$rYywxYwNFrJrrFr?rs ris_successor_ordinalzOrdinal.is_successor_ordinalhs0 %%))T1 1  s  ++c^ |jjtk( S#t$rYywxYwrLrMrs ris_limit_ordinalzOrdinal.is_limit_ordinalos3 ))--55 5  s  ,,c.|jjSr )rGrrs rdegreezOrdinal.degreevs  $$$rcB|dk(rtSttd|Sr)rFr r)r integer_values rr zOrdinal.convertzs! A Kz!]344rct|ts tj|}|j |j k(S#t$r tcYSwxYwr )rr r r r%r@r&s rr'zOrdinal.__eq__sK%) &.zzU[[(( &%% &sAAAc,t|jSr )hashrrs rr)zOrdinal.__hash__sDIIrc6t|ts tj|}t |j |j D]\}}||k7s ||kcSt|j t|j kS#t$r tcYSwxYwr )rr r r r%zipr@r>)rr! term_self term_others rr-zOrdinal.__lt__s%) &.&)U[[%A . !IzJ& :-- .4::U[[!111  &%% &sBBBc||k(xs||kSr r3r&s r__le__zOrdinal.__le__s -.rc||k Sr r3r&s r__gt__zOrdinal.__gt__s5=  rc||k Sr r3r&s r__ge__zOrdinal.__ge__s%<rcd}d}|tk(ry|jD]}|r|dz }|jtk(r|t|jz }nr|jdk(r|dz }n]t |jjdkDs|jj r|d|jzz }n|d|jzz }|jdk(s%|jtk(s|d |jzz }|dz }|S) NrrFz + rwzw**(%s)zw**%sz*%s)rFr@rstrrr>rP)rnet_str plus_countr8s r__str__zOrdinal.__str__s 4< A5 uu}3qvv;&!3QUU[[!A%)?)?9QUU?*7155=(66Q;quu}5<' !OJ! "rctt|ts tj|}|t k(r|St |j}t |j}t|dz }|j}|dk\r/||j|kr|dz}|dk\r||j|kr|dkr |}t|S||j|k(rGt|||j|jjz}|d||gz|ddz}t|S|d|dz|z}t|S#t$r tcYSwxYw)Nrr)rr r r r%rFlistr@r>rRrrrrG)rr!a_termsb_termsrb_expr@sum_terms r__add__zOrdinal.__add__sF%) &. D=Ktzz"u{{# L1  1f%/ FA1f%/ q5E  QZ^^u $!%5;M;M;R;R)RSHBQK8*,wqr{:EDQqSMG+E# &%% &sD%%D76D7ct|ts tj|}||zS||zS#t$r tcYSwxYwr rr r r r%r&s r__radd__zOrdinal.__radd__K%) &.t|ut| &%% &1AAct|ts tj|}t ||fvrt S|j }|jj}g}|jrK|jD]4}|jt||jz|j6t|S|jddD]4}|jt||jz|j6|jj}|jt|||z|t|jddz }t|S#t$r tcYSwxYw)NrIr)rr r r r%rFrRrGrrPr@appendrrrJrj)rr!a_expa_mult summationargb_mults r__mul__zOrdinal.__mul__sA%) &. D%= K ""''  ! !{{ H  ECGGOSXX!FG H "" {{3B' H  ECGGOSXX!FG H((--F   Zvf}= > djjn- -I ""# &%% &sEE! E!ct|ts tj|}||zS||zS#t$r tcYSwxYwr rrr&s r__rmul__zOrdinal.__rmul__rtrucJ|tk(stStt|dSr)omegar%r rr&s r__pow__zOrdinal.__pow__s!u}! !z%+,,r)r.r/r0r1r r2r@rGrJrNrPrR classmethodr r'r)r-r]r_rarh__repr__rprsr}rr __classcell__)rBs@rr r 8s0    %%55 ) 2/! 0H.#.-rr ceZdZdZy) OrdinalZerozDThe ordinal zero. OrdinalZero can be imported as ``ord0``. N)r.r/r0r1r3rrrrs  rrc&eZdZdZdZedZy) OrdinalOmegazThe ordinal omega which forms the base of all ordinals in cantor normal form. OrdinalOmega can be imported as ``omega``. Examples ======== >>> from sympy.sets.ordinals import omega >>> omega + omega w*2 c,tj|Sr )r r )rs rr zOrdinalOmega.__new__ss##rctddfSr)rrs rr@zOrdinalOmega.termss1a ""rN)r.r/r0r1r r2r@r3rrrrs  $##rr) sympy.corerrr+rr rrrFrr3rrrsO%0606fB-eB-J ' #7#(}r