[Python-modules-commits] [python-hypothesis] 02/07: Import python-hypothesis_3.12.0.orig.tar.gz

Tristan Seligmann mithrandi at moszumanska.debian.org
Fri Jul 7 12:50:28 UTC 2017


This is an automated email from the git hooks/post-receive script.

mithrandi pushed a commit to branch master
in repository python-hypothesis.

commit 766cc744a17729331948321ed5e4bf235839a771
Author: Tristan Seligmann <mithrandi at debian.org>
Date:   Fri Jul 7 14:37:43 2017 +0200

    Import python-hypothesis_3.12.0.orig.tar.gz
---
 .coveragerc                                        |   1 -
 .gitignore                                         |   4 +
 .isort.cfg                                         |   2 +
 .pyup.yml                                          |  10 +
 .travis.yml                                        |  74 +-
 CONTRIBUTING.rst                                   | 112 +--
 Makefile                                           | 201 +++--
 appveyor.yml                                       |  54 +-
 .../intlists-valid=always-interesting=always       |  29 +
 ...ntlists-valid=always-interesting=has_duplicates |  29 +
 .../intlists-valid=always-interesting=lower_bound  |  29 +
 .../intlists-valid=always-interesting=minsum       |  29 +
 .../intlists-valid=always-interesting=never        |  29 +
 .../intlists-valid=always-interesting=nontrivial   |  29 +
 .../intlists-valid=always-interesting=usually      |  29 +
 ...ntlists-valid=has_duplicates-interesting=minsum |  29 +
 .../intlists-valid=usually-interesting=nontrivial  |  29 +
 .../ints-valid=always-interesting=always           |  29 +
 .../ints-valid=always-interesting=lower_bound      |  29 +
 benchmark-data/ints-valid=always-interesting=never |  29 +
 .../ints-valid=always-interesting=nontrivial       |  29 +
 .../ints-valid=always-interesting=usually          |  29 +
 .../ints-valid=usually-interesting=nontrivial      |  29 +
 .../sizedintlists-valid=always-interesting=always  |  29 +
 ...edintlists-valid=always-interesting=lower_bound |  29 +
 .../sizedintlists-valid=always-interesting=never   |  29 +
 ...zedintlists-valid=always-interesting=nontrivial |  29 +
 .../sizedintlists-valid=always-interesting=usually |  29 +
 ...edintlists-valid=usually-interesting=nontrivial |  29 +
 benchmarks/test_strategies.py                      | 152 ----
 circle.yml                                         |  19 +
 docs/changes.rst                                   | 377 +++++++--
 docs/community.rst                                 |   9 +-
 docs/conf.py                                       |  42 +-
 docs/data.rst                                      | 239 +++---
 docs/database.rst                                  |  31 +-
 docs/details.rst                                   | 131 +--
 docs/development.rst                               |  49 +-
 docs/django.rst                                    |  10 +-
 docs/endorsements.rst                              |  43 +-
 docs/examples.rst                                  | 107 ++-
 docs/extras.rst                                    | 164 +---
 docs/index.rst                                     |   5 +-
 docs/numpy.rst                                     |  18 +
 docs/packaging.rst                                 |  16 +-
 docs/quickstart.rst                                |  14 +-
 docs/settings.rst                                  |  73 +-
 docs/stateful.rst                                  |  94 ++-
 docs/strategies.rst                                |  17 +-
 docs/support.rst                                   |   5 +-
 docs/supported.rst                                 |  53 +-
 docs/usage.rst                                     |   7 +-
 examples/test_binary_search.py                     |   2 +-
 examples/test_rle.py                               |   4 +-
 guides/README.rst                                  |  10 +
 guides/documentation.rst                           |  68 ++
 guides/review.rst                                  | 219 +++++
 requirements/benchmark.in                          |   4 +
 requirements/benchmark.txt                         |  10 +
 requirements/test.in                               |   3 +
 requirements/test.txt                              |  12 +
 requirements/tools.in                              |  10 +
 requirements/tools.txt                             |  48 ++
 scripts/basic-test.sh                              |  37 +-
 scripts/benchmarks.py                              | 521 ++++++++++++
 scripts/check-ancient-pip.sh                       |  20 +-
 scripts/check-changelog.py                         | 101 +++
 ...{check_encoding_header.py => check-untagged.py} |  36 +-
 scripts/check_encoding_header.py                   |  11 +-
 scripts/deploy.py                                  | 157 ++++
 scripts/enforce_header.py                          |  70 +-
 scripts/files-to-format.py                         |  52 ++
 scripts/header.py                                  |   2 +-
 scripts/hypothesistooling.py                       | 187 +++++
 scripts/install.sh                                 |  43 +-
 scripts/retry.sh                                   |   4 +-
 scripts/run-circle.sh                              |  14 +
 .../test_permutations.py => scripts/tool-hash.py   |  34 +-
 scripts/unicodechecker.py                          |  18 +-
 secrets.tar.enc                                    | Bin 0 -> 10256 bytes
 setup.py                                           |  55 +-
 src/hypothesis/__init__.py                         |   2 +-
 src/hypothesis/_settings.py                        |  20 +-
 src/hypothesis/configuration.py                    |   2 +-
 src/hypothesis/control.py                          |  10 +-
 src/hypothesis/core.py                             | 895 ++++++++++++---------
 src/hypothesis/database.py                         |  10 +-
 src/hypothesis/errors.py                           |   8 +-
 src/hypothesis/executors.py                        |   6 +-
 src/hypothesis/extra/__init__.py                   |   2 +-
 src/hypothesis/extra/datetime.py                   | 161 ++--
 src/hypothesis/extra/django/__init__.py            |   2 +-
 src/hypothesis/extra/django/models.py              |  13 +-
 src/hypothesis/extra/fakefactory.py                |   2 +-
 src/hypothesis/extra/numpy.py                      | 312 ++++++-
 src/hypothesis/extra/pytestplugin.py               | 220 ++---
 src/hypothesis/extra/pytz.py                       |  57 ++
 src/hypothesis/internal/__init__.py                |   2 +-
 src/hypothesis/internal/charmap.py                 |   6 +-
 src/hypothesis/internal/classmap.py                |   2 +-
 src/hypothesis/internal/compat.py                  | 110 +--
 src/hypothesis/internal/conjecture/__init__.py     |   2 +-
 src/hypothesis/internal/conjecture/data.py         |  32 +-
 src/hypothesis/internal/conjecture/engine.py       | 410 +++++++---
 src/hypothesis/internal/conjecture/minimizer.py    | 275 +++++--
 src/hypothesis/internal/conjecture/utils.py        | 268 ++++--
 src/hypothesis/internal/debug.py                   |  96 ---
 src/hypothesis/internal/deferredformat.py          |   2 +-
 src/hypothesis/internal/detection.py               |   2 +-
 .../hypothesis/internal/escalation.py              |  28 +-
 src/hypothesis/internal/floats.py                  |   9 +-
 src/hypothesis/internal/intervalsets.py            |   2 +-
 src/hypothesis/internal/reflection.py              | 103 ++-
 src/hypothesis/reporting.py                        |   4 +-
 src/hypothesis/searchstrategy/__init__.py          |   2 +-
 src/hypothesis/searchstrategy/collections.py       |  11 +-
 src/hypothesis/searchstrategy/datetime.py          | 120 +++
 src/hypothesis/searchstrategy/deferred.py          |  26 +-
 src/hypothesis/searchstrategy/fixed.py             |  64 --
 src/hypothesis/searchstrategy/flatmapped.py        |   2 +-
 src/hypothesis/searchstrategy/misc.py              |   4 +-
 src/hypothesis/searchstrategy/numbers.py           |  91 +--
 src/hypothesis/searchstrategy/recursive.py         |  13 +-
 src/hypothesis/searchstrategy/reprwrapper.py       |   2 +-
 src/hypothesis/searchstrategy/shared.py            |   2 +-
 src/hypothesis/searchstrategy/strategies.py        |  17 +-
 src/hypothesis/searchstrategy/streams.py           |   2 +-
 src/hypothesis/searchstrategy/strings.py           |  27 +-
 src/hypothesis/searchstrategy/wrappers.py          |   2 +-
 src/hypothesis/stateful.py                         | 126 ++-
 src/hypothesis/statistics.py                       |   2 +-
 src/hypothesis/strategies.py                       | 345 ++++++--
 src/hypothesis/strategytests.py                    |   2 +-
 src/hypothesis/tools/__init__.py                   |   2 +-
 src/hypothesis/tools/mergedbs.py                   |   2 +-
 src/hypothesis/types.py                            |   2 +-
 src/hypothesis/utils/__init__.py                   |   2 +-
 src/hypothesis/utils/conventions.py                |   2 +-
 src/hypothesis/utils/dynamicvariables.py           |   2 +-
 src/hypothesis/version.py                          |   4 +-
 tests/__init__.py                                  |   2 +-
 tests/common/__init__.py                           |   7 +-
 tests/common/debug.py                              |  58 ++
 tests/common/setup.py                              |   2 +-
 tests/common/utils.py                              |  24 +-
 tests/conftest.py                                  |  32 +-
 tests/cover/__init__.py                            |   2 +-
 tests/cover/test_arbitrary_data.py                 |  25 +-
 tests/cover/test_bad_repr.py                       |   2 +-
 tests/cover/test_caching.py                        |   2 +-
 tests/cover/test_charmap.py                        |   2 +-
 tests/cover/test_choices.py                        |   2 +-
 tests/cover/test_classmap.py                       |   2 +-
 .../{test_weird_settings.py => test_completion.py} |  17 +-
 tests/cover/test_composite.py                      |   2 +-
 tests/cover/test_conjecture_engine.py              | 145 ++--
 tests/cover/test_conjecture_minimizer.py           |   9 +-
 tests/cover/test_conjecture_test_data.py           |  31 +-
 tests/cover/test_conjecture_utils.py               | 100 ++-
 tests/cover/test_control.py                        |   6 +-
 tests/cover/test_conventions.py                    |   2 +-
 tests/cover/test_core.py                           |   2 +-
 tests/cover/test_custom_reprs.py                   |   9 +-
 tests/cover/test_database_agreement.py             |   4 +-
 tests/cover/test_database_backend.py               |   2 +-
 tests/cover/test_database_usage.py                 |  10 +-
 tests/cover/test_datetimes.py                      | 173 ++++
 tests/cover/test_deferred_errors.py                |   2 +-
 tests/cover/test_detection.py                      |   2 +-
 tests/cover/test_direct_strategies.py              |  46 +-
 tests/cover/test_draw_example.py                   |   2 +-
 tests/cover/test_duplication.py                    |  69 ++
 tests/cover/test_dynamic_variable.py               |   2 +-
 tests/cover/test_eval_as_source.py                 |   2 +-
 tests/cover/test_example.py                        |   2 +-
 tests/cover/test_executors.py                      |   6 +-
 tests/cover/test_explicit_examples.py              |  18 +-
 tests/cover/test_fancy_repr.py                     |   2 +-
 tests/cover/test_filestorage.py                    |   2 +-
 tests/cover/test_filtering.py                      |   2 +-
 tests/cover/test_find.py                           |   2 +-
 tests/cover/test_fixed_strategies.py               |  80 --
 tests/cover/test_flakiness.py                      |   4 +-
 tests/cover/test_flatmap.py                        |   2 +-
 tests/cover/test_float_nastiness.py                |  55 +-
 .../test_float_utils.py}                           |  10 +-
 tests/cover/test_given_error_conditions.py         |   2 +-
 .../test_given_reuse.py}                           |  39 +-
 tests/cover/test_health_checks.py                  |   4 +-
 tests/cover/test_imports.py                        |   2 +-
 tests/cover/test_integer_ranges.py                 |  27 +-
 tests/cover/test_interleaving.py                   |   2 +-
 tests/cover/test_internal_helpers.py               |   2 +-
 tests/cover/test_intervalset.py                    |   2 +-
 tests/cover/test_lambda_formatting.py              | 117 +++
 tests/cover/test_limits.py                         |   2 +-
 tests/cover/test_map.py                            |   2 +-
 tests/cover/test_nothing.py                        |   2 +-
 tests/cover/test_numerics.py                       |  47 +-
 tests/cover/test_permutations.py                   |   2 +-
 tests/cover/test_phases.py                         |   4 +-
 tests/cover/test_pretty.py                         |   2 +-
 tests/cover/test_random_module.py                  |  31 +-
 tests/cover/test_randomization.py                  |   4 +-
 tests/cover/test_recursive.py                      |   2 +-
 tests/cover/test_reflection.py                     | 201 ++---
 tests/cover/test_reporting.py                      |   4 +-
 tests/cover/test_runner_strategy.py                |   2 +-
 tests/cover/test_sampled_from.py                   |  38 +-
 tests/cover/test_searchstrategy.py                 |   2 +-
 tests/cover/test_sets.py                           |   2 +-
 tests/cover/test_settings.py                       |   4 +-
 tests/cover/test_setup_teardown.py                 |   2 +-
 tests/cover/test_sharing.py                        |   2 +-
 tests/cover/test_shrinking_limits.py               |   2 +-
 tests/cover/test_simple_characters.py              |   2 +-
 tests/cover/test_simple_collections.py             |   4 +-
 tests/cover/test_simple_numbers.py                 | 109 +--
 tests/cover/test_simple_strings.py                 |   6 +-
 tests/cover/test_stateful.py                       | 139 +++-
 tests/cover/test_statistical_events.py             |   2 +-
 tests/cover/test_strategytests.py                  |   4 +-
 tests/cover/test_streams.py                        |   2 +-
 tests/cover/test_testdecorators.py                 |  10 +-
 tests/cover/test_threading.py                      |   2 +-
 tests/cover/test_timeout.py                        |  44 -
 tests/cover/test_uuids.py                          |   2 +-
 tests/cover/test_validation.py                     |   2 +-
 tests/cover/test_verbosity.py                      |   4 +-
 tests/cover/test_weird_settings.py                 |   2 +-
 tests/datetime/__init__.py                         |   2 +-
 tests/datetime/test_dates.py                       |  17 +-
 tests/datetime/test_datetime.py                    |  62 +-
 tests/datetime/test_times.py                       |  36 +-
 tests/datetime/test_timezones.py                   |  99 +++
 tests/django/__init__.py                           |   2 +-
 tests/django/manage.py                             |   2 +-
 tests/django/toys/__init__.py                      |   2 +-
 tests/django/toys/settings.py                      |   8 +-
 tests/django/toys/urls.py                          |  16 +-
 tests/django/toys/wsgi.py                          |   2 +-
 tests/django/toystore/__init__.py                  |   2 +-
 tests/django/toystore/admin.py                     |   2 +-
 tests/django/toystore/models.py                    |   2 +-
 tests/django/toystore/test_basic_configuration.py  |   2 +-
 tests/django/toystore/test_email_strategies.py     |   2 +-
 tests/django/toystore/test_given_models.py         |  11 +-
 tests/django/toystore/views.py                     |   2 +-
 tests/fakefactory/__init__.py                      |   2 +-
 tests/fakefactory/test_fake_factory.py             |   4 +-
 tests/nocover/__init__.py                          |   2 +-
 tests/nocover/test_choices.py                      |   2 +-
 tests/nocover/test_collective_minimization.py      |   2 +-
 tests/nocover/test_compat.py                       |  45 +-
 tests/nocover/test_descriptortests.py              |  18 +-
 tests/nocover/test_example_quality.py              | 596 --------------
 .../test_fixtures.py}                              |  17 +-
 tests/nocover/test_floating.py                     |   2 +-
 tests/nocover/test_git_merge.py                    |   2 +-
 tests/nocover/test_pretty_repr.py                  |   2 +-
 tests/nocover/test_recursive.py                    |   4 +-
 tests/nocover/test_statistical_distribution.py     | 548 -------------
 tests/nocover/test_strategy_state.py               |  25 +-
 tests/nocover/test_streams.py                      |   2 +-
 tests/numpy/__init__.py                            |   2 +-
 tests/numpy/test_gen_data.py                       |  87 +-
 tests/py2/__init__.py                              |   2 +-
 tests/py2/test_destructuring.py                    |   2 +-
 tests/py3/__init__.py                              |   2 +-
 tests/py3/test_annotations.py                      |  99 ++-
 tests/py3/test_asyncio.py                          |   2 +-
 tests/py3/test_unicode_identifiers.py              |   2 +-
 tests/pytest/test_capture.py                       |  57 +-
 tests/pytest/test_compat.py                        |   2 +-
 tests/pytest/test_doctest.py                       |   2 +-
 tests/pytest/{test_runs.py => test_fixtures.py}    |  34 +-
 tests/pytest/test_mark.py                          |   2 +-
 tests/pytest/test_profiles.py                      |   2 +-
 tests/pytest/test_reporting.py                     |   2 +-
 tests/pytest/test_runs.py                          |   5 +-
 tests/pytest/test_statistics.py                    |   2 +-
 .../conjecture => tests/quality}/__init__.py       |   2 +-
 tests/quality/test_discovery_ability.py            | 405 ++++++++++
 tests/quality/test_shrink_quality.py               | 234 ++++++
 tox.ini                                            | 101 +--
 285 files changed, 8406 insertions(+), 4503 deletions(-)

