
    sgj                     L    d Z ddlmZ ddlmZ ddlmZ e G d de             Zy)z2Implementation of :class:`CompositeDomain` class.     )Domain)GeneratorsError)publicc                   h    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y)CompositeDomainz5Base class for composite domains, e.g. ZZ[x], ZZ(X). TN   c                     t        | j                        t        |      z  s4| j                  | 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     V/var/www/html/venv/lib/python3.12/site-packages/sympy/polys/domains/compositedomain.pyinjectzCompositeDomain.inject   sP    DLL!CL0>>$++t||g/EtzzRR!dllT["\]]    c                     t        |      t        fd| j                  D              } | j                  j                  | }|s|S | j                  ||| j                        S )z"Drop generators from this domain. c              3   ,   K   | ]  }|vs|  y wN ).0ssymsets     r   	<genexpr>z'CompositeDomain.drop.<locals>.<genexpr>   s     Ca1F?Cs   	)r
   tupler   r   dropr   r   )r   r   newsymsr   r   s       @r   r   zCompositeDomain.drop   sU    WC4<<CC!!!7+M>>&'4::>>r   c                 P    | j                  || j                  | j                        S )z&Set the ground domain of this domain. )r   r   r   )r   r   s     r   
set_domainzCompositeDomain.set_domain"   s    ~~fdllDJJ??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                 T    | j                  | j                  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77r   c                 .    | j                   j                  S r   )r   has_CharacteristicZeror"   s    r   r&   z&CompositeDomain.has_CharacteristicZero/   s    {{111r   c                 6    | j                   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   	   sa    ?L$(6!8 D%&^?@ $ $8 2 2,r   r   N)r,   sympy.polys.domains.domainr   sympy.polys.polyerrorsr   sympy.utilitiesr   r   r   r   r   <module>r4      s,    8 . 2 "*,f *, *,r   