Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pipenv2020 can not lock local dependencies #4235

Closed
ingwinlu opened this issue May 4, 2020 · 16 comments
Closed

pipenv2020 can not lock local dependencies #4235

ingwinlu opened this issue May 4, 2020 · 16 comments
Labels
Category: Dependency Resolution Issue relates to dependency resolution. Category: VCS Relates to version control system dependencies. Priority: Medium This item is medium priority and will be resolved whenever possible. Type: Possible Bug This issue describes a possible bug in pipenv.

Comments

@ingwinlu
Copy link

ingwinlu commented May 4, 2020

Issue description

The issue is occuring with the current prerelease version but does not occur with pipenv2018.

When running pipenv update or pipenv lock pipenv fails to "find a version that matches adplib". Adplib is a shared library we added via pipenv install -e ./../adplib resulting in the following Pipfile entry:
adplib = {editable = true, path = "./../adplib"}

Adplib itself is included in our git repository as a submodule as multiple repos reuse it.

Expected result

Lock succeeds.

Actual result

 ~/projects/customer/project/umbrella/adpservice/adpservice git: ✗ pipenv update --dev --verbose   
Running $ pipenv lock then $ pipenv sync.
Locking [dev-packages] dependencies…
✘ Locking Failed! 
                          ROUND 1                           
Current constraints:
  adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
  attrs (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 9))
  everett[yaml] (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 12))
  filetype (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 21))
  flake8-import-order (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 19))
  graypy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 8))
  hypothesis (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 20))
  kombu (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 6))
  loguru (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 17))
  mypy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 14))
  numpy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 4))
  pdf2image (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 15))
  pillow (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 13))
  pytest (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 2))
  pytest-cov (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 11))
  pytest-flake8 (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 16))
  pytest-xdist (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 3))
  s3fs<0.3.0 (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 18))
  scikit-image (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 5))
  sphinx (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 10))

Finding the best candidates:
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 807, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 180, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 260, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 260, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 320, in get_best_match
    ireq, prereleases=self.prereleases
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 202, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 807, in <module>
    main()
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 803, in main
    parsed.requirements_dir, parsed.packages, parse_only=parsed.parse_only)
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 785, in _main
    resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 753, in resolve_packages
    requirements_dir=requirements_dir,
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 736, in resolve
    req_dir=requirements_dir
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 1379, in resolve_deps
    req_dir=req_dir,
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 1086, in actually_resolve_deps
    resolver.resolve()
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 817, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: Could not find a version that matches adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
No versions found
Was https://pypi.org/simple reachable?
ROUND 1                           
Current constraints:
  adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
  attrs (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 9))
  everett[yaml] (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 12))
  filetype (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 21))
  flake8-import-order (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 19))
  graypy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 8))
  hypothesis (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 20))
  kombu (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 6))
  loguru (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 17))
  mypy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 14))
  numpy (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 4))
  pdf2image (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 15))
  pillow (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 13))
  pytest (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 2))
  pytest-cov (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 11))
  pytest-flake8 (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 16))
  pytest-xdist (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 3))
  s3fs<0.3.0 (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 18))
  scikit-image (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 5))
  sphinx (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 10))

Finding the best candidates:
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 807, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 180, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 260, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 260, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/resolver.py", line 320, in get_best_match
    ireq, prereleases=self.prereleases
  File "/usr/lib/python3.8/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 202, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 807, in <module>
    main()
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 803, in main
    parsed.requirements_dir, parsed.packages, parse_only=parsed.parse_only)
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 785, in _main
    resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 753, in resolve_packages
    requirements_dir=requirements_dir,
  File "/usr/lib/python3.8/site-packages/pipenv/resolver.py", line 736, in resolve
    req_dir=requirements_dir
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 1379, in resolve_deps
    req_dir=req_dir,
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 1086, in actually_resolve_deps
    resolver.resolve()
  File "/usr/lib/python3.8/site-packages/pipenv/utils.py", line 817, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: Could not find a version that matches adplib (from -r /tmp/pipenv8xppx_ghrequirements/pipenv-b6r3d5nv-constraints.txt (line 7))
No versions found
Was https://pypi.org/simple reachable?

Steps to replicate

Not sure exactly where to go on from here. I remember reading about changes to locking with regards to vcs dependencies.


$ pipenv --support

Pipenv version: '2020.4.1b1'

Pipenv location: '/usr/lib/python3.8/site-packages/pipenv'

Python location: '/usr/bin/python'

Python installations found:

  • 3.8.2: /usr/bin/python3
  • 3.8.2: /usr/bin/python3.8
  • 3.7.6: /usr/bin/python3.7
  • 3.7.6: /usr/bin/python3.7m
  • 3.7.6: /home/winlu/.pyenv/versions/3.7.6/bin/python3.7
  • 3.7.5: /home/winlu/.pyenv/versions/3.7.5/bin/python3.7
  • 3.6.9: /usr/bin/python3.6m
  • 3.6.9: /usr/bin/python3.6
  • 3.6.9: /home/winlu/.pyenv/versions/3.6.9/bin/python3.6m
  • 2.7.18: /usr/bin/python2.7
  • 2.7.18: /usr/bin/python2

PEP 508 Information:

{'implementation_name': 'cpython',
 'implementation_version': '3.8.2',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '5.6.7-arch1-1',
 'platform_system': 'Linux',
 'platform_version': '#1 SMP PREEMPT Thu, 23 Apr 2020 09:13:56 +0000',
 'python_full_version': '3.8.2',
 'python_version': '3.8',
 'sys_platform': 'linux'}

System environment variables:

  • SHELL
  • XDG_SESSION_PATH
  • I3SOCK
  • GRADLE_HOME
  • DESKTOP_SESSION
  • GTK_MODULES
  • XDG_SEAT
  • PWD
  • XDG_SESSION_DESKTOP
  • LOGNAME
  • XDG_SESSION_TYPE
  • XAUTHORITY
  • DESKTOP_STARTUP_ID
  • HOME
  • LANG
  • XDG_CURRENT_DESKTOP
  • XDG_SEAT_PATH
  • XDG_SESSION_CLASS
  • USER
  • PAM_KWALLET5_LOGIN
  • DISPLAY
  • SHLVL
  • XDG_VTNR
  • XDG_SESSION_ID
  • MOZ_PLUGIN_PATH
  • XDG_RUNTIME_DIR
  • PATH
  • DBUS_SESSION_BUS_ADDRESS
  • HG
  • MAIL
  • OLDPWD
  • WINDOWID
  • COLORFGBG
  • COLORTERM
  • TERM
  • ZSH
  • PAGER
  • LESS
  • LSCOLORS
  • LS_COLORS
  • SSH_AUTH_SOCK
  • SSH_AGENT_PID
  • PYENV_SHELL
  • _
  • PIP_DISABLE_PIP_VERSION_CHECK
  • PYTHONDONTWRITEBYTECODE
  • PIP_SHIMS_BASE_MODULE
  • PIP_PYTHON_PATH
  • PYTHONFINDER_IGNORE_UNSUPPORTED

Pipenv–specific environment variables:

Debug–specific environment variables:

  • PATH: /home/winlu/bin:/home/winlu/.pyenv/shims:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
  • SHELL: /bin/zsh
  • LANG: en_GB.UTF-8
  • PWD: /home/winlu/projects/customer/project/umbrella/adpservice/adpservice

Contents of Pipfile ('/home/winlu/projects/customer/project/umbrella/adpservice/adpservice/Pipfile'):

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
adplib = {editable = true, extras = ["dev"], path = "./../adplib"}
adpservice = {editable = true,extras = ["dev"],path = "."}

[packages]
adplib = {editable = true,path = "./../adplib"}
adpservice = {editable = true,path = "."}

[requires]
python_version = "3.6"

Contents of Pipfile.lock ('/home/winlu/projects/customer/project/umbrella/adpservice/adpservice/Pipfile.lock'):

