
    \h                         S SK JrJr  S SKr " S S\5      r " S S\5      r " S S\5      r " S	 S
\5      r\" 5       r\" 5       r	g)    )BasicIntegerNc                   V    \ rS rSrSrS r\S 5       r\S 5       rS r	S r
S rS	 rS
rg)
OmegaPower   z
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.
c                    [        U[        5      (       a  [        U5      n[        U[        5      (       a  US::  a  [        S5      e[        U[        5      (       d  [        R                  U5      n[        R                  " XU5      $ )Nr   z'multiplicity must be a positive integer)
isinstanceintr   	TypeErrorOrdinalconvertr   __new__)clsabs      K/var/www/auris/envauris/lib/python3.13/site-packages/sympy/sets/ordinals.pyr   OmegaPower.__new__   sc    a
A!W%%aEFF!W%%"A}}SQ''    c                      U R                   S   $ Nr   argsselfs    r   expOmegaPower.exp       yy|r   c                      U R                   S   $ N   r   r   s    r   multOmegaPower.mult   r   r   c                     U R                   UR                   :X  a  U" U R                  UR                  5      $ U" U R                   UR                   5      $ N)r   r!   )r   otherops      r   _compare_termOmegaPower._compare_term   s<    88uyy dii,,dhh		**r   c                     [        U[        5      (       d   [        SU5      nU R                  UR                  :H  $ ! [         a	    [        s $ f = fr   )r	   r   r   NotImplementedr   r   r%   s     r   __eq__OmegaPower.__eq__$   sL    %,,&"1e, yyEJJ&&  &%%&s   < AAc                 .    [         R                  " U 5      $ r$   )r   __hash__r   s    r   r/   OmegaPower.__hash__,   s    ~~d##r   c                     [        U[        5      (       d   [        SU5      nU R	                  U[
        R                  5      $ ! [         a	    [        s $ f = fr   )r	   r   r   r*   r'   operatorltr+   s     r   __lt__OmegaPower.__lt__/   sP    %,,&"1e, !!%55  &%%&s   A AA N)__name__
__module____qualname____firstlineno____doc__r   propertyr   r!   r'   r,   r/   r4   __static_attributes__r6   r   r   r   r      sH    
	(    +'$6r   r   c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       rS rS rS rS rS rS rS r\rS rS rS rS rS rSrU =r$ )r   8   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
c                    >^ [         TU ]  " U /UQ76 nUR                   Vs/ s H  o3R                  PM     snm[	        U4S j[        [        T5      S-
  5       5       5      (       d  [        S5      eU$ s  snf )Nc              3   @   >#    U  H  nTU   TUS -      :  v   M     g7f)r    Nr6   ).0ipowerss     r   	<genexpr>"Ordinal.__new__.<locals>.<genexpr>T   s$     L5K6!9qs+5Ks   r    z"powers must be in decreasing order)superr   r   r   allrangelen
ValueError)r   termsobjrC   rD   	__class__s       @r   r   Ordinal.__new__Q   sd    goc*E*!$*A%%*LU3v;?5KLLLABB
 +s   A6c                     U R                   $ r$   r   r   s    r   rL   Ordinal.termsX   s    yyr   c                 J    U [         :X  a  [        S5      eU R                  S   $ )Nz ordinal zero has no leading termr   ord0rK   rL   r   s    r   leading_termOrdinal.leading_term\   s#    4<?@@zz!}r   c                 J    U [         :X  a  [        S5      eU R                  S   $ )Nz!ordinal zero has no trailing termrS   r   s    r   trailing_termOrdinal.trailing_termb   s#    4<@AAzz"~r   c                 ^     U R                   R                  [        :H  $ ! [         a     gf = fNFrY   r   rT   rK   r   s    r   is_successor_ordinalOrdinal.is_successor_ordinalh   s0    	%%))T11 		s    
,,c                 `     U R                   R                  [        :X  + $ ! [         a     gf = fr\   r]   r   s    r   is_limit_ordinalOrdinal.is_limit_ordinalo   s0    	))--55 		s     
--c                 .    U R                   R                  $ r$   )rU   r   r   s    r   degreeOrdinal.degreev   s      $$$r   c                 D    US:X  a  [         $ [        [        SU5      5      $ r   )rT   r   r   )r   integer_values     r   r   Ordinal.convertz   s!    AKz!]344r   c                     [        U[        5      (       d   [        R                  U5      nU R
                  UR
                  :H  $ ! [         a	    [        s $ f = fr$   )r	   r   r   r   r*   rL   r+   s     r   r,   Ordinal.__eq__   sN    %))&. zzU[[((  &%%&s   A AAc                 ,    [        U R                  5      $ r$   )hashr   r   s    r   r/   Ordinal.__hash__   s    DIIr   c                 B   [        U[        5      (       d   [        R                  U5      n[        U R                  UR                  5       H  u  p#X#:w  d  M  X#:  s  $    [        U R                  5      [        UR                  5      :  $ ! [         a	    [        s $ f = fr$   )r	   r   r   r   r*   ziprL   rJ   )r   r%   	term_self
term_others       r   r4   Ordinal.__lt__   s    %))&. &)U[[%A!I& -- &B 4::U[[!111  &%%&s   B BBc                      X:H  =(       d    X:  $ r$   r6   r+   s     r   __le__Ordinal.__le__   s    -.r   c                     X::  + $ r$   r6   r+   s     r   __gt__Ordinal.__gt__   s      r   c                     X:  + $ r$   r6   r+   s     r   __ge__Ordinal.__ge__   s    r   c                 $   SnSnU [         :X  a  gU R                   H  nU(       a  US-  nUR                  [         :X  a  U[        UR                  5      -  nOyUR                  S:X  a  US-  nOc[        UR                  R                  5      S:  d  UR                  R                  (       a  USUR                  -  -  nOUSUR                  -  -  nUR                  S:X  d&  UR                  [         :X  d  US	UR                  -  -  nUS-  nM     U$ )
N r   rT   z + r    wzw**(%s)zw**%sz*%s)rT   rL   r   strr!   rJ   ra   )r   net_str
plus_countrC   s       r   __str__Ordinal.__str__   s    
4<A5 uu}3qvv;&!3QUU[[!A%)?)?9QUU?*7155=(66Q;quu}5<'!OJ! " r   c                 l   [        U[        5      (       d   [        R                  U5      nU[
        :X  a  U $ [        U R                  5      n[        UR                  5      n[        U5      S-
  nUR                  nUS:  a1  X$   R                  U:  a  US-  nUS:  a  X$   R                  U:  a  M  US:  a  UnO\X$   R                  U:X  a?  [        XRU   R                  UR                  R                  -   5      nUS U U/-   USS  -   nOUS US-    U-   n[        U6 $ ! [         a	    [        s $ f = f)Nr    r   )r	   r   r   r   r*   rT   listrL   rJ   rd   r   r   r!   rU   )r   r%   a_termsb_termsrb_exprL   sum_terms           r   __add__Ordinal.__add__   s%   %))&. D=Ktzz"u{{#L11f%/FA 1f%/q5EZ^^u$!%5;M;M;R;R)RSHBQK8*,wqr{:EDQqSMG+E#  &%%&s   D   D32D3c                     [        U[        5      (       d   [        R                  U5      nX-   $ X-   $ ! [         a	    [        s $ f = fr$   r	   r   r   r   r*   r+   s     r   __radd__Ordinal.__radd__   J    %))&. |u|  &%%&   4 AAc                    [        U[        5      (       d   [        R                  U5      n[
        X4;   a  [
        $ U R                  nU R                  R                  n/ nUR                  (       aE  UR                   H4  nUR                  [        X%R                  -   UR                  5      5        M6     OUR                  S S  H4  nUR                  [        X%R                  -   UR                  5      5        M6     UR                  R                  nUR                  [        X#U-  5      5        U[        U R                  SS  5      -  n[        U6 $ ! [         a	    [        s $ f = f)NrX   r    )r	   r   r   r   r*   rT   rd   rU   r!   ra   rL   appendr   r   rY   r   )r   r%   a_expa_mult	summationargb_mults          r   __mul__Ordinal.__mul__   s!   %))&. D= K""''	!!{{  EGGOSXX!FG # {{3B'  EGGOSXX!FG (((--FZf}=>djjn--I	""#  &%%&s   E E'&E'c                     [        U[        5      (       d   [        R                  U5      nX-  $ X-  $ ! [         a	    [        s $ f = fr$   r   r+   s     r   __rmul__Ordinal.__rmul__   r   r   c                 L    U [         :X  d  [        $ [        [        US5      5      $ r   )omegar*   r   r   r+   s     r   __pow__Ordinal.__pow__   s!    u}!!z%+,,r   r6   )r7   r8   r9   r:   r;   r   r<   rL   rU   rY   r^   ra   rd   classmethodr   r,   r/   r4   rt   rw   rz   r   __repr__r   r   r   r   r   r=   __classcell__)rN   s   @r   r   r   8   s    0    
  
     % % 5 5
)	2/! 0 H.#.- -r   r   c                       \ rS rSrSrSrg)OrdinalZero   z<The ordinal zero.

OrdinalZero can be imported as ``ord0``.
r6   N)r7   r8   r9   r:   r;   r=   r6   r   r   r   r      s     	r   r   c                   .    \ rS rSrSrS r\S 5       rSrg)OrdinalOmegai  zThe 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                 ,    [         R                  U 5      $ r$   )r   r   )r   s    r   r   OrdinalOmega.__new__  s    s##r   c                     [        SS5      4$ r   )r   r   s    r   rL   OrdinalOmega.terms  s    1a ""r   r6   N)	r7   r8   r9   r:   r;   r   r<   rL   r=   r6   r   r   r   r     s     
$ # #r   r   )

sympy.corer   r   r2   r   r   r   r   rT   r   r6   r   r   <module>r      sO    % 06 06fB-e B-J	' 	#7 #( }r   