diff --git a/.coveragerc b/.coveragerc
index 9c8fe97..f187b0e 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -6,7 +6,6 @@ include =
 omit =
     **/pytestplugin.py
     **/strategytests.py
-    **/internal/debug.py
     **/compat*.py
     **/extra/__init__.py
 
diff --git a/.gitignore b/.gitignore
index b3fc281..791246d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,7 @@ _build
 .runtimes
 .idea
 .vagrant
+.DS_Store
+deploy_key
+.pypirc
+secrets.tar
diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000..2544516
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,2 @@
+[settings]
+known_third_party = attr, click, django, faker, flaky, numpy, pytz, scipy
diff --git a/.pyup.yml b/.pyup.yml
new file mode 100644
index 0000000..fc45638
--- /dev/null
+++ b/.pyup.yml
@@ -0,0 +1,10 @@
+requirements:
+  - requirements/tools.txt
+      updates: all
+      pin: True
+  - requirements/test.txt
+      updates: all
+      pin: True
+  - requirements/benchmark.txt
+      updates: all
+      pin: True
diff --git a/.travis.yml b/.travis.yml
index 7be0a17..05afd33 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,9 +5,12 @@ sudo: false
 env: PYTHONDONTWRITEBYTECODE=x
 
 os:
-    - osx
     - linux
 