{
    "_meta": {
        "hash": {
            "sha256": "c00533bcf98b3a5bb85a18e997c5fa3eeaaa5e73cf681b89b9da30e2d75dd585"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "adplib": {
            "editable": true,
            "path": "./../adplib"
        },
        "adpservice": {
            "editable": true,
            "path": "."
        },
        "aiocontextvars": {
            "hashes": [
                "sha256:885daf8261818767d8f7cbd79f9d4482d118f024b6586ef6e67980236a27bfa3",
                "sha256:f027372dc48641f683c559f247bd84962becaacdc9ba711d583c3871fb5652aa"
            ],
            "markers": "python_version < '3.7'",
            "version": "==0.2.2"
        },
        "amqp": {
            "hashes": [
                "sha256:6e649ca13a7df3faacdc8bbb280aa9a6602d22fd9d545336077e573a1f4ff3b8",
                "sha256:77f1aef9410698d20eaeac5b73a87817365f457a507d82edf292e12cbb83b08d"
            ],
            "version": "==2.5.2"
        },
        "attrs": {
            "hashes": [
                "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
                "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
            ],
            "version": "==19.3.0"
        },
        "boto3": {
            "hashes": [
                "sha256:39ef75f1351d9dce9542c71602bbe4dbae001df1aa5c75bdacea933d60cc1e7f",
                "sha256:d345f2ba820f022ab45627913cb427b1fa56d7c1f8e19312eee20874ba800007"
            ],
            "version": "==1.12.48"
        },
        "botocore": {
            "hashes": [
                "sha256:ef4fa3055421cb95a7bf559e715f8c5f656aca30fafef070eca21b13ca3f0f81",
                "sha256:f3569216d2f0067a34608e26ae1d0035b84fa29ad68d6c5fd26124a4cc86e8c9"
            ],
            "version": "==1.15.48"
        },
        "contextvars": {
            "hashes": [
                "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"
            ],
            "markers": "python_version < '3.7'",
            "version": "==2.4"
        },
        "cycler": {
            "hashes": [
                "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
                "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
            ],
            "version": "==0.10.0"
        },
        "decorator": {
            "hashes": [
                "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
                "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
            ],
            "version": "==4.4.2"
        },
        "docutils": {
            "hashes": [
                "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
                "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
                "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
            ],
            "version": "==0.15.2"
        },
        "everett": {
            "extras": [
                "yaml"
            ],
            "hashes": [
                "sha256:66c7991c056fd9b1de54c29e2b5004a30209530faef698d6ecfbf24bfbbdd1fb",
                "sha256:8a5ee8cdde0ed6b3bbb63249e0e0703d4ad91921107ff198e0868ffce5f7b6bc"
            ],
            "version": "==1.0.2"
        },
        "filetype": {
            "hashes": [
                "sha256:353369948bb1c09b8b3ea3d78390b5586e9399bff9aab894a1dff954e31a66f6",
                "sha256:da393ece8d98b47edf2dd5a85a2c8733e44b769e32c71af4cd96ed8d38d96aa7"
            ],
            "version": "==1.0.7"
        },
        "graypy": {
            "hashes": [
                "sha256:5df0102ed52fdaa24dd579bc1e4904480c2c9bbb98917a0b3241ecf510c94207",
                "sha256:fd8dc4a721de1278576d92db10ac015e99b4e480cf1b18892e79429fd9236e16"
            ],
            "version": "==2.1.0"
        },
        "imageio": {
            "hashes": [
                "sha256:1e4ab29b3775bb093c7a35854a0412857145450183344678829b30e72263b001",
                "sha256:fb5fd6d3d17126bbaac9af29fe340e2c97a196eb9416d4f28c0e543744a152cf"
            ],
            "version": "==2.8.0"
        },
        "immutables": {
            "hashes": [
                "sha256:19b643fb078b45bb5669786140427acbbbd21c3312c44a6297718ca97bf00c38",
                "sha256:2ab6887146dd1a1eba32de23929d41b4e10761923846ee90500d3cf78de7b26f",
                "sha256:30726e341c067dc62bee6de4513189a82090fda18192629b458ecec6e596d2a5",
                "sha256:3cd38a96455000c481f94b7fb28fe4971dc4250c7dd34c0c8da53011d0efbb1c",
                "sha256:3cf3b047e99ad7d30b0dc0f35bd2318220cb950d61d299faccf7d91982f240c6",
                "sha256:5d9e9059e8587ba47af8e110eea962975d90e57c6fb8e09b6bbac18bd4c5d624",
                "sha256:901479aa842837550d04486adc26096089aba2d78cb4c62179d8397434b3a2a2",
                "sha256:a294c5c04a3a8adf324c26d842d2baf199cc50d9abe9e63200d8f3400f26543b",
                "sha256:ac6237425e9fa87e15f5afca3d358ad4c3f222245950ee4041ca1b0f7ec9288a",
                "sha256:d1ee0e401e52a3d9c121e4e68e1f6548c9fab44e8f8eda0cafe29478213924a8",
                "sha256:e6708f708baa6b21b400d9c637e51d827a58f34d200bb0a81f697b7ee25115a8",
                "sha256:f75e7a65be68eb71f818a13a7a9728d26f4e19f7ea865b78d300b635ffadcbc1"
            ],
            "version": "==0.12"
        },
        "importlib-metadata": {
            "hashes": [
                "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
                "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
            ],
            "markers": "python_version < '3.8'",
            "version": "==1.6.0"
        },
        "jmespath": {
            "hashes": [
                "sha256:695cb76fa78a10663425d5b73ddc5714eb711157e52704d69be03b1a02ba4fec",
                "sha256:cca55c8d153173e21baa59983015ad0daf603f9cb799904ff057bfb8ff8dc2d9"
            ],
            "version": "==0.9.5"
        },
        "kiwisolver": {
            "hashes": [
                "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c",
                "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd",
                "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f",
                "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74",
                "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1",
                "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c",
                "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec",
                "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b",
                "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7",
                "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113",
                "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec",
                "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf",
                "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e",
                "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657",
                "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8",
                "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2"
            ],
            "version": "==1.2.0"
        },
        "kombu": {
            "hashes": [
                "sha256:2d1cda774126a044d91a7ff5fa6d09edf99f46924ab332a810760fe6740e9b76",
                "sha256:598e7e749d6ab54f646b74b2d2df67755dee13894f73ab02a2a9feb8870c7cb2"
            ],
            "version": "==4.6.8"
        },
        "loguru": {
            "hashes": [
                "sha256:074b3caa6748452c1e4f2b302093c94b65d5a4c5a4d7743636b4121e06437b0e",
                "sha256:a6101fd435ac89ba5205a105a26a6ede9e4ddbb4408a6e167852efca47806d11"
            ],
            "version": "==0.4.1"
        },
        "matplotlib": {
            "hashes": [
                "sha256:2466d4dddeb0f5666fd1e6736cc5287a4f9f7ae6c1a9e0779deff798b28e1d35",
                "sha256:282b3fc8023c4365bad924d1bb442ddc565c2d1635f210b700722776da466ca3",
                "sha256:4bb50ee4755271a2017b070984bcb788d483a8ce3132fab68393d1555b62d4ba",
                "sha256:56d3147714da5c7ac4bc452d041e70e0e0b07c763f604110bd4e2527f320b86d",
                "sha256:7a9baefad265907c6f0b037c8c35a10cf437f7708c27415a5513cf09ac6d6ddd",
                "sha256:aae7d107dc37b4bb72dcc45f70394e6df2e5e92ac4079761aacd0e2ad1d3b1f7",
                "sha256:af14e77829c5b5d5be11858d042d6f2459878f8e296228c7ea13ec1fd308eb68",
                "sha256:c1cf735970b7cd424502719b44288b21089863aaaab099f55e0283a721aaf781",
                "sha256:ce378047902b7a05546b6485b14df77b2ff207a0054e60c10b5680132090c8ee",
                "sha256:d35891a86a4388b6965c2d527b9a9f9e657d9e110b0575ca8a24ba0d4e34b8fc",
                "sha256:e06304686209331f99640642dee08781a9d55c6e32abb45ed54f021f46ccae47",
                "sha256:e20ba7fb37d4647ac38f3c6d8672dd8b62451ee16173a0711b37ba0ce42bf37d",
                "sha256:f4412241e32d0f8d3713b68d3ca6430190a5e8a7c070f1c07d7833d8c5264398",
                "sha256:ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee"
            ],
            "version": "==3.2.1"
        },
        "more-itertools": {
            "hashes": [
                "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
                "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
            ],
            "version": "==8.2.0"
        },
        "networkx": {
            "hashes": [
                "sha256:cdfbf698749a5014bf2ed9db4a07a5295df1d3a53bf80bf3cbd61edf9df05fa1",
                "sha256:f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64"
            ],
            "version": "==2.4"
        },
        "numpy": {
            "hashes": [
                "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee",
                "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56",
                "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c",
                "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44",
                "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f",
                "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa",
                "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c",
                "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d",
                "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379",
                "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e",
                "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921",
                "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970",
                "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027",
                "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689",
                "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36",
                "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68",
                "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8",
                "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b",
                "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3",
                "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3",
                "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b"
            ],
            "version": "==1.18.3"
        },
        "packaging": {
            "hashes": [
                "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
                "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
            ],
            "version": "==20.3"
        },
        "pdf2image": {
            "hashes": [
                "sha256:a0d9906f5507192210a8d5d7ead63145e9dec4bccc4564b1fb644e923913c31c"
            ],
            "version": "==1.12.1"
        },
        "pillow": {
            "hashes": [
                "sha256:04766c4930c174b46fd72d450674612ab44cca977ebbcc2dde722c6933290107",
                "sha256:0e2a3bceb0fd4e0cb17192ae506d5f082b309ffe5fc370a5667959c9b2f85fa3",
                "sha256:0f01e63c34f0e1e2580cc0b24e86a5ccbbfa8830909a52ee17624c4193224cd9",
                "sha256:12e4bad6bddd8546a2f9771485c7e3d2b546b458ae8ff79621214119ac244523",
                "sha256:1f694e28c169655c50bb89a3fa07f3b854d71eb47f50783621de813979ba87f3",
                "sha256:3d25dd8d688f7318dca6d8cd4f962a360ee40346c15893ae3b95c061cdbc4079",
                "sha256:4b02b9c27fad2054932e89f39703646d0c543f21d3cc5b8e05434215121c28cd",
                "sha256:9744350687459234867cbebfe9df8f35ef9e1538f3e729adbd8fde0761adb705",
                "sha256:a0b49960110bc6ff5fead46013bcb8825d101026d466f3a4de3476defe0fb0dd",
                "sha256:ae2b270f9a0b8822b98655cb3a59cdb1bd54a34807c6c56b76dd2e786c3b7db3",
                "sha256:b37bb3bd35edf53125b0ff257822afa6962649995cbdfde2791ddb62b239f891",
                "sha256:b532bcc2f008e96fd9241177ec580829dee817b090532f43e54074ecffdcd97f",
                "sha256:b67a6c47ed963c709ed24566daa3f95a18f07d3831334da570c71da53d97d088",
                "sha256:b943e71c2065ade6fef223358e56c167fc6ce31c50bc7a02dd5c17ee4338e8ac",
                "sha256:ccc9ad2460eb5bee5642eaf75a0438d7f8887d484490d5117b98edd7f33118b7",
                "sha256:d23e2aa9b969cf9c26edfb4b56307792b8b374202810bd949effd1c6e11ebd6d",
                "sha256:eaa83729eab9c60884f362ada982d3a06beaa6cc8b084cf9f76cae7739481dfa",
                "sha256:ee94fce8d003ac9fd206496f2707efe9eadcb278d94c271f129ab36aa7181344",
                "sha256:f455efb7a98557412dc6f8e463c1faf1f1911ec2432059fa3e582b6000fc90e2",
                "sha256:f46e0e024346e1474083c729d50de909974237c72daca05393ee32389dabe457",
                "sha256:f54be399340aa602066adb63a86a6a5d4f395adfdd9da2b9a0162ea808c7b276",
                "sha256:f784aad988f12c80aacfa5b381ec21fd3f38f851720f652b9f33facc5101cf4d"
            ],
            "version": "==7.1.2"
        },
        "pluggy": {
            "hashes": [
                "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
                "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
            ],
            "version": "==0.13.1"
        },
        "py": {
            "hashes": [
                "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
                "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
            ],
            "version": "==1.8.1"
        },
        "pyparsing": {
            "hashes": [
                "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
                "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
            ],
            "version": "==2.4.7"
        },
        "pytest": {
            "hashes": [
                "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172",
                "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"
            ],
            "version": "==5.4.1"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "version": "==2.8.1"
        },
        "pywavelets": {
            "hashes": [
                "sha256:076ca8907001fdfe4205484f719d12b4a0262dfe6652fa1cfc3c5c362d14dc84",
                "sha256:18a51b3f9416a2ae6e9a35c4af32cf520dd7895f2b69714f4aa2f4342fca47f9",
                "sha256:1a64b40f6acb4ffbaccce0545d7fc641744f95351f62e4c6aaa40549326008c9",
                "sha256:35959c041ec014648575085a97b498eafbbaa824f86f6e4a59bfdef8a3fe6308",
                "sha256:55e39ec848ceec13c9fa1598253ae9dd5c31d09dfd48059462860d2b908fb224",
                "sha256:6162dc0ae04669ea04b4b51420777b9ea2d30b0a9d02901b2a3b4d61d159c2e9",
                "sha256:68b5c33741d26c827074b3d8f0251de1c3019bb9567b8d303eb093c822ce28f1",
                "sha256:720dbcdd3d91c6dfead79c80bf8b00a1d8aa4e5d551dc528c6d5151e4efc3403",
                "sha256:7947e51ca05489b85928af52a34fe67022ab5b81d4ae32a4109a99e883a0635e",
                "sha256:79f5b54f9dc353e5ee47f0c3f02bebd2c899d49780633aa771fed43fa20b3149",
                "sha256:80b924edbc012ded8aa8b91cb2fd6207fb1a9a3a377beb4049b8a07445cec6f0",
                "sha256:889d4c5c5205a9c90118c1980df526857929841df33e4cd1ff1eff77c6817a65",
                "sha256:935ff247b8b78bdf77647fee962b1cc208c51a7b229db30b9ba5f6da3e675178",
                "sha256:98b2669c5af842a70cfab33a7043fcb5e7535a690a00cd251b44c9be0be418e5",
                "sha256:9e2528823ccf5a0a1d23262dfefe5034dce89cd84e4e124dc553dfcdf63ebb92",
                "sha256:bc5e87b72371da87c9bebc68e54882aada9c3114e640de180f62d5da95749cd3",
                "sha256:be105382961745f88d8196bba5a69ee2c4455d87ad2a2e5d1eed6bd7fda4d3fd",
                "sha256:c06d2e340c7bf8b9ec71da2284beab8519a3908eab031f4ea126e8ccfc3fd567",
                "sha256:cfe79844526dd92e3ecc9490b5031fca5f8ab607e1e858feba232b1b788ff0ea",
                "sha256:d510aef84d9852653d079c84f2f81a82d5d09815e625f35c95714e7364570ad4",
                "sha256:e02a0558e0c2ac8b8bbe6a6ac18c136767ec56b96a321e0dfde2173adfa5a504"
            ],
            "version": "==1.1.1"
        },
        "pyyaml": {
            "hashes": [
                "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97",
                "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76",
                "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2",
                "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648",
                "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf",
                "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f",
                "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2",
                "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee",
                "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d",
                "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c",
                "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"
            ],
            "version": "==5.3.1"
        },
        "s3fs": {
            "hashes": [
                "sha256:dcd32e77efc4838474317fcef31a72891c51043c7807fca59c035003876f7bd0"
            ],
            "version": "==0.2.2"
        },
        "s3transfer": {
            "hashes": [
                "sha256:2482b4259524933a022d59da830f51bd746db62f047d6eb213f2f8855dcb8a13",
                "sha256:921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db"
            ],
            "version": "==0.3.3"
        },
        "scikit-image": {
            "hashes": [
                "sha256:063d1c20fcd53762f82ee58c29783ae4e8f6fbed445b41b704fa33b6f355729d",
                "sha256:0715b7940778ba5d73da3908d60ddf2eb93863f7c394493a522fe56d3859295c",
                "sha256:0808ab5f8218d91a1c008036993636535a37efd67a52ab0f2e6e3f4b7e75aeda",
                "sha256:2a54bea469eb1b611bee1ce36e60710f5f94f29205bc5bd67a51793909b1e62b",
                "sha256:2aa962aa82d815606d7dad7f045f5d7ca55c65b4320d47e15a98fc92612c2d6c",
                "sha256:2d346d49b6852cffb47cbde995e2696d5b07f688d8c057a0a4548abf3a98f920",
                "sha256:3ad2efa792ab8de5fcefe6f4f5bc1ab64c411cdb5c829ce1526ab3a5a7729627",
                "sha256:3af3d781ce085573ced37b2b5b9abfd32ce3d4723bd17f37e829025d189b0421",
                "sha256:41e28db0136f29ecd305bef0408fdfc64be9d415e54f5099a95555c65f5c1865",
                "sha256:6786b127f33470fd843e644435522fbf43bce05c9f5527946c390ccb9e1cac27",
                "sha256:8b2b768b02c6b7476f2e16ddd91f827d3817aef73f82cf28bff7a8dcdfd8c55c",
                "sha256:a48fb0d34a090b578b87ffebab0fe035295c1945dbc2b28e1a55ea2cf6031751",
                "sha256:dd7fbd32da74d4e9967dc15845f731f16e7966cee61f5dc0e12e2abb1305068c",
                "sha256:e18d73cc8893e2268b172c29f9aab530faf8cd3b7c11ae0bee3e763d719d35c5",
                "sha256:e774377876cb258e8f4d63f7809863f961c98aa02263b3ff54a39483bc6f7d26"
            ],
            "version": "==0.16.2"
        },
        "scipy": {
            "hashes": [
                "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4",
                "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7",
                "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70",
                "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb",
                "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073",
                "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa",
                "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be",
                "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802",
                "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d",
                "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6",
                "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9",
                "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8",
                "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672",
                "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0",
                "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802",
                "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408",
                "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d",
                "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59",
                "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088",
                "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521",
                "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59"
            ],
            "version": "==1.4.1"
        },
        "six": {
            "hashes": [
                "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
                "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
            ],
            "version": "==1.14.0"
        },
        "urllib3": {
            "hashes": [
                "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
                "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
            ],
            "markers": "python_version != '3.4'",
            "version": "==1.25.9"
        },
        "vine": {
            "hashes": [
                "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87",
                "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af"
            ],
            "version": "==1.3.0"
        },
        "wcwidth": {
            "hashes": [
                "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
                "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
            ],
            "version": "==0.1.9"
        },
        "zipp": {
            "hashes": [
                "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
                "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
            ],
            "version": "==3.1.0"
        }
    },
    "develop": {
        "adplib": {
            "editable": true,
            "path": "./../adplib"
        },
        "adpservice": {
            "editable": true,
            "path": "."
        },
        "aiocontextvars": {
            "hashes": [
                "sha256:885daf8261818767d8f7cbd79f9d4482d118f024b6586ef6e67980236a27bfa3",
                "sha256:f027372dc48641f683c559f247bd84962becaacdc9ba711d583c3871fb5652aa"
            ],
            "markers": "python_version < '3.7'",
            "version": "==0.2.2"
        },
        "alabaster": {
            "hashes": [
                "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
                "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
            ],
            "version": "==0.7.12"
        },
        "amqp": {
            "hashes": [
                "sha256:6e649ca13a7df3faacdc8bbb280aa9a6602d22fd9d545336077e573a1f4ff3b8",
                "sha256:77f1aef9410698d20eaeac5b73a87817365f457a507d82edf292e12cbb83b08d"
            ],
            "version": "==2.5.2"
        },
        "apipkg": {
            "hashes": [
                "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6",
                "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"
            ],
            "version": "==1.5"
        },
        "attrs": {
            "hashes": [
                "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
                "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
            ],
            "version": "==19.3.0"
        },
        "babel": {
            "hashes": [
                "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38",
                "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"
            ],
            "version": "==2.8.0"
        },
        "boto3": {
            "hashes": [
                "sha256:39ef75f1351d9dce9542c71602bbe4dbae001df1aa5c75bdacea933d60cc1e7f",
                "sha256:d345f2ba820f022ab45627913cb427b1fa56d7c1f8e19312eee20874ba800007"
            ],
            "version": "==1.12.48"
        },
        "botocore": {
            "hashes": [
                "sha256:ef4fa3055421cb95a7bf559e715f8c5f656aca30fafef070eca21b13ca3f0f81",
                "sha256:f3569216d2f0067a34608e26ae1d0035b84fa29ad68d6c5fd26124a4cc86e8c9"
            ],
            "version": "==1.15.48"
        },
        "certifi": {
            "hashes": [
                "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304",
                "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519"
            ],
            "version": "==2020.4.5.1"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "version": "==3.0.4"
        },
        "contextvars": {
            "hashes": [
                "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"
            ],
            "markers": "python_version < '3.7'",
            "version": "==2.4"
        },
        "coverage": {
            "hashes": [
                "sha256:00f1d23f4336efc3b311ed0d807feb45098fc86dee1ca13b3d6768cdab187c8a",
                "sha256:01333e1bd22c59713ba8a79f088b3955946e293114479bbfc2e37d522be03355",
                "sha256:0cb4be7e784dcdc050fc58ef05b71aa8e89b7e6636b99967fadbdba694cf2b65",
                "sha256:0e61d9803d5851849c24f78227939c701ced6704f337cad0a91e0972c51c1ee7",
                "sha256:1601e480b9b99697a570cea7ef749e88123c04b92d84cedaa01e117436b4a0a9",
                "sha256:2742c7515b9eb368718cd091bad1a1b44135cc72468c731302b3d641895b83d1",
                "sha256:2d27a3f742c98e5c6b461ee6ef7287400a1956c11421eb574d843d9ec1f772f0",
                "sha256:402e1744733df483b93abbf209283898e9f0d67470707e3c7516d84f48524f55",
                "sha256:5c542d1e62eece33c306d66fe0a5c4f7f7b3c08fecc46ead86d7916684b36d6c",
                "sha256:5f2294dbf7875b991c381e3d5af2bcc3494d836affa52b809c91697449d0eda6",
                "sha256:6402bd2fdedabbdb63a316308142597534ea8e1895f4e7d8bf7476c5e8751fef",
                "sha256:66460ab1599d3cf894bb6baee8c684788819b71a5dc1e8fa2ecc152e5d752019",
                "sha256:782caea581a6e9ff75eccda79287daefd1d2631cc09d642b6ee2d6da21fc0a4e",
                "sha256:79a3cfd6346ce6c13145731d39db47b7a7b859c0272f02cdb89a3bdcbae233a0",
                "sha256:7a5bdad4edec57b5fb8dae7d3ee58622d626fd3a0be0dfceda162a7035885ecf",
                "sha256:8fa0cbc7ecad630e5b0f4f35b0f6ad419246b02bc750de7ac66db92667996d24",
                "sha256:a027ef0492ede1e03a8054e3c37b8def89a1e3c471482e9f046906ba4f2aafd2",
                "sha256:a3f3654d5734a3ece152636aad89f58afc9213c6520062db3978239db122f03c",
                "sha256:a82b92b04a23d3c8a581fc049228bafde988abacba397d57ce95fe95e0338ab4",
                "sha256:acf3763ed01af8410fc36afea23707d4ea58ba7e86a8ee915dfb9ceff9ef69d0",
                "sha256:adeb4c5b608574a3d647011af36f7586811a2c1197c861aedb548dd2453b41cd",
                "sha256:b83835506dfc185a319031cf853fa4bb1b3974b1f913f5bb1a0f3d98bdcded04",
                "sha256:bb28a7245de68bf29f6fb199545d072d1036a1917dca17a1e75bbb919e14ee8e",
                "sha256:bf9cb9a9fd8891e7efd2d44deb24b86d647394b9705b744ff6f8261e6f29a730",
                "sha256:c317eaf5ff46a34305b202e73404f55f7389ef834b8dbf4da09b9b9b37f76dd2",
                "sha256:dbe8c6ae7534b5b024296464f387d57c13caa942f6d8e6e0346f27e509f0f768",
                "sha256:de807ae933cfb7f0c7d9d981a053772452217df2bf38e7e6267c9cbf9545a796",
                "sha256:dead2ddede4c7ba6cb3a721870f5141c97dc7d85a079edb4bd8d88c3ad5b20c7",
                "sha256:dec5202bfe6f672d4511086e125db035a52b00f1648d6407cc8e526912c0353a",
                "sha256:e1ea316102ea1e1770724db01998d1603ed921c54a86a2efcb03428d5417e489",
                "sha256:f90bfc4ad18450c80b024036eaf91e4a246ae287701aaa88eaebebf150868052"
            ],
            "version": "==5.1"
        },
        "cycler": {
            "hashes": [
                "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
                "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
            ],
            "version": "==0.10.0"
        },
        "decorator": {
            "hashes": [
                "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
                "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
            ],
            "version": "==4.4.2"
        },
        "docutils": {
            "hashes": [
                "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
                "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
                "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
            ],
            "version": "==0.15.2"
        },
        "entrypoints": {
            "hashes": [
                "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
                "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
            ],
            "version": "==0.3"
        },
        "everett": {
            "extras": [
                "yaml"
            ],
            "hashes": [
                "sha256:66c7991c056fd9b1de54c29e2b5004a30209530faef698d6ecfbf24bfbbdd1fb",
                "sha256:8a5ee8cdde0ed6b3bbb63249e0e0703d4ad91921107ff198e0868ffce5f7b6bc"
            ],
            "version": "==1.0.2"
        },
        "execnet": {
            "hashes": [
                "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50",
                "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547"
            ],
            "version": "==1.7.1"
        },
        "filetype": {
            "hashes": [
                "sha256:353369948bb1c09b8b3ea3d78390b5586e9399bff9aab894a1dff954e31a66f6",
                "sha256:da393ece8d98b47edf2dd5a85a2c8733e44b769e32c71af4cd96ed8d38d96aa7"
            ],
            "version": "==1.0.7"
        },
        "flake8": {
            "hashes": [
                "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb",
                "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"
            ],
            "version": "==3.7.9"
        },
        "flake8-import-order": {
            "hashes": [
                "sha256:90a80e46886259b9c396b578d75c749801a41ee969a235e163cfe1be7afd2543",
                "sha256:a28dc39545ea4606c1ac3c24e9d05c849c6e5444a50fb7e9cdd430fc94de6e92"
            ],
            "version": "==0.18.1"
        },
        "graypy": {
            "hashes": [
                "sha256:5df0102ed52fdaa24dd579bc1e4904480c2c9bbb98917a0b3241ecf510c94207",
                "sha256:fd8dc4a721de1278576d92db10ac015e99b4e480cf1b18892e79429fd9236e16"
            ],
            "version": "==2.1.0"
        },
        "hypothesis": {
            "hashes": [
                "sha256:07498961389e108f7e595dedb6a47297a4d64a91c9a5f53b6c05fdc46d95ece2",
                "sha256:080837935f774765c792b44c9c37d6299776029d05642b5fa29d983c307d861f"
            ],
            "version": "==5.10.4"
        },
        "idna": {
            "hashes": [
                "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
                "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
            ],
            "version": "==2.9"
        },
        "imageio": {
            "hashes": [
                "sha256:1e4ab29b3775bb093c7a35854a0412857145450183344678829b30e72263b001",
                "sha256:fb5fd6d3d17126bbaac9af29fe340e2c97a196eb9416d4f28c0e543744a152cf"
            ],
            "version": "==2.8.0"
        },
        "imagesize": {
            "hashes": [
                "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1",
                "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"
            ],
            "version": "==1.2.0"
        },
        "immutables": {
            "hashes": [
                "sha256:19b643fb078b45bb5669786140427acbbbd21c3312c44a6297718ca97bf00c38",
                "sha256:2ab6887146dd1a1eba32de23929d41b4e10761923846ee90500d3cf78de7b26f",
                "sha256:30726e341c067dc62bee6de4513189a82090fda18192629b458ecec6e596d2a5",
                "sha256:3cd38a96455000c481f94b7fb28fe4971dc4250c7dd34c0c8da53011d0efbb1c",
                "sha256:3cf3b047e99ad7d30b0dc0f35bd2318220cb950d61d299faccf7d91982f240c6",
                "sha256:5d9e9059e8587ba47af8e110eea962975d90e57c6fb8e09b6bbac18bd4c5d624",
                "sha256:901479aa842837550d04486adc26096089aba2d78cb4c62179d8397434b3a2a2",
                "sha256:a294c5c04a3a8adf324c26d842d2baf199cc50d9abe9e63200d8f3400f26543b",
                "sha256:ac6237425e9fa87e15f5afca3d358ad4c3f222245950ee4041ca1b0f7ec9288a",
                "sha256:d1ee0e401e52a3d9c121e4e68e1f6548c9fab44e8f8eda0cafe29478213924a8",
                "sha256:e6708f708baa6b21b400d9c637e51d827a58f34d200bb0a81f697b7ee25115a8",
                "sha256:f75e7a65be68eb71f818a13a7a9728d26f4e19f7ea865b78d300b635ffadcbc1"
            ],
            "version": "==0.12"
        },
        "importlib-metadata": {
            "hashes": [
                "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
                "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
            ],
            "markers": "python_version < '3.8'",
            "version": "==1.6.0"
        },
        "jinja2": {
            "hashes": [
                "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0",
                "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"
            ],
            "version": "==2.11.2"
        },
        "jmespath": {
            "hashes": [
                "sha256:695cb76fa78a10663425d5b73ddc5714eb711157e52704d69be03b1a02ba4fec",
                "sha256:cca55c8d153173e21baa59983015ad0daf603f9cb799904ff057bfb8ff8dc2d9"
            ],
            "version": "==0.9.5"
        },
        "kiwisolver": {
            "hashes": [
                "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c",
                "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd",
                "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f",
                "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74",
                "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1",
                "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c",
                "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec",
                "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b",
                "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7",
                "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113",
                "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec",
                "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf",
                "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e",
                "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657",
                "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8",
                "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2"
            ],
            "version": "==1.2.0"
        },
        "kombu": {
            "hashes": [
                "sha256:2d1cda774126a044d91a7ff5fa6d09edf99f46924ab332a810760fe6740e9b76",
                "sha256:598e7e749d6ab54f646b74b2d2df67755dee13894f73ab02a2a9feb8870c7cb2"
            ],
            "version": "==4.6.8"
        },
        "loguru": {
            "hashes": [
                "sha256:074b3caa6748452c1e4f2b302093c94b65d5a4c5a4d7743636b4121e06437b0e",
                "sha256:a6101fd435ac89ba5205a105a26a6ede9e4ddbb4408a6e167852efca47806d11"
            ],
            "version": "==0.4.1"
        },
        "markupsafe": {
            "hashes": [
                "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
                "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
                "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
                "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
                "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
                "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
                "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
                "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
                "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
                "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
                "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
                "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
                "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
                "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
                "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
                "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
                "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
                "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
                "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
                "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
                "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
                "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
                "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
                "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
                "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
                "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
                "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
                "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
                "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
                "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
                "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
                "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
                "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
            ],
            "version": "==1.1.1"
        },
        "matplotlib": {
            "hashes": [
                "sha256:2466d4dddeb0f5666fd1e6736cc5287a4f9f7ae6c1a9e0779deff798b28e1d35",
                "sha256:282b3fc8023c4365bad924d1bb442ddc565c2d1635f210b700722776da466ca3",
                "sha256:4bb50ee4755271a2017b070984bcb788d483a8ce3132fab68393d1555b62d4ba",
                "sha256:56d3147714da5c7ac4bc452d041e70e0e0b07c763f604110bd4e2527f320b86d",
                "sha256:7a9baefad265907c6f0b037c8c35a10cf437f7708c27415a5513cf09ac6d6ddd",
                "sha256:aae7d107dc37b4bb72dcc45f70394e6df2e5e92ac4079761aacd0e2ad1d3b1f7",
                "sha256:af14e77829c5b5d5be11858d042d6f2459878f8e296228c7ea13ec1fd308eb68",
                "sha256:c1cf735970b7cd424502719b44288b21089863aaaab099f55e0283a721aaf781",
                "sha256:ce378047902b7a05546b6485b14df77b2ff207a0054e60c10b5680132090c8ee",
                "sha256:d35891a86a4388b6965c2d527b9a9f9e657d9e110b0575ca8a24ba0d4e34b8fc",
                "sha256:e06304686209331f99640642dee08781a9d55c6e32abb45ed54f021f46ccae47",
                "sha256:e20ba7fb37d4647ac38f3c6d8672dd8b62451ee16173a0711b37ba0ce42bf37d",
                "sha256:f4412241e32d0f8d3713b68d3ca6430190a5e8a7c070f1c07d7833d8c5264398",
                "sha256:ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee"
            ],
            "version": "==3.2.1"
        },
        "mccabe": {
            "hashes": [
                "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
                "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
            ],
            "version": "==0.6.1"
        },
        "more-itertools": {
            "hashes": [
                "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c",
                "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"
            ],
            "version": "==8.2.0"
        },
        "mypy": {
            "hashes": [
                "sha256:15b948e1302682e3682f11f50208b726a246ab4e6c1b39f9264a8796bb416aa2",
                "sha256:219a3116ecd015f8dca7b5d2c366c973509dfb9a8fc97ef044a36e3da66144a1",
                "sha256:3b1fc683fb204c6b4403a1ef23f0b1fac8e4477091585e0c8c54cbdf7d7bb164",
                "sha256:3beff56b453b6ef94ecb2996bea101a08f1f8a9771d3cbf4988a61e4d9973761",
                "sha256:7687f6455ec3ed7649d1ae574136835a4272b65b3ddcf01ab8704ac65616c5ce",
                "sha256:7ec45a70d40ede1ec7ad7f95b3c94c9cf4c186a32f6bacb1795b60abd2f9ef27",
                "sha256:86c857510a9b7c3104cf4cde1568f4921762c8f9842e987bc03ed4f160925754",
                "sha256:8a627507ef9b307b46a1fea9513d5c98680ba09591253082b4c48697ba05a4ae",
                "sha256:8dfb69fbf9f3aeed18afffb15e319ca7f8da9642336348ddd6cab2713ddcf8f9",
                "sha256:a34b577cdf6313bf24755f7a0e3f3c326d5c1f4fe7422d1d06498eb25ad0c600",
                "sha256:a8ffcd53cb5dfc131850851cc09f1c44689c2812d0beb954d8138d4f5fc17f65",
                "sha256:b90928f2d9eb2f33162405f32dde9f6dcead63a0971ca8a1b50eb4ca3e35ceb8",
                "sha256:c56ffe22faa2e51054c5f7a3bc70a370939c2ed4de308c690e7949230c995913",
                "sha256:f91c7ae919bbc3f96cd5e5b2e786b2b108343d1d7972ea130f7de27fdd547cf3"
            ],
            "version": "==0.770"
        },
        "mypy-extensions": {
            "hashes": [
                "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
                "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"
            ],
            "version": "==0.4.3"
        },
        "networkx": {
            "hashes": [
                "sha256:cdfbf698749a5014bf2ed9db4a07a5295df1d3a53bf80bf3cbd61edf9df05fa1",
                "sha256:f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64"
            ],
            "version": "==2.4"
        },
        "numpy": {
            "hashes": [
                "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee",
                "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56",
                "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c",
                "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44",
                "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f",
                "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa",
                "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c",
                "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d",
                "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379",
                "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e",
                "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921",
                "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970",
                "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027",
                "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689",
                "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36",
                "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68",
                "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8",
                "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b",
                "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3",
                "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3",
                "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b"
            ],
            "version": "==1.18.3"
        },
        "packaging": {
            "hashes": [
                "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3",
                "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"
            ],
            "version": "==20.3"
        },
        "pdf2image": {
            "hashes": [
                "sha256:a0d9906f5507192210a8d5d7ead63145e9dec4bccc4564b1fb644e923913c31c"
            ],
            "version": "==1.12.1"
        },
        "pillow": {
            "hashes": [
                "sha256:04766c4930c174b46fd72d450674612ab44cca977ebbcc2dde722c6933290107",
                "sha256:0e2a3bceb0fd4e0cb17192ae506d5f082b309ffe5fc370a5667959c9b2f85fa3",
                "sha256:0f01e63c34f0e1e2580cc0b24e86a5ccbbfa8830909a52ee17624c4193224cd9",
                "sha256:12e4bad6bddd8546a2f9771485c7e3d2b546b458ae8ff79621214119ac244523",
                "sha256:1f694e28c169655c50bb89a3fa07f3b854d71eb47f50783621de813979ba87f3",
                "sha256:3d25dd8d688f7318dca6d8cd4f962a360ee40346c15893ae3b95c061cdbc4079",
                "sha256:4b02b9c27fad2054932e89f39703646d0c543f21d3cc5b8e05434215121c28cd",
                "sha256:9744350687459234867cbebfe9df8f35ef9e1538f3e729adbd8fde0761adb705",
                "sha256:a0b49960110bc6ff5fead46013bcb8825d101026d466f3a4de3476defe0fb0dd",
                "sha256:ae2b270f9a0b8822b98655cb3a59cdb1bd54a34807c6c56b76dd2e786c3b7db3",
                "sha256:b37bb3bd35edf53125b0ff257822afa6962649995cbdfde2791ddb62b239f891",
                "sha256:b532bcc2f008e96fd9241177ec580829dee817b090532f43e54074ecffdcd97f",
                "sha256:b67a6c47ed963c709ed24566daa3f95a18f07d3831334da570c71da53d97d088",
                "sha256:b943e71c2065ade6fef223358e56c167fc6ce31c50bc7a02dd5c17ee4338e8ac",
                "sha256:ccc9ad2460eb5bee5642eaf75a0438d7f8887d484490d5117b98edd7f33118b7",
                "sha256:d23e2aa9b969cf9c26edfb4b56307792b8b374202810bd949effd1c6e11ebd6d",
                "sha256:eaa83729eab9c60884f362ada982d3a06beaa6cc8b084cf9f76cae7739481dfa",
                "sha256:ee94fce8d003ac9fd206496f2707efe9eadcb278d94c271f129ab36aa7181344",
                "sha256:f455efb7a98557412dc6f8e463c1faf1f1911ec2432059fa3e582b6000fc90e2",
                "sha256:f46e0e024346e1474083c729d50de909974237c72daca05393ee32389dabe457",
                "sha256:f54be399340aa602066adb63a86a6a5d4f395adfdd9da2b9a0162ea808c7b276",
                "sha256:f784aad988f12c80aacfa5b381ec21fd3f38f851720f652b9f33facc5101cf4d"
            ],
            "version": "==7.1.2"
        },
        "pluggy": {
            "hashes": [
                "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
                "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
            ],
            "version": "==0.13.1"
        },
        "py": {
            "hashes": [
                "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa",
                "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"
            ],
            "version": "==1.8.1"
        },
        "pycodestyle": {
            "hashes": [
                "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
                "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
            ],
            "version": "==2.5.0"
        },
        "pyflakes": {
            "hashes": [
                "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
                "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
            ],
            "version": "==2.1.1"
        },
        "pygments": {
            "hashes": [
                "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44",
                "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"
            ],
            "version": "==2.6.1"
        },
        "pyparsing": {
            "hashes": [
                "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
                "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
            ],
            "version": "==2.4.7"
        },
        "pytest": {
            "hashes": [
                "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172",
                "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"
            ],
            "version": "==5.4.1"
        },
        "pytest-cov": {
            "hashes": [
                "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b",
                "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"
            ],
            "version": "==2.8.1"
        },
        "pytest-flake8": {
            "hashes": [
                "sha256:6e26d94ad41184d9a5113a90179b303efddb53eda505f827418ca78f5b39403a",
                "sha256:d85efaafbdb9580791cfa8671799dd40d482fc30bd4476c1ca5efd661e751333"
            ],
            "version": "==1.0.5"
        },
        "pytest-forked": {
            "hashes": [
                "sha256:1805699ed9c9e60cb7a8179b8d4fa2b8898098e82d229b0825d8095f0f261100",
                "sha256:1ae25dba8ee2e56fb47311c9638f9e58552691da87e82d25b0ce0e4bf52b7d87"
            ],
            "version": "==1.1.3"
        },
        "pytest-xdist": {
            "hashes": [
                "sha256:0f46020d3d9619e6d17a65b5b989c1ebbb58fc7b1da8fb126d70f4bac4dfeed1",
                "sha256:7dc0d027d258cd0defc618fb97055fbd1002735ca7a6d17037018cf870e24011"
            ],
            "version": "==1.31.0"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "version": "==2.8.1"
        },
        "pytz": {
            "hashes": [
                "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed",
                "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"
            ],
            "version": "==2020.1"
        },
        "pywavelets": {
            "hashes": [
                "sha256:076ca8907001fdfe4205484f719d12b4a0262dfe6652fa1cfc3c5c362d14dc84",
                "sha256:18a51b3f9416a2ae6e9a35c4af32cf520dd7895f2b69714f4aa2f4342fca47f9",
                "sha256:1a64b40f6acb4ffbaccce0545d7fc641744f95351f62e4c6aaa40549326008c9",
                "sha256:35959c041ec014648575085a97b498eafbbaa824f86f6e4a59bfdef8a3fe6308",
                "sha256:55e39ec848ceec13c9fa1598253ae9dd5c31d09dfd48059462860d2b908fb224",
                "sha256:6162dc0ae04669ea04b4b51420777b9ea2d30b0a9d02901b2a3b4d61d159c2e9",
                "sha256:68b5c33741d26c827074b3d8f0251de1c3019bb9567b8d303eb093c822ce28f1",
                "sha256:720dbcdd3d91c6dfead79c80bf8b00a1d8aa4e5d551dc528c6d5151e4efc3403",
                "sha256:7947e51ca05489b85928af52a34fe67022ab5b81d4ae32a4109a99e883a0635e",
                "sha256:79f5b54f9dc353e5ee47f0c3f02bebd2c899d49780633aa771fed43fa20b3149",
                "sha256:80b924edbc012ded8aa8b91cb2fd6207fb1a9a3a377beb4049b8a07445cec6f0",
                "sha256:889d4c5c5205a9c90118c1980df526857929841df33e4cd1ff1eff77c6817a65",
                "sha256:935ff247b8b78bdf77647fee962b1cc208c51a7b229db30b9ba5f6da3e675178",
                "sha256:98b2669c5af842a70cfab33a7043fcb5e7535a690a00cd251b44c9be0be418e5",
                "sha256:9e2528823ccf5a0a1d23262dfefe5034dce89cd84e4e124dc553dfcdf63ebb92",
                "sha256:bc5e87b72371da87c9bebc68e54882aada9c3114e640de180f62d5da95749cd3",
                "sha256:be105382961745f88d8196bba5a69ee2c4455d87ad2a2e5d1eed6bd7fda4d3fd",
                "sha256:c06d2e340c7bf8b9ec71da2284beab8519a3908eab031f4ea126e8ccfc3fd567",
                "sha256:cfe79844526dd92e3ecc9490b5031fca5f8ab607e1e858feba232b1b788ff0ea",
                "sha256:d510aef84d9852653d079c84f2f81a82d5d09815e625f35c95714e7364570ad4",
                "sha256:e02a0558e0c2ac8b8bbe6a6ac18c136767ec56b96a321e0dfde2173adfa5a504"
            ],
            "version": "==1.1.1"
        },
        "pyyaml": {
            "hashes": [
                "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97",
                "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76",
                "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2",
                "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648",
                "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf",
                "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f",
                "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2",
                "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee",
                "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d",
                "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c",
                "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"
            ],
            "version": "==5.3.1"
        },
        "requests": {
            "hashes": [
                "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
                "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
            ],
            "version": "==2.23.0"
        },
        "s3fs": {
            "hashes": [
                "sha256:dcd32e77efc4838474317fcef31a72891c51043c7807fca59c035003876f7bd0"
            ],
            "version": "==0.2.2"
        },
        "s3transfer": {
            "hashes": [
                "sha256:2482b4259524933a022d59da830f51bd746db62f047d6eb213f2f8855dcb8a13",
                "sha256:921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db"
            ],
            "version": "==0.3.3"
        },
        "scikit-image": {
            "hashes": [
                "sha256:063d1c20fcd53762f82ee58c29783ae4e8f6fbed445b41b704fa33b6f355729d",
                "sha256:0715b7940778ba5d73da3908d60ddf2eb93863f7c394493a522fe56d3859295c",
                "sha256:0808ab5f8218d91a1c008036993636535a37efd67a52ab0f2e6e3f4b7e75aeda",
                "sha256:2a54bea469eb1b611bee1ce36e60710f5f94f29205bc5bd67a51793909b1e62b",
                "sha256:2aa962aa82d815606d7dad7f045f5d7ca55c65b4320d47e15a98fc92612c2d6c",
                "sha256:2d346d49b6852cffb47cbde995e2696d5b07f688d8c057a0a4548abf3a98f920",
                "sha256:3ad2efa792ab8de5fcefe6f4f5bc1ab64c411cdb5c829ce1526ab3a5a7729627",
                "sha256:3af3d781ce085573ced37b2b5b9abfd32ce3d4723bd17f37e829025d189b0421",
                "sha256:41e28db0136f29ecd305bef0408fdfc64be9d415e54f5099a95555c65f5c1865",
                "sha256:6786b127f33470fd843e644435522fbf43bce05c9f5527946c390ccb9e1cac27",
                "sha256:8b2b768b02c6b7476f2e16ddd91f827d3817aef73f82cf28bff7a8dcdfd8c55c",
                "sha256:a48fb0d34a090b578b87ffebab0fe035295c1945dbc2b28e1a55ea2cf6031751",
                "sha256:dd7fbd32da74d4e9967dc15845f731f16e7966cee61f5dc0e12e2abb1305068c",
                "sha256:e18d73cc8893e2268b172c29f9aab530faf8cd3b7c11ae0bee3e763d719d35c5",
                "sha256:e774377876cb258e8f4d63f7809863f961c98aa02263b3ff54a39483bc6f7d26"
            ],
            "version": "==0.16.2"
        },
        "scipy": {
            "hashes": [
                "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4",
                "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7",
                "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70",
                "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb",
                "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073",
                "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa",
                "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be",
                "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802",
                "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d",
                "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6",
                "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9",
                "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8",
                "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672",
                "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0",
                "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802",
                "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408",
                "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d",
                "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59",
                "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088",
                "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521",
                "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59"
            ],
            "version": "==1.4.1"
        },
        "six": {
            "hashes": [
                "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
                "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
            ],
            "version": "==1.14.0"
        },
        "snowballstemmer": {
            "hashes": [
                "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0",
                "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"
            ],
            "version": "==2.0.0"
        },
        "sortedcontainers": {
            "hashes": [
                "sha256:974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a",
                "sha256:d9e96492dd51fae31e60837736b38fe42a187b5404c16606ff7ee7cd582d4c60"
            ],
            "version": "==2.1.0"
        },
        "sphinx": {
            "hashes": [
                "sha256:62edfd92d955b868d6c124c0942eba966d54b5f3dcb4ded39e65f74abac3f572",
                "sha256:f5505d74cf9592f3b997380f9bdb2d2d0320ed74dd69691e3ee0644b956b8d83"
            ],
            "version": "==3.0.3"
        },
        "sphinxcontrib-applehelp": {
            "hashes": [
                "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a",
                "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"
            ],
            "version": "==1.0.2"
        },
        "sphinxcontrib-devhelp": {
            "hashes": [
                "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e",
                "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"
            ],
            "version": "==1.0.2"
        },
        "sphinxcontrib-htmlhelp": {
            "hashes": [
                "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f",
                "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"
            ],
            "version": "==1.0.3"
        },
        "sphinxcontrib-jsmath": {
            "hashes": [
                "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178",
                "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
            ],
            "version": "==1.0.1"
        },
        "sphinxcontrib-qthelp": {
            "hashes": [
                "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72",
                "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"
            ],
            "version": "==1.0.3"
        },
        "sphinxcontrib-serializinghtml": {
            "hashes": [
                "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc",
                "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"
            ],
            "version": "==1.1.4"
        },
        "typed-ast": {
            "hashes": [
                "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355",
                "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919",
                "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa",
                "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652",
                "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75",
                "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01",
                "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d",
                "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1",
                "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907",
                "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c",
                "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3",
                "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b",
                "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614",
                "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb",
                "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b",
                "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41",
                "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6",
                "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34",
                "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe",
                "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4",
                "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
            ],
            "version": "==1.4.1"
        },
        "typing-extensions": {
            "hashes": [
                "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5",
                "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae",
                "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"
            ],
            "version": "==3.7.4.2"
        },
        "urllib3": {
            "hashes": [
                "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
                "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
            ],
            "markers": "python_version != '3.4'",
            "version": "==1.25.9"
        },
        "vine": {
            "hashes": [
                "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87",
                "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af"
            ],
            "version": "==1.3.0"
        },
        "wcwidth": {
            "hashes": [
                "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
                "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
            ],
            "version": "==0.1.9"
        },
        "zipp": {
            "hashes": [
                "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
                "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
            ],
            "version": "==3.1.0"
        }
    }
}
@ingwinlu
Copy link
Author

ingwinlu commented May 4, 2020

I also tried cleaning cache with no changes to behaviour. Question from my side would be why is it mentioning pypi when its a local dependency anyway?

edit: Only update / lock is affected. install still works fine.

@bneijt
Copy link

bneijt commented May 4, 2020

I think the pypi mention is just a default put in when pipenv can't find any version of the mentioned package. I have no idea what the issue might be yet, but could you try with editable=false also and let us know if that changes anything?

@ingwinlu
Copy link
Author

ingwinlu commented May 4, 2020

I edited the Pipfile to include editable=false, no changes as far as I can tell.

@frostming frostming added Category: Dependency Resolution Issue relates to dependency resolution. Type: Possible Bug This issue describes a possible bug in pipenv. labels May 4, 2020
@triage-new-issues triage-new-issues bot removed the triage label May 4, 2020
@techalchemy
Copy link
Member

Thanks for taking the time to file this bug -- does he situation improve if you set PIPENV_RESOLVE_VCS=1?

If this doesn't help, can you share the setup.py/cfg of adplib for example? Otherwise, the output of pipenv lock --verbose may help.

@techalchemy techalchemy added Category: VCS Relates to version control system dependencies. Priority: Medium This item is medium priority and will be resolved whenever possible. labels May 5, 2020
@ingwinlu
Copy link
Author

ingwinlu commented May 5, 2020

PIPENV_RESOLVE_VCS=1 pipenv update --dev --verbose          
Running $ pipenv lock then $ pipenv sync.                                                                            
Locking [dev-packages] dependencies…
⠹ Locking...
✘ Locking Failed! 
Current constraints:
  adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
  attrs (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 20))
  everett[yaml] (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 15))
  filetype (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 16))
  flake8-import-order (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 7))
  graypy (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 12))
  hypothesis (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 8))
  kombu (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 14))
  loguru (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 3))
  mypy (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 10))
  pdf2image (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 19))
  pillow (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 18))
  pytest (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 9))
  pytest-cov (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 2))
  pytest-flake8 (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 17))
  pytest-xdist (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 13))
  s3fs<0.3.0 (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 6))
  scikit-image (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 5))
  sphinx (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 11))

