Source code for hypothesis.strategies._internal.misc
# This file is part of Hypothesis, which may be found at# https://github.com/HypothesisWorks/hypothesis/## Copyright the Hypothesis Authors.# Individual contributors are listed in AUTHORS.rst and the git log.## This Source Code Form is subject to the terms of the Mozilla Public License,# v. 2.0. If a copy of the MPL was not distributed with this file, You can# obtain one at https://mozilla.org/MPL/2.0/.fromtypingimportTYPE_CHECKING,Any,Callable,NoReturn,Unionfromhypothesis.internal.conjecture.dataimportConjectureDatafromhypothesis.internal.reflectionimportget_pretty_function_descriptionfromhypothesis.strategies._internal.strategiesimport(Ex,RecurT,SampledFromStrategy,SearchStrategy,T,is_hashable,)fromhypothesis.strategies._internal.utilsimportcacheable,defines_strategyfromhypothesis.utils.conventionsimportUniqueIdentifierifTYPE_CHECKING:fromtyping_extensionsimportNeverclassJustStrategy(SampledFromStrategy[Ex]):"""A strategy which always returns a single fixed value. It's implemented as a length-one SampledFromStrategy so that all our special-case logic for filtering and sets applies also to just(x). The important difference from a SampledFromStrategy with only one element to choose is that JustStrategy *never* touches the underlying choice sequence, i.e. drawing neither reads from nor writes to `data`. This is a reasonably important optimisation (or semantic distinction!) for both JustStrategy and SampledFromStrategy. """@propertydefvalue(self)->Ex:returnself.elements[0]def__repr__(self)->str:suffix="".join(f".{name}({get_pretty_function_description(f)})"forname,finself._transformations)ifself.valueisNone:return"none()"+suffixreturnf"just({get_pretty_function_description(self.value)}){suffix}"defcalc_is_cacheable(self,recur:RecurT)->bool:returnis_hashable(self.value)defdo_filtered_draw(self,data:ConjectureData)->Union[Ex,UniqueIdentifier]:# The parent class's `do_draw` implementation delegates directly to# `do_filtered_draw`, which we can greatly simplify in this case since# we have exactly one value. (This also avoids drawing any data.)returnself._transform(self.value)
[docs]@defines_strategy(never_lazy=True)defjust(value:T)->SearchStrategy[T]:"""Return a strategy which only generates ``value``. Note: ``value`` is not copied. Be wary of using mutable values. If ``value`` is the result of a callable, you can use :func:`builds(callable) <hypothesis.strategies.builds>` instead of ``just(callable())`` to get a fresh value each time. Examples from this strategy do not shrink (because there is only one). """returnJustStrategy([value])
[docs]@defines_strategy(force_reusable_values=True)defnone()->SearchStrategy[None]:"""Return a strategy which only generates None. Examples from this strategy do not shrink (because there is only one). """returnjust(None)
classNothing(SearchStrategy["Never"]):defcalc_is_empty(self,recur:RecurT)->bool:returnTruedefdo_draw(self,data:ConjectureData)->NoReturn:# This method should never be called because draw() will mark the# data as invalid immediately because is_empty is True.raiseNotImplementedError("This should never happen")defcalc_has_reusable_values(self,recur:RecurT)->bool:returnTruedef__repr__(self)->str:return"nothing()"defmap(self,pack:Callable[[Any],Any])->SearchStrategy["Never"]:returnselfdeffilter(self,condition:Callable[[Any],Any])->"SearchStrategy[Never]":returnselfdefflatmap(self,expand:Callable[[Any],"SearchStrategy[Any]"])->"SearchStrategy[Never]":returnselfNOTHING=Nothing()
[docs]@cacheable@defines_strategy(never_lazy=True)defnothing()->SearchStrategy["Never"]:"""This strategy never successfully draws a value and will always reject on an attempt to draw. Examples from this strategy do not shrink (because there are none). """returnNOTHING