+branches:
+  only:
+    - "master"
+
 cache:
     apt: true
     directories:
@@ -15,68 +18,52 @@ cache:
         - $HOME/.venv
         - $HOME/.cache/pip
         - $HOME/wheelhouse
+        - $HOME/.stack
+        - $HOME/.local
 
 env:
     global:
         - BUILD_RUNTIMES=$HOME/.runtimes
+        - FORMAT_ALL=true
 
     matrix:
+        # Core tests that we want to run first.
+        - TASK=check-untagged
+        - TASK=check-changelog
+        - TASK=check-shellcheck
         - TASK=documentation
         - TASK=lint
+        - TASK=check-rst
         - TASK=check-format
+        - TASK=check-benchmark
         - TASK=check-coverage
-        - TASK=check-unicode
-        - TASK=check-ancient-pip
+        - TASK=check-requirements
         - TASK=check-pypy
-        - TASK=check-py35
         - TASK=check-py27
+        - TASK=check-py36
+        - TASK=check-quality
+
+        # Less important tests that will probably
+        # pass whenever the above do but are still
+        # worth testing.
+        - TASK=check-unicode
+        - TASK=check-ancient-pip
         - TASK=check-py273
         - TASK=check-py34
+        - TASK=check-py35
         - TASK=check-nose
         - TASK=check-pytest28
