flatmapped.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # coding=utf-8
  2. #
  3. # This file is part of Hypothesis, which may be found at
  4. # https://github.com/HypothesisWorks/hypothesis-python
  5. #
  6. # Most of this work is copyright (C) 2013-2018 David R. MacIver
  7. # (david@drmaciver.com), but it contains contributions by others. See
  8. # CONTRIBUTING.rst for a full list of people who may hold copyright, and
  9. # consult the git log if you need to determine who owns an individual
  10. # contribution.
  11. #
  12. # This Source Code Form is subject to the terms of the Mozilla Public License,
  13. # v. 2.0. If a copy of the MPL was not distributed with this file, You can
  14. # obtain one at http://mozilla.org/MPL/2.0/.
  15. #
  16. # END HEADER
  17. from __future__ import division, print_function, absolute_import
  18. from hypothesis.internal.reflection import get_pretty_function_description
  19. from hypothesis.searchstrategy.strategies import SearchStrategy
  20. class FlatMapStrategy(SearchStrategy):
  21. def __init__(
  22. self, strategy, expand
  23. ):
  24. super(FlatMapStrategy, self).__init__()
  25. self.flatmapped_strategy = strategy
  26. self.expand = expand
  27. def calc_is_empty(self, recur):
  28. return recur(self.flatmapped_strategy)
  29. def __repr__(self):
  30. if not hasattr(self, u'_cached_repr'):
  31. self._cached_repr = u'%r.flatmap(%s)' % (
  32. self.flatmapped_strategy, get_pretty_function_description(
  33. self.expand))
  34. return self._cached_repr
  35. def do_draw(self, data):
  36. source = data.draw(self.flatmapped_strategy)
  37. return data.draw(self.expand(source))
  38. @property
  39. def branches(self):
  40. return [
  41. FlatMapStrategy(strategy=strategy, expand=self.expand)
  42. for strategy in self.flatmapped_strategy.branches
  43. ]