mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 15:41:43 +00:00 
			
		
		
		
	
		
			
	
	
		
			92 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import functools
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from ._helpers import StubClass, stub_factory
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StubStrategy(StubClass):
							 | 
						||
| 
								 | 
							
								    def __make_trailing_repr(self, transformation_name, func):
							 | 
						||
| 
								 | 
							
								        func_name = func.__name__ or repr(func)
							 | 
						||
| 
								 | 
							
								        return f"{self!r}.{transformation_name}({func_name})"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def map(self, pack):
							 | 
						||
| 
								 | 
							
								        return self._with_repr(self.__make_trailing_repr("map", pack))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def flatmap(self, expand):
							 | 
						||
| 
								 | 
							
								        return self._with_repr(self.__make_trailing_repr("flatmap", expand))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def filter(self, condition):
							 | 
						||
| 
								 | 
							
								        return self._with_repr(self.__make_trailing_repr("filter", condition))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __or__(self, other):
							 | 
						||
| 
								 | 
							
								        new_repr = f"one_of({self!r}, {other!r})"
							 | 
						||
| 
								 | 
							
								        return self._with_repr(new_repr)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_STRATEGIES = {
							 | 
						||
| 
								 | 
							
								    "binary",
							 | 
						||
| 
								 | 
							
								    "booleans",
							 | 
						||
| 
								 | 
							
								    "builds",
							 | 
						||
| 
								 | 
							
								    "characters",
							 | 
						||
| 
								 | 
							
								    "complex_numbers",
							 | 
						||
| 
								 | 
							
								    "composite",
							 | 
						||
| 
								 | 
							
								    "data",
							 | 
						||
| 
								 | 
							
								    "dates",
							 | 
						||
| 
								 | 
							
								    "datetimes",
							 | 
						||
| 
								 | 
							
								    "decimals",
							 | 
						||
| 
								 | 
							
								    "deferred",
							 | 
						||
| 
								 | 
							
								    "dictionaries",
							 | 
						||
| 
								 | 
							
								    "emails",
							 | 
						||
| 
								 | 
							
								    "fixed_dictionaries",
							 | 
						||
| 
								 | 
							
								    "floats",
							 | 
						||
| 
								 | 
							
								    "fractions",
							 | 
						||
| 
								 | 
							
								    "from_regex",
							 | 
						||
| 
								 | 
							
								    "from_type",
							 | 
						||
| 
								 | 
							
								    "frozensets",
							 | 
						||
| 
								 | 
							
								    "functions",
							 | 
						||
| 
								 | 
							
								    "integers",
							 | 
						||
| 
								 | 
							
								    "iterables",
							 | 
						||
| 
								 | 
							
								    "just",
							 | 
						||
| 
								 | 
							
								    "lists",
							 | 
						||
| 
								 | 
							
								    "none",
							 | 
						||
| 
								 | 
							
								    "nothing",
							 | 
						||
| 
								 | 
							
								    "one_of",
							 | 
						||
| 
								 | 
							
								    "permutations",
							 | 
						||
| 
								 | 
							
								    "random_module",
							 | 
						||
| 
								 | 
							
								    "randoms",
							 | 
						||
| 
								 | 
							
								    "recursive",
							 | 
						||
| 
								 | 
							
								    "register_type_strategy",
							 | 
						||
| 
								 | 
							
								    "runner",
							 | 
						||
| 
								 | 
							
								    "sampled_from",
							 | 
						||
| 
								 | 
							
								    "sets",
							 | 
						||
| 
								 | 
							
								    "shared",
							 | 
						||
| 
								 | 
							
								    "slices",
							 | 
						||
| 
								 | 
							
								    "timedeltas",
							 | 
						||
| 
								 | 
							
								    "times",
							 | 
						||
| 
								 | 
							
								    "text",
							 | 
						||
| 
								 | 
							
								    "tuples",
							 | 
						||
| 
								 | 
							
								    "uuids",
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = sorted(_STRATEGIES)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def composite(f):
							 | 
						||
| 
								 | 
							
								    strategy = stub_factory(StubStrategy, f.__name__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @functools.wraps(f)
							 | 
						||
| 
								 | 
							
								    def inner(*args, **kwargs):
							 | 
						||
| 
								 | 
							
								        return strategy(*args, **kwargs)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return inner
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def __getattr__(name):
							 | 
						||
| 
								 | 
							
								    if name not in _STRATEGIES:
							 | 
						||
| 
								 | 
							
								        raise AttributeError(f"Unknown attribute {name}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return stub_factory(StubStrategy, f"hypothesis.strategies.{name}")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def __dir__():
							 | 
						||
| 
								 | 
							
								    return __all__
							 |