-        - TASK=check-fakefactory052
-        - TASK=check-fakefactory053
-        - TASK=check-fakefactory060
-        - TASK=check-django17
+        - TASK=check-faker070
+        - TASK=check-faker071
         - TASK=check-django18
+        - TASK=check-django110
+        - TASK=check-django111
+        - TASK=deploy
 
 script:
     - make $TASK
 
 matrix:
-    exclude:
-        - os: osx
-          env: TASK=check-pytest28
-        - os: osx
-          env: TASK=check-py273
-        - os: osx
-          env: TASK=check-py34
-        - os: osx
-          env: TASK=check-unicode
-        - os: osx
-          env: TASK=check-ancient-pip
-        - os: osx
-          env: TASK=check-fakefactory052
-        - os: osx
-          env: TASK=check-fakefactory053
-        - os: osx
-          env: TASK=check-fakefactory060
-        - os: osx
-          env: TASK=documentation
-        - os: osx
-          env: TASK=check-django17
-        - os: osx
-          env: TASK=check-django18
-        - os: osx
-          env: TASK=check-examples2
-        - os: osx
-          env: TASK=check-examples3
-        - os: osx
-          env: TASK=check-coverage
-        - os: osx
-          env: TASK=check-format
-        - os: osx
-          env: TASK=lint
     fast_finish: true
 
 notifications:
@@ -85,3 +72,8 @@ notifications:
       - david at drmaciver.com
     on_success: never
     on_failure: change
+
+addons:
+  apt:
+    packages:
+      - libgmp-dev
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 18341e4..db3b9f6 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -4,8 +4,33 @@ Contributing
 
 First off: It's great that you want to contribute to Hypothesis! Thanks!
 
-The process is a little involved (don't worry, I'll help you through it), so
-do read this document first.
+------------------
+Ways to Contribute
+------------------
+
+Hypothesis is a mature yet active project. This means that there are many
+ways in which you can contribute.
+
+For example, it's super useful and highly appreciated if you do any of:
+
+* Submit bug reports
+* Submit feature requests
+* Write about Hypothesis
+* Give a talk about Hypothesis
+* Build libraries and tools on top of Hypothesis outside the main repo
+* Submit PRs
+
+If you build a Hypothesis strategy that you would like to be more widely known
+please add it to the list of external strategies by preparing a PR against
+the docs/strategies.rst file.
+
+If you find an error in the documentation, please feel free to submit a PR that
+fixes the error. Spot a tyop? Fix it up and send us a PR!
+You can read more about how we document Hypothesis in ``guides/documentation.rst``
+
+The process for submitting source code PRs is generally more involved
+(don't worry, we'll help you through it), so do read the rest of this document
+first.
 
 -----------------------
 Copyright and Licensing
@@ -32,32 +57,32 @@ The actual contribution
 
 OK, so you want to make a contribution and have sorted out the legalese. What now?
 
-First off: If you're planning on implementing a new feature, talk to me first! I'll probably
-tell you to go for it, but I might have some feedback on aspects of it or tell you how it fits
-into the broader scheme of things. Remember: A feature is for 3.x, not just for Christmas. Once
-a feature is in, it can only be evolved in backwards compatible ways until I bump the "I can break
-your code" number and release Hypothesis 4.0. This means I spend a lot of time thinking about
-getting features right. It may sometimes also mean I reject your feature, or feel you need to
-rethink it, so it's best to have that conversation early.
+First off: If you're planning on implementing a new feature, talk to us
+first! Come `join us on IRC <https://hypothesis.readthedocs.io/en/latest/community.html#community>`_,
+or open an issue. If it's really small feel free to open a work in progress pull request sketching
+out the idea, but it's best to get feedback from the Hypothesis maintainers
+before sinking a bunch of work into it.
 
-Once you've done that, feel free to ask me for help as you go. You're welcome to submit a work in
-progress pull request early if you want feedback, just please mark it as such.
+In general work-in-progress pull requests are totally welcome if you want early feedback
+or help with some of the tricky details. Don't be afraid to ask for help.
 
