Repository: KyleKing/calcipy (language: python)

Issue:
Sync Dev Branch (Sourcery refactored)
Pull Request #77 refactored by [Sourcery](https://sourcery.ai/github/).

If you're happy with these changes, merge this Pull Request using the *Squash and merge* strategy.

**NOTE**: As code is pushed to the original Pull Request, Sourcery will
re-run and update (force-push) this Pull Request with new refactorings as
necessary. If Sourcery finds no refactorings at any point, this Pull Request
will be closed automatically.

See our documentation [here](https://docs.sourcery.ai/GitHub/Using-Sourcery-for-GitHub/).

<details>
<summary>Run Sourcery locally</summary>
<p>
Reduce the feedback loop during development by using the Sourcery editor plugin:
</p>
<ul>
<li><a href="https://sourcery.ai/download/?editor=vscode">VS Code</a></li>
<li><a href="https://sourcery.ai/download/?editor=pycharm">PyCharm</a></li>
</ul>
</details>

<details>
<summary>Review changes via command line</summary>
<p>To manually merge these changes, make sure you're on the <code>dev/development</code> branch, then run:</p>
<pre>
git fetch origin sourcery/dev/development
git merge --ff-only FETCH_HEAD
git reset HEAD^
</pre>
</details>

Help us [improve](https://research.typeform.com/to/j06Spdfr?type=pr_refactor&github_login=KyleKing&base_repo=https%3A%2F%2Fgithub.com%2FKyleKing%2Fcalcipy.git&base_remote_ref=refs%2Fpull%2F77%2Fhead&base_ref=dev%2Fdevelopment&base_sha=4aa503126294ac8914aa85a2dcb34c818617ce44&head_repo=https%3A%2F%2Fgithub.com%2FKyleKing%2Fcalcipy.git&head_ref=sourcery%2Fdev%2Fdevelopment&base_pr_number=77&base_pr_state=open) this pull request!


Discussion / hints:

Fix patch:
diff --git a/.calcipy_packaging.lock b/.calcipy_packaging.lock
index 9e0de418..48accc42 100644
--- a/.calcipy_packaging.lock
+++ b/.calcipy_packaging.lock
@@ -24,12 +24,12 @@
         "version": "2.1.0"
     },
     "astroid": {
-        "datetime": "2021-11-21T17:16:41.347413Z",
+        "datetime": "2022-01-09T16:18:58.779255Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-11-21T17:16:41.347413Z",
-        "latest_version": "2.9.0",
+        "latest_datetime": "2022-01-09T16:18:58.779255Z",
+        "latest_version": "2.9.3",
         "name": "astroid",
-        "version": "2.9.0"
+        "version": "2.9.3"
     },
     "asttokens": {
         "datetime": "2021-04-19T15:38:24.570187Z",
@@ -144,12 +144,12 @@
         "version": "4.0.0"
     },
     "charset-normalizer": {
-        "datetime": "2021-12-03T19:28:18.480911Z",
+        "datetime": "2022-01-04T20:22:48.347537Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-03T19:28:18.480911Z",
-        "latest_version": "2.0.9",
+        "latest_datetime": "2022-01-04T20:22:48.347537Z",
+        "latest_version": "2.0.10",
         "name": "charset-normalizer",
-        "version": "2.0.9"
+        "version": "2.0.10"
     },
     "click": {
         "datetime": "2021-10-10T18:07:30.752051Z",
@@ -248,12 +248,12 @@
         "version": "0.5.2"
     },
     "decorator": {
-        "datetime": "2021-09-11T05:30:14.888462Z",
+        "datetime": "2022-01-07T08:20:03.734182Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-09-11T05:30:14.888462Z",
-        "latest_version": "5.1.0",
+        "latest_datetime": "2022-01-07T08:20:03.734182Z",
+        "latest_version": "5.1.1",
         "name": "decorator",
-        "version": "5.1.0"
+        "version": "5.1.1"
     },
     "diff-cover": {
         "datetime": "2021-12-06T02:19:39.128460Z",
@@ -288,12 +288,12 @@
         "version": "0.7.3"
     },
     "doit": {
-        "datetime": "2021-12-11T04:51:26.742801Z",
+        "datetime": "2022-01-12T04:51:07.680116Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-11T04:51:26.742801Z",
-        "latest_version": "0.34.0",
+        "latest_datetime": "2022-01-12T04:51:07.680116Z",
+        "latest_version": "0.34.1",
         "name": "doit",
-        "version": "0.34.0"
+        "version": "0.34.1"
     },
     "eradicate": {
         "datetime": "2020-10-01T09:33:03.361086Z",
@@ -352,12 +352,12 @@
         "version": "1.6.1"
     },
     "flake8-aaa": {
-        "datetime": "2021-05-03T20:29:22.141490Z",
+        "datetime": "2022-01-02T20:48:16.423427Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-05-03T20:29:22.141490Z",
-        "latest_version": "0.12.0",
+        "latest_datetime": "2022-01-02T20:48:16.423427Z",
+        "latest_version": "0.12.2",
         "name": "flake8-aaa",
-        "version": "0.12.0"
+        "version": "0.12.2"
     },
     "flake8-annotations": {
         "datetime": "2021-10-11T13:19:50.931584Z",
@@ -408,12 +408,12 @@
         "version": "0.4.0"
     },
     "flake8-bugbear": {
-        "datetime": "2021-11-29T19:56:14.318977Z",
+        "datetime": "2022-01-12T04:23:34.659219Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-11-29T19:56:14.318977Z",
-        "latest_version": "21.11.29",
+        "latest_datetime": "2022-01-12T04:23:34.659219Z",
+        "latest_version": "22.1.11",
         "name": "flake8-bugbear",
-        "version": "21.11.29"
+        "version": "22.1.11"
     },
     "flake8-builtins": {
         "datetime": "2020-05-14T10:45:01.642922Z",
@@ -440,12 +440,12 @@
         "version": "2.1.0"
     },
     "flake8-comprehensions": {
-        "datetime": "2021-10-11T13:39:20.257897Z",
+        "datetime": "2022-01-10T17:10:08.584035Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-10-11T13:39:20.257897Z",
-        "latest_version": "3.7.0",
+        "latest_datetime": "2022-01-10T17:10:08.584035Z",
+        "latest_version": "3.8.0",
         "name": "flake8-comprehensions",
-        "version": "3.7.0"
+        "version": "3.8.0"
     },
     "flake8-debugger": {
         "datetime": "2020-11-29T14:34:58.797814Z",
@@ -648,12 +648,12 @@
         "version": "4.0.9"
     },
     "gitpython": {
-        "datetime": "2021-09-18T01:34:21.099954Z",
+        "datetime": "2022-01-10T13:11:40.291775Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-09-18T01:34:21.099954Z",
-        "latest_version": "3.1.24",
+        "latest_datetime": "2022-01-10T13:11:40.291775Z",
+        "latest_version": "3.1.26",
         "name": "gitpython",
-        "version": "3.1.24"
+        "version": "3.1.26"
     },
     "hacking": {
         "datetime": "2021-04-21T10:37:50.757191Z",
@@ -680,12 +680,12 @@
         "version": "2.6.1"
     },
     "identify": {
-        "datetime": "2021-12-28T01:48:30.638951Z",
+        "datetime": "2022-01-13T23:47:19.648882Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-28T01:48:30.638951Z",
-        "latest_version": "2.4.1",
+        "latest_datetime": "2022-01-13T23:47:19.648882Z",
+        "latest_version": "2.4.4",
         "name": "identify",
-        "version": "2.4.1"
+        "version": "2.4.4"
     },
     "idna": {
         "datetime": "2021-10-12T23:33:38.020888Z",
@@ -744,12 +744,12 @@
         "version": "1.7.1"
     },
     "licensecheck": {
-        "datetime": "2021-11-14T21:04:51.895266Z",
+        "datetime": "2022-01-14T21:38:46.687339Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-11-14T21:04:51.895266Z",
-        "latest_version": "2021.5.2",
+        "latest_datetime": "2022-01-14T21:38:46.687339Z",
+        "latest_version": "2022",
         "name": "licensecheck",
-        "version": "2021.5.2"
+        "version": "2022"
     },
     "livereload": {
         "datetime": "2020-08-22T15:31:53.202849Z",
@@ -847,6 +847,14 @@
         "name": "mergedeep",
         "version": "1.3.4"
     },
+    "metprint": {
+        "datetime": "2021-11-14T00:00:35.823232Z",
+        "domain": "https://pypi.org/pypi/{name}/{version}/json",
+        "latest_datetime": "2021-11-14T00:00:35.823232Z",
+        "latest_version": "2021",
+        "name": "metprint",
+        "version": "2021"
+    },
     "mkdocs": {
         "datetime": "2021-10-12T21:46:30.603264Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
@@ -864,12 +872,12 @@
         "version": "0.3.1"
     },
     "mkdocs-material": {
-        "datetime": "2021-12-19T12:50:32.514322Z",
+        "datetime": "2022-01-11T09:24:23.025160Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-19T12:50:32.514322Z",
-        "latest_version": "8.1.3",
+        "latest_datetime": "2022-01-11T09:24:23.025160Z",
+        "latest_version": "8.1.6",
         "name": "mkdocs-material",
-        "version": "8.1.3"
+        "version": "8.1.6"
     },
     "mkdocs-material-extensions": {
         "datetime": "2021-09-03T20:49:40.072718Z",
@@ -904,12 +912,12 @@
         "version": "5.2.0"
     },
     "mypy": {
-        "datetime": "2021-12-22T17:40:48.431810Z",
+        "datetime": "2022-01-07T17:04:44.621748Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-22T17:40:48.431810Z",
-        "latest_version": "0.930",
+        "latest_datetime": "2022-01-07T17:04:44.621748Z",
+        "latest_version": "0.931",
         "name": "mypy",
-        "version": "0.930"
+        "version": "0.931"
     },
     "mypy-extensions": {
         "datetime": "2019-10-17T22:38:56.922784Z",
@@ -928,12 +936,12 @@
         "version": "1.6.0"
     },
     "nox": {
-        "datetime": "2021-10-01T13:11:23.389313Z",
+        "datetime": "2022-01-07T23:34:01.412728Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-10-01T13:11:23.389313Z",
-        "latest_version": "2021.10.1",
+        "latest_datetime": "2022-01-07T23:34:01.412728Z",
+        "latest_version": "2022.1.7",
         "name": "nox",
-        "version": "2021.10.1"
+        "version": "2022.1.7"
     },
     "nox-poetry": {
         "datetime": "2021-11-17T15:39:30.839383Z",
@@ -944,12 +952,12 @@
         "version": "0.9.0"
     },
     "numpy": {
-        "datetime": "2021-12-19T23:58:44.615292Z",
+        "datetime": "2022-01-14T18:52:16.369571Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-19T23:58:44.615292Z",
-        "latest_version": "1.21.5",
+        "latest_datetime": "2022-01-14T18:52:16.369571Z",
+        "latest_version": "1.22.1",
         "name": "numpy",
-        "version": "1.21.5"
+        "version": "1.22.1"
     },
     "packageurl-python": {
         "datetime": "2021-10-05T11:38:31.004887Z",
@@ -1040,12 +1048,20 @@
         "version": "0.0.26"
     },
     "pip-audit": {
-        "datetime": "2021-12-07T20:12:41.347146Z",
+        "datetime": "2022-01-13T15:39:26.795913Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-07T20:12:41.347146Z",
-        "latest_version": "1.1.1",
+        "latest_datetime": "2022-01-13T15:39:26.795913Z",
+        "latest_version": "1.1.2",
         "name": "pip-audit",
-        "version": "1.1.1"
+        "version": "1.1.2"
+    },
+    "pip-check": {
+        "datetime": "2021-11-16T21:10:44.740100Z",
+        "domain": "https://pypi.org/pypi/{name}/{version}/json",
+        "latest_datetime": "2021-11-16T21:10:44.740100Z",
+        "latest_version": "2.7",
+        "name": "pip-check",
+        "version": "2.7"
     },
     "platformdirs": {
         "datetime": "2021-12-26T17:22:26.559205Z",
@@ -1128,12 +1144,12 @@
         "version": "2.2.0"
     },
     "pygments": {
-        "datetime": "2021-12-30T13:52:52.674326Z",
+        "datetime": "2022-01-06T11:16:10.736895Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-30T13:52:52.674326Z",
-        "latest_version": "2.11.0",
+        "latest_datetime": "2022-01-06T11:16:10.736895Z",
+        "latest_version": "2.11.2",
         "name": "pygments",
-        "version": "2.11.0"
+        "version": "2.11.2"
     },
     "pyinotify": {
         "datetime": "2015-06-04T15:50:23.633153Z",
@@ -1216,12 +1232,12 @@
         "version": "1.11.0"
     },
     "pytest-randomly": {
-        "datetime": "2021-11-30T21:30:40.440882Z",
+        "datetime": "2022-01-10T17:14:34.172677Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-11-30T21:30:40.440882Z",
-        "latest_version": "3.10.3",
+        "latest_datetime": "2022-01-10T17:14:34.172677Z",
+        "latest_version": "3.11.0",
         "name": "pytest-randomly",
-        "version": "3.10.3"
+        "version": "3.11.0"
     },
     "pytest-recording": {
         "datetime": "2021-07-08T18:25:31.965705Z",
@@ -1272,12 +1288,12 @@
         "version": "2020.1"
     },
     "pyupgrade": {
-        "datetime": "2021-12-30T16:44:04.743634Z",
+        "datetime": "2022-01-01T00:43:49.350734Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-30T16:44:04.743634Z",
-        "latest_version": "2.30.1",
+        "latest_datetime": "2022-01-01T00:43:49.350734Z",
+        "latest_version": "2.31.0",
         "name": "pyupgrade",
-        "version": "2.30.1"
+        "version": "2.31.0"
     },
     "pyyaml": {
         "datetime": "2021-01-20T22:07:31.474651Z",
@@ -1312,12 +1328,12 @@
         "version": "5.1.0"
     },
     "requests": {
-        "datetime": "2021-07-13T14:55:06.933494Z",
+        "datetime": "2022-01-05T15:40:49.334679Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-07-13T14:55:06.933494Z",
-        "latest_version": "2.26.0",
+        "latest_datetime": "2022-01-05T15:40:49.334679Z",
+        "latest_version": "2.27.1",
         "name": "requests",
-        "version": "2.26.0"
+        "version": "2.27.1"
     },
     "requirements-parser": {
         "datetime": "2021-12-17T14:47:05.056186Z",
@@ -1407,6 +1423,14 @@
         "name": "termcolor",
         "version": "1.1.0"
     },
+    "terminaltables": {
+        "datetime": "2021-12-07T19:03:34.013333Z",
+        "domain": "https://pypi.org/pypi/{name}/{version}/json",
+        "latest_datetime": "2021-12-07T19:03:34.013333Z",
+        "latest_version": "3.1.10",
+        "name": "terminaltables",
+        "version": "3.1.10"
+    },
     "testfixtures": {
         "datetime": "2021-09-29T09:05:40.767724Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
@@ -1464,20 +1488,20 @@
         "version": "0.8.10"
     },
     "types-setuptools": {
-        "datetime": "2021-12-28T12:31:14.164312Z",
+        "datetime": "2022-01-08T15:20:25.183465Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-28T12:31:14.164312Z",
-        "latest_version": "57.4.5",
+        "latest_datetime": "2022-01-08T15:20:25.183465Z",
+        "latest_version": "57.4.7",
         "name": "types-setuptools",
-        "version": "57.4.5"
+        "version": "57.4.7"
     },
     "types-toml": {
-        "datetime": "2021-10-12T09:20:28.492887Z",
+        "datetime": "2022-01-08T15:20:41.027242Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-10-12T09:20:28.492887Z",
-        "latest_version": "0.10.1",
+        "latest_datetime": "2022-01-08T15:20:41.027242Z",
+        "latest_version": "0.10.3",
         "name": "types-toml",
-        "version": "0.10.1"
+        "version": "0.10.3"
     },
     "typing-extensions": {
         "datetime": "2021-12-01T01:45:37.772785Z",
@@ -1488,12 +1512,12 @@
         "version": "4.0.1"
     },
     "urllib3": {
-        "datetime": "2021-09-22T18:01:15.930956Z",
+        "datetime": "2022-01-07T15:56:31.276636Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-09-22T18:01:15.930956Z",
-        "latest_version": "1.26.7",
+        "latest_datetime": "2022-01-07T15:56:31.276636Z",
+        "latest_version": "1.26.8",
         "name": "urllib3",
-        "version": "1.26.7"
+        "version": "1.26.8"
     },
     "vcrpy": {
         "datetime": "2020-10-09T20:43:45.751932Z",
@@ -1504,12 +1528,12 @@
         "version": "4.1.1"
     },
     "virtualenv": {
-        "datetime": "2021-12-29T11:38:00.826830Z",
+        "datetime": "2022-01-02T15:54:47.156427Z",
         "domain": "https://pypi.org/pypi/{name}/{version}/json",
-        "latest_datetime": "2021-12-29T11:38:00.826830Z",
-        "latest_version": "20.11.2",
+        "latest_datetime": "2022-01-02T15:54:47.156427Z",
+        "latest_version": "20.13.0",
         "name": "virtualenv",
-        "version": "20.11.2"
+        "version": "20.13.0"
     },
     "vulture": {
         "datetime": "2021-01-16T17:49:50.239866Z",
diff --git a/appveyor.yml b/appveyor.yml
index 0cd16c34..9fa4ccff 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,5 +1,5 @@
 ---
-version: 2021.0.7.0.{build}
+version: 2021.0.7.1.{build}
 
 image:
   - Ubuntu
diff --git a/calcipy/__init__.py b/calcipy/__init__.py
index 35493861..aa08bbf5 100644
--- a/calcipy/__init__.py
+++ b/calcipy/__init__.py
@@ -5,7 +5,7 @@
 from beartype.roar import BeartypeDecorHintPepDeprecatedWarning
 from loguru import logger
 
-__version__ = '2021.0.7.0'
+__version__ = '2021.0.7.1'
 __pkg_name__ = 'calcipy'
 
 logger.disable(__pkg_name__)
@@ -17,4 +17,6 @@
 # ====== Above is the recommended code from calcipy_template and may be updated on new releases ======
 
 # Load entry point for CLI
-from .cli.main import run  # noqa: F401, E402
+from .cli.main import run  # noqa: E402
+
+__all__ = ('run',)
diff --git a/calcipy/code_tag_collector.py b/calcipy/code_tag_collector.py
index 566aff34..3c7fa425 100644
--- a/calcipy/code_tag_collector.py
+++ b/calcipy/code_tag_collector.py
@@ -162,5 +162,5 @@ def write_code_tag_file(
 
     if report:
         path_tag_summary.write_text(f'{header}\n\n{report}\n\n<!-- {SKIP_PHRASE} -->\n')
-    elif path_tag_summary.is_file():
-        path_tag_summary.unlink()
+    else:
+        path_tag_summary.unlink(missing_ok=True)
diff --git a/calcipy/doit_tasks/lint.py b/calcipy/doit_tasks/lint.py
index 05b2f855..d76ae709 100755
--- a/calcipy/doit_tasks/lint.py
+++ b/calcipy/doit_tasks/lint.py
@@ -260,11 +260,8 @@ def task_pre_commit_hooks() -> DoitTask:
         DoitTask: doit task
 
     """
-    # Only use these two stages for all pre-commit hooks
-    stages = ['commit-msg', 'pre-push']
     return debug_task([
         Interactive('poetry run pre-commit install'),
         Interactive('poetry run pre-commit autoupdate'),
-        Interactive('poetry run pre-commit install --install-hooks' + ' --hook-type '.join([''] + stages)),
-        Interactive('poetry run pre-commit run --all-files --hook-stage push'),
+        Interactive('poetry run pre-commit run --all-files'),
     ])
diff --git a/calcipy/doit_tasks/packaging.py b/calcipy/doit_tasks/packaging.py
index 4d6781f0..a1dcc64c 100755
--- a/calcipy/doit_tasks/packaging.py
+++ b/calcipy/doit_tasks/packaging.py
@@ -244,9 +244,7 @@ def _write_cache(updated_packages: List[_HostedPythonPackage], path_pack_lock: P
 
     """
     def serialize(_inst, _field, value):  # noqa: ANN001, ANN201
-        if isinstance(value, DateTime):
-            return value.to_iso8601_string()
-        return value
+        return value.to_iso8601_string() if isinstance(value, DateTime) else value
 
     new_cache = {pack.name: attr.asdict(pack, value_serializer=serialize) for pack in updated_packages}
     pretty_json = json.dumps(new_cache, indent=4, separators=(',', ': '), sort_keys=True)
@@ -337,7 +335,7 @@ def task_check_for_stale_packages() -> DoitTask:
     path_pack_lock = _PATH_PACK_LOCK
     task = debug_task([
         (find_stale_packages, (path_lock, path_pack_lock), {'stale_months': 48}),
-        Interactive('poetry run pip list --outdated'),
+        Interactive('poetry run pip-check --cmd="poetry run pip" --hide-unchanged'),
     ])
     task['file_dep'].append(path_lock)
     task['targets'].append(path_pack_lock)
diff --git a/docs/README.md b/docs/README.md
index 97c2f284..bedbfb8e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -26,7 +26,7 @@ calcipy collect_code_tags -b=~/Some/Project
 
 # See additional documentation from the CLI help
 calcipy -h
-````
+```
 
 To utilize all of the functionality from `calcipy`, see the following sections on adding `calcipy` as a dependency
 
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
index 178a82f9..8821001b 100644
--- a/docs/docs/CHANGELOG.md
+++ b/docs/docs/CHANGELOG.md
@@ -1,5 +1,20 @@
 ## Unreleased
 
+### Feat
+
+- add pip-check for prettier outdated
+
+### Fix
+
+- code_tag_collector must return doit-compliant value (None)
+- only run pre-commit once
+
+## 2021.0.7.1 (2022-01-04)
+
+### Fix
+
+- Code Tag Collector cannot return a Path for DoIt tasks
+
 ## 2021.0.7.0 (2021-12-31)
 
 ### Feat
diff --git a/docs/docs/DEVELOPER_GUIDE.md b/docs/docs/DEVELOPER_GUIDE.md
index 7c965360..d3439ea5 100644
--- a/docs/docs/DEVELOPER_GUIDE.md
+++ b/docs/docs/DEVELOPER_GUIDE.md
@@ -59,7 +59,7 @@ poetry run doit run lock document deploy_docs publish
 | `calcipy/cli/core/exceptions.py`                           |            2 |         0 |          0 | 100.0%     |
 | `calcipy/cli/core/version.py`                              |            8 |         0 |          0 | 100.0%     |
 | `calcipy/cli/main.py`                                      |           39 |        19 |          0 | 51.3%      |
-| `calcipy/code_tag_collector.py`                            |           75 |         6 |          0 | 92.0%      |
+| `calcipy/code_tag_collector.py`                            |           74 |         5 |          0 | 93.2%      |
 | `calcipy/dev/__init__.py`                                  |            0 |         0 |          0 | 100.0%     |
 | `calcipy/dev/conftest.py`                                  |           16 |         0 |         23 | 100.0%     |
 | `calcipy/dev/noxfile.py`                                   |           23 |         1 |         90 | 95.7%      |
@@ -68,15 +68,15 @@ poetry run doit run lock document deploy_docs publish
 | `calcipy/doit_tasks/code_tags.py`                          |           10 |         0 |          0 | 100.0%     |
 | `calcipy/doit_tasks/doc.py`                                |          136 |         7 |          5 | 94.9%      |
 | `calcipy/doit_tasks/doit_globals.py`                       |          168 |         5 |          8 | 97.0%      |
-| `calcipy/doit_tasks/lint.py`                               |           81 |         3 |          0 | 96.3%      |
-| `calcipy/doit_tasks/packaging.py`                          |          133 |        12 |          3 | 91.0%      |
+| `calcipy/doit_tasks/lint.py`                               |           80 |         3 |          0 | 96.2%      |
+| `calcipy/doit_tasks/packaging.py`                          |          131 |        12 |          3 | 90.8%      |
 | `calcipy/doit_tasks/summary_reporter.py`                   |           23 |         0 |         40 | 100.0%     |
 | `calcipy/doit_tasks/test.py`                               |           58 |         9 |          0 | 84.5%      |
 | `calcipy/dot_dict.py`                                      |            7 |         0 |          0 | 100.0%     |
 | `calcipy/file_helpers.py`                                  |           78 |         7 |          3 | 91.0%      |
 | `calcipy/file_search.py`                                   |           34 |         0 |          2 | 100.0%     |
 | `calcipy/log_helpers.py`                                   |           61 |         6 |          0 | 90.2%      |
-| **Totals**                                                 |         1068 |        99 |        177 | 90.7%      |
+| **Totals**                                                 |         1064 |        98 |        177 | 90.8%      |
 
-Generated on: 2022-01-16T09:34:15.500423
+Generated on: 2022-01-16T09:54:22.961500
 <!-- {cte} -->
diff --git a/poetry.lock b/poetry.lock
index 00fb1c4c..8808c0f9 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -33,11 +33,11 @@ typed = ["typed-ast"]
 
 [[package]]
 name = "astroid"
-version = "2.9.0"
+version = "2.9.3"
 description = "An abstract syntax tree for Python with inference support."
 category = "main"
 optional = true
-python-versions = "~=3.6"
+python-versions = ">=3.6.2"
 
 [package.dependencies]
 lazy-object-proxy = ">=1.4.0"
@@ -167,6 +167,7 @@ optional = true
 python-versions = ">=3.6"
 
 [package.dependencies]
+lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""}
 msgpack = ">=0.5.2"
 requests = "*"
 
@@ -208,7 +209,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
 [[package]]
 name = "charset-normalizer"
-version = "2.0.9"
+version = "2.0.10"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 category = "main"
 optional = false
@@ -348,7 +349,7 @@ python-versions = ">=3.6"
 
 [[package]]
 name = "decorator"
-version = "5.1.0"
+version = "5.1.1"
 description = "Decorators for Humans"
 category = "main"
 optional = false
@@ -400,7 +401,7 @@ python-versions = "~=3.5"
 
 [[package]]
 name = "doit"
-version = "0.34.0"
+version = "0.34.1"
 description = "doit - Automation Tool"
 category = "main"
 optional = false
@@ -493,11 +494,11 @@ flake8 = ">=3.7"
 
 [[package]]
 name = "flake8-aaa"
-version = "0.12.0"
+version = "0.12.2"
 description = "A Flake8 plugin that checks Python tests follow the Arrange-Act-Assert pattern"
 category = "main"
 optional = true
-python-versions = ">=3.6, <4"
+python-versions = ">=3.7, <4"
 
 [package.dependencies]
 asttokens = ">=2"
@@ -570,7 +571,7 @@ flake8 = ">=3.5,<5"
 
 [[package]]
 name = "flake8-bugbear"
-version = "21.11.29"
+version = "22.1.11"
 description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
 category = "main"
 optional = true
@@ -621,14 +622,14 @@ flake8 = ">=2"
 
 [[package]]
 name = "flake8-comprehensions"
-version = "3.7.0"
+version = "3.8.0"
 description = "A flake8 plugin to help you write better list/set/dict comprehensions."
 category = "main"
 optional = true
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 
 [package.dependencies]
-flake8 = ">=3.0,<3.2.0 || >3.2.0,<5"
+flake8 = ">=3.0,<3.2.0 || >3.2.0"
 
 [[package]]
 name = "flake8-debugger"
@@ -914,7 +915,7 @@ smmap = ">=3.0.1,<6"
 
 [[package]]
 name = "gitpython"
-version = "3.1.24"
+version = "3.1.26"
 description = "GitPython is a python library used to interact with Git repositories"
 category = "main"
 optional = true
@@ -922,7 +923,6 @@ python-versions = ">=3.7"
 
 [package.dependencies]
 gitdb = ">=4.0.1,<5"
-typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.10\""}
 
 [[package]]
 name = "hacking"
@@ -971,7 +971,7 @@ requests = "*"
 
 [[package]]
 name = "identify"
-version = "2.4.1"
+version = "2.4.4"
 description = "File identification library for Python"
 category = "main"
 optional = false
@@ -1058,7 +1058,7 @@ python-versions = ">=3.6"
 
 [[package]]
 name = "licensecheck"
-version = "2021.5.2"
+version = "2022"
 description = "Output the licenses used by dependencies and check if these are compatible with the project license"
 category = "main"
 optional = true
@@ -1066,6 +1066,7 @@ python-versions = ">=3.7,<4.0"
 
 [package.dependencies]
 fhconfparser = ">=2021.1.1,<2023"
+metprint = {version = ">=2020.7.1,<2022", optional = true, markers = "extra == \"full\""}
 requests = ">=2.24.0,<4"
 requirements-parser = ">=0.2.0,<2"
 tomlkit = ">=0.7.0,<2"
@@ -1208,6 +1209,14 @@ category = "main"
 optional = true
 python-versions = ">=3.6"
 
+[[package]]
+name = "metprint"
+version = "2021"
+description = "Pretty print text in a range of builtin formats or make your own"
+category = "main"
+optional = true
+python-versions = ">=3.7,<4.0"
+
 [[package]]
 name = "mkdocs"
 version = "1.2.3"
@@ -1246,7 +1255,7 @@ mkdocs = ">=0.17"
 
 [[package]]
 name = "mkdocs-material"
-version = "8.1.3"
+version = "8.1.6"
 description = "A Material Design theme for MkDocs"
 category = "main"
 optional = true
@@ -1298,7 +1307,7 @@ python-versions = ">=3.6"
 
 [[package]]
 name = "mypy"
-version = "0.930"
+version = "0.931"
 description = "Optional static typing for Python"
 category = "main"
 optional = true
@@ -1331,7 +1340,7 @@ python-versions = "*"
 
 [[package]]
 name = "nox"
-version = "2021.10.1"
+version = "2022.1.7"
 description = "Flexible test automation."
 category = "main"
 optional = true
@@ -1362,11 +1371,11 @@ tomlkit = ">=0.7.0,<0.8.0"
 
 [[package]]
 name = "numpy"
-version = "1.21.5"
+version = "1.22.1"
 description = "NumPy is the fundamental package for array computing with Python."
 category = "main"
 optional = false
-python-versions = ">=3.7,<3.11"
+python-versions = ">=3.8"
 
 [[package]]
 name = "packageurl-python"
@@ -1503,17 +1512,16 @@ python-versions = ">=3.6"
 
 [[package]]
 name = "pip-audit"
-version = "1.1.1"
+version = "1.1.2"
 description = "A tool for scanning Python environments for known vulnerabilities"
 category = "main"
 optional = true
 python-versions = ">=3.6"
 
 [package.dependencies]
-CacheControl = ">=0.12.10"
-cyclonedx-python-lib = ">=0.11.1"
+CacheControl = {version = ">=0.12.10", extras = ["filecache"]}
+cyclonedx-python-lib = ">=0.11.1,<1.0.0"
 html5lib = ">=1.1"
-lockfile = ">=0.12.2"
 packaging = ">=21.0.0"
 pip-api = ">=0.0.26"
 progress = ">=1.6"
@@ -1522,6 +1530,17 @@ resolvelib = ">=0.8.0"
 [package.extras]
 dev = ["bump", "flake8", "black", "isort", "pytest", "pytest-cov", "pretend", "coverage", "interrogate", "mypy", "types-requests", "types-html5lib", "types-dataclasses", "pdoc3"]
 
+[[package]]
+name = "pip-check"
+version = "2.7"
+description = "Display installed pip packages and their update status.."
+category = "main"
+optional = true
+python-versions = ">=3.5"
+
+[package.dependencies]
+terminaltables = "*"
+
 [[package]]
 name = "platformdirs"
 version = "2.4.1"
@@ -1634,7 +1653,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
 [[package]]
 name = "pygments"
-version = "2.11.0"
+version = "2.11.2"
 description = "Pygments is a syntax highlighting package written in Python."
 category = "main"
 optional = true
@@ -1757,11 +1776,11 @@ pytest = ">=2.9.0"
 
 [[package]]
 name = "pytest-randomly"
-version = "3.10.3"
+version = "3.11.0"
 description = "Pytest plugin to randomly order tests and control random.seed."
 category = "main"
 optional = true
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 
 [package.dependencies]
 importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""}
@@ -1836,7 +1855,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
 [[package]]
 name = "pyupgrade"
-version = "2.30.1"
+version = "2.31.0"
 description = "A tool to automatically upgrade syntax for newer versions."
 category = "main"
 optional = true
@@ -1893,7 +1912,7 @@ mando = ">=0.6,<0.7"
 
 [[package]]
 name = "requests"
-version = "2.26.0"
+version = "2.27.1"
 description = "Python HTTP for Humans."
 category = "main"
 optional = false
@@ -2015,6 +2034,14 @@ category = "main"
 optional = true
 python-versions = "*"
 
+[[package]]
+name = "terminaltables"
+version = "3.1.10"
+description = "Generate simple tables in terminals from a nested list of strings."
+category = "main"
+optional = true
+python-versions = ">=2.6"
+
 [[package]]
 name = "testfixtures"
 version = "6.18.3"
@@ -2085,7 +2112,7 @@ test = ["pytest"]
 
 [[package]]
 name = "types-setuptools"
-version = "57.4.5"
+version = "57.4.7"
 description = "Typing stubs for setuptools"
 category = "main"
 optional = true
@@ -2093,7 +2120,7 @@ python-versions = "*"
 
 [[package]]
 name = "types-toml"
-version = "0.10.1"
+version = "0.10.3"
 description = "Typing stubs for toml"
 category = "main"
 optional = true
@@ -2109,7 +2136,7 @@ python-versions = ">=3.6"
 
 [[package]]
 name = "urllib3"
-version = "1.26.7"
+version = "1.26.8"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 category = "main"
 optional = false
@@ -2136,7 +2163,7 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
 
 [[package]]
 name = "virtualenv"
-version = "20.11.2"
+version = "20.13.0"
 description = "Virtual Python Environment builder"
 category = "main"
 optional = false
@@ -2269,13 +2296,13 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
 [extras]
 commitizen_legacy = ["cz_legacy"]
 dev = ["better-exceptions", "commitizen", "markdown-include", "mkdocs-git-revision-date-plugin", "mkdocs-material", "livereload", "pdbpp", "pdocs", "pyupgrade"]
-lint = ["add-trailing-comma", "autoflake", "autopep8", "cohesion", "darglint", "dlint", "flake8-2020", "flake8-aaa", "flake8-annotations", "flake8-assertive", "flake8-bandit", "flake8-blind-except", "flake8-breakpoint", "flake8-broken-line", "flake8-bugbear", "flake8-builtins", "flake8-cognitive-complexity", "flake8-commas", "flake8-comprehensions", "flake8-debugger", "flake8-docstrings", "flake8-eradicate", "flake8-expression-complexity", "flake8-fixme", "flake8-functions", "flake8-isort", "flake8-logging-format", "flake8-markdown", "flake8-pep3101", "flake8-plone-hasattr", "flake8-print", "flake8-printf-formatting", "flake8-pytest-style", "flake8-quotes", "flake8-return", "flake8-SQL", "flake8-string-format", "flake8-tuple", "flake8-variables-names", "flake8", "hacking", "isort", "it", "licensecheck", "pandas-vet", "pep8-naming", "pip-audit", "proselint", "pylint", "vulture", "xenon", "yamllint"]
+lint = ["add-trailing-comma", "autoflake", "autopep8", "cohesion", "darglint", "dlint", "flake8-2020", "flake8-aaa", "flake8-annotations", "flake8-assertive", "flake8-bandit", "flake8-blind-except", "flake8-breakpoint", "flake8-broken-line", "flake8-bugbear", "flake8-builtins", "flake8-cognitive-complexity", "flake8-commas", "flake8-comprehensions", "flake8-debugger", "flake8-docstrings", "flake8-eradicate", "flake8-expression-complexity", "flake8-fixme", "flake8-functions", "flake8-isort", "flake8-logging-format", "flake8-markdown", "flake8-pep3101", "flake8-plone-hasattr", "flake8-print", "flake8-printf-formatting", "flake8-pytest-style", "flake8-quotes", "flake8-return", "flake8-SQL", "flake8-string-format", "flake8-tuple", "flake8-variables-names", "flake8", "hacking", "isort", "it", "licensecheck", "pandas-vet", "pep8-naming", "pip-audit", "pip-check", "proselint", "pylint", "vulture", "xenon", "yamllint"]
 test = ["coverage", "diff-cover", "lxml", "mypy", "nox-poetry", "pytest-html", "pytest-randomly", "pytest-recording", "pytest-watcher", "pytest"]
 
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.8"
-content-hash = "f18025b18d344ee47e761921dd5a07bab6608df48e0ad9a42a53415c1212f995"
+content-hash = "fb976513d049ba03620f495b4f2b12545b6b10846664c2e38aaf81c4dc82429e"
 
 [metadata.files]
 add-trailing-comma = [
@@ -2291,8 +2318,8 @@ astpretty = [
     {file = "astpretty-2.1.0.tar.gz", hash = "sha256:8a801fcda604ec741f010bb36d7cbadc3ec8a182ea6fb83e20ab663463e75ff6"},
 ]
 astroid = [
-    {file = "astroid-2.9.0-py3-none-any.whl", hash = "sha256:776ca0b748b4ad69c00bfe0fff38fa2d21c338e12c84aa9715ee0d473c422778"},
-    {file = "astroid-2.9.0.tar.gz", hash = "sha256:5939cf55de24b92bda00345d4d0659d01b3c7dafb5055165c330bc7c568ba273"},
+    {file = "astroid-2.9.3-py3-none-any.whl", hash = "sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6"},
+    {file = "astroid-2.9.3.tar.gz", hash = "sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877"},
 ]
 asttokens = [
     {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"},
@@ -2351,8 +2378,8 @@ chardet = [
     {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
 ]
 charset-normalizer = [
-    {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"},
-    {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"},
+    {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"},
+    {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"},
 ]
 click = [
     {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
@@ -2446,8 +2473,8 @@ decli = [
     {file = "decli-0.5.2.tar.gz", hash = "sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad"},
 ]
 decorator = [
-    {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"},
-    {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"},
+    {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+    {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
 ]
 diff-cover = [
     {file = "diff_cover-6.4.4-py3-none-any.whl", hash = "sha256:d89c165d3c852c3c10e9f969236e08d413225ce52be8e2477be2a070987229bf"},
@@ -2464,8 +2491,8 @@ docstring-parser = [
     {file = "docstring_parser-0.7.3.tar.gz", hash = "sha256:cde5fbf8b846433dfbde1e0f96b7f909336a634d5df34a38cb75050c7346734a"},
 ]
 doit = [
-    {file = "doit-0.34.0-py3-none-any.whl", hash = "sha256:7b913896a9ade2ac8e8c4f34373866be425c12ae443accf04ed0be630cb8aa13"},
-    {file = "doit-0.34.0.tar.gz", hash = "sha256:8ef1de105cbca939c73e836dff86c812c9228e11ed8702f6955b7a086caac02d"},
+    {file = "doit-0.34.1-py3-none-any.whl", hash = "sha256:772a6502f4fd2d31ef3520a9f36f4b6f81fba50c958c207943918f30a3444b30"},
+    {file = "doit-0.34.1.tar.gz", hash = "sha256:49467c1bf8850a292e5fd0254ee1b219f6fd8202a0d3d4bf33af3c2dfb58d688"},
 ]
 eradicate = [
     {file = "eradicate-2.0.0.tar.gz", hash = "sha256:27434596f2c5314cc9b31410c93d8f7e8885747399773cd088d3adea647a60c8"},
@@ -2507,8 +2534,8 @@ flake8-2020 = [
     {file = "flake8_2020-1.6.1.tar.gz", hash = "sha256:db523e3383befc17c895219551ff6c9b2f6e0a5cae4c7739ea65a2238bdc6f74"},
 ]
 flake8-aaa = [
-    {file = "flake8-aaa-0.12.0.tar.gz", hash = "sha256:ce6acf9c278dc6a34d1b8c3823f88b9ee9048fda80a1a3c04cd29d3876e776dc"},
-    {file = "flake8_aaa-0.12.0-py3-none-any.whl", hash = "sha256:07d8b714b1af53f645107157aa65346e95bb94c8f88c0800fa4e199d22719d52"},
+    {file = "flake8-aaa-0.12.2.tar.gz", hash = "sha256:38b5009248d8bc1e9568c8cc6f00870582f0e6b1be168d2f880a404796029e83"},
+    {file = "flake8_aaa-0.12.2-py3-none-any.whl", hash = "sha256:80840d34885506128a94e4912281bbab315591c414befd496dd041da640a1546"},
 ]
 flake8-annotations = [
     {file = "flake8-annotations-2.7.0.tar.gz", hash = "sha256:52e53c05b0c06cac1c2dec192ea2c36e85081238add3bd99421d56f574b9479b"},
@@ -2533,8 +2560,8 @@ flake8-broken-line = [
     {file = "flake8_broken_line-0.4.0-py3-none-any.whl", hash = "sha256:e9c522856862239a2c7ef2c1de0276fa598572aa864bd4e9c7efc2a827538515"},
 ]
 flake8-bugbear = [
-    {file = "flake8-bugbear-21.11.29.tar.gz", hash = "sha256:8b04cb2fafc6a78e1a9d873bd3988e4282f7959bb6b0d7c1ae648ec09b937a7b"},
-    {file = "flake8_bugbear-21.11.29-py36.py37.py38-none-any.whl", hash = "sha256:179e41ddae5de5e3c20d1f61736feeb234e70958fbb56ab3c28a67739c8e9a82"},
+    {file = "flake8-bugbear-22.1.11.tar.gz", hash = "sha256:4c2a4136bd4ecb8bf02d5159af302ffc067642784c9d0488b33ce4610da825ee"},
+    {file = "flake8_bugbear-22.1.11-py3-none-any.whl", hash = "sha256:ce7ae44aaaf67ef192b8a6de94a5ac617144e1675ad0654fdea556f48dc18d9b"},
 ]
 flake8-builtins = [
     {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"},
@@ -2548,8 +2575,8 @@ flake8-commas = [
     {file = "flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"},
 ]
 flake8-comprehensions = [
-    {file = "flake8-comprehensions-3.7.0.tar.gz", hash = "sha256:6b3218b2dde8ac5959c6476cde8f41a79e823c22feb656be2710cd2a3232cef9"},
-    {file = "flake8_comprehensions-3.7.0-py3-none-any.whl", hash = "sha256:a5d7aea6315bbbd6fbcb2b4e80bff6a54d1600155e26236e555d0c6fe1d62522"},
+    {file = "flake8-comprehensions-3.8.0.tar.gz", hash = "sha256:8e108707637b1d13734f38e03435984f6b7854fa6b5a4e34f93e69534be8e521"},
+    {file = "flake8_comprehensions-3.8.0-py3-none-any.whl", hash = "sha256:9406314803abe1193c064544ab14fdc43c58424c0882f6ff8a581eb73fc9bb58"},
 ]
 flake8-debugger = [
     {file = "flake8-debugger-4.0.0.tar.gz", hash = "sha256:e43dc777f7db1481db473210101ec2df2bd39a45b149d7218a618e954177eda6"},
@@ -2647,8 +2674,8 @@ gitdb = [
     {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"},
 ]
 gitpython = [
-    {file = "GitPython-3.1.24-py3-none-any.whl", hash = "sha256:dc0a7f2f697657acc8d7f89033e8b1ea94dd90356b2983bca89dc8d2ab3cc647"},
-    {file = "GitPython-3.1.24.tar.gz", hash = "sha256:df83fdf5e684fef7c6ee2c02fc68a5ceb7e7e759d08b694088d0cacb4eba59e5"},
+    {file = "GitPython-3.1.26-py3-none-any.whl", hash = "sha256:26ac35c212d1f7b16036361ca5cff3ec66e11753a0d677fb6c48fa4e1a9dd8d6"},
+    {file = "GitPython-3.1.26.tar.gz", hash = "sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee"},
 ]
 hacking = [
     {file = "hacking-4.1.0-py3-none-any.whl", hash = "sha256:079a1e0ea98813429a98b0ebaedad4275058c38906fa7c35d0eb56df9f5e0fe9"},
@@ -2663,8 +2690,8 @@ hug = [
     {file = "hug-2.6.1.tar.gz", hash = "sha256:b0edace2acb618873779c9ce6ecf9165db54fef95c22262f5700fcdd9febaec9"},
 ]
 identify = [
-    {file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"},
-    {file = "identify-2.4.1.tar.gz", hash = "sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"},
+    {file = "identify-2.4.4-py2.py3-none-any.whl", hash = "sha256:aa68609c7454dbcaae60a01ff6b8df1de9b39fe6e50b1f6107ec81dcda624aa6"},
+    {file = "identify-2.4.4.tar.gz", hash = "sha256:6b4b5031f69c48bf93a646b90de9b381c6b5f560df4cbe0ed3cf7650ae741e4d"},
 ]
 idna = [
     {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
@@ -2729,8 +2756,8 @@ lazy-object-proxy = [
     {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"},
 ]
 licensecheck = [
-    {file = "licensecheck-2021.5.2-py3-none-any.whl", hash = "sha256:701ddbbecf61098c7567e5f7712c2eadbb84128678dda77066a276c4ca6d4feb"},
-    {file = "licensecheck-2021.5.2.tar.gz", hash = "sha256:4303a4bf318d311a3003cf45d19bd4a4b2dcab6d8b1b11e169718871f541e37f"},
+    {file = "licensecheck-2022-py3-none-any.whl", hash = "sha256:69d78df5cb55c71c619519a52a2b2ad43b72c6b4d092d7d54e299f6933c9338e"},
+    {file = "licensecheck-2022.tar.gz", hash = "sha256:a619c17dd850e4914e8e7e31edce6693248b7c0de4ebecd0f12e651655ceaef9"},
 ]
 livereload = [
     {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"},
@@ -2867,6 +2894,10 @@ mergedeep = [
     {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
     {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
 ]
+metprint = [
+    {file = "metprint-2021-py3-none-any.whl", hash = "sha256:ab977c08c595493ce3b8a0af7f5b91de1e1561ce8f968be2341e1bacde92cb63"},
+    {file = "metprint-2021.tar.gz", hash = "sha256:d1c63b6e5607db5eb14eb6e3274383a6f3b2ed079c6382eb5c8555060e01050a"},
+]
 mkdocs = [
     {file = "mkdocs-1.2.3-py3-none-any.whl", hash = "sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072"},
     {file = "mkdocs-1.2.3.tar.gz", hash = "sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1"},
@@ -2876,8 +2907,8 @@ mkdocs-git-revision-date-plugin = [
     {file = "mkdocs_git_revision_date_plugin-0.3.1-py3-none-any.whl", hash = "sha256:8ae50b45eb75d07b150a69726041860801615aae5f4adbd6b1cf4d51abaa03d5"},
 ]
 mkdocs-material = [
-    {file = "mkdocs-material-8.1.3.tar.gz", hash = "sha256:b8014d8a77ba45879525e0e7619d0833d10897487a77d6697ef94240fed8c892"},
-    {file = "mkdocs_material-8.1.3-py2.py3-none-any.whl", hash = "sha256:ee153b8130ae580acd57082af0e54d644fe2a37c62f2ec9400f77e389ac1b294"},
+    {file = "mkdocs-material-8.1.6.tar.gz", hash = "sha256:12eb74faf018950f51261a773f9bea12cc296ec4bdbb2c8cf74102ee35b6df79"},
+    {file = "mkdocs_material-8.1.6-py2.py3-none-any.whl", hash = "sha256:b2303413e3154502759f90ee2720b451be8855f769c385d8fb06a93ce54aafe2"},
 ]
 mkdocs-material-extensions = [
     {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"},
@@ -2998,26 +3029,26 @@ multidict = [
     {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"},
 ]
 mypy = [
-    {file = "mypy-0.930-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:221cc94dc6a801ccc2be7c0c9fd791c5e08d1fa2c5e1c12dec4eab15b2469871"},
-    {file = "mypy-0.930-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db3a87376a1380f396d465bed462e76ea89f838f4c5e967d68ff6ee34b785c31"},
-    {file = "mypy-0.930-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d2296f35aae9802eeb1327058b550371ee382d71374b3e7d2804035ef0b830b"},
-    {file = "mypy-0.930-cp310-cp310-win_amd64.whl", hash = "sha256:959319b9a3cafc33a8185f440a433ba520239c72e733bf91f9efd67b0a8e9b30"},
-    {file = "mypy-0.930-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:45a4dc21c789cfd09b8ccafe114d6de66f0b341ad761338de717192f19397a8c"},
-    {file = "mypy-0.930-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1e689e92cdebd87607a041585f1dc7339aa2e8a9f9bad9ba7e6ece619431b20c"},
-    {file = "mypy-0.930-cp36-cp36m-win_amd64.whl", hash = "sha256:ed4e0ea066bb12f56b2812a15ff223c57c0a44eca817ceb96b214bb055c7051f"},
-    {file = "mypy-0.930-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a9d8dffefba634b27d650e0de2564379a1a367e2e08d6617d8f89261a3bf63b2"},
-    {file = "mypy-0.930-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b419e9721260161e70d054a15abbd50603c16f159860cfd0daeab647d828fc29"},
-    {file = "mypy-0.930-cp37-cp37m-win_amd64.whl", hash = "sha256:601f46593f627f8a9b944f74fd387c9b5f4266b39abad77471947069c2fc7651"},
-    {file = "mypy-0.930-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ea7199780c1d7940b82dbc0a4e37722b4e3851264dbba81e01abecc9052d8a7"},
-    {file = "mypy-0.930-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:70b197dd8c78fc5d2daf84bd093e8466a2b2e007eedaa85e792e513a820adbf7"},
-    {file = "mypy-0.930-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5feb56f8bb280468fe5fc8e6f56f48f99aa0df9eed3c507a11505ee4657b5380"},
-    {file = "mypy-0.930-cp38-cp38-win_amd64.whl", hash = "sha256:2e9c5409e9cb81049bb03fa1009b573dea87976713e3898561567a86c4eaee01"},
-    {file = "mypy-0.930-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:554873e45c1ca20f31ddf873deb67fa5d2e87b76b97db50669f0468ccded8fae"},
-    {file = "mypy-0.930-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0feb82e9fa849affca7edd24713dbe809dce780ced9f3feca5ed3d80e40b777f"},
-    {file = "mypy-0.930-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc1a0607ea03c30225347334af66b0af12eefba018a89a88c209e02b7065ea95"},
-    {file = "mypy-0.930-cp39-cp39-win_amd64.whl", hash = "sha256:f9f665d69034b1fcfdbcd4197480d26298bbfb5d2dfe206245b6498addb34999"},
-    {file = "mypy-0.930-py3-none-any.whl", hash = "sha256:bf4a44e03040206f7c058d1f5ba02ef2d1820720c88bc4285c7d9a4269f54173"},
-    {file = "mypy-0.930.tar.gz", hash = "sha256:51426262ae4714cc7dd5439814676e0992b55bcc0f6514eccb4cf8e0678962c2"},
+    {file = "mypy-0.931-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c5b42d0815e15518b1f0990cff7a705805961613e701db60387e6fb663fe78a"},
+    {file = "mypy-0.931-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c89702cac5b302f0c5d33b172d2b55b5df2bede3344a2fbed99ff96bddb2cf00"},
+    {file = "mypy-0.931-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:300717a07ad09525401a508ef5d105e6b56646f7942eb92715a1c8d610149714"},
+    {file = "mypy-0.931-cp310-cp310-win_amd64.whl", hash = "sha256:7b3f6f557ba4afc7f2ce6d3215d5db279bcf120b3cfd0add20a5d4f4abdae5bc"},
+    {file = "mypy-0.931-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1bf752559797c897cdd2c65f7b60c2b6969ffe458417b8d947b8340cc9cec08d"},
+    {file = "mypy-0.931-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4365c60266b95a3f216a3047f1d8e3f895da6c7402e9e1ddfab96393122cc58d"},
+    {file = "mypy-0.931-cp36-cp36m-win_amd64.whl", hash = "sha256:1b65714dc296a7991000b6ee59a35b3f550e0073411ac9d3202f6516621ba66c"},
+    {file = "mypy-0.931-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e839191b8da5b4e5d805f940537efcaa13ea5dd98418f06dc585d2891d228cf0"},
+    {file = "mypy-0.931-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:50c7346a46dc76a4ed88f3277d4959de8a2bd0a0fa47fa87a4cde36fe247ac05"},
+    {file = "mypy-0.931-cp37-cp37m-win_amd64.whl", hash = "sha256:d8f1ff62f7a879c9fe5917b3f9eb93a79b78aad47b533911b853a757223f72e7"},
+    {file = "mypy-0.931-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9fe20d0872b26c4bba1c1be02c5340de1019530302cf2dcc85c7f9fc3252ae0"},
+    {file = "mypy-0.931-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1b06268df7eb53a8feea99cbfff77a6e2b205e70bf31743e786678ef87ee8069"},
+    {file = "mypy-0.931-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8c11003aaeaf7cc2d0f1bc101c1cc9454ec4cc9cb825aef3cafff8a5fdf4c799"},
+    {file = "mypy-0.931-cp38-cp38-win_amd64.whl", hash = "sha256:d9d2b84b2007cea426e327d2483238f040c49405a6bf4074f605f0156c91a47a"},
+    {file = "mypy-0.931-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff3bf387c14c805ab1388185dd22d6b210824e164d4bb324b195ff34e322d166"},
+    {file = "mypy-0.931-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b56154f8c09427bae082b32275a21f500b24d93c88d69a5e82f3978018a0266"},
+    {file = "mypy-0.931-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ca7f8c4b1584d63c9a0f827c37ba7a47226c19a23a753d52e5b5eddb201afcd"},
+    {file = "mypy-0.931-cp39-cp39-win_amd64.whl", hash = "sha256:74f7eccbfd436abe9c352ad9fb65872cc0f1f0a868e9d9c44db0893440f0c697"},
+    {file = "mypy-0.931-py3-none-any.whl", hash = "sha256:1171f2e0859cfff2d366da2c7092b06130f232c636a3f7301e3feb8b41f6377d"},
+    {file = "mypy-0.931.tar.gz", hash = "sha256:0038b21890867793581e4cb0d810829f5fd4441aa75796b53033af3aa30430ce"},
 ]
 mypy-extensions = [
     {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
@@ -3028,44 +3059,36 @@ nodeenv = [
     {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
 ]
 nox = [
-    {file = "nox-2021.10.1-py3-none-any.whl", hash = "sha256:1bb224fb09c26c482932f0e3038ef01c27b4025d559066443a4da1f96daad01a"},
-    {file = "nox-2021.10.1.tar.gz", hash = "sha256:0a1c735d5e90fa234046b58a5ad61d08bc13ae77ab213da9b58d5cc2d25023ae"},
+    {file = "nox-2022.1.7-py3-none-any.whl", hash = "sha256:efee12f02d39405b16d68f60e7a06fe1fc450ae58669d6cdda8c7f48e3bae9e3"},
+    {file = "nox-2022.1.7.tar.gz", hash = "sha256:b375238cebb0b9df2fab74b8d0ce1a50cd80df60ca2e13f38f539454fcd97d7e"},
 ]
 nox-poetry = [
     {file = "nox-poetry-0.9.0.tar.gz", hash = "sha256:ea48fa535cd048854da35af7c6c3e92046fbed9b9023bb81193fb4d2d3a47c92"},
     {file = "nox_poetry-0.9.0-py3-none-any.whl", hash = "sha256:33423c855fb47e2901faf9e15937326bc20c6e356eef825903eed4f8bbda69d3"},
 ]
 numpy = [
-    {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"},
-    {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"},
-    {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"},
-    {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"},
-    {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"},
-    {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"},
-    {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"},
-    {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"},
-    {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"},
-    {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"},
-    {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"},
-    {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"},
-    {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"},
-    {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"},
-    {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"},
-    {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"},
-    {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"},
-    {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"},
-    {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"},
-    {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"},
-    {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"},
-    {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"},
-    {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"},
-    {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"},
-    {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"},
-    {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"},
-    {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"},
-    {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"},
-    {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"},
-    {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"},
+    {file = "numpy-1.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d62d6b0870b53799204515145935608cdeb4cebb95a26800b6750e48884cc5b"},
+    {file = "numpy-1.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:831f2df87bd3afdfc77829bc94bd997a7c212663889d56518359c827d7113b1f"},
+    {file = "numpy-1.22.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8d1563060e77096367952fb44fca595f2b2f477156de389ce7c0ade3aef29e21"},
+    {file = "numpy-1.22.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69958735d5e01f7b38226a6c6e7187d72b7e4d42b6b496aca5860b611ca0c193"},
+    {file = "numpy-1.22.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45a7dfbf9ed8d68fd39763940591db7637cf8817c5bce1a44f7b56c97cbe211e"},
+    {file = "numpy-1.22.1-cp310-cp310-win_amd64.whl", hash = "sha256:7e957ca8112c689b728037cea9c9567c27cf912741fabda9efc2c7d33d29dfa1"},
+    {file = "numpy-1.22.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:800dfeaffb2219d49377da1371d710d7952c9533b57f3d51b15e61c4269a1b5b"},
+    {file = "numpy-1.22.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:65f5e257987601fdfc63f1d02fca4d1c44a2b85b802f03bd6abc2b0b14648dd2"},
+    {file = "numpy-1.22.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:632e062569b0fe05654b15ef0e91a53c0a95d08ffe698b66f6ba0f927ad267c2"},
+    {file = "numpy-1.22.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d245a2bf79188d3f361137608c3cd12ed79076badd743dc660750a9f3074f7c"},
+    {file = "numpy-1.22.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b4018a19d2ad9606ce9089f3d52206a41b23de5dfe8dc947d2ec49ce45d015"},
+    {file = "numpy-1.22.1-cp38-cp38-win32.whl", hash = "sha256:f8ad59e6e341f38266f1549c7c2ec70ea0e3d1effb62a44e5c3dba41c55f0187"},
+    {file = "numpy-1.22.1-cp38-cp38-win_amd64.whl", hash = "sha256:60f19c61b589d44fbbab8ff126640ae712e163299c2dd422bfe4edc7ec51aa9b"},
+    {file = "numpy-1.22.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2db01d9838a497ba2aa9a87515aeaf458f42351d72d4e7f3b8ddbd1eba9479f2"},
+    {file = "numpy-1.22.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bcd19dab43b852b03868796f533b5f5561e6c0e3048415e675bec8d2e9d286c1"},
+    {file = "numpy-1.22.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78bfbdf809fc236490e7e65715bbd98377b122f329457fffde206299e163e7f3"},
+    {file = "numpy-1.22.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c51124df17f012c3b757380782ae46eee85213a3215e51477e559739f57d9bf6"},
+    {file = "numpy-1.22.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88d54b7b516f0ca38a69590557814de2dd638d7d4ed04864826acaac5ebb8f01"},
+    {file = "numpy-1.22.1-cp39-cp39-win32.whl", hash = "sha256:b5ec9a5eaf391761c61fd873363ef3560a3614e9b4ead17347e4deda4358bca4"},
+    {file = "numpy-1.22.1-cp39-cp39-win_amd64.whl", hash = "sha256:4ac4d7c9f8ea2a79d721ebfcce81705fc3cd61a10b731354f1049eb8c99521e8"},
+    {file = "numpy-1.22.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e60ef82c358ded965fdd3132b5738eade055f48067ac8a5a8ac75acc00cad31f"},
+    {file = "numpy-1.22.1.zip", hash = "sha256:e348ccf5bc5235fc405ab19d53bec215bb373300e5523c7b476cc0da8a5e9973"},
 ]
 packageurl-python = [
     {file = "packageurl-python-0.9.6.tar.gz", hash = "sha256:c01fbaf62ad2eb791e97158d1f30349e830bee2dd3e9503a87f6c3ffae8d1cf0"},
@@ -3154,8 +3177,12 @@ pip-api = [
     {file = "pip_api-0.0.26-py3-none-any.whl", hash = "sha256:b24e94e5d5d3f161a2db49653798e6a4c1f0ed6b379e511b45a8fa57c185d711"},
 ]
 pip-audit = [
-    {file = "pip-audit-1.1.1.tar.gz", hash = "sha256:61d772968b6ef644f43ecceace89665d28d7ea521a9390e59188c4189d580856"},
-    {file = "pip_audit-1.1.1-py3-none-any.whl", hash = "sha256:86aff3427a544757d1d30e8a0ee83eb040c85a94e7b8b6541ed4058493090b44"},
+    {file = "pip-audit-1.1.2.tar.gz", hash = "sha256:374e8528a1376145cbe0f0ec4a7b6a5ebfd6152f665d274498ea49d8bffef24c"},
+    {file = "pip_audit-1.1.2-py3-none-any.whl", hash = "sha256:48325027b803376bee22ca273f8a1b477324c10663c6218a5acebfdc4a107328"},
+]
+pip-check = [
+    {file = "pip-check-2.7.tar.gz", hash = "sha256:17d1612af84fecfebdf8f8c60b9eaa9c389814a49affdcd88a1d4fd98fd17aee"},
+    {file = "pip_check-2.7-py2.py3-none-any.whl", hash = "sha256:f14ba13b0a66cd9d4732f958fa79d0b0ed2ef7833239927ef4336266265b72fa"},
 ]
 platformdirs = [
     {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"},
@@ -3197,8 +3224,8 @@ pyflakes = [
     {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"},
 ]
 pygments = [
-    {file = "Pygments-2.11.0-py3-none-any.whl", hash = "sha256:ac8098bfc40b8e1091ad7c13490c7f4797e401d0972e8fcfadde90ffb3ed4ea9"},
-    {file = "Pygments-2.11.0.tar.gz", hash = "sha256:51130f778a028f2d19c143fce00ced6f8b10f726e17599d7e91b290f6cbcda0c"},
+    {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+    {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
 ]
 pyinotify = [
     {file = "pyinotify-0.9.6.tar.gz", hash = "sha256:9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"},
@@ -3239,8 +3266,8 @@ pytest-metadata = [
     {file = "pytest_metadata-1.11.0-py2.py3-none-any.whl", hash = "sha256:576055b8336dd4a9006dd2a47615f76f2f8c30ab12b1b1c039d99e834583523f"},
 ]
 pytest-randomly = [
-    {file = "pytest-randomly-3.10.3.tar.gz", hash = "sha256:22154cdcff7ba44e0599596490e6b75278ca973a33812ea6a54bf14d0b042ef1"},
-    {file = "pytest_randomly-3.10.3-py3-none-any.whl", hash = "sha256:b05a7a45f54cae2b5095752c6a10cb559df84448421b0420ae492dd2fb1727ef"},
+    {file = "pytest-randomly-3.11.0.tar.gz", hash = "sha256:9f013b8c1923130f3d0a286fde56e1fc52cfb3547b8eedf2765c460cee979c7f"},
+    {file = "pytest_randomly-3.11.0-py3-none-any.whl", hash = "sha256:a3c680d2b8150cf766311a80a1f92da64c3dd819045cda834fbf1b0ac4891610"},
 ]
 pytest-recording = [
     {file = "pytest-recording-0.12.0.tar.gz", hash = "sha256:9039bf488f80c016055ffd039a91e33b1e89f3ee2ee0005c0bbce298fd417ee1"},
@@ -3267,8 +3294,8 @@ pytzdata = [
     {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"},
 ]
 pyupgrade = [
-    {file = "pyupgrade-2.30.1-py2.py3-none-any.whl", hash = "sha256:803c4e7631f0596e5d991b671014ce8f4f1e76b52b27dca11ea8bf0110808dfa"},
-    {file = "pyupgrade-2.30.1.tar.gz", hash = "sha256:dc38f1613c50fd7baae3475f2afa5b8c933709df619494dd98773e91a5a2755e"},
+    {file = "pyupgrade-2.31.0-py2.py3-none-any.whl", hash = "sha256:0a62c5055f854d7f36e155b7ee8920561bf0399c53edd975cf02436eef8937fc"},
+    {file = "pyupgrade-2.31.0.tar.gz", hash = "sha256:80e2308cae2b11c3fdd091137495d99abf7e0cd98b501aa5758974991497c24c"},
 ]
 pyyaml = [
     {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
@@ -3314,8 +3341,8 @@ radon = [
     {file = "radon-5.1.0.tar.gz", hash = "sha256:cb1d8752e5f862fb9e20d82b5f758cbc4fb1237c92c9a66450ea0ea7bf29aeee"},
 ]
 requests = [
-    {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
-    {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+    {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+    {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
 ]
 requirements-parser = [
     {file = "requirements-parser-0.3.1.tar.gz", hash = "sha256:3852277618e653dd1d8fa4129e59b4338358dffafeb3d5106e9f88504db9c460"},
@@ -3359,6 +3386,10 @@ tabulate = [
 termcolor = [
     {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
 ]
+terminaltables = [
+    {file = "terminaltables-3.1.10-py2.py3-none-any.whl", hash = "sha256:e4fdc4179c9e4aab5f674d80f09d76fa436b96fdc698a8505e0a36bf0804a874"},
+    {file = "terminaltables-3.1.10.tar.gz", hash = "sha256:ba6eca5cb5ba02bba4c9f4f985af80c54ec3dccf94cfcd190154386255e47543"},
+]
 testfixtures = [
     {file = "testfixtures-6.18.3-py2.py3-none-any.whl", hash = "sha256:6ddb7f56a123e1a9339f130a200359092bd0a6455e31838d6c477e8729bb7763"},
     {file = "testfixtures-6.18.3.tar.gz", hash = "sha256:2600100ae96ffd082334b378e355550fef8b4a529a6fa4c34f47130905c7426d"},
@@ -3427,28 +3458,28 @@ transitions = [
     {file = "transitions-0.8.10.tar.gz", hash = "sha256:b0385975a842e885c1a55c719d2f90164471665794d39d51f9eb3f11e1d9c8ac"},
 ]
 types-setuptools = [
-    {file = "types-setuptools-57.4.5.tar.gz", hash = "sha256:a4600efdca68a33204ad9c083fd9966d63aee61a7d007e912b6afc6ff57d6e02"},
-    {file = "types_setuptools-57.4.5-py3-none-any.whl", hash = "sha256:920a7c1ee120025e939a1707f8fd09a1266edbf7848eae7b8de7c5909a824cc8"},
+    {file = "types-setuptools-57.4.7.tar.gz", hash = "sha256:9677d969b00ec1c14552f5be2b2b47a6fbea4d0ed4de0fdcee18abdaa0cc9267"},
+    {file = "types_setuptools-57.4.7-py3-none-any.whl", hash = "sha256:ffda504687ea02d4b7751c0d1df517fbbcdc276836d90849e4f1a5f1ccd79f01"},
 ]
 types-toml = [
-    {file = "types-toml-0.10.1.tar.gz", hash = "sha256:5c1f8f8d57692397c8f902bf6b4d913a0952235db7db17d2908cc110e70610cb"},
-    {file = "types_toml-0.10.1-py3-none-any.whl", hash = "sha256:8cdfd2b7c89bed703158b042dd5cf04255dae77096db66f4a12ca0a93ccb07a5"},
+    {file = "types-toml-0.10.3.tar.gz", hash = "sha256:215a7a79198651ec5bdfd66193c1e71eb681a42f3ef7226c9af3123ced62564a"},
+    {file = "types_toml-0.10.3-py3-none-any.whl", hash = "sha256:988457744d9774d194e3539388772e3a685d8057b7c4a89407afeb0a6cbd1b14"},
 ]
 typing-extensions = [
     {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"},
     {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"},
 ]
 urllib3 = [
-    {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
-    {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
+    {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"},
+    {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"},
 ]
 vcrpy = [
     {file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
     {file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
 ]
 virtualenv = [
-    {file = "virtualenv-20.11.2-py2.py3-none-any.whl", hash = "sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809"},
-    {file = "virtualenv-20.11.2.tar.gz", hash = "sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c"},
+    {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"},
+    {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"},
 ]
 vulture = [
     {file = "vulture-2.3-py2.py3-none-any.whl", hash = "sha256:f39de5e6f1df1f70c3b50da54f1c8d494159e9ca3d01a9b89eac929600591703"},
diff --git a/pyproject.toml b/pyproject.toml
index d864b17d..f4d5c4eb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,9 +23,9 @@ change_type_order = [
     "Change (Old)",
     "Fix (Old)",
 ]
-version = "0.7.0"
+version = "0.7.1"
 # PLANNED: Pending calver support: https://github.com/commitizen-tools/commitizen/pull/385
-tag_format = "2021.$version"
+tag_format = "2022.$version"
 version_files = ["pyproject.toml", "calcipy/__init__.py", "appveyor.yml"]
 
 [tool.commitizen.cz_legacy_map]
@@ -45,7 +45,7 @@ multi_line_output = 5
 
 [tool.poetry]
 name = "calcipy"
-version = "2021.0.7.0"
+version = "2021.0.7.1"
 description = "Python package to simplify development. Includes functionality for task running, testing, linting, documenting, and more"
 license = "MIT"
 authors = ["Kyle King <dev.act.kyle@gmail.com>"]
@@ -116,7 +116,7 @@ autopep8 = { version = ">=1.5", optional = true }
 cohesion = { version = ">=1", optional = true }
 darglint = { version = ">=1.8", optional = true }
 dlint = { version = ">=0.11", optional = true }
-flake8 = { version = ">=3.8", optional = true }
+flake8 = { version = ">=3.8.4", optional = true }
 flake8-2020 = { version = ">=1.6", optional = true }
 flake8-aaa = { version = ">=0.12", optional = true }
 flake8-annotations = { version = ">=2.6", optional = true }
@@ -125,7 +125,7 @@ flake8-bandit = { version = ">=2.1", optional = true }
 flake8-blind-except = { version = ">=0.2", optional = true }
 flake8-breakpoint = { version = ">=1.1", optional = true }
 flake8-broken-line = { version = ">=0.3", optional = true }
-flake8-bugbear = { version = ">=21.4", optional = true }
+flake8-bugbear = { version = ">=22.1.11", optional = true }
 flake8-builtins = { version = ">=1.5", optional = true }
 flake8-cognitive-complexity = { version = ">=0.1", optional = true }
 flake8-commas = { version = ">=2.0", optional = true }
@@ -153,10 +153,11 @@ flake8-variables-names = { version = ">=0.0.4", optional = true }
 hacking = { version = ">=4", optional = true }                                          # Version set to prevent oscillation back to 3
 isort = { version = ">=5", optional = true }                                            # Use latest isort
 it = { version = ">=1", optional = true }
-licensecheck = { version = ">=2021.1.2", optional = true }
+licensecheck = { extras = ["full"], version = "^2022", optional = true }
 pandas-vet = { version = ">=0.2", optional = true }
 pep8-naming = { version = ">=0.11", optional = true }
 pip-audit = { version = ">=1.1.1", optional = true }
+pip-check = { version = ">=2.7", optional = true }
 proselint = { version = ">=0.10", optional = true }
 pylint = { version = ">=2.8", optional = true }
 vulture = { version = ">=2.3", optional = true }
@@ -239,6 +240,7 @@ lint = [
     "pandas-vet",
     "pep8-naming",
     "pip-audit",
+    "pip-check",
     "proselint",
     "pylint",
     "vulture",
diff --git a/requirements.txt b/requirements.txt
index 7c55d160..67e70149 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,13 +7,13 @@ argcomplete==1.12.3; python_full_version >= "3.6.2" and python_full_version < "4
 astpretty==2.1.0; python_full_version >= "3.6.1" and python_version >= "3.6" \
     --hash=sha256:f81f14b5636f7af81fadb1e3c09ca7702ce4615500d9cc6d6829befb2dec2e3c \
     --hash=sha256:8a801fcda604ec741f010bb36d7cbadc3ec8a182ea6fb83e20ab663463e75ff6
-astroid==2.9.0; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" \
-    --hash=sha256:776ca0b748b4ad69c00bfe0fff38fa2d21c338e12c84aa9715ee0d473c422778 \
-    --hash=sha256:5939cf55de24b92bda00345d4d0659d01b3c7dafb5055165c330bc7c568ba273
-asttokens==2.0.5; python_version >= "3.6" and python_version < "4" \
+astroid==2.9.3; python_full_version >= "3.6.2" \
+    --hash=sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6 \
+    --hash=sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877
+asttokens==2.0.5; python_version >= "3.7" and python_version < "4" \
     --hash=sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c \
     --hash=sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5
-atomicwrites==1.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.4.0" \
+atomicwrites==1.4.0; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.4.0" \
     --hash=sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197 \
     --hash=sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a
 attrs-strict==1.0.0; python_version >= "3.7" \
@@ -52,9 +52,9 @@ cfgv==3.3.1; python_full_version >= "3.6.1" \
 chardet==4.0.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
     --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 \
     --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa
-charset-normalizer==2.0.9; python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4.0" \
-    --hash=sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c \
-    --hash=sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721
+charset-normalizer==2.0.10; python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4.0" \
+    --hash=sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd \
+    --hash=sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455
 click==8.0.3; python_full_version >= "3.6.1" and python_full_version < "4.0.0" and python_version >= "3.6" \
     --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \
     --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b
@@ -65,7 +65,7 @@ cognitive-complexity==1.2.0; python_version >= "3.6" \
     --hash=sha256:3c2b433a9e41502932f6aa629e1f57a5e8f145956c54facbb5241a9492af6fb7
 cohesion==1.0.0 \
     --hash=sha256:a33a526eb8922c7dbfef19257b3532d16e6246c4ece3ab3b492b290d9d3f2d4b
-colorama==0.4.4; sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and (python_version >= "3.5" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.5" and python_full_version >= "3.5.0") and platform_system == "Windows" and (python_version > "3.4" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version > "3.4") and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32" and python_full_version >= "3.5.0") \
+colorama==0.4.4; sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and (python_version >= "3.5" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.5" and python_full_version >= "3.5.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0") and platform_system == "Windows" and (python_version > "3.4" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version > "3.4") and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32" and python_full_version >= "3.5.0") \
     --hash=sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2 \
     --hash=sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b
 colorlog==6.6.0; python_version >= "3.7" and python_version < "4.0" \
@@ -134,9 +134,9 @@ darglint==1.8.1; python_version >= "3.6" and python_version < "4.0" \
 decli==0.5.2; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" \
     --hash=sha256:d3207bc02d0169bf6ed74ccca09ce62edca0eb25b0ebf8bf4ae3fb8333e15ca0 \
     --hash=sha256:f2cde55034a75c819c630c7655a844c612f2598c42c21299160465df6ad463ad
-decorator==5.1.0; python_version >= "3.5" \
-    --hash=sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374 \
-    --hash=sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7
+decorator==5.1.1; python_version >= "3.5" \
+    --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 \
+    --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330
 diff-cover==6.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
     --hash=sha256:d89c165d3c852c3c10e9f969236e08d413225ce52be8e2477be2a070987229bf \
     --hash=sha256:b1d782c1ce53ad4b2c5545f8b7aa799eb61a0b12a62b376a18e2313c6f2d77f1
@@ -147,9 +147,9 @@ dlint==0.12.0 \
     --hash=sha256:344823d299439aa94fe276b2b3b90733026787d25713c664e137cf5f7d0645f7
 docstring-parser==0.7.3; python_version >= "3.6" and python_version < "4.0" \
     --hash=sha256:cde5fbf8b846433dfbde1e0f96b7f909336a634d5df34a38cb75050c7346734a
-doit==0.34.0; python_version >= "3.6" \
-    --hash=sha256:7b913896a9ade2ac8e8c4f34373866be425c12ae443accf04ed0be630cb8aa13 \
-    --hash=sha256:8ef1de105cbca939c73e836dff86c812c9228e11ed8702f6955b7a086caac02d
+doit==0.34.1; python_version >= "3.6" \
+    --hash=sha256:772a6502f4fd2d31ef3520a9f36f4b6f81fba50c958c207943918f30a3444b30 \
+    --hash=sha256:49467c1bf8850a292e5fd0254ee1b219f6fd8202a0d3d4bf33af3c2dfb58d688
 eradicate==2.0.0; python_version >= "3.6" and python_version < "4.0" \
     --hash=sha256:27434596f2c5314cc9b31410c93d8f7e8885747399773cd088d3adea647a60c8
 falcon==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.4.0" \
@@ -179,9 +179,9 @@ filelock==3.4.2; python_version >= "3.7" and python_full_version >= "3.6.1" \
 flake8-2020==1.6.1; python_full_version >= "3.6.1" \
     --hash=sha256:efcc056fb723e1ea5307e3b663c7c328f1c23a5ff0a0fd3be695a918d8245c3a \
     --hash=sha256:db523e3383befc17c895219551ff6c9b2f6e0a5cae4c7739ea65a2238bdc6f74
-flake8-aaa==0.12.0; python_version >= "3.6" and python_version < "4" \
-    --hash=sha256:ce6acf9c278dc6a34d1b8c3823f88b9ee9048fda80a1a3c04cd29d3876e776dc \
-    --hash=sha256:07d8b714b1af53f645107157aa65346e95bb94c8f88c0800fa4e199d22719d52
+flake8-aaa==0.12.2; python_version >= "3.7" and python_version < "4" \
+    --hash=sha256:38b5009248d8bc1e9568c8cc6f00870582f0e6b1be168d2f880a404796029e83 \
+    --hash=sha256:80840d34885506128a94e4912281bbab315591c414befd496dd041da640a1546
 flake8-annotations==2.7.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
     --hash=sha256:52e53c05b0c06cac1c2dec192ea2c36e85081238add3bd99421d56f574b9479b \
     --hash=sha256:3edfbbfb58e404868834fe6ec3eaf49c139f64f0701259f707d043185545151e
@@ -198,9 +198,9 @@ flake8-breakpoint==1.1.0; python_version >= "3.6" and python_version < "4.0" \
 flake8-broken-line==0.4.0; python_version >= "3.6" and python_version < "4.0" \
     --hash=sha256:771aab5aa0997666796fed249d0e48e6c01cdfeca8c95521eea28a38b7ced4c7 \
     --hash=sha256:e9c522856862239a2c7ef2c1de0276fa598572aa864bd4e9c7efc2a827538515
-flake8-bugbear==21.11.29; python_version >= "3.6" \
-    --hash=sha256:8b04cb2fafc6a78e1a9d873bd3988e4282f7959bb6b0d7c1ae648ec09b937a7b \
-    --hash=sha256:179e41ddae5de5e3c20d1f61736feeb234e70958fbb56ab3c28a67739c8e9a82
+flake8-bugbear==22.1.11; python_version >= "3.6" \
+    --hash=sha256:4c2a4136bd4ecb8bf02d5159af302ffc067642784c9d0488b33ce4610da825ee \
+    --hash=sha256:ce7ae44aaaf67ef192b8a6de94a5ac617144e1675ad0654fdea556f48dc18d9b
 flake8-builtins==1.5.3 \
     --hash=sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b \
     --hash=sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687
@@ -209,9 +209,9 @@ flake8-cognitive-complexity==0.1.0; python_version >= "3.6" \
 flake8-commas==2.1.0 \
     --hash=sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263 \
     --hash=sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54
-flake8-comprehensions==3.7.0; python_version >= "3.6" \
-    --hash=sha256:6b3218b2dde8ac5959c6476cde8f41a79e823c22feb656be2710cd2a3232cef9 \
-    --hash=sha256:a5d7aea6315bbbd6fbcb2b4e80bff6a54d1600155e26236e555d0c6fe1d62522
+flake8-comprehensions==3.8.0; python_version >= "3.7" \
+    --hash=sha256:8e108707637b1d13734f38e03435984f6b7854fa6b5a4e34f93e69534be8e521 \
+    --hash=sha256:9406314803abe1193c064544ab14fdc43c58424c0882f6ff8a581eb73fc9bb58
 flake8-debugger==4.0.0; python_version >= "3.6" \
     --hash=sha256:e43dc777f7db1481db473210101ec2df2bd39a45b149d7218a618e954177eda6 \
     --hash=sha256:82e64faa72e18d1bdd0000407502ebb8ecffa7bc027c62b9d4110ce27c091032
@@ -285,9 +285,9 @@ ghp-import==2.0.2; python_version >= "3.6" \
 gitdb==4.0.9; python_version >= "3.7" \
     --hash=sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd \
     --hash=sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa
-gitpython==3.1.24; python_version >= "3.7" \
-    --hash=sha256:dc0a7f2f697657acc8d7f89033e8b1ea94dd90356b2983bca89dc8d2ab3cc647 \
-    --hash=sha256:df83fdf5e684fef7c6ee2c02fc68a5ceb7e7e759d08b694088d0cacb4eba59e5
+gitpython==3.1.26; python_version >= "3.7" \
+    --hash=sha256:26ac35c212d1f7b16036361ca5cff3ec66e11753a0d677fb6c48fa4e1a9dd8d6 \
+    --hash=sha256:fc8868f63a2e6d268fb25f481995ba185a85a66fcad126f039323ff6635669ee
 hacking==4.1.0; python_version >= "3.5" \
     --hash=sha256:079a1e0ea98813429a98b0ebaedad4275058c38906fa7c35d0eb56df9f5e0fe9 \
     --hash=sha256:150839891be9e13f784b5f809091fb9e8c72aef43d9898830f76f8c9684ee139
@@ -297,16 +297,16 @@ html5lib==1.1; python_version >= "3.6" and python_full_version < "3.0.0" or pyth
 hug==2.6.1; python_version >= "3.6" and python_version < "4.0" \
     --hash=sha256:31c8fc284f81377278629a4b94cbb619ae9ce829cdc2da9564ccc66a121046b4 \
     --hash=sha256:b0edace2acb618873779c9ce6ecf9165db54fef95c22262f5700fcdd9febaec9
-identify==2.4.1; python_full_version >= "3.6.1" \
-    --hash=sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c \
-    --hash=sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9
+identify==2.4.4; python_full_version >= "3.6.1" \
+    --hash=sha256:aa68609c7454dbcaae60a01ff6b8df1de9b39fe6e50b1f6107ec81dcda624aa6 \
+    --hash=sha256:6b4b5031f69c48bf93a646b90de9b381c6b5f560df4cbe0ed3cf7650ae741e4d
 idna==3.3; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4.0" \
     --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
     --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d
 importlib-metadata==4.10.0; python_version < "3.10" and python_version >= "3.7" \
     --hash=sha256:b7cf7d3fef75f1e4c80a96ca660efbd51473d7e8f39b5ab9210febc7809012a4 \
     --hash=sha256:92a8b58ce734b2a4494878e0ecf7d79ccd7a128b5fc6014c401e0b61f006f0f6
-iniconfig==1.1.1; python_version >= "3.6" \
+iniconfig==1.1.1; python_version >= "3.7" \
     --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
     --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
 isort==5.10.1; python_full_version >= "3.6.1" and python_version < "4.0" \
@@ -317,7 +317,7 @@ it==1.0.0; python_version >= "3.7" \
 jinja2==3.0.3; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" \
     --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \
     --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7
-lazy-object-proxy==1.7.1; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" \
+lazy-object-proxy==1.7.1; python_version >= "3.6" and python_full_version >= "3.6.2" \
     --hash=sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4 \
     --hash=sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b \
     --hash=sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36 \
@@ -355,9 +355,9 @@ lazy-object-proxy==1.7.1; python_version >= "3.6" and python_version < "4.0" and
     --hash=sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f \
     --hash=sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61 \
     --hash=sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84
-licensecheck==2021.5.2; python_version >= "3.7" and python_version < "4.0" \
-    --hash=sha256:701ddbbecf61098c7567e5f7712c2eadbb84128678dda77066a276c4ca6d4feb \
-    --hash=sha256:4303a4bf318d311a3003cf45d19bd4a4b2dcab6d8b1b11e169718871f541e37f
+licensecheck==2022; python_version >= "3.7" and python_version < "4.0" \
+    --hash=sha256:69d78df5cb55c71c619519a52a2b2ad43b72c6b4d092d7d54e299f6933c9338e \
+    --hash=sha256:a619c17dd850e4914e8e7e31edce6693248b7c0de4ebecd0f12e651655ceaef9
 livereload==2.6.3 \
     --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869
 lockfile==0.12.2; python_version >= "3.6" \
@@ -481,15 +481,18 @@ mccabe==0.6.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
 mergedeep==1.3.4; python_version >= "3.6" \
     --hash=sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307 \
     --hash=sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8
+metprint==2021; python_version >= "3.7" and python_version < "4.0" \
+    --hash=sha256:ab977c08c595493ce3b8a0af7f5b91de1e1561ce8f968be2341e1bacde92cb63 \
+    --hash=sha256:d1c63b6e5607db5eb14eb6e3274383a6f3b2ed079c6382eb5c8555060e01050a
 mkdocs-git-revision-date-plugin==0.3.1; python_version >= "3.4" \
     --hash=sha256:4abaef720763a64c952bed6829dcc180f67c97c60dd73914e90715e05d1cfb23 \
     --hash=sha256:8ae50b45eb75d07b150a69726041860801615aae5f4adbd6b1cf4d51abaa03d5
 mkdocs-material-extensions==1.0.3; python_version >= "3.6" \
     --hash=sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2 \
     --hash=sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44
-mkdocs-material==8.1.3; python_version >= "3.6" \
-    --hash=sha256:b8014d8a77ba45879525e0e7619d0833d10897487a77d6697ef94240fed8c892 \
-    --hash=sha256:ee153b8130ae580acd57082af0e54d644fe2a37c62f2ec9400f77e389ac1b294
+mkdocs-material==8.1.6; python_version >= "3.6" \
+    --hash=sha256:12eb74faf018950f51261a773f9bea12cc296ec4bdbb2c8cf74102ee35b6df79 \
+    --hash=sha256:b2303413e3154502759f90ee2720b451be8855f769c385d8fb06a93ce54aafe2
 mkdocs==1.2.3; python_version >= "3.6" \
     --hash=sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072 \
     --hash=sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1
@@ -607,67 +610,59 @@ multidict==5.2.0; python_version >= "3.6" \
 mypy-extensions==0.4.3; python_version >= "3.6" \
     --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
     --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
-mypy==0.930; python_version >= "3.6" \
-    --hash=sha256:221cc94dc6a801ccc2be7c0c9fd791c5e08d1fa2c5e1c12dec4eab15b2469871 \
-    --hash=sha256:db3a87376a1380f396d465bed462e76ea89f838f4c5e967d68ff6ee34b785c31 \
-    --hash=sha256:1d2296f35aae9802eeb1327058b550371ee382d71374b3e7d2804035ef0b830b \
-    --hash=sha256:959319b9a3cafc33a8185f440a433ba520239c72e733bf91f9efd67b0a8e9b30 \
-    --hash=sha256:45a4dc21c789cfd09b8ccafe114d6de66f0b341ad761338de717192f19397a8c \
-    --hash=sha256:1e689e92cdebd87607a041585f1dc7339aa2e8a9f9bad9ba7e6ece619431b20c \
-    --hash=sha256:ed4e0ea066bb12f56b2812a15ff223c57c0a44eca817ceb96b214bb055c7051f \
-    --hash=sha256:a9d8dffefba634b27d650e0de2564379a1a367e2e08d6617d8f89261a3bf63b2 \
-    --hash=sha256:b419e9721260161e70d054a15abbd50603c16f159860cfd0daeab647d828fc29 \
-    --hash=sha256:601f46593f627f8a9b944f74fd387c9b5f4266b39abad77471947069c2fc7651 \
-    --hash=sha256:1ea7199780c1d7940b82dbc0a4e37722b4e3851264dbba81e01abecc9052d8a7 \
-    --hash=sha256:70b197dd8c78fc5d2daf84bd093e8466a2b2e007eedaa85e792e513a820adbf7 \
-    --hash=sha256:5feb56f8bb280468fe5fc8e6f56f48f99aa0df9eed3c507a11505ee4657b5380 \
-    --hash=sha256:2e9c5409e9cb81049bb03fa1009b573dea87976713e3898561567a86c4eaee01 \
-    --hash=sha256:554873e45c1ca20f31ddf873deb67fa5d2e87b76b97db50669f0468ccded8fae \
-    --hash=sha256:0feb82e9fa849affca7edd24713dbe809dce780ced9f3feca5ed3d80e40b777f \
-    --hash=sha256:bc1a0607ea03c30225347334af66b0af12eefba018a89a88c209e02b7065ea95 \
-    --hash=sha256:f9f665d69034b1fcfdbcd4197480d26298bbfb5d2dfe206245b6498addb34999 \
-    --hash=sha256:bf4a44e03040206f7c058d1f5ba02ef2d1820720c88bc4285c7d9a4269f54173 \
-    --hash=sha256:51426262ae4714cc7dd5439814676e0992b55bcc0f6514eccb4cf8e0678962c2
+mypy==0.931; python_version >= "3.6" \
+    --hash=sha256:3c5b42d0815e15518b1f0990cff7a705805961613e701db60387e6fb663fe78a \
+    --hash=sha256:c89702cac5b302f0c5d33b172d2b55b5df2bede3344a2fbed99ff96bddb2cf00 \
+    --hash=sha256:300717a07ad09525401a508ef5d105e6b56646f7942eb92715a1c8d610149714 \
+    --hash=sha256:7b3f6f557ba4afc7f2ce6d3215d5db279bcf120b3cfd0add20a5d4f4abdae5bc \
+    --hash=sha256:1bf752559797c897cdd2c65f7b60c2b6969ffe458417b8d947b8340cc9cec08d \
+    --hash=sha256:4365c60266b95a3f216a3047f1d8e3f895da6c7402e9e1ddfab96393122cc58d \
+    --hash=sha256:1b65714dc296a7991000b6ee59a35b3f550e0073411ac9d3202f6516621ba66c \
+    --hash=sha256:e839191b8da5b4e5d805f940537efcaa13ea5dd98418f06dc585d2891d228cf0 \
+    --hash=sha256:50c7346a46dc76a4ed88f3277d4959de8a2bd0a0fa47fa87a4cde36fe247ac05 \
+    --hash=sha256:d8f1ff62f7a879c9fe5917b3f9eb93a79b78aad47b533911b853a757223f72e7 \
+    --hash=sha256:f9fe20d0872b26c4bba1c1be02c5340de1019530302cf2dcc85c7f9fc3252ae0 \
+    --hash=sha256:1b06268df7eb53a8feea99cbfff77a6e2b205e70bf31743e786678ef87ee8069 \
+    --hash=sha256:8c11003aaeaf7cc2d0f1bc101c1cc9454ec4cc9cb825aef3cafff8a5fdf4c799 \
+    --hash=sha256:d9d2b84b2007cea426e327d2483238f040c49405a6bf4074f605f0156c91a47a \
+    --hash=sha256:ff3bf387c14c805ab1388185dd22d6b210824e164d4bb324b195ff34e322d166 \
+    --hash=sha256:5b56154f8c09427bae082b32275a21f500b24d93c88d69a5e82f3978018a0266 \
+    --hash=sha256:8ca7f8c4b1584d63c9a0f827c37ba7a47226c19a23a753d52e5b5eddb201afcd \
+    --hash=sha256:74f7eccbfd436abe9c352ad9fb65872cc0f1f0a868e9d9c44db0893440f0c697 \
+    --hash=sha256:1171f2e0859cfff2d366da2c7092b06130f232c636a3f7301e3feb8b41f6377d \
+    --hash=sha256:0038b21890867793581e4cb0d810829f5fd4441aa75796b53033af3aa30430ce
 nodeenv==1.6.0; python_full_version >= "3.6.1" \
     --hash=sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7 \
     --hash=sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b
 nox-poetry==0.9.0; python_version >= "3.7" and python_version < "4.0" \
     --hash=sha256:ea48fa535cd048854da35af7c6c3e92046fbed9b9023bb81193fb4d2d3a47c92 \
     --hash=sha256:33423c855fb47e2901faf9e15937326bc20c6e356eef825903eed4f8bbda69d3
-nox==2021.10.1; python_version >= "3.7" and python_version < "4.0" \
-    --hash=sha256:1bb224fb09c26c482932f0e3038ef01c27b4025d559066443a4da1f96daad01a \
-    --hash=sha256:0a1c735d5e90fa234046b58a5ad61d08bc13ae77ab213da9b58d5cc2d25023ae
-numpy==1.21.5 \
-    --hash=sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166 \
-    --hash=sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a \
-    --hash=sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089 \
-    --hash=sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7 \
-    --hash=sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9 \
-    --hash=sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954 \
-    --hash=sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc \
-    --hash=sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76 \
-    --hash=sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611 \
-    --hash=sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13 \
-    --hash=sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa \
-    --hash=sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939 \
-    --hash=sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8 \
-    --hash=sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640 \
-    --hash=sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815 \
-    --hash=sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e \
-    --hash=sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a \
-    --hash=sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a \
-    --hash=sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449 \
-    --hash=sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354 \
-    --hash=sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c \
-    --hash=sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb \
-    --hash=sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5 \
-    --hash=sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b \
-    --hash=sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593 \
-    --hash=sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5 \
-    --hash=sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441 \
-    --hash=sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced \
-    --hash=sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02 \
-    --hash=sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee
+nox==2022.1.7; python_version >= "3.7" and python_version < "4.0" \
+    --hash=sha256:efee12f02d39405b16d68f60e7a06fe1fc450ae58669d6cdda8c7f48e3bae9e3 \
+    --hash=sha256:b375238cebb0b9df2fab74b8d0ce1a50cd80df60ca2e13f38f539454fcd97d7e
+numpy==1.22.1 \
+    --hash=sha256:3d62d6b0870b53799204515145935608cdeb4cebb95a26800b6750e48884cc5b \
+    --hash=sha256:831f2df87bd3afdfc77829bc94bd997a7c212663889d56518359c827d7113b1f \
+    --hash=sha256:8d1563060e77096367952fb44fca595f2b2f477156de389ce7c0ade3aef29e21 \
+    --hash=sha256:69958735d5e01f7b38226a6c6e7187d72b7e4d42b6b496aca5860b611ca0c193 \
+    --hash=sha256:45a7dfbf9ed8d68fd39763940591db7637cf8817c5bce1a44f7b56c97cbe211e \
+    --hash=sha256:7e957ca8112c689b728037cea9c9567c27cf912741fabda9efc2c7d33d29dfa1 \
+    --hash=sha256:800dfeaffb2219d49377da1371d710d7952c9533b57f3d51b15e61c4269a1b5b \
+    --hash=sha256:65f5e257987601fdfc63f1d02fca4d1c44a2b85b802f03bd6abc2b0b14648dd2 \
+    --hash=sha256:632e062569b0fe05654b15ef0e91a53c0a95d08ffe698b66f6ba0f927ad267c2 \
+    --hash=sha256:0d245a2bf79188d3f361137608c3cd12ed79076badd743dc660750a9f3074f7c \
+    --hash=sha256:26b4018a19d2ad9606ce9089f3d52206a41b23de5dfe8dc947d2ec49ce45d015 \
+    --hash=sha256:f8ad59e6e341f38266f1549c7c2ec70ea0e3d1effb62a44e5c3dba41c55f0187 \
+    --hash=sha256:60f19c61b589d44fbbab8ff126640ae712e163299c2dd422bfe4edc7ec51aa9b \
+    --hash=sha256:2db01d9838a497ba2aa9a87515aeaf458f42351d72d4e7f3b8ddbd1eba9479f2 \
+    --hash=sha256:bcd19dab43b852b03868796f533b5f5561e6c0e3048415e675bec8d2e9d286c1 \
+    --hash=sha256:78bfbdf809fc236490e7e65715bbd98377b122f329457fffde206299e163e7f3 \
+    --hash=sha256:c51124df17f012c3b757380782ae46eee85213a3215e51477e559739f57d9bf6 \
+    --hash=sha256:88d54b7b516f0ca38a69590557814de2dd638d7d4ed04864826acaac5ebb8f01 \
+    --hash=sha256:b5ec9a5eaf391761c61fd873363ef3560a3614e9b4ead17347e4deda4358bca4 \
+    --hash=sha256:4ac4d7c9f8ea2a79d721ebfcce81705fc3cd61a10b731354f1049eb8c99521e8 \
+    --hash=sha256:e60ef82c358ded965fdd3132b5738eade055f48067ac8a5a8ac75acc00cad31f \
+    --hash=sha256:e348ccf5bc5235fc405ab19d53bec215bb373300e5523c7b476cc0da8a5e9973
 packageurl-python==0.9.6; python_version >= "3.6" and python_version < "4.0" \
     --hash=sha256:c01fbaf62ad2eb791e97158d1f30349e830bee2dd3e9503a87f6c3ffae8d1cf0 \
     --hash=sha256:676dcb8278721df952e2444bfcd8d7bf3518894498050f0c6a5faddbe0860cd0
@@ -743,13 +738,16 @@ pep8-naming==0.11.1 \
 pip-api==0.0.26; python_version >= "3.6" \
     --hash=sha256:d1266be311f1cd1ddd0d501e99275c7f6ff1fd0ec6db46d521f56e747d9286e5 \
     --hash=sha256:b24e94e5d5d3f161a2db49653798e6a4c1f0ed6b379e511b45a8fa57c185d711
-pip-audit==1.1.1; python_version >= "3.6" \
-    --hash=sha256:61d772968b6ef644f43ecceace89665d28d7ea521a9390e59188c4189d580856 \
-    --hash=sha256:86aff3427a544757d1d30e8a0ee83eb040c85a94e7b8b6541ed4058493090b44
+pip-audit==1.1.2; python_version >= "3.6" \
+    --hash=sha256:374e8528a1376145cbe0f0ec4a7b6a5ebfd6152f665d274498ea49d8bffef24c \
+    --hash=sha256:48325027b803376bee22ca273f8a1b477324c10663c6218a5acebfdc4a107328
+pip-check==2.7; python_version >= "3.5" \
+    --hash=sha256:17d1612af84fecfebdf8f8c60b9eaa9c389814a49affdcd88a1d4fd98fd17aee \
+    --hash=sha256:f14ba13b0a66cd9d4732f958fa79d0b0ed2ef7833239927ef4336266265b72fa
 platformdirs==2.4.1; python_version >= "3.7" and python_full_version >= "3.6.2" \
     --hash=sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca \
     --hash=sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda
-pluggy==1.0.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" \
+pluggy==1.0.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.7" \
     --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 \
     --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159
 pre-commit==2.16.0; python_full_version >= "3.6.1" \
@@ -775,9 +773,9 @@ pydocstyle==6.1.1; python_version >= "3.6" \
 pyflakes==2.2.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.4.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5") \
     --hash=sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92 \
     --hash=sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8
-pygments==2.11.0; sys_platform != "win32" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" or python_version < "3.9" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
-    --hash=sha256:ac8098bfc40b8e1091ad7c13490c7f4797e401d0972e8fcfadde90ffb3ed4ea9 \
-    --hash=sha256:51130f778a028f2d19c143fce00ced6f8b10f726e17599d7e91b290f6cbcda0c
+pygments==2.11.2; sys_platform != "win32" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" or python_version < "3.9" and python_version >= "3.6" and python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
+    --hash=sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65 \
+    --hash=sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a
 pyinotify==0.9.6; sys_platform == "linux" and python_version >= "3.6" \
     --hash=sha256:9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4
 pylint==2.12.2; python_full_version >= "3.6.2" \
@@ -803,9 +801,9 @@ pytest-html==3.1.1; python_version >= "3.6" \
 pytest-metadata==1.11.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" \
     --hash=sha256:71b506d49d34e539cc3cfdb7ce2c5f072bea5c953320002c95968e0238f8ecf1 \
     --hash=sha256:576055b8336dd4a9006dd2a47615f76f2f8c30ab12b1b1c039d99e834583523f
-pytest-randomly==3.10.3; python_version >= "3.6" \
-    --hash=sha256:22154cdcff7ba44e0599596490e6b75278ca973a33812ea6a54bf14d0b042ef1 \
-    --hash=sha256:b05a7a45f54cae2b5095752c6a10cb559df84448421b0420ae492dd2fb1727ef
+pytest-randomly==3.11.0; python_version >= "3.7" \
+    --hash=sha256:9f013b8c1923130f3d0a286fde56e1fc52cfb3547b8eedf2765c460cee979c7f \
+    --hash=sha256:a3c680d2b8150cf766311a80a1f92da64c3dd819045cda834fbf1b0ac4891610
 pytest-recording==0.12.0; python_version >= "3.5" \
     --hash=sha256:9039bf488f80c016055ffd039a91e33b1e89f3ee2ee0005c0bbce298fd417ee1 \
     --hash=sha256:a94b000640fe5d05b34fa9e25dca1671dd7f21195502c5f4d2f600c31dc14f7e
@@ -827,9 +825,9 @@ pytz==2021.3; python_full_version >= "3.7.1" \
 pytzdata==2020.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" \
     --hash=sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f \
     --hash=sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540
-pyupgrade==2.30.1; python_full_version >= "3.6.1" \
-    --hash=sha256:803c4e7631f0596e5d991b671014ce8f4f1e76b52b27dca11ea8bf0110808dfa \
-    --hash=sha256:dc38f1613c50fd7baae3475f2afa5b8c933709df619494dd98773e91a5a2755e
+pyupgrade==2.31.0; python_full_version >= "3.6.1" \
+    --hash=sha256:0a62c5055f854d7f36e155b7ee8920561bf0399c53edd975cf02436eef8937fc \
+    --hash=sha256:80e2308cae2b11c3fdd091137495d99abf7e0cd98b501aa5758974991497c24c
 pyyaml-env-tag==0.1; python_version >= "3.6" \
     --hash=sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069 \
     --hash=sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb
@@ -869,16 +867,16 @@ questionary==1.10.0; python_version >= "3.6" and python_version < "4.0" and pyth
 radon==5.1.0 \
     --hash=sha256:fa74e018197f1fcb54578af0f675d8b8e2342bd8e0b72bef8197bc4c9e645f36 \
     --hash=sha256:cb1d8752e5f862fb9e20d82b5f758cbc4fb1237c92c9a66450ea0ea7bf29aeee
-requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0") \
-    --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \
-    --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7
+requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0") \
+    --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d \
+    --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61
 requirements-parser==0.3.1; python_version >= "3.7" and python_version < "4.0" \
     --hash=sha256:3852277618e653dd1d8fa4129e59b4338358dffafeb3d5106e9f88504db9c460 \
     --hash=sha256:cb9458bf5544af9a141eb170dd91e03564b7a78eb36b14437a73b6f38a96ab23
 resolvelib==0.8.1; python_version >= "3.6" \
     --hash=sha256:d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98 \
     --hash=sha256:c6ea56732e9fb6fca1b2acc2ccc68a0b6b8c566d8f3e78e0443310ede61dbd37
-six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.6" and python_version < "4" and python_full_version >= "3.3.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") \
+six==1.16.0; python_full_version >= "3.7.1" and python_version >= "3.6" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_version >= "3.7" and python_version < "4" and python_full_version >= "3.3.0") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5") and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0") \
     --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 \
     --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926
 smmap==5.0.0; python_version >= "3.7" \
@@ -903,13 +901,16 @@ tabulate==0.8.9 \
     --hash=sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7
 termcolor==1.1.0; python_full_version >= "3.6.2" and python_full_version < "4.0.0" \
     --hash=sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b
+terminaltables==3.1.10; python_version >= "3.5" \
+    --hash=sha256:e4fdc4179c9e4aab5f674d80f09d76fa436b96fdc698a8505e0a36bf0804a874 \
+    --hash=sha256:ba6eca5cb5ba02bba4c9f4f985af80c54ec3dccf94cfcd190154386255e47543
 testfixtures==6.18.3 \
     --hash=sha256:6ddb7f56a123e1a9339f130a200359092bd0a6455e31838d6c477e8729bb7763 \
     --hash=sha256:2600100ae96ffd082334b378e355550fef8b4a529a6fa4c34f47130905c7426d
 tokenize-rt==4.2.1; python_full_version >= "3.6.1" \
     --hash=sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8 \
     --hash=sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94
-toml==0.10.2; python_full_version >= "3.6.2" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.3.0") \
+toml==0.10.2; python_full_version >= "3.6.2" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.3.0") \
     --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
     --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
 tomli==2.0.0; python_version >= "3.7" \
@@ -963,24 +964,24 @@ tornado==6.1; python_version >= "3.5" \
 transitions==0.8.10 \
     --hash=sha256:2e9de3c453fafe3a8afef2c2bdc47e30a7a73e32d88f793ad4c1b6246f0cc364 \
     --hash=sha256:b0385975a842e885c1a55c719d2f90164471665794d39d51f9eb3f11e1d9c8ac
-types-setuptools==57.4.5; python_version >= "3.7" and python_version < "4.0" \
-    --hash=sha256:a4600efdca68a33204ad9c083fd9966d63aee61a7d007e912b6afc6ff57d6e02 \
-    --hash=sha256:920a7c1ee120025e939a1707f8fd09a1266edbf7848eae7b8de7c5909a824cc8
-types-toml==0.10.1; python_version >= "3.6" and python_version < "4.0" \
-    --hash=sha256:5c1f8f8d57692397c8f902bf6b4d913a0952235db7db17d2908cc110e70610cb \
-    --hash=sha256:8cdfd2b7c89bed703158b042dd5cf04255dae77096db66f4a12ca0a93ccb07a5
-typing-extensions==4.0.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.7" and python_version < "3.10" \
+types-setuptools==57.4.7; python_version >= "3.7" and python_version < "4.0" \
+    --hash=sha256:9677d969b00ec1c14552f5be2b2b47a6fbea4d0ed4de0fdcee18abdaa0cc9267 \
+    --hash=sha256:ffda504687ea02d4b7751c0d1df517fbbcdc276836d90849e4f1a5f1ccd79f01
+types-toml==0.10.3; python_version >= "3.6" and python_version < "4.0" \
+    --hash=sha256:215a7a79198651ec5bdfd66193c1e71eb681a42f3ef7226c9af3123ced62564a \
+    --hash=sha256:988457744d9774d194e3539388772e3a685d8057b7c4a89407afeb0a6cbd1b14
+typing-extensions==4.0.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and python_version >= "3.6" and python_version < "3.10" \
     --hash=sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b \
     --hash=sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e
-urllib3==1.26.7; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \
-    --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844 \
-    --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece
+urllib3==1.26.8; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" \
+    --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \
+    --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c
 vcrpy==4.1.1; python_version >= "3.5" \
     --hash=sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162 \
     --hash=sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599
-virtualenv==20.11.2; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" \
-    --hash=sha256:efd556cec612fd826dc7ef8ce26a6e4ba2395f494244919acd135fb5ceffa809 \
-    --hash=sha256:7f9e9c2e878d92a434e760058780b8d67a7c5ec016a66784fe4b0d5e50a4eb5c
+virtualenv==20.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" \
+    --hash=sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09 \
+    --hash=sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd
 vulture==2.3; python_version >= "3.6" \
     --hash=sha256:f39de5e6f1df1f70c3b50da54f1c8d494159e9ca3d01a9b89eac929600591703 \
     --hash=sha256:03d5a62bcbe9ceb9a9b0575f42d71a2d414070229f2e6f95fa6e7c71aaaed967
@@ -1019,7 +1020,7 @@ win32-setctime==1.0.4; sys_platform == "win32" and python_version >= "3.5" \
     --hash=sha256:2b72b798fdc1d909fb3cc0d25e0be52a42f4848857e3588dd3947c6a18b42609
 wmctrl==0.4; sys_platform != "win32" or python_version < "3.9" \
     --hash=sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0
-wrapt==1.13.3; python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.2" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") \
+wrapt==1.13.3; python_full_version >= "3.6.2" and python_version >= "3.5" \
     --hash=sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a \
     --hash=sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489 \
     --hash=sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909 \


Test patch:
diff --git a/tests/test_doit_tasks/test_lint.py b/tests/test_doit_tasks/test_lint.py
index b32b8d07..f927f003 100644
--- a/tests/test_doit_tasks/test_lint.py
+++ b/tests/test_doit_tasks/test_lint.py
@@ -133,8 +133,7 @@ def test_task_pre_commit_hooks():
     result = task_pre_commit_hooks()
 
     actions = result['actions']
-    assert len(actions) == 4
-    assert 'poetry run pre-commit autoupdate' in str(actions[1])
-    install_cmd = 'poetry run pre-commit install --install-hooks --hook-type commit-msg --hook-type pre-push'
-    assert install_cmd in str(actions[2])
-    assert 'poetry run pre-commit run --all-files' in str(actions[3])
+    assert len(actions) == 3
+    assert 'pre-commit install' in str(actions[0])
+    assert 'pre-commit autoupdate' in str(actions[1])
+    assert 'pre-commit run --all-files' in str(actions[2])
diff --git a/tests/test_doit_tasks/test_packaging.py b/tests/test_doit_tasks/test_packaging.py
index 68380877..ff2bc307 100644
--- a/tests/test_doit_tasks/test_packaging.py
+++ b/tests/test_doit_tasks/test_packaging.py
@@ -146,4 +146,4 @@ def test_task_check_for_stale_packages():
     assert actions[0][1][0].name == 'poetry.lock'
     assert actions[0][1][1].name == _PATH_PACK_LOCK.name
     assert actions[0][2] == {'stale_months': 48}
-    assert 'poetry run pip list --outdated' in str(actions[1])
+    assert 'poetry run pip-check' in str(actions[1])