{{ message }}

# Show a tolerance on complex numbers#6057

Closed
opened this issue Oct 25, 2019 · 2 comments
Closed

# Show a tolerance on complex numbers#6057

opened this issue Oct 25, 2019 · 2 comments

### AnjoMan commented Oct 25, 2019 • edited

 Suggestion Pytest currently doesn't show tolerance when asserting approximate equality on complex numbers. This can make it a little hard to understand just how `approx` compares complex numbers. for example, on pytest 5.2.2 ``````> assert 3.0002 + 4.0003 * 1j == approx(3 + 4j) E assert (3.0002+4.0003j) == (3+4j) E -(3.0002+4.0003j) E +(3+4j) `````` When pytest does comparisons involving complex numbers, it computes the complex different between the two numbers and then asserts that the absolute value of the difference falls below the tolerance (which, for relative tolerance is calculated as a fraction of the absolute value of the value passed to `approx`). This means that if you draw a circle around the target point in the complex plane, with a radius equal to the tolerance, the compared value should fall within that circle given this, I propose adding a tolerance indicator to complex numbers using a polar notation: ``````> assert 3.0002 + 4.0003 * 1j == approx(3 + 4j) E assert (3.0002+4.0003j) == (3+4j) ± 5e-06 ∠ ±180° E -(3.0002+4.0003j) E +(3+4j) ± 5e-06 ∠ ±180° `````` in this notation, `5e-06` is the calculated relative tolerance, derived as `abs(3+4j) * 1e-06`. the `∠ ±180°` component is fixed to indicate that the delta between actual and expected is a complex value as well, and that it can have any angle as long as the magnitude is within the tolerance. Version ``````* pytest 5.2.2 * python 3.7.3 * ubuntu 19.04 `````` The text was updated successfully, but these errors were encountered:
mentioned this issue Oct 25, 2019

### Zac-HD commented Oct 28, 2019

 Closed by #6058 - thanks for the writeup and your pull request! FYI you can set PRs to automatically close issues when merged in future 😄

closed this as completed Oct 28, 2019

### AnjoMan commented Oct 28, 2019

 oo, thanks Zac! … On Sun, Oct 27, 2019, 8:30 PM Zac Hatfield-Dodds ***@***.***> wrote: Closed #6057 <#6057>. — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#6057?email_source=notifications&email_token=AASNOGCAPVB5O6DZNIV2NLLQQYXCDA5CNFSM4JE6BVO2YY3PNVWWK3TUL52HS4DFWZEXG43VMVCXMZLOORHG65DJMZUWGYLUNFXW5KTDN5WW2ZLOORPWSZGOUO57RXA#event-2747005148>, or unsubscribe .

bot added a commit to duckinator/bork that referenced this issue Nov 21, 2019
``` Merge #79 ```
``` 3f89895 ```
```79: Update pytest to 5.3.0 r=duckinator a=pyup-bot

This PR updates [pytest](https://pypi.org/project/pytest) from **5.2.4** to **5.3.0**.

<details>
<summary>Changelog</summary>

### 5.3.0
```
=========================

Deprecations
------------

- `6179 &lt;https://github.com/pytest-dev/pytest/issues/6179&gt;`_: The default value of ``junit_family`` option will change to ``xunit2`` in pytest 6.0, given
that this is the version supported by default in modern tools that manipulate this type of file.

In order to smooth the transition, pytest will issue a warning in case the ``--junitxml`` option
is given in the command line but ``junit_family`` is not explicitly configured in ``pytest.ini``.

Features
--------

- `4488 &lt;https://github.com/pytest-dev/pytest/issues/4488&gt;`_: The pytest team has created the `pytest-reportlog &lt;https://github.com/pytest-dev/pytest-reportlog&gt;`__
plugin, which provides a new ``--report-log=FILE`` option that writes *report logs* into a file as the test session executes.

Each line of the report log contains a self contained JSON object corresponding to a testing event,
such as a collection or a test result report. The file is guaranteed to be flushed after writing
each line, so systems can read and process events in real-time.

The plugin is meant to replace the ``--resultlog`` option, which is deprecated and meant to be removed
in a future release. If you use ``--resultlog``, please try out ``pytest-reportlog`` and
provide feedback.

- `4730 &lt;https://github.com/pytest-dev/pytest/issues/4730&gt;`_: When ``sys.pycache_prefix`` (Python 3.8+) is set, it will be used by pytest to cache test files changed by the assertion rewriting mechanism.