-The review process will probably take some time, with me providing feedback on what I like about
-your work and what I think could use improving. Particularly when adding features it's very unlikely
-I'll accept a pull request as is, but that's not a sign that I don't like your code and you shouldn't
-get discouraged.
+In order to get merged, a pull request will have to have a green build (naturally) and
+to be approved by a Hypothesis maintainer (and, depending on what it is, possibly specifically
+by DRMacIver).
 
-Before it's merged your contribution will have to be:
+The review process is the same one that all changes to Hypothesis go through, regardless of
+whether you're an established maintainer or entirely new to the project. It's very much
+intended to be a collaborative one: It's not us telling you what we think is wrong with
+your code, it's us working with you to produce something better together.
 
-1. Tested (the build will probably fail if it's not, but even if the build passes new work needs test)
-2. Documented
-3. Complying to the code standard (running 'make format' locally will fix most formatting errors and 'make lint'
-   will tell you about the rest)
-4. Otherwise passing the build
+We have `a lengthy check list <guides/review.rst>`_ of things we look for in a review. Feel
+free to have a read of it in advance and go through it yourself if you'd like to. It's not
+required, but it might speed up the process.
 
-Note: If you can't figure out how to test your work, I'm happy to help. If *I* can't figure out how to
-test your work, I may pass it anyway.
+Once your pull request has a green build and has passed review, it will be merged to
+master fairly promptly. This will immediately trigger a release! Don't be scared. If that
+breaks things, that's our fault not yours - the whole point of this process is to ensure
+that problems get caught before we merge rather than after.
 
 ~~~~~~~~~
 The build
@@ -69,12 +94,13 @@ will call out to the relevant tox environments so you mostly don't have to know
 unless you want to make changes to the test config. You also mostly don't need to know anything about make
 except to type 'make' followed by the name of the task you want to run.
 
-All of it will be checked on Travis so you don't *have* to run anything locally, but you might
-find it useful to do so: A full travis run takes about an hour, so running a smaller set of
-tests locally can be helpful.
+All of it will be checked on CI so you don't *have* to run anything locally, but you might
+find it useful to do so: A full Travis run takes about twenty minutes, and there's often a queue,
+so running a smaller set of tests locally can be helpful.
 
 The makefile should be "fairly" portable, but is currently only known to work on Linux or OS X. It *might* work
-on a BSD or on Windows with cygwin installed, but it probably won't.
+on a BSD or on Windows with cygwin installed, but it hasn't been tried. If you try it and find it doesn't
+work, please do submit patches to fix that.
 
 Some notable commands:
 
@@ -85,10 +111,10 @@ You can also use 'make check-format', which will run format and some linting and
 git diff. Note: This will error even if you started with a git diff, so if you've got any uncommitted changes
 this will necessarily report an error.
 
-'make check' will run check-format and all of the tests. Warning: This will take a *very* long time. On travis the
-currently takes multiple hours of total build time (it runs in parallel on Travis so you don't have to wait
+'make check' will run check-format and all of the tests. Warning: This will take a *very* long time. On Travis the
+build currently takes more than an hour of total time (it runs in parallel on Travis so you don't have to wait
 quite that long). If you've got a multi-core machine you can run 'make -j 2' (or any higher number if you want
-more) to run 2 jobs in parallel, but to be honest you're probably better off letting travis run this step.
+more) to run 2 jobs in parallel, but to be honest you're probably better off letting Travis run this step.
 
 You can also run a number of finer grained make tasks:
 
@@ -98,32 +124,13 @@ You can also run a number of finer grained make tasks:
   check-py35, check-pypy.
 * check-coverage will run a subset of the tests on python 3.5 and then assert that this gave 100% coverage
 * lint will just run some source code checks.
-* django will just run tests for the django integration
-* pytest will just run tests for the pytest plugin
+* check-django will just run tests for the Django integration
+* check-pytest will just run tests for the pytest plugin
 
 Note: The build requires a lot of different versions of python, so rather than have you install them yourself,
 the makefile will install them itself in a local directory. This means that the first time you run a task you
 may have to wait a while as the build downloads and installs the right version of python for you.
 
-----------------------------
-If Pull Requests put you off
-----------------------------
-
-If you don't feel able to contribute code to Hypothesis that's *100% OK*. There
-are lots of other things you can do to help too!
-
-For example, it's super useful and highly appreciated if you do any of:
-
-* Submit bug reports
-* Submit feature requests
-* Write about Hypothesis
-* Build libraries and tools on top of Hypothesis outside the main repo
-
-Of, if you're OK with the pull request but don't feel quite ready to touch the code, you can always
-help to improve the documentation. Spot a tyop? Fix it up and send me a pull request!
-
-If you need any help with any of these, get in touch and I'll be extremely happy to provide it.
-
 --------------------
 List of Contributors
 --------------------
@@ -146,6 +153,7 @@ their individual contributions.
 * `Florian Bruhin <https://www.github.com/The-Compiler>`_
 * `follower <https://www.github.com/follower>`_
 * `Jeremy Thurgood <https://github.com/jerith>`_
+* `JP Viljoen <https://github.com/froztbyte>`_ (`froztbyte at froztbyte.net <mailto:froztbyte at froztbyte.net>`_)
 * `Jonty Wareing <https://www.github.com/Jonty>`_ (`jonty at jonty.co.uk <mailto:jonty at jonty.co.uk>`_)
 * `kbara <https://www.github.com/kbara>`_
 * `Lee Begg <https://www.github.com/llnz2>`_
@@ -153,6 +161,7 @@ their individual contributions.
 * `Marius Gedminas <https://www.github.com/mgedmin>`_ (`marius at gedmin.as <mailto:marius at gedmin.as>`_)
 * `Markus Unterwaditzer <http://github.com/untitaker/>`_ (`markus at unterwaditzer.net <mailto:markus at unterwaditzer.net>`_)
 * `Matt Bachmann <https://www.github.com/bachmann1234>`_ (`bachmann.matt at gmail.com <mailto:bachmann.matt at gmail.com>`_)