Finding the best candidates:
Traceback (most recent call last):
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 807, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 180, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 260, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 260, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 320, in get_best_match
    ireq, prereleases=self.prereleases
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 202, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 807, in <module>
    main()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 803, in main
    parsed.requirements_dir, parsed.packages, parse_only=parsed.parse_only)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 785, in _main
    resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 753, in resolve_packages
    requirements_dir=requirements_dir,
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 736, in resolve
    req_dir=requirements_dir
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 1379, in resolve_deps
    req_dir=req_dir,
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 1086, in actually_resolve_deps
    resolver.resolve()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 817, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: Could not find a version that matches adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
No versions found
Was https://pypi.org/simple reachable?
ROUND 1                           
Current constraints:
  adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
  attrs (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 20))
  everett[yaml] (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 15))
  filetype (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 16))
  flake8-import-order (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 7))
  graypy (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 12))
  hypothesis (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 8))
  kombu (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 14))
  loguru (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 3))
  mypy (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 10))
  pdf2image (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 19))
  pillow (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 18))
  pytest (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 9))
  pytest-cov (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 2))
  pytest-flake8 (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 17))
  pytest-xdist (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 13))
  s3fs<0.3.0 (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 6))
  scikit-image (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 5))
  sphinx (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 11))

Finding the best candidates:
Traceback (most recent call last):
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 807, in resolve
    results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 180, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 260, in _resolve_one_round
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 260, in <setcomp>
    best_matches = {self.get_best_match(ireq) for ireq in constraints}
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 320, in get_best_match
    ireq, prereleases=self.prereleases
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 202, in find_best_match
    raise NoCandidateFound(ireq, all_candidates, self.finder)