This makes it easier to benefit of cached ``.pyc`` files even on file systems without permissions.

- `5515 &lt;https://github.com/pytest-dev/pytest/issues/5515&gt;`_: Allow selective auto-indentation of multiline log messages.

Adds command line option ``--log-auto-indent``, config option
``log_auto_indent`` and support for per-entry configuration of
indentation behavior on calls to ``logging.log()``.

Alters the default for auto-indention from ``on`` to ``off``. This
restores the older behavior that existed prior to v4.6.0. This
reversion to earlier behavior was done because it is better to
activate new features that may lead to broken tests explicitly
rather than implicitly.

- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: ``pytester`` learned two new functions, `no_fnmatch_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_fnmatch_line&gt;`_ and
`no_re_match_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_re_match_line&gt;`_.

The functions are used to ensure the captured text *does not* match the given
pattern.

The previous idiom was to use ``re.match``:

.. code-block:: python

assert re.match(pat, result.stdout.str()) is None

Or the ``in`` operator:

.. code-block:: python

assert text in result.stdout.str()

But the new functions produce best output on failure.

- `6057 &lt;https://github.com/pytest-dev/pytest/issues/6057&gt;`_: Added tolerances to complex values when printing ``pytest.approx``.

For example, ``repr(pytest.approx(3+4j))`` returns ``(3+4j) ± 5e-06 ∠ ±180°``. This is polar notation indicating a circle around the expected value, with a radius of 5e-06. For ``approx`` comparisons to return ``True``, the actual value should fall within this circle.

so that hooks can be invoked when setting up command line options. This is
useful for having one plugin communicate things to another plugin,
such as default values or which set of command line options to add.

Improvements
------------

- `5061 &lt;https://github.com/pytest-dev/pytest/issues/5061&gt;`_: Use multiple colors with terminal summary statistics.

- `5630 &lt;https://github.com/pytest-dev/pytest/issues/5630&gt;`_: Quitting from debuggers is now properly handled in ``doctest`` items.

- `5924 &lt;https://github.com/pytest-dev/pytest/issues/5924&gt;`_: Improved verbose diff output with sequences.

Before:

.. code-block::

