
    g                     @    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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      ]/var/www/html/ai-engine/env/lib/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__$       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          | j                  S r   )boolr   r   s    r   __bool__zDomainScalar.__bool__:   r   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   r0   r2   s     r   __sub__zDomainScalar.__sub__C   r4   r   c                 *   t          |t                    s?t          |t                    r#t          t          |          t                    }nt          S |                     |          \  } }|                     | j        |j        z  | j                  S r   )	r
   r   intr   r1   r*   r   r   r   r2   s     r   __mul__zDomainScalar.__mul__I   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   r1   r*   r   r   quor   r2   s     r   __floordiv__zDomainScalar.__floordiv__S   Y    %.. 	"!!jj''exxemDDdkRRRr   c                     t          |t                    st          S |                     |          \  } }|                     | j                            | j        |j                  | j                  S r   )r
   r   r1   r*   r   r   remr   r2   s     r   __mod__zDomainScalar.__mod__Y   r=   r   c                 &   t          |t                    st          S |                     |          \  } }| j                            | j        |j                  \  }}|                     || j                  |                     || j                  fS r   )r
   r   r1   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
   r8   r1   r   r   r   )r   ns     r   __pow__zDomainScalar.__pow__f   s6    !S!! 	"!!xxa555r   c                 D    |                      | j        
 | j                  S r   r   r   r   r   s    r   __pos__zDomainScalar.__pos__k       xxt{333r   c                 D    |                      | j         | j                  S r   rJ   r   s    r   __neg__zDomainScalar.__neg__n   rL   r   c                 z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )r
   r   r1   r   r   r2   s     r   __eq__zDomainScalar.__eq__q   s7    %.. 	"!!|u},L1LLr   c                 ,    | j         | j        j        k    S r   )r   r   zeror   s    r   is_zerozDomainScalar.is_zerov   s    |t{///r   c                 ,    | j         | j        j        k    S r   )r   r   oner   s    r   is_onezDomainScalar.is_oney   s    |t{..r   )__name__
__module____qualname____doc__r   classmethodr   r   r!   r#   r&   r(   r*   r.   r3   r6   r9   r<   r@   rE   rH   rK   rN   rP   rS   rV   __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4 4 4M M M
0 0 0/ / / / / / /r   r   N)rZ   constructorr   sympy.polys.domainsr   r   r    r   r   <module>r`      sw   
 
 + * * * * * * * * * * * * *i/ i/ i/ i/ i/ i/ i/ i/ i/ i/r   