pipenv.patched.piptools.exceptions.NoCandidateFound: Could not find a version that matches adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
No versions found
Was https://pypi.org/simple reachable?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 807, in <module>
    main()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 803, in main
    parsed.requirements_dir, parsed.packages, parse_only=parsed.parse_only)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 785, in _main
    resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 753, in resolve_packages
    requirements_dir=requirements_dir,
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/resolver.py", line 736, in resolve
    req_dir=requirements_dir
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 1379, in resolve_deps
    req_dir=req_dir,
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 1086, in actually_resolve_deps
    resolver.resolve()
  File "/home/winlu/.local/share/virtualenvs/adpprep-6Lg4mZPJ/lib/python3.6/site-packages/pipenv/utils.py", line 817, in resolve
    raise ResolutionFailure(message=str(e))
pipenv.exceptions.ResolutionFailure: ERROR: Could not find a version that matches adplib (from -r /tmp/pipenvei93o56grequirements/pipenv-05qxwlhq-constraints.txt (line 4))
No versions found
Was https://pypi.org/simple reachable?

the setup.py of adplib is fairly simple:

from setuptools import find_packages, setup

setup(
    name="adplib",
    version=0.1,
    description="Provides common helpers for adp microservices",
    packages=find_packages(),
    install_requires=[
        "everett[yaml]",
        "graypy",
        "kombu",
        "loguru",
        "s3fs<0.3.0",
        "pytest",
    ],
    extras_require={
        "dev":  [
            "hypothesis",
            "pytest-cov",
            "pytest-flake8",
            "pytest-xdist",
            "flake8-import-order",
            "sphinx"
        ]
    },
    entry_points={"pytest11": ["adplib = adplib.test_utils"]},
)

