
    gj                     Z    d Z ddlmZ ddlmZ ddlmZ e G d de                      ZdS )z2Implementation of :class:`CompositeDomain` class.     )Domain)GeneratorsError)publicc                   v    e Zd ZdZdZdgdz  \  ZZZZd Z	d Z
d Zed             Zd	 Zed
             Zd ZdS )CompositeDomainz5Base class for composite domains, e.g. ZZ[x], ZZ(X). TN   c                     t          | j                  t          |          z  s)|                     | j        | j        |z   | j                  S t          d| j        d|          )z%Inject generators into this domain.  zcommon generators in z and )setsymbols	__class__domainorderr   )selfr   s     _/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/domains/compositedomain.pyinjectzCompositeDomain.inject   s`    DL!!CLL0 	^>>$+t|g/EtzRRR!/dlllT[T["\]]]    c                     t          |          t          fd| j        D                       } | j        j        | }|s|S |                     ||| j                  S )z"Drop generators from this domain. c              3   $   K   | ]
}|v|V  d S N ).0ssymsets     r   	<genexpr>z'CompositeDomain.drop.<locals>.<genexpr>   s'      CCa1F??????CCr   )r
   tupler   r   dropr   r   )r   r   newsymsr   r   s       @r   r   zCompositeDomain.drop   sh    WCCCC4<CCCCC!!7+ 	?M>>&'4:>>>r   c                 D    |                      || j        | j                  S )z&Set the ground domain of this domain. )r   r   r   )r   r   s     r   
set_domainzCompositeDomain.set_domain"   s    ~~fdlDJ???r   c                     | j         j        S )z*Returns ``True`` if this domain is exact. )r   is_Exactr   s    r   r!   zCompositeDomain.is_Exact&   s     {##r   c                 Z    |                      | j                                                  S )z)Returns an exact version of this domain. )r   r   	get_exactr"   s    r   r$   zCompositeDomain.get_exact+   s"    t{4466777r   c                     | j         j        S r   )r   has_CharacteristicZeror"   s    r   r&   z&CompositeDomain.has_CharacteristicZero/   s    {11r   c                 4    | j                                         S r   )r   characteristicr"   s    r   r(   zCompositeDomain.characteristic3   s    {))+++r   )__name__
__module____qualname____doc__is_Compositegensngensr   r   r   r   r   propertyr!   r$   r&   r(   r   r   r   r   r   	   s        ??L$(6!8 D%&^ ^ ^? ? ?@ @ @ $ $ X$8 8 8 2 2 X2, , , , ,r   r   N)r,   sympy.polys.domains.domainr   sympy.polys.polyerrorsr   sympy.utilitiesr   r   r   r   r   <module>r4      s    8 8 . - - - - - 2 2 2 2 2 2 " " " " " "*, *, *, *, *,f *, *, *, *, *,r   