Coverage for /usr/lib/python3/dist-packages/sympy/polys/domains/compositedomain.py: 50%

18 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 15:55 +0200

1"""Implementation of :class:`CompositeDomain` class. """ 

2 

3 

4from sympy.polys.domains.domain import Domain 

5from sympy.polys.polyerrors import GeneratorsError 

6 

7from sympy.utilities import public 

8 

9@public 

10class CompositeDomain(Domain): 

11 """Base class for composite domains, e.g. ZZ[x], ZZ(X). """ 

12 

13 is_Composite = True 

14 

15 gens, ngens, symbols, domain = [None]*4 

16 

17 def inject(self, *symbols): 

18 """Inject generators into this domain. """ 

19 if not (set(self.symbols) & set(symbols)): 

20 return self.__class__(self.domain, self.symbols + symbols, self.order) 

21 else: 

22 raise GeneratorsError("common generators in %s and %s" % (self.symbols, symbols)) 

23 

24 def drop(self, *symbols): 

25 """Drop generators from this domain. """ 

26 symset = set(symbols) 

27 newsyms = tuple(s for s in self.symbols if s not in symset) 

28 domain = self.domain.drop(*symbols) 

29 if not newsyms: 

30 return domain 

31 else: 

32 return self.__class__(domain, newsyms, self.order)