setup.cfg also not really special:

[tool:pytest]
testpaths = adplib tests
filterwarnings =
    ignore:encoding is deprecated:PendingDeprecationWarning
    ignore:The truth value of an empty array is ambiguous.*:DeprecationWarning
    ignore:direct construction of Flake8Item has been deprecated.*:DeprecationWarning
markers =
    single: mark a test as single cpu only
    slow: mark a test as slow
    integration: requires other applications
addopts = --flake8 -n auto
xfail_strict = True

[flake8]
application-import-names = adplib
import-order-style = google

@techalchemy
Copy link
Member

Thanks for the example -- FYI, using the current master branch I created the following structure:

 /tmp  tree test/
test/
├── adplib
│   ├── adplib
│   │   └── __init__.py
│   └── setup.py
└── myproject
    ├── Pipfile

So I moved into myproject (a sibling of adplib) and tried the implicated install:

 /t/t/myproject  pipenv install -e ../adplib/
Installing -e ../adplib/…
Adding adplib to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success! 
Updated Pipfile.lock (1efb46)!
Installing dependencies from Pipfile.lock (1efb46)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 25/25 — 00:00:05
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

Now I know you mentioned install worked, so I tried pipenv update -- this also worked. I then wiped the environment and the lockfile and started over, but still can't reproduce this, at least with the master branch