+* `Max Nordlund <https://www.github.com/maxnordlund>`_ (`max.nordlund at gmail.com <mailto:max.nordlund at gmail.com>`_)
 * `mulkieran <https://www.github.com/mulkieran>`_
 * `Nicholas Chammas <https://www.github.com/nchammas>`_
 * `Richard Boulton <https://www.github.com/rboulton>`_ (`richard at tartarus.org <mailto:richard at tartarus.org>`_)
@@ -160,3 +169,4 @@ their individual contributions.
 * `Tariq Khokhar <https://www.github.com/tkb>`_ (`tariq at khokhar.net <mailto:tariq at khokhar.net>`_)
 * `Will Hall <https://www.github.com/wrhall>`_ (`wrsh07 at gmail.com <mailto:wrsh07 at gmail.com>`_)
 * `Will Thompson <https://www.github.com/wjt>`_ (`will at willthompson.co.uk <mailto:will at willthompson.co.uk>`_)
+* `Zac Hatfield-Dodds <https://www.github.com/Zac-HD>`_ (`zac.hatfield.dodds at gmail.com <mailto:zac.hatfield.dodds at gmail.com>`_)
diff --git a/Makefile b/Makefile
index 651fee8..5aec4c9 100644
--- a/Makefile
+++ b/Makefile
@@ -15,23 +15,31 @@ PY273=$(BUILD_RUNTIMES)/snakepit/python2.7.3
 PY33=$(BUILD_RUNTIMES)/snakepit/python3.3
 PY34=$(BUILD_RUNTIMES)/snakepit/python3.4
 PY35=$(BUILD_RUNTIMES)/snakepit/python3.5
+PY36=$(BUILD_RUNTIMES)/snakepit/python3.6
 PYPY=$(BUILD_RUNTIMES)/snakepit/pypy
 
+BEST_PY3=$(PY36)
+
 TOOLS=$(BUILD_RUNTIMES)/tools
 
 TOX=$(TOOLS)/tox
 SPHINX_BUILD=$(TOOLS)/sphinx-build
-SPHINX_AUTOBUILD=$(TOOLS)/sphinx-autobuild
 ISORT=$(TOOLS)/isort
 FLAKE8=$(TOOLS)/flake8
 PYFORMAT=$(TOOLS)/pyformat
+RSTLINT=$(TOOLS)/rst-lint
+PIPCOMPILE=$(TOOLS)/pip-compile
+
+TOOL_VIRTUALENV:=$(BUILD_RUNTIMES)/virtualenvs/tools-$(shell scripts/tool-hash.py tools)
 
-BROKEN_VIRTUALENV=$(BUILD_RUNTIMES)/virtualenvs/broken
-TOOL_VIRTUALENV=$(BUILD_RUNTIMES)/virtualenvs/tools
-ISORT_VIRTUALENV=$(BUILD_RUNTIMES)/virtualenvs/isort
 TOOL_PYTHON=$(TOOL_VIRTUALENV)/bin/python
 TOOL_PIP=$(TOOL_VIRTUALENV)/bin/pip
-TOOL_INSTALL=$(TOOL_PIP) install --upgrade
+
+BENCHMARK_VIRTUALENV:=$(BUILD_RUNTIMES)/virtualenvs/benchmark-$(shell scripts/tool-hash.py benchmark)
+BENCHMARK_PYTHON=$(BENCHMARK_VIRTUALENV)/bin/python
+
+FILES_TO_FORMAT=$(BEST_PY3) scripts/files-to-format.py
+
 
 export PATH:=$(BUILD_RUNTIMES)/snakepit:$(TOOLS):$(PATH)
 export LC_ALL=en_US.UTF-8
@@ -51,37 +59,71 @@ $(PY34):
 $(PY35):
 	scripts/retry.sh scripts/install.sh 3.5
 
+$(PY36):
+	scripts/retry.sh scripts/install.sh 3.6
+
+
 $(PYPY):
 	scripts/retry.sh scripts/install.sh pypy
 
-$(TOOL_VIRTUALENV): $(PY34)
-	$(PY34) -m virtualenv $(TOOL_VIRTUALENV)
-	mkdir -p $(TOOLS)
+$(TOOL_VIRTUALENV): $(BEST_PY3)
+	rm -rf $(BUILD_RUNTIMES)/virtualenvs/tools-*
+	$(BEST_PY3) -m virtualenv $(TOOL_VIRTUALENV)
+	$(TOOL_PIP) install -r requirements/tools.txt
+
+$(BENCHMARK_VIRTUALENV): $(BEST_PY3)
+	rm -rf $(BUILD_RUNTIMES)/virtualenvs/benchmark-*
+	$(BEST_PY3) -m virtualenv $(BENCHMARK_VIRTUALENV)
+	$(BENCHMARK_PYTHON) -m pip install -r requirements/benchmark.txt
 
 $(TOOLS): $(TOOL_VIRTUALENV)
+	mkdir -p $(TOOLS)
 
 install-tools: $(TOOLS)
 
-$(ISORT_VIRTUALENV): $(PY34)
-	$(PY34) -m virtualenv $(ISORT_VIRTUALENV)
-
 format: $(PYFORMAT) $(ISORT)
-	$(TOOL_PYTHON) scripts/enforce_header.py
+	$(FILES_TO_FORMAT) | xargs $(TOOL_PYTHON) scripts/enforce_header.py
 	# isort will sort packages differently depending on whether they're installed
-	$(ISORT_VIRTUALENV)/bin/python -m pip install django pytz pytest fake-factory numpy flaky
-	find src tests examples -name '*.py' | xargs  env -i \
-            PATH="$(PATH)" $(ISORT) -p hypothesis -ls -m 2 -w 75 \
-			-a  "from __future__ import absolute_import, print_function, division" \
+	$(FILES_TO_FORMAT) | xargs env -i PATH="$(PATH)" $(ISORT) -p hypothesis -ls -m 2 -w 75 \
+			-a "from __future__ import absolute_import, print_function, division" \
 			-rc src tests examples