E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
E     Right contains 3 more items, first extra item: &#39; &#39;
E     Full diff:
E     - [&#39;version&#39;, &#39;version_info&#39;, &#39;sys.version&#39;, &#39;sys.version_info&#39;]
E     + [&#39;version&#39;,
E     +  &#39;version_info&#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;,
E     +  &#39; &#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;]

After:

.. code-block::

E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
E     Right contains 3 more items, first extra item: &#39; &#39;
E     Full diff:
E       [
E        &#39;version&#39;,
E        &#39;version_info&#39;,
E        &#39;sys.version&#39;,
E        &#39;sys.version_info&#39;,
E     +  &#39; &#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;,
E       ]

- `5936 &lt;https://github.com/pytest-dev/pytest/issues/5936&gt;`_: Display untruncated assertion message with ``-vv``.

- `5990 &lt;https://github.com/pytest-dev/pytest/issues/5990&gt;`_: Fixed plurality mismatch in test summary (e.g. display &quot;1 error&quot; instead of &quot;1 errors&quot;).

- `6008 &lt;https://github.com/pytest-dev/pytest/issues/6008&gt;`_: ``Config.InvocationParams.args`` is now always a ``tuple`` to better convey that it should be
immutable and avoid accidental modifications.

- `6023 &lt;https://github.com/pytest-dev/pytest/issues/6023&gt;`_: ``pytest.main`` now returns a ``pytest.ExitCode`` instance now, except for when custom exit codes are used (where it returns ``int`` then still).

- `6026 &lt;https://github.com/pytest-dev/pytest/issues/6026&gt;`_: Align prefixes in output of pytester&#39;s ``LineMatcher``.

- `6059 &lt;https://github.com/pytest-dev/pytest/issues/6059&gt;`_: Collection errors are reported as errors (and not failures like before) in the terminal&#39;s short test summary.

- `6069 &lt;https://github.com/pytest-dev/pytest/issues/6069&gt;`_: ``pytester.spawn`` does not skip/xfail tests on FreeBSD anymore unconditionally.

- `6097 &lt;https://github.com/pytest-dev/pytest/issues/6097&gt;`_: The &quot;[XXX%]&quot; indicator in the test summary is now colored according to the final (new) multi-colored line&#39;s main color.

- `6116 &lt;https://github.com/pytest-dev/pytest/issues/6116&gt;`_: Added ``--co`` as a synonym to ``--collect-only``.

- `6148 &lt;https://github.com/pytest-dev/pytest/issues/6148&gt;`_: ``atomicwrites`` is now only used on Windows, fixing a performance regression with assertion rewriting on Unix.

- `6152 &lt;https://github.com/pytest-dev/pytest/issues/6152&gt;`_: Now parametrization will use the ``__name__`` attribute of any object for the id, if present. Previously it would only use ``__name__`` for functions and classes.

- `6176 &lt;https://github.com/pytest-dev/pytest/issues/6176&gt;`_: Improved failure reporting with pytester&#39;s ``Hookrecorder.assertoutcome``.

- `6181 &lt;https://github.com/pytest-dev/pytest/issues/6181&gt;`_: The reason for a stopped session, e.g. with ``--maxfail`` / ``-x``, now gets reported in the test summary.

- `6206 &lt;https://github.com/pytest-dev/pytest/issues/6206&gt;`_: Improved ``cache.set`` robustness and performance.

Bug Fixes
---------

- `2548 &lt;https://github.com/pytest-dev/pytest/issues/2548&gt;`_: Fixed line offset mismatch of skipped tests in terminal summary.

- `6039 &lt;https://github.com/pytest-dev/pytest/issues/6039&gt;`_: The ``PytestDoctestRunner`` is now properly invalidated when unconfiguring the doctest plugin.

This is important when used with ``pytester``&#39;s ``runpytest_inprocess``.

- `6047 &lt;https://github.com/pytest-dev/pytest/issues/6047&gt;`_: BaseExceptions are now handled in ``saferepr``, which includes ``pytest.fail.Exception`` etc.

- `6074 &lt;https://github.com/pytest-dev/pytest/issues/6074&gt;`_: pytester: fixed order of arguments in ``rm_rf`` warning when cleaning up temporary directories, and do not emit warnings for errors with ``os.open``.

- `6189 &lt;https://github.com/pytest-dev/pytest/issues/6189&gt;`_: Fixed result of ``getmodpath`` method.

Trivial/Internal Changes
------------------------

- `4901 &lt;https://github.com/pytest-dev/pytest/issues/4901&gt;`_: ``RunResult`` from ``pytester`` now displays the mnemonic of the ``ret`` attribute when it is a
valid ``pytest.ExitCode`` value.
```

</details>

<details>

- PyPI: https://pypi.org/project/pytest
- Changelog: https://pyup.io/changelogs/pytest/
- Homepage: https://docs.pytest.org/en/latest/
</details>

Co-authored-by: pyup-bot <github-bot@pyup.io>```
bot added a commit to rehandalal/therapist that referenced this issue Nov 28, 2019
``` Merge #105 ```
``` 271d19f ```
```105: Update pytest to 5.3.1 r=rehandalal a=pyup-bot

This PR updates [pytest](https://pypi.org/project/pytest) from **5.2.4** to **5.3.1**.

<details>
<summary>Changelog</summary>

### 5.3.1
```
=========================

Improvements
------------

- `6231 &lt;https://github.com/pytest-dev/pytest/issues/6231&gt;`_: Improve check for misspelling of ``pytest.mark.parametrize``.

- `6257 &lt;https://github.com/pytest-dev/pytest/issues/6257&gt;`_: Handle `exit.Exception` raised in `notify_exception` (via `pytest_internalerror`), e.g. when quitting pdb from post mortem.

Bug Fixes
---------

- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: pytester: fix ``no_fnmatch_line`` when used after positive matching.

- `6082 &lt;https://github.com/pytest-dev/pytest/issues/6082&gt;`_: Fix line detection for doctest samples inside ``property`` docstrings, as a workaround to `bpo-17446 &lt;https://bugs.python.org/issue17446&gt;`__.

- `6254 &lt;https://github.com/pytest-dev/pytest/issues/6254&gt;`_: Fix compatibility with pytest-parallel (regression in pytest 5.3.0).

- `6255 &lt;https://github.com/pytest-dev/pytest/issues/6255&gt;`_: Clear the ``sys.last_traceback``, ``sys.last_type`` and ``sys.last_value``
attributes by deleting them instead of setting them to ``None``. This better
matches the behaviour of the Python standard library.
```

### 5.3.0
```
=========================

Deprecations
------------

- `6179 &lt;https://github.com/pytest-dev/pytest/issues/6179&gt;`_: The default value of ``junit_family`` option will change to ``xunit2`` in pytest 6.0, given
that this is the version supported by default in modern tools that manipulate this type of file.

In order to smooth the transition, pytest will issue a warning in case the ``--junitxml`` option
is given in the command line but ``junit_family`` is not explicitly configured in ``pytest.ini``.

Features
--------

- `4488 &lt;https://github.com/pytest-dev/pytest/issues/4488&gt;`_: The pytest team has created the `pytest-reportlog &lt;https://github.com/pytest-dev/pytest-reportlog&gt;`__
plugin, which provides a new ``--report-log=FILE`` option that writes *report logs* into a file as the test session executes.

Each line of the report log contains a self contained JSON object corresponding to a testing event,
such as a collection or a test result report. The file is guaranteed to be flushed after writing
each line, so systems can read and process events in real-time.

The plugin is meant to replace the ``--resultlog`` option, which is deprecated and meant to be removed
in a future release. If you use ``--resultlog``, please try out ``pytest-reportlog`` and
provide feedback.

- `4730 &lt;https://github.com/pytest-dev/pytest/issues/4730&gt;`_: When ``sys.pycache_prefix`` (Python 3.8+) is set, it will be used by pytest to cache test files changed by the assertion rewriting mechanism.

This makes it easier to benefit of cached ``.pyc`` files even on file systems without permissions.

- `5515 &lt;https://github.com/pytest-dev/pytest/issues/5515&gt;`_: Allow selective auto-indentation of multiline log messages.

Adds command line option ``--log-auto-indent``, config option
``log_auto_indent`` and support for per-entry configuration of
indentation behavior on calls to ``logging.log()``.

Alters the default for auto-indention from ``on`` to ``off``. This
restores the older behavior that existed prior to v4.6.0. This
reversion to earlier behavior was done because it is better to
activate new features that may lead to broken tests explicitly
rather than implicitly.

- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: `testdir &lt;https://docs.pytest.org/en/latest/reference.htmltestdir&gt;`__ learned two new functions, `no_fnmatch_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_fnmatch_line&gt;`_ and
`no_re_match_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_re_match_line&gt;`_.

The functions are used to ensure the captured text *does not* match the given
pattern.

The previous idiom was to use ``re.match``:

.. code-block:: python

result = testdir.runpytest()
assert re.match(pat, result.stdout.str()) is None

Or the ``in`` operator:

.. code-block:: python

result = testdir.runpytest()
assert text in result.stdout.str()

But the new functions produce best output on failure.

- `6057 &lt;https://github.com/pytest-dev/pytest/issues/6057&gt;`_: Added tolerances to complex values when printing ``pytest.approx``.

For example, ``repr(pytest.approx(3+4j))`` returns ``(3+4j) ± 5e-06 ∠ ±180°``. This is polar notation indicating a circle around the expected value, with a radius of 5e-06. For ``approx`` comparisons to return ``True``, the actual value should fall within this circle.

so that hooks can be invoked when setting up command line options. This is
useful for having one plugin communicate things to another plugin,
such as default values or which set of command line options to add.

Improvements
------------

- `5061 &lt;https://github.com/pytest-dev/pytest/issues/5061&gt;`_: Use multiple colors with terminal summary statistics.

- `5630 &lt;https://github.com/pytest-dev/pytest/issues/5630&gt;`_: Quitting from debuggers is now properly handled in ``doctest`` items.

- `5924 &lt;https://github.com/pytest-dev/pytest/issues/5924&gt;`_: Improved verbose diff output with sequences.

Before:

::

E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
E     Right contains 3 more items, first extra item: &#39; &#39;
E     Full diff:
E     - [&#39;version&#39;, &#39;version_info&#39;, &#39;sys.version&#39;, &#39;sys.version_info&#39;]
E     + [&#39;version&#39;,
E     +  &#39;version_info&#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;,
E     +  &#39; &#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;]

After:

::

E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
E     Right contains 3 more items, first extra item: &#39; &#39;
E     Full diff:
E       [
E        &#39;version&#39;,
E        &#39;version_info&#39;,
E        &#39;sys.version&#39;,
E        &#39;sys.version_info&#39;,
E     +  &#39; &#39;,
E     +  &#39;sys.version&#39;,
E     +  &#39;sys.version_info&#39;,
E       ]

- `5934 &lt;https://github.com/pytest-dev/pytest/issues/5934&gt;`_: ``repr`` of ``ExceptionInfo`` objects has been improved to honor the ``__repr__`` method of the underlying exception.

- `5936 &lt;https://github.com/pytest-dev/pytest/issues/5936&gt;`_: Display untruncated assertion message with ``-vv``.

- `5990 &lt;https://github.com/pytest-dev/pytest/issues/5990&gt;`_: Fixed plurality mismatch in test summary (e.g. display &quot;1 error&quot; instead of &quot;1 errors&quot;).

- `6008 &lt;https://github.com/pytest-dev/pytest/issues/6008&gt;`_: ``Config.InvocationParams.args`` is now always a ``tuple`` to better convey that it should be
immutable and avoid accidental modifications.

- `6023 &lt;https://github.com/pytest-dev/pytest/issues/6023&gt;`_: ``pytest.main`` returns a ``pytest.ExitCode`` instance now, except for when custom exit codes are used (where it returns ``int`` then still).

- `6026 &lt;https://github.com/pytest-dev/pytest/issues/6026&gt;`_: Align prefixes in output of pytester&#39;s ``LineMatcher``.

- `6059 &lt;https://github.com/pytest-dev/pytest/issues/6059&gt;`_: Collection errors are reported as errors (and not failures like before) in the terminal&#39;s short test summary.

- `6069 &lt;https://github.com/pytest-dev/pytest/issues/6069&gt;`_: ``pytester.spawn`` does not skip/xfail tests on FreeBSD anymore unconditionally.

- `6097 &lt;https://github.com/pytest-dev/pytest/issues/6097&gt;`_: The &quot;[...%]&quot; indicator in the test summary is now colored according to the final (new) multi-colored line&#39;s main color.

- `6116 &lt;https://github.com/pytest-dev/pytest/issues/6116&gt;`_: Added ``--co`` as a synonym to ``--collect-only``.

- `6148 &lt;https://github.com/pytest-dev/pytest/issues/6148&gt;`_: ``atomicwrites`` is now only used on Windows, fixing a performance regression with assertion rewriting on Unix.

- `6152 &lt;https://github.com/pytest-dev/pytest/issues/6152&gt;`_: Now parametrization will use the ``__name__`` attribute of any object for the id, if present. Previously it would only use ``__name__`` for functions and classes.

- `6176 &lt;https://github.com/pytest-dev/pytest/issues/6176&gt;`_: Improved failure reporting with pytester&#39;s ``Hookrecorder.assertoutcome``.

- `6181 &lt;https://github.com/pytest-dev/pytest/issues/6181&gt;`_: The reason for a stopped session, e.g. with ``--maxfail`` / ``-x``, now gets reported in the test summary.

- `6206 &lt;https://github.com/pytest-dev/pytest/issues/6206&gt;`_: Improved ``cache.set`` robustness and performance.

Bug Fixes
---------

- `2548 &lt;https://github.com/pytest-dev/pytest/issues/2548&gt;`_: Fixed line offset mismatch of skipped tests in terminal summary.

- `6039 &lt;https://github.com/pytest-dev/pytest/issues/6039&gt;`_: The ``PytestDoctestRunner`` is now properly invalidated when unconfiguring the doctest plugin.

This is important when used with ``pytester``&#39;s ``runpytest_inprocess``.

- `6047 &lt;https://github.com/pytest-dev/pytest/issues/6047&gt;`_: BaseExceptions are now handled in ``saferepr``, which includes ``pytest.fail.Exception`` etc.

- `6074 &lt;https://github.com/pytest-dev/pytest/issues/6074&gt;`_: pytester: fixed order of arguments in ``rm_rf`` warning when cleaning up temporary directories, and do not emit warnings for errors with ``os.open``.

- `6189 &lt;https://github.com/pytest-dev/pytest/issues/6189&gt;`_: Fixed result of ``getmodpath`` method.

Trivial/Internal Changes
------------------------

- `4901 &lt;https://github.com/pytest-dev/pytest/issues/4901&gt;`_: ``RunResult`` from ``pytester`` now displays the mnemonic of the ``ret`` attribute when it is a
valid ``pytest.ExitCode`` value.
```

</details>

<details>

- PyPI: https://pypi.org/project/pytest
- Changelog: https://pyup.io/changelogs/pytest/
- Homepage: https://docs.pytest.org/en/latest/
</details>

Co-authored-by: pyup-bot <github-bot@pyup.io>```