
    Ed;                     @    d Z ddlmZ ddlmZmZ  G d d          ZdS )a(  

Module for the DomainScalar class.

A DomainScalar represents an element which is in a particular
Domain. The idea is that the DomainScalar class provides the
convenience routines for unifying elements with different domains.

It assists in Scalar Multiplication and getitem for DomainMatrix.

   )construct_domain    )DomainZZc                        e Zd ZdZd Ze fd            Zd Zed             Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )DomainScalarz
    docstring
    c                     t          |t                    st          d          |                    |          st          d|d|          |                     ||          S )Nzdomain should be of type Domainzelement z should be in domain )
isinstancer   	TypeErrorof_typenew)clselementdomains      Alib/python3.11/site-packages/sympy/polys/matrices/domainscalar.py__new__zDomainScalar.__new__   sg    &&)) 	?=>>>~~g&& 	U)777FFSTTTwww'''    c                 f    t                                          |           }||_        ||_        |S N)superr   r   r   )r   r   r   obj	__class__s       r   r   zDomainScalar.new   s+    ggooc""

r   c                 *    t          | j                  S r   )reprr   selfs    r   __repr__zDomainScalar.__repr__$   s    DL!!!r   c                 X    t          |g          \  }\  }|                     ||          S r   )r   r   )r   exprr   r   s       r   
from_sympyzDomainScalar.from_sympy'   s,    .v66'www'''r   c                 @    | j                             | j                  S r   )r   to_sympyr   r   s    r   r"   zDomainScalar.to_sympy,   s    {##DL111r   c                 n    |                     | j        | j                  }|                     ||          S r   )convert_fromr   r   r   )r   r   r   s      r   	to_domainzDomainScalar.to_domain/   s/    %%dlDK@@xx(((r   c                 ,    |                      |          S r   )r%   )r   r   s     r   
convert_tozDomainScalar.convert_to3   s    ~~f%%%r   c                     | j                             |j                   }|                     |          |                    |          fS r   )r   unifyr%   )r   otherr   s      r   r)   zDomainScalar.unify6   s<    ""5<00~~f%%uv'>'>>>r   c                     t          |t                    st          S |                     |          \  } }|                     | j        |j        z   | j                  S r   r
   r   NotImplementedr)   r   r   r   r   r*   s     r   __add__zDomainScalar.__add__:   N    %.. 	"!!jj''exxu}4dkBBBr   c                     t          |t                    st          S |                     |          \  } }|                     | j        |j        z
  | j                  S r   r,   r.   s     r   __sub__zDomainScalar.__sub__@   r0   r   c                 *   t          |t                    s?t          |t                    r#t          t          |          t                    }nt          S |                     |          \  } }|                     | j        |j        z  | j                  S r   )	r
   r   intr   r-   r)   r   r   r   r.   s     r   __mul__zDomainScalar.__mul__F   sw    %.. 	&%%% &$RYY33%%jj''exxu}4dkBBBr   c                     t          |t                    st          S |                     |          \  } }|                     | j                            | j        |j                  | j                  S r   )r
   r   r-   r)   r   r   quor   r.   s     r   __floordiv__zDomainScalar.__floordiv__P   Y    %.. 	"!!jj''exxemDDdkRRRr   c                     t          |t                    st          S |                     |          \  } }|                     | j                            | j        |j                  | j                  S r   )r
   r   r-   r)   r   r   remr   r.   s     r   __mod__zDomainScalar.__mod__V   r9   r   c                 &   t          |t                    st          S |                     |          \  } }| j                            | j        |j                  \  }}|                     || j                  |                     || j                  fS r   )r
   r   r-   r)   r   divr   r   )r   r*   qrs       r   
__divmod__zDomainScalar.__divmod__\   sw    %.. 	"!!jj''e{t|U];;1DK(($((1dk*B*BCCr   c                     t          |t                    st          S |                     | j        |z  | j                  S r   )r
   r4   r-   r   r   r   )r   ns     r   __pow__zDomainScalar.__pow__c   s6    !S!! 	"!!xxa555r   c                 D    |                      | j        
 | j                  S r   )r   r   r   r   s    r   __pos__zDomainScalar.__pos__h   s    xxt{333r   c                 z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )r
   r   r-   r   r   r.   s     r   __eq__zDomainScalar.__eq__k   s7    %.. 	"!!|u},L1LLr   c                 ,    | j         | j        j        k    S r   )r   r   zeror   s    r   is_zerozDomainScalar.is_zerop   s    |t{///r   c                 ,    | j         | j        j        k    S r   )r   r   oner   s    r   is_onezDomainScalar.is_ones   s    |t{..r   )__name__
__module____qualname____doc__r   classmethodr   r   r    r"   r%   r'   r)   r/   r2   r5   r8   r<   rA   rD   rF   rH   rK   rN   __classcell__)r   s   @r   r   r      s}        ( ( (     [" " " ( ( [(2 2 2) ) )& & &? ? ?C C CC C CC C CS S SS S SD D D6 6 6
4 4 4M M M
0 0 0/ / / / / / /r   r   N)rR   constructorr   sympy.polys.domainsr   r   r    r   r   <module>rX      sw   
 
 + * * * * * * * * * * * * *c/ c/ c/ c/ c/ c/ c/ c/ c/ c/r   