-	find src tests examples -name '*.py' | xargs $(PYFORMAT) -i
+	$(FILES_TO_FORMAT) | xargs $(PYFORMAT) -i
 
 lint: $(FLAKE8)
-	$(FLAKE8) src tests --exclude=compat.py,test_reflection.py,test_imports.py,tests/py2 --ignore=E731,E721
+	$(FLAKE8) src tests --exclude=compat.py,test_reflection.py,test_imports.py,tests/py2,test_lambda_formatting.py --ignore=E731,E721
+
+check-untagged: $(BEST_PY3)
+	$(BEST_PY3) scripts/check-untagged.py
+
+check-changelog: $(BEST_PY3)
+	$(BEST_PY3) scripts/check-changelog.py
+
+deploy: $(TOOL_VIRTUALENV)
+	$(TOOL_PYTHON) scripts/deploy.py
 
 check-format: format
 	find src tests -name "*.py" | xargs $(TOOL_PYTHON) scripts/check_encoding_header.py
 	git diff --exit-code
 
+install-core: $(PY27) $(PYPY) $(BEST_PY3) $(TOX)
+
+STACK=$(HOME)/.local/bin/stack
+GHC=$(HOME)/.local/bin/ghc
+SHELLCHECK=$(HOME)/.local/bin/shellcheck
+
+$(STACK):
+	mkdir -p ~/.local/bin
+	curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C $(HOME)/.local/bin '*/stack'
+
+$(GHC): $(STACK)
+	$(STACK) setup
+
+$(SHELLCHECK): $(GHC)
+	$(STACK) install ShellCheck
+
+check-shellcheck: $(SHELLCHECK)
+	shellcheck scripts/*.sh
+
 check-py27: $(PY27) $(TOX)
 	$(TOX) -e py27-full
 
@@ -91,63 +133,60 @@ check-py273: $(PY273) $(TOX)
 check-py33: $(PY33) $(TOX)
 	$(TOX) -e py33-full
 
-check-py34: $(py34) $(TOX)
+check-py34: $(PY34) $(TOX)
 	$(TOX) -e py34-full
 
 check-py35: $(PY35) $(TOX)
 	$(TOX) -e py35-full
 
+check-py36: $(BEST_PY3) $(TOX)
+	$(TOX) -e py36-full
+
 check-pypy: $(PYPY) $(TOX)
 	$(TOX) -e pypy-full
 
-check-nose: $(TOX) $(PY35)
+check-nose: $(TOX)
 	$(TOX) -e nose
 
-check-pytest30: $(TOX) $(PY35)
+check-pytest30: $(TOX)
 	$(TOX) -e pytest30
 
-check-pytest28: $(TOX) $(PY35)
+check-pytest28: $(TOX)
 	$(TOX) -e pytest28
 
-check-pytest27: $(TOX) $(PY35)
-	$(TOX) -e pytest27
-
-check-pytest26: $(TOX) $(PY35)
-	$(TOX) -e pytest26
+check-quality: $(TOX)
+	$(TOX) -e quality
 
 check-ancient-pip: $(PY273)
 	scripts/check-ancient-pip.sh $(PY273)
-	
-
-check-pytest: check-pytest26 check-pytest27
 
-check-fakefactory060: $(TOX) $(PY35)
-	$(TOX) -e fakefactory060
 
-check-fakefactory052: $(TOX) $(PY35)
-	$(TOX) -e fakefactory052
+check-pytest: check-pytest28 check-pytest30
 
-check-fakefactory053: $(TOX) $(PY35)
-	$(TOX) -e fakefactory053
+check-faker070: $(TOX)
+	$(TOX) -e faker070
 
-check-django17: $(TOX) $(PY35)
-	$(TOX) -e django17
+check-faker071: $(TOX)
+	$(TOX) -e faker071
 
-check-django18: $(TOX) $(PY35)
+check-django18: $(TOX)
 	$(TOX) -e django18
 
-check-django19: $(TOX) $(PY35)
-	$(TOX) -e django19
+check-django110: $(TOX)
+	$(TOX) -e django110
 
-check-django: check-django17 check-django18 check-django19
+check-django111: $(TOX)
+	$(TOX) -e django111
+
+check-django: check-django18 check-django110 check-django111
 
 check-examples2: $(TOX) $(PY27)
 	$(TOX) -e examples2
 
-check-examples3: $(TOX) $(PY35)
+check-examples3: $(TOX)
 	$(TOX) -e examples3
 
-check-coverage: $(TOX) $(PY35)
+check-coverage: $(TOX)
 	$(TOX) -e coverage
 
 check-unicode: $(TOX) $(PY27)
@@ -157,39 +196,68 @@ check-noformat: check-coverage check-py26 check-py27 check-py33 check-py34 check
 
 check: check-format check-noformat
 
-check-fast: lint $(PY35) $(PYPY) $(TOX)
+check-fast: lint $(PYPY) $(PY36) $(TOX)
 	$(TOX) -e pypy-brief
-	$(TOX) -e py35-brief
-	$(TOX) -e py26-brief
-	$(TOX) -e py35-prettyquick
+	$(TOX) -e py36-prettyquick
+
+check-rst: $(RSTLINT) $(FLAKE8)
+	$(RSTLINT) *.rst
+	$(RSTLINT) guides/*.rst
+	$(FLAKE8) --select=W191,W291,W292,W293,W391 *.rst docs/*.rst
+
+compile-requirements: $(PIPCOMPILE)
+	$(PIPCOMPILE) requirements/benchmark.in --output-file requirements/benchmark.txt
+	$(PIPCOMPILE) requirements/test.in --output-file requirements/test.txt
+	$(PIPCOMPILE) requirements/tools.in --output-file requirements/tools.txt
+
+check-requirements: compile-requirements
+	git diff --exit-code
+
+secret.tar.enc: deploy_key .pypirc
+	rm -f secrets.tar secrets.tar.enc
+	tar -cf secrets.tar deploy_key .pypirc
+	travis encrypt-file secrets.tar
+	rm secrets.tar
+
+check-benchmark: $(BENCHMARK_VIRTUALENV)
+	PYTHONPATH=src $(BENCHMARK_PYTHON) scripts/benchmarks.py --check --nruns=100
 
-$(TOX): $(PY35) tox.ini $(TOOLS)
+build-new-benchmark-data: $(BENCHMARK_VIRTUALENV)
+	PYTHONPATH=src $(BENCHMARK_PYTHON) scripts/benchmarks.py --skip-existing --nruns=1000
+
+update-improved-benchmark-data: $(BENCHMARK_VIRTUALENV)
+	PYTHONPATH=src $(BENCHMARK_PYTHON) scripts/benchmarks.py --update=improved --nruns=1000
+
+update-all-benchmark-data: $(BENCHMARK_VIRTUALENV)
+	PYTHONPATH=src $(BENCHMARK_PYTHON) scripts/benchmarks.py --update=all --nruns=1000
+
+update-benchmark-headers: $(BENCHMARK_VIRTUALENV)
+	PYTHONPATH=src $(BENCHMARK_PYTHON) scripts/benchmarks.py --only-update-headers
+
+$(TOX): $(BEST_PY3) tox.ini $(TOOLS)
 	rm -f $(TOX)
-	$(TOOL_INSTALL) tox
 	ln -sf $(TOOL_VIRTUALENV)/bin/tox $(TOX)
 	touch $(TOOL_VIRTUALENV)/bin/tox $(TOX)
 
-$(SPHINX_BUILD): $(TOOL_VIRTUALENV)
-	$(TOOL_PYTHON) -m pip install sphinx sphinx-rtd-theme
-	$(TOOL_PYTHON) -m pip install -e .
+$(SPHINX_BUILD): $(TOOLS)
 	ln -sf $(TOOL_VIRTUALENV)/bin/sphinx-build $(SPHINX_BUILD)
 
-$(SPHINX_AUTOBUILD): $(TOOL_VIRTUALENV)
-	$(TOOL_PYTHON) -m pip install sphinx-autobuild
-	ln -sf $(TOOL_VIRTUALENV)/bin/sphinx-autobuild $(SPHINX_AUTOBUILD)
-
-$(PYFORMAT): $(TOOL_VIRTUALENV)
-	$(TOOL_INSTALL) pyformat
+$(PYFORMAT): $(TOOLS)
 	ln -sf $(TOOL_VIRTUALENV)/bin/pyformat $(PYFORMAT)
 
-$(ISORT): $(ISORT_VIRTUALENV)
-	$(ISORT_VIRTUALENV)/bin/python -m pip install isort==4.1.0
-	ln -sf $(ISORT_VIRTUALENV)/bin/isort $(ISORT)
+$(ISORT): $(TOOLS)
+	ln -sf $(TOOL_VIRTUALENV)/bin/isort $(ISORT)
 
-$(FLAKE8): $(TOOL_VIRTUALENV)
-	$(TOOL_INSTALL) flake8
+$(RSTLINT): $(TOOLS)
+	ln -sf $(TOOL_VIRTUALENV)/bin/rst-lint $(RSTLINT)
+
+$(FLAKE8): $(TOOLS)
 	ln -sf $(TOOL_VIRTUALENV)/bin/flake8 $(FLAKE8)
 
+$(PIPCOMPILE): $(TOOLS)
+	ln -sf $(TOOL_VIRTUALENV)/bin/pip-compile $(PIPCOMPILE)
+
+
 clean:
 	rm -rf .tox
 	rm -rf .hypothesis
@@ -201,4 +269,7 @@ clean:
 	find src tests -name "__pycache__" -delete
 
 documentation: $(SPHINX_BUILD) docs/*.rst
-	$(SPHINX_BUILD) -W -b html -d docs/_build/doctrees docs docs/_build/html
+	PYTHONPATH=src $(SPHINX_BUILD) -W -b html -d docs/_build/doctrees docs docs/_build/html
+
+doctest: $(SPHINX_BUILD) docs/*.rst
+	PYTHONPATH=src $(SPHINX_BUILD) -W -b doctest -d docs/_build/doctrees docs docs/_build/html
diff --git a/appveyor.yml b/appveyor.yml
index a1888de..9737b66 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,27 +1,51 @@
 environment:
   global:
     # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
-    # /E:ON and /V:ON options are not enabled in the batch script intepreter
+    # /E:ON and /V:ON options are not enabled in the batch script interpreter
     # See: http://stackoverflow.com/a/13751649/163740
     CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\scripts\\run_with_env.cmd"
 
+    TWINE_USERNAME: DRMacIver
+    TWINE_PASSWORD:
+      secure: TpmpMHwgS4xxcbbzROle2xyb3i+VPP8cT5ZL4dF/UrA=
+
   matrix:
     - PYTHON: "C:\\Python27"
-      PYTHON_VERSION: "2.7.8"
+      PYTHON_VERSION: "2.7.13"
       PYTHON_ARCH: "32"
 
     - PYTHON: "C:\\Python27-x64"
-      PYTHON_VERSION: "2.7.8"
+      PYTHON_VERSION: "2.7.13"
+      PYTHON_ARCH: "64"
+
+    - PYTHON: "C:\\Python35"
+      PYTHON_VERSION: "3.5.3"
+      PYTHON_ARCH: "32"
+
+    - PYTHON: "C:\\Python35-x64"
+      PYTHON_VERSION: "3.5.3"
       PYTHON_ARCH: "64"
 
-    - PYTHON: "C:\\Python34"
-      PYTHON_VERSION: "3.4.1"
+    - PYTHON: "C:\\Python36"
+      PYTHON_VERSION: "3.6.1"
       PYTHON_ARCH: "32"
 
-    - PYTHON: "C:\\Python34-x64"
-      PYTHON_VERSION: "3.4.1"
+    - PYTHON: "C:\\Python36-x64"
+      PYTHON_VERSION: "3.6.1"
... 19194 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-hypothesis.git



More information about the Python-modules-commits mailing list