Here is the update:

 /t/t/myproject  pipenv update
Running $ pipenv lock then $ pipenv sync.
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success! 
Updated Pipfile.lock (1efb46)!
Installing dependencies from Pipfile.lock (1efb46)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 25/25 — 00:00:05
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!

And then with a fresh environment/no lockfile:

 /t/t/myproject  pipenv --rm; and rm -rf Pipfile.lock
Removing virtualenv (/home/techalchemy/.virtualenvs/myproject-XjvO1jED)…
 /t/t/myproject  cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
adplib = {editable = true, path = "./../adplib"}

[requires]
python_version = "3.8"
 /t/t/myproject  pipenv lock
Creating a virtualenv for this project…
Pipfile: /tmp/test/myproject/Pipfile
Using /home/techalchemy/.pyenv/versions/3.8.2/bin/python3.8 (3.8.2) to create virtualenv…
⠸ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 201ms
  creator CPython3Posix(dest=/home/techalchemy/.virtualenvs/myproject-XjvO1jED, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/home/techalchemy/.local/share/virtualenv/seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment! 
Virtualenv location: /home/techalchemy/.virtualenvs/myproject-XjvO1jED
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
Resolving dependencies...
✔ Success! 
Updated Pipfile.lock (1efb46)!

If you have some way I can reproduce this on master, or if you can confirm that it still happens on master, that would be really helpful. Thanks!

@ingwinlu
Copy link
Author

ingwinlu commented May 7, 2020

I noticed one difference:

the myproject dir in your example is a pip installable one for us as well, i.e. it also has a setup.py and setup,cfg.

in the setup.py we ALSO specify adplib as a dependency. Not just in the Pipfile:

from setuptools import find_packages, setup

setup(
    name="adpservice",
    version=0.1,
    description="x",
    packages=find_packages(),
    install_requires=[
        "adplib",
        "filetype",
        "pdf2image",
        "pillow",
        "attrs",
        "scikit-image",
    ],
    extras_require={
        "dev":  [
            "pytest",
            "hypothesis",
            "pytest-cov",
            "pytest-flake8",
            "pytest-xdist",
            "flake8-import-order",
            "sphinx",
            "mypy",
        ]
    },
    entry_points = {
        'console_scripts': [
            'adpservice=adpservice.__init__:main',
        ],
    }
)

the pipfile of an example adpservice then includes adpservice as well:

[dev-packages]
adplib = {editable = true,extras = ["dev"],path = "./../adplib"}
adpservice = {editable = true,extras = ["dev"],path = "."}

[packages]
adplib = {editable = true,path = "./../adplib"}
adpservice = {editable = true,path = "."}

@ingwinlu
Copy link
Author

I tried with the latest master today and the same issue occurs.

@ingwinlu
Copy link
Author

I tried with the released version today and the problem still occurs.

I am currently assuming that the problem is that adpservice dependencies are resolved without respecting the locations provided in the Pipfile which used to work.

@techalchemy
Copy link
Member

Sorry for not getting back to you -- proper packages take precedence in pipenv over entries in your pipfile; that is, if you define something in setup.py and include that package in your Pipfile, the definition in setup.py gets resolved first and with higher priority.

Because the definition in setup.py is for adplib -- that is, just a name, with no reference to the path on your filesystem, this doesn't provide any way for the resolver to know that it should be looking "up one directory and in the 'adplib' folder" to find the specified package. If you want to include this package in your setup.py, you need to do so with pep508 markers which probably won't work out so well if you are sharing this package and it isn't available on some kind of version control:

setup(
	...
	install_requires=["adplib @ file://localhost/path/to/adplib"]
	...
)

Note that you need to include localhost due to pypa/pip#6658 - And this syntax also apparently raises an error in Requirementslib (it isn't currently being tested there because it's pretty obscure).

So, ultimately my advice would be that if you want to use a relative filepath as a dependency, you will need to take it out of your setup.py / setup.cfg. There is no elegant way to handle this no matter how you are installing these packages, and it isn't just a problem with pipenv.

Sorry for the trouble and thanks for the report!

@tsibley
Copy link

tsibley commented Oct 6, 2020

@techalchemy Thanks for your explanation of what Pipenv's doing here, it's helpful! We've run into this exact issue recently at work.

Is there any chance that Pipenv would support merging the two requirements specifications instead of (silently) ignoring one over the other? I would think it'd be possible for the resolver to figure out that package A needs package B (in our case, at version X) and also that package B should installed (editable) from location Y. That is, the abstract dependency (in setup.py) is different and independent from how the dependency is satisfied (described by the editable:true instruction in the Pipfile).

This used to work great with Pipenv 2018, as the OP also notes, and only broke in more recent Pipenv versions. Is it your expectation that the new behaviour is here to stay (i.e. this issue is a WONTFIX) or is there further consideration to be made?

joverlee521 added a commit to seattleflu/id3c-customizations that referenced this issue Oct 6, 2020
The core id3c package is technically required for id3c-customizations,
but the editable install of id3c through pipenv does not resolve this
dependency. Details can be found in the open issue here:
pypa/pipenv#4235
@ingwinlu
Copy link
Author

Yesterday the client where I deployed the setup from the OP reported he upgraded to pipenv 202011 and apparently it builds with no further changes. I will update once i know more (hopefully before xmas).

@ingwinlu
Copy link
Author

I confirmed the setup works again just by pinning pipenv to 2020.11.15. @techalchemy I would recommend closing this for now as at least for my situation and reports pipenv works as expected now.

@ingwinlu
Copy link
Author

Ah dang, I just rechecked and found out we only tested installing, something that also worked with earlier 2020 versions. Locking still fails.

However we will probably go with locking with 2018 and installing with 2020 now as 2018 (sometimes) has problems not installing every requirement.

@fphammerle
Copy link

@frostming, please re-open the issue

@frostming frostming reopened this Dec 14, 2020
@matteius
Copy link
Member

matteius commented Jul 5, 2022

I believe this issue would not be possible in the recent pipenv releases. Please try it with pipenv==2022.7.4

@matteius matteius closed this as completed Jul 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: Dependency Resolution Issue relates to dependency resolution. Category: VCS Relates to version control system dependencies. Priority: Medium This item is medium priority and will be resolved whenever possible. Type: Possible Bug This issue describes a possible bug in pipenv.
Projects
None yet
Development

No branches or pull requests

7 participants