langutang commited on
Commit
6d2c395
·
verified ·
1 Parent(s): 98061d7

Upload 1377 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +27 -0
  2. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/INSTALLER +1 -0
  3. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/LICENSE +34 -0
  4. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/METADATA +47 -0
  5. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/RECORD +38 -0
  6. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/WHEEL +5 -0
  7. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/top_level.txt +1 -0
  8. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/INSTALLER +1 -0
  9. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/LICENSE +34 -0
  10. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/METADATA +55 -0
  11. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/RECORD +28 -0
  12. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/WHEEL +6 -0
  13. protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/top_level.txt +1 -0
  14. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/INSTALLER +1 -0
  15. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/LICENSE.md +29 -0
  16. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/METADATA +141 -0
  17. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/RECORD +74 -0
  18. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/WHEEL +5 -0
  19. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/entry_points.txt +22 -0
  20. protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/top_level.txt +1 -0
  21. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER +1 -0
  22. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst +28 -0
  23. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/METADATA +93 -0
  24. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/RECORD +14 -0
  25. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL +5 -0
  26. protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt +1 -0
  27. protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/INSTALLER +1 -0
  28. protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/LICENSE.md +31 -0
  29. protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/METADATA +250 -0
  30. protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/RECORD +22 -0
  31. protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/WHEEL +4 -0
  32. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/INSTALLER +1 -0
  33. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/LICENSE +202 -0
  34. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/METADATA +134 -0
  35. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/RECORD +25 -0
  36. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/WHEEL +5 -0
  37. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/top_level.txt +1 -0
  38. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__init__.py +1015 -0
  39. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc +0 -0
  40. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc +0 -0
  41. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc +0 -0
  42. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc +0 -0
  43. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc +0 -0
  44. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc +0 -0
  45. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc +0 -0
  46. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_py39compat.cpython-37.pyc +0 -0
  47. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc +0 -0
  48. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_adapters.py +90 -0
  49. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_collections.py +30 -0
  50. protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_compat.py +74 -0
.gitattributes CHANGED
@@ -68,3 +68,30 @@ protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5t.cpython-37m-arm-l
68
  protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5z.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
69
  protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/utils.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
70
  protege/deep-pantilt/venv/lib/python3.7/site-packages/idna/__pycache__/uts46data.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/h5z.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
69
  protege/deep-pantilt/venv/lib/python3.7/site-packages/h5py/utils.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
70
  protege/deep-pantilt/venv/lib/python3.7/site-packages/idna/__pycache__/uts46data.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
71
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/__pycache__/_add_newdocs.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
72
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/__pycache__/fromnumeric.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
73
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_multiarray_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
74
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
75
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_rational_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
76
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_simd.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
77
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/_umath_tests.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
78
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/lib/libnpymath.a filter=lfs diff=lfs merge=lfs -text
79
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_multiarray.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
80
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_numeric.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
81
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/core/tests/__pycache__/test_umath.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
82
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/fft/_pocketfft_internal.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
83
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/lib/__pycache__/function_base.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
84
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/lib/tests/__pycache__/test_function_base.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
85
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/linalg/_umath_linalg.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
86
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/ma/__pycache__/core.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
87
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/ma/tests/__pycache__/test_core.cpython-37.pyc filter=lfs diff=lfs merge=lfs -text
88
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_bounded_integers.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
89
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_common.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
90
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_generator.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
91
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_mt19937.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
92
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_pcg64.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
93
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_philox.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
94
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/_sfc64.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
95
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/bit_generator.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
96
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/lib/libnpyrandom.a filter=lfs diff=lfs merge=lfs -text
97
+ protege/deep-pantilt/venv/lib/python3.7/site-packages/numpy/random/mtrand.cpython-37m-arm-linux-gnueabihf.so filter=lfs diff=lfs merge=lfs -text
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/LICENSE ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ COPYRIGHT
2
+
3
+ Copyright (c) 2016 - 2018, the respective contributors.
4
+ All rights reserved.
5
+
6
+ Each contributor holds copyright over their respective contributions.
7
+ The project versioning (Git) records all such contribution source information.
8
+ The initial code of this repository came from https://github.com/keras-team/keras
9
+ (the Keras repository), hence, for author information regarding commits
10
+ that occured earlier than the first commit in the present repository,
11
+ please see the original Keras repository.
12
+
13
+ LICENSE
14
+
15
+ The MIT License (MIT)
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in all
25
+ copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ SOFTWARE.
34
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/METADATA ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Keras-Applications
3
+ Version: 1.0.8
4
+ Summary: Reference implementations of popular deep learning models
5
+ Home-page: https://github.com/keras-team/keras-applications
6
+ Author: Keras Team
7
+ License: MIT
8
+ Download-URL: https://github.com/keras-team/keras-applications/tarball/1.0.8
9
+ Platform: UNKNOWN
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Education
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 2
16
+ Classifier: Programming Language :: Python :: 2.7
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.6
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Dist: numpy (>=1.9.1)
22
+ Requires-Dist: h5py
23
+ Provides-Extra: tests
24
+ Requires-Dist: pytest ; extra == 'tests'
25
+ Requires-Dist: pytest-pep8 ; extra == 'tests'
26
+ Requires-Dist: pytest-xdist ; extra == 'tests'
27
+ Requires-Dist: pytest-cov ; extra == 'tests'
28
+
29
+
30
+ Keras Applications is the `applications` module of
31
+ the Keras deep learning library.
32
+ It provides model definitions and pre-trained weights for a number
33
+ of popular archictures, such as VGG16, ResNet50, Xception, MobileNet, and more.
34
+
35
+ Read the documentation at: https://keras.io/applications/
36
+
37
+ Keras Applications may be imported directly
38
+ from an up-to-date installation of Keras:
39
+
40
+ ```
41
+ from keras import applications
42
+ ```
43
+
44
+ Keras Applications is compatible with Python 2.7-3.6
45
+ and is distributed under the MIT license.
46
+
47
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/RECORD ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Keras_Applications-1.0.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ Keras_Applications-1.0.8.dist-info/LICENSE,sha256=guRGHc6tA5MBFfRp_Uh9weYEIRGeNrJcW-cH8duggXA,1561
3
+ Keras_Applications-1.0.8.dist-info/METADATA,sha256=s9omNgtYIGJ5M8z0vH665uU301Ve6YciQrEnbTiMYeM,1653
4
+ Keras_Applications-1.0.8.dist-info/RECORD,,
5
+ Keras_Applications-1.0.8.dist-info/WHEEL,sha256=S8S5VL-stOTSZDYxHyf0KP7eds0J72qrK0Evu3TfyAY,92
6
+ Keras_Applications-1.0.8.dist-info/top_level.txt,sha256=hUSTdpVv_gPAVR-YJdoHymiZV9-yYzSNgBVBqLxs8KY,19
7
+ keras_applications/__init__.py,sha256=_YF1NYzx0ru-CEDeBTUB638f4jczfaE7IHma3-J4z-U,1846
8
+ keras_applications/__pycache__/__init__.cpython-37.pyc,,
9
+ keras_applications/__pycache__/densenet.cpython-37.pyc,,
10
+ keras_applications/__pycache__/imagenet_utils.cpython-37.pyc,,
11
+ keras_applications/__pycache__/inception_resnet_v2.cpython-37.pyc,,
12
+ keras_applications/__pycache__/inception_v3.cpython-37.pyc,,
13
+ keras_applications/__pycache__/mobilenet.cpython-37.pyc,,
14
+ keras_applications/__pycache__/mobilenet_v2.cpython-37.pyc,,
15
+ keras_applications/__pycache__/nasnet.cpython-37.pyc,,
16
+ keras_applications/__pycache__/resnet.cpython-37.pyc,,
17
+ keras_applications/__pycache__/resnet50.cpython-37.pyc,,
18
+ keras_applications/__pycache__/resnet_common.cpython-37.pyc,,
19
+ keras_applications/__pycache__/resnet_v2.cpython-37.pyc,,
20
+ keras_applications/__pycache__/resnext.cpython-37.pyc,,
21
+ keras_applications/__pycache__/vgg16.cpython-37.pyc,,
22
+ keras_applications/__pycache__/vgg19.cpython-37.pyc,,
23
+ keras_applications/__pycache__/xception.cpython-37.pyc,,
24
+ keras_applications/densenet.py,sha256=Faz3PV3w5Cs8wrDABbus8z1FtHM8JQ81ld0CB_vVrhw,13450
25
+ keras_applications/imagenet_utils.py,sha256=BpKk92IlJW5l0bSsvUbpJWhqCVeFNE17ajONJndoN-U,12634
26
+ keras_applications/inception_resnet_v2.py,sha256=EsaY3e27dNoV5A21SvgWLnMub09CEasBhu_1tZvhPu0,14743
27
+ keras_applications/inception_v3.py,sha256=a97swMXgNBRR9dh-F9EsiaIQthYeGwZqym4CvEJbKr8,14598
28
+ keras_applications/mobilenet.py,sha256=njtmkJLBn23lE2Mus3dvyezRxP8fQvqFW04AkU23nxs,18982
29
+ keras_applications/mobilenet_v2.py,sha256=O5yLDHxlwnvWetQBTDVB2FVHxIEQkgxcdQj68AYtSZw,20430
30
+ keras_applications/nasnet.py,sha256=7oxAwnn76Mw39iM7Wjgel6P_MOywm1lMLVSgf6EQPcA,29982
31
+ keras_applications/resnet.py,sha256=jA2PJQjrIA4iGqElSYLU83Xo54G1hrIaKLm_PIJALBU,1041
32
+ keras_applications/resnet50.py,sha256=YKpr42-zNGBuv3-oVfETvWg_EL8Non9KkS_eligGNsE,11888
33
+ keras_applications/resnet_common.py,sha256=zwr6-RNLoEOq2oWAMmvO8S8HECl9i3VWD7da3a_8amk,22244
34
+ keras_applications/resnet_v2.py,sha256=VOzQaOILuBL-Gm7TeK0p3mW88U22Rwf-WNGXX5U1xOg,1051
35
+ keras_applications/resnext.py,sha256=7WZLOrIXqd7__i0jDx8Zxk_FQnrdMYXxRonD2LneEaA,1020
36
+ keras_applications/vgg16.py,sha256=_pn9XkYGsNcCs73Tms6R5A0vdaT-TFzcJkTE5j8rekQ,8516
37
+ keras_applications/vgg19.py,sha256=U8b2ZydEnt_ZcSXkmF4jni0scNvvUg6RIJhUE1_BlDs,8997
38
+ keras_applications/xception.py,sha256=7Kj7Qg1fupJhat447h48-QtbyF5BKuJVvRszKLNVSoM,13557
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.33.4)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Applications-1.0.8.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ keras_applications
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/LICENSE ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ COPYRIGHT
2
+
3
+ Copyright (c) 2015 - 2018, the respective contributors.
4
+ All rights reserved.
5
+
6
+ Each contributor holds copyright over their respective contributions.
7
+ The project versioning (Git) records all such contribution source information.
8
+ The initial code of this repository came from https://github.com/keras-team/keras
9
+ (the Keras repository), hence, for author information regarding commits
10
+ that occured earlier than the first commit in the present repository,
11
+ please see the original Keras repository.
12
+
13
+ LICENSE
14
+
15
+ The MIT License (MIT)
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in all
25
+ copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ SOFTWARE.
34
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/METADATA ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Keras-Preprocessing
3
+ Version: 1.1.2
4
+ Summary: Easy data preprocessing and data augmentation for deep learning models
5
+ Home-page: https://github.com/keras-team/keras-preprocessing
6
+ Author: Keras Team
7
+ License: MIT
8
+ Download-URL: https://github.com/keras-team/keras-preprocessing/tarball/1.1.2
9
+ Platform: UNKNOWN
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Education
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 2
16
+ Classifier: Programming Language :: Python :: 2.7
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.6
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Dist: numpy (>=1.9.1)
22
+ Requires-Dist: six (>=1.9.0)
23
+ Provides-Extra: image
24
+ Requires-Dist: scipy (>=0.14) ; extra == 'image'
25
+ Requires-Dist: Pillow (>=5.2.0) ; extra == 'image'
26
+ Provides-Extra: pep8
27
+ Requires-Dist: flake8 ; extra == 'pep8'
28
+ Provides-Extra: tests
29
+ Requires-Dist: pandas ; extra == 'tests'
30
+ Requires-Dist: Pillow ; extra == 'tests'
31
+ Requires-Dist: tensorflow ; extra == 'tests'
32
+ Requires-Dist: keras ; extra == 'tests'
33
+ Requires-Dist: pytest ; extra == 'tests'
34
+ Requires-Dist: pytest-xdist ; extra == 'tests'
35
+ Requires-Dist: pytest-cov ; extra == 'tests'
36
+
37
+
38
+ Keras Preprocessing is the data preprocessing
39
+ and data augmentation module of the Keras deep learning library.
40
+ It provides utilities for working with image data, text data,
41
+ and sequence data.
42
+
43
+ Read the documentation at: https://keras.io/
44
+
45
+ Keras Preprocessing may be imported directly
46
+ from an up-to-date installation of Keras:
47
+
48
+ ```
49
+ from keras import preprocessing
50
+ ```
51
+
52
+ Keras Preprocessing is compatible with Python 2.7-3.6
53
+ and is distributed under the MIT license.
54
+
55
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/RECORD ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Keras_Preprocessing-1.1.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ Keras_Preprocessing-1.1.2.dist-info/LICENSE,sha256=ff_bls58AOMbJAPPNGUWMB2qu2fePukw9p1eVaBbM5M,1561
3
+ Keras_Preprocessing-1.1.2.dist-info/METADATA,sha256=pchRUWBUcrcviQtXrkRJj5wBO-8VjpW4vT3EpRPjSGc,1933
4
+ Keras_Preprocessing-1.1.2.dist-info/RECORD,,
5
+ Keras_Preprocessing-1.1.2.dist-info/WHEEL,sha256=h_aVn5OB2IERUjMbi2pucmR_zzWJtk303YXvhh60NJ8,110
6
+ Keras_Preprocessing-1.1.2.dist-info/top_level.txt,sha256=4ddNBUmzGauezbV3Sbj_bahnkJddT5IHGBPkA_gHJrA,20
7
+ keras_preprocessing/__init__.py,sha256=ARLJa67_uDO6nBODBXYBG8aCODF11kyakAKC90AY2FA,1392
8
+ keras_preprocessing/__pycache__/__init__.cpython-37.pyc,,
9
+ keras_preprocessing/__pycache__/sequence.cpython-37.pyc,,
10
+ keras_preprocessing/__pycache__/text.cpython-37.pyc,,
11
+ keras_preprocessing/image/__init__.py,sha256=5GPhnkfsGALOpl3JoXyKxbQJwvm6s3dvmPaTqKrY3wo,414
12
+ keras_preprocessing/image/__pycache__/__init__.cpython-37.pyc,,
13
+ keras_preprocessing/image/__pycache__/affine_transformations.cpython-37.pyc,,
14
+ keras_preprocessing/image/__pycache__/dataframe_iterator.cpython-37.pyc,,
15
+ keras_preprocessing/image/__pycache__/directory_iterator.cpython-37.pyc,,
16
+ keras_preprocessing/image/__pycache__/image_data_generator.cpython-37.pyc,,
17
+ keras_preprocessing/image/__pycache__/iterator.cpython-37.pyc,,
18
+ keras_preprocessing/image/__pycache__/numpy_array_iterator.cpython-37.pyc,,
19
+ keras_preprocessing/image/__pycache__/utils.cpython-37.pyc,,
20
+ keras_preprocessing/image/affine_transformations.py,sha256=UqX5po2EkTrHNEaynMdCmY9bOT1DLz73zkFCZ-7q0u0,12248
21
+ keras_preprocessing/image/dataframe_iterator.py,sha256=pgLH9CnI9JF0cS-j2nreP8GxpPK7AV-W7lS_tiLQl3Q,14335
22
+ keras_preprocessing/image/directory_iterator.py,sha256=yZ6FMnznFLpKQ5sU-e5tdpnpUS8FCFQb_EJW6U1JtR8,7322
23
+ keras_preprocessing/image/image_data_generator.py,sha256=i-oTQhqzA1SrE8vj98VIZTM2wPckDiS23TwgjzuBk8s,43865
24
+ keras_preprocessing/image/iterator.py,sha256=mUTx-Bw-GKCAQzB_BB0f-GvLCV19y95-v7MU9dchWrA,11586
25
+ keras_preprocessing/image/numpy_array_iterator.py,sha256=kmEBv9-p4CplIPsp9-ZBSGL_2Y-Ha1kcFurIqepG3Dg,8081
26
+ keras_preprocessing/image/utils.py,sha256=r8m9enJQuvNnx02WNx5s8zU7XFpcdE8SF8Y0VFw4Eko,12375
27
+ keras_preprocessing/sequence.py,sha256=RjR0R0kVnEORm2ZRQ53O3wXzX8KNQYQfq743q-K0KUI,16775
28
+ keras_preprocessing/text.py,sha256=pOeK_IB0QslNkYO0G6XbEGokGcGlA9O1bP8v5azMkM4,19077
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/WHEEL ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.33.4)
3
+ Root-Is-Purelib: true
4
+ Tag: py2-none-any
5
+ Tag: py3-none-any
6
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Keras_Preprocessing-1.1.2.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ keras_preprocessing
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/LICENSE.md ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
2
+ Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
3
+ Copyright 2004 Manfred Stienstra (the original version)
4
+
5
+ All rights reserved.
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions are met:
9
+
10
+ * Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+ * Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+ * Neither the name of the Python Markdown Project nor the
16
+ names of its contributors may be used to endorse or promote products
17
+ derived from this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
20
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
23
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ POSSIBILITY OF SUCH DAMAGE.
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/METADATA ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Markdown
3
+ Version: 3.4.4
4
+ Summary: Python implementation of John Gruber's Markdown.
5
+ Author: Manfred Stienstra, Yuri Takhteyev
6
+ Author-email: Waylan limberg <python.markdown@gmail.com>
7
+ Maintainer: Isaac Muse
8
+ Maintainer-email: Waylan Limberg <python.markdown@gmail.com>
9
+ License: Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
10
+ Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
11
+ Copyright 2004 Manfred Stienstra (the original version)
12
+
13
+ All rights reserved.
14
+
15
+ Redistribution and use in source and binary forms, with or without
16
+ modification, are permitted provided that the following conditions are met:
17
+
18
+ * Redistributions of source code must retain the above copyright
19
+ notice, this list of conditions and the following disclaimer.
20
+ * Redistributions in binary form must reproduce the above copyright
21
+ notice, this list of conditions and the following disclaimer in the
22
+ documentation and/or other materials provided with the distribution.
23
+ * Neither the name of the Python Markdown Project nor the
24
+ names of its contributors may be used to endorse or promote products
25
+ derived from this software without specific prior written permission.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
28
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
29
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
30
+ DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
31
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37
+ POSSIBILITY OF SUCH DAMAGE.
38
+
39
+ Project-URL: Homepage, https://Python-Markdown.github.io/
40
+ Project-URL: Documentation, https://Python-Markdown.github.io/
41
+ Project-URL: Repository, https://github.com/Python-Markdown/markdown
42
+ Project-URL: Issue Tracker, https://github.com/Python-Markdown/markdown/issues
43
+ Project-URL: Changelog, https://github.com/Python-Markdown/markdown/blob/master/docs/change_log/index.md
44
+ Keywords: markdown,markdown-parser,python-markdown,markdown-to-html
45
+ Classifier: Development Status :: 5 - Production/Stable
46
+ Classifier: License :: OSI Approved :: BSD License
47
+ Classifier: Operating System :: OS Independent
48
+ Classifier: Programming Language :: Python
49
+ Classifier: Programming Language :: Python :: 3
50
+ Classifier: Programming Language :: Python :: 3.7
51
+ Classifier: Programming Language :: Python :: 3.8
52
+ Classifier: Programming Language :: Python :: 3.9
53
+ Classifier: Programming Language :: Python :: 3.10
54
+ Classifier: Programming Language :: Python :: 3.11
55
+ Classifier: Programming Language :: Python :: 3 :: Only
56
+ Classifier: Programming Language :: Python :: Implementation :: CPython
57
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
58
+ Classifier: Topic :: Communications :: Email :: Filters
59
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries
60
+ Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
61
+ Classifier: Topic :: Software Development :: Documentation
62
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
63
+ Classifier: Topic :: Text Processing :: Filters
64
+ Classifier: Topic :: Text Processing :: Markup :: HTML
65
+ Classifier: Topic :: Text Processing :: Markup :: Markdown
66
+ Requires-Python: >=3.7
67
+ Description-Content-Type: text/markdown
68
+ License-File: LICENSE.md
69
+ Requires-Dist: importlib-metadata (>=4.4) ; python_version < "3.10"
70
+ Provides-Extra: docs
71
+ Requires-Dist: mkdocs (>=1.0) ; extra == 'docs'
72
+ Requires-Dist: mkdocs-nature (>=0.4) ; extra == 'docs'
73
+ Requires-Dist: mdx-gh-links (>=0.2) ; extra == 'docs'
74
+ Provides-Extra: testing
75
+ Requires-Dist: coverage ; extra == 'testing'
76
+ Requires-Dist: pyyaml ; extra == 'testing'
77
+
78
+ [Python-Markdown][]
79
+ ===================
80
+
81
+ [![Build Status][build-button]][build]
82
+ [![Coverage Status][codecov-button]][codecov]
83
+ [![Latest Version][mdversion-button]][md-pypi]
84
+ [![Python Versions][pyversion-button]][md-pypi]
85
+ [![BSD License][bsdlicense-button]][bsdlicense]
86
+ [![Code of Conduct][codeofconduct-button]][Code of Conduct]
87
+
88
+ [build-button]: https://github.com/Python-Markdown/markdown/workflows/CI/badge.svg?event=push
89
+ [build]: https://github.com/Python-Markdown/markdown/actions?query=workflow%3ACI+event%3Apush
90
+ [codecov-button]: https://codecov.io/gh/Python-Markdown/markdown/branch/master/graph/badge.svg
91
+ [codecov]: https://codecov.io/gh/Python-Markdown/markdown
92
+ [mdversion-button]: https://img.shields.io/pypi/v/Markdown.svg
93
+ [md-pypi]: https://pypi.org/project/Markdown/
94
+ [pyversion-button]: https://img.shields.io/pypi/pyversions/Markdown.svg
95
+ [bsdlicense-button]: https://img.shields.io/badge/license-BSD-yellow.svg
96
+ [bsdlicense]: https://opensource.org/licenses/BSD-3-Clause
97
+ [codeofconduct-button]: https://img.shields.io/badge/code%20of%20conduct-contributor%20covenant-green.svg?style=flat-square
98
+ [Code of Conduct]: https://github.com/Python-Markdown/markdown/blob/master/CODE_OF_CONDUCT.md
99
+
100
+ This is a Python implementation of John Gruber's [Markdown][].
101
+ It is almost completely compliant with the reference implementation,
102
+ though there are a few known issues. See [Features][] for information
103
+ on what exactly is supported and what is not. Additional features are
104
+ supported by the [Available Extensions][].
105
+
106
+ [Python-Markdown]: https://Python-Markdown.github.io/
107
+ [Markdown]: https://daringfireball.net/projects/markdown/
108
+ [Features]: https://Python-Markdown.github.io#Features
109
+ [Available Extensions]: https://Python-Markdown.github.io/extensions
110
+
111
+ Documentation
112
+ -------------
113
+
114
+ ```bash
115
+ pip install markdown
116
+ ```
117
+ ```python
118
+ import markdown
119
+ html = markdown.markdown(your_text_string)
120
+ ```
121
+
122
+ For more advanced [installation] and [usage] documentation, see the `docs/` directory
123
+ of the distribution or the project website at <https://Python-Markdown.github.io/>.
124
+
125
+ [installation]: https://python-markdown.github.io/install/
126
+ [usage]: https://python-markdown.github.io/reference/
127
+
128
+ See the change log at <https://Python-Markdown.github.io/change_log>.
129
+
130
+ Support
131
+ -------
132
+
133
+ You may report bugs, ask for help, and discuss various other issues on the [bug tracker][].
134
+
135
+ [bug tracker]: https://github.com/Python-Markdown/markdown/issues
136
+
137
+ Code of Conduct
138
+ ---------------
139
+
140
+ Everyone interacting in the Python-Markdown project's code bases, issue trackers,
141
+ and mailing lists is expected to follow the [Code of Conduct].
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/RECORD ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../../bin/markdown_py,sha256=xzrfmCar1ZJyeLbzX4ARxmHdgL7mBH6mHBKzFym8ZBA,248
2
+ Markdown-3.4.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
3
+ Markdown-3.4.4.dist-info/LICENSE.md,sha256=bxGTy2NHGOZcOlN9biXr1hSCDsDvaTz8EiSBEmONZNo,1645
4
+ Markdown-3.4.4.dist-info/METADATA,sha256=3t_AJ71xB1ulJsKKME-ecE_WZHv4RGfI-Znm9LDfv1c,6861
5
+ Markdown-3.4.4.dist-info/RECORD,,
6
+ Markdown-3.4.4.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
7
+ Markdown-3.4.4.dist-info/entry_points.txt,sha256=lMEyiiA_ZZyfPCBlDviBl-SiU0cfoeuEKpwxw361sKQ,1102
8
+ Markdown-3.4.4.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9
9
+ markdown/__init__.py,sha256=XBsIkhLRPtAIiCAHaiPSu03JaKbHPYqO4bfD0hq6VVo,1013
10
+ markdown/__main__.py,sha256=LVrZCvarSImaF3nRs7B9JXZDBnsGPfiILoPc0pxPgbI,5805
11
+ markdown/__meta__.py,sha256=vYlzYL8jGHCvF4Vieh7mL8oEjiIhBg9NH1br1NOGDUA,1654
12
+ markdown/__pycache__/__init__.cpython-37.pyc,,
13
+ markdown/__pycache__/__main__.cpython-37.pyc,,
14
+ markdown/__pycache__/__meta__.cpython-37.pyc,,
15
+ markdown/__pycache__/blockparser.cpython-37.pyc,,
16
+ markdown/__pycache__/blockprocessors.cpython-37.pyc,,
17
+ markdown/__pycache__/core.cpython-37.pyc,,
18
+ markdown/__pycache__/htmlparser.cpython-37.pyc,,
19
+ markdown/__pycache__/inlinepatterns.cpython-37.pyc,,
20
+ markdown/__pycache__/postprocessors.cpython-37.pyc,,
21
+ markdown/__pycache__/preprocessors.cpython-37.pyc,,
22
+ markdown/__pycache__/serializers.cpython-37.pyc,,
23
+ markdown/__pycache__/test_tools.cpython-37.pyc,,
24
+ markdown/__pycache__/treeprocessors.cpython-37.pyc,,
25
+ markdown/__pycache__/util.cpython-37.pyc,,
26
+ markdown/blockparser.py,sha256=LdOe-2JI-veEsanlWnQUrFHQ_xglyI-UUd5BrNtgi5M,4162
27
+ markdown/blockprocessors.py,sha256=ITWkWUycVERiqZrHS5hEJaZqupiElEpeNF5YC09txwQ,24965
28
+ markdown/core.py,sha256=HSYh7ATmZNVagq_D4aN69qlc-g_c4LDGimkkPprVffY,14729
29
+ markdown/extensions/__init__.py,sha256=JJnN0JI4mU7txHrNNpWcRgUWNh22yqN1j6hUk9bxKrs,2869
30
+ markdown/extensions/__pycache__/__init__.cpython-37.pyc,,
31
+ markdown/extensions/__pycache__/abbr.cpython-37.pyc,,
32
+ markdown/extensions/__pycache__/admonition.cpython-37.pyc,,
33
+ markdown/extensions/__pycache__/attr_list.cpython-37.pyc,,
34
+ markdown/extensions/__pycache__/codehilite.cpython-37.pyc,,
35
+ markdown/extensions/__pycache__/def_list.cpython-37.pyc,,
36
+ markdown/extensions/__pycache__/extra.cpython-37.pyc,,
37
+ markdown/extensions/__pycache__/fenced_code.cpython-37.pyc,,
38
+ markdown/extensions/__pycache__/footnotes.cpython-37.pyc,,
39
+ markdown/extensions/__pycache__/legacy_attrs.cpython-37.pyc,,
40
+ markdown/extensions/__pycache__/legacy_em.cpython-37.pyc,,
41
+ markdown/extensions/__pycache__/md_in_html.cpython-37.pyc,,
42
+ markdown/extensions/__pycache__/meta.cpython-37.pyc,,
43
+ markdown/extensions/__pycache__/nl2br.cpython-37.pyc,,
44
+ markdown/extensions/__pycache__/sane_lists.cpython-37.pyc,,
45
+ markdown/extensions/__pycache__/smarty.cpython-37.pyc,,
46
+ markdown/extensions/__pycache__/tables.cpython-37.pyc,,
47
+ markdown/extensions/__pycache__/toc.cpython-37.pyc,,
48
+ markdown/extensions/__pycache__/wikilinks.cpython-37.pyc,,
49
+ markdown/extensions/abbr.py,sha256=bzUCjh3OlbxwSY7dmoglixM63JM4-Pt-un7cBbEvNRE,3191
50
+ markdown/extensions/admonition.py,sha256=YuuznonEoYXkytbpCIRP8nqViUOhJlzCXubrpYvW4UY,5892
51
+ markdown/extensions/attr_list.py,sha256=p9zQjzCszYQ9ExrFGfs56xIxcYal3NvneF5EzBuXfjw,6026
52
+ markdown/extensions/codehilite.py,sha256=f6ByNCD06Z_MMHGI__wJ5o8CBAZPe5TYSvswfkCAtMA,12966
53
+ markdown/extensions/def_list.py,sha256=CLLuACOPOShLwiuY1jgWb06RfyOcnFfu464jd5jS5z0,3643
54
+ markdown/extensions/extra.py,sha256=TRi9DvkSQemA5WALtwd_mpk7qqQFxISLiHaoIpuo8bA,1843
55
+ markdown/extensions/fenced_code.py,sha256=BeU5iX84l4fuXHJy3ruvCre5ufLQavJiZWZzkj7hGoQ,7240
56
+ markdown/extensions/footnotes.py,sha256=_hP1VoW4Drxg_wsy2vcxu3ga8RBNy7LhEaKB7Bd05dU,15887
57
+ markdown/extensions/legacy_attrs.py,sha256=IiqvLJTzVhNSeJIwPVKxCUnB12-qoxyUE4jW-2o_VCg,2548
58
+ markdown/extensions/legacy_em.py,sha256=A01v5kkTwkQeyE87pfCgOIoc6_vSnspsiv8EJoGgKlA,1584
59
+ markdown/extensions/md_in_html.py,sha256=rHNMv6MhO3SoK_twjcAkNjMY0Fn-w5yXC1fbjBS9kPs,15884
60
+ markdown/extensions/meta.py,sha256=DH1Qr2xbvSItnY4EG__NNNhh7JEMUHeFrwDhX3B4wno,2333
61
+ markdown/extensions/nl2br.py,sha256=CnDxFoVTuD4AIbYMKcs-X8XVIEsTyTQg0YTwOVoXGjw,784
62
+ markdown/extensions/sane_lists.py,sha256=ZQmCf-247KBexVG0fc62nDvokGkV6W1uavYbieNKSG4,1505
63
+ markdown/extensions/smarty.py,sha256=Of926JSkkSEj2tgQZ5Vh01gOaHG9oFgchjX41W-4crk,10081
64
+ markdown/extensions/tables.py,sha256=fzZL40w1jNknE75jfH-f1cCw6Fp3jsjody7350ejzXs,8111
65
+ markdown/extensions/toc.py,sha256=mBe2hsMWQCE6Jc-PuugxMUIvOzs2iIKqPnNVYQYZ_jg,13972
66
+ markdown/extensions/wikilinks.py,sha256=l9gONSBXQECNMSKN-o51OTgMTTurEux9NKfisfE8zbk,2814
67
+ markdown/htmlparser.py,sha256=N2XhpAWhYtv6HvRBEL3x78-YFk8XCzDrJLS9f0GWyGI,13076
68
+ markdown/inlinepatterns.py,sha256=rmcoBMqA0zVd4Xr6BnP7X6DCydEJvJyYyau-lU7Q22o,30121
69
+ markdown/postprocessors.py,sha256=anYxZU1BQIe71SBXHpx4O7ev_Ss5EbaU9PFox41aeh8,4320
70
+ markdown/preprocessors.py,sha256=-s8QGHGlX7JAIJTfCivuc-CVwTLWs0IyEU94YUT2IvQ,2742
71
+ markdown/serializers.py,sha256=7I3QoVHVXs3uxQAS5WFiP42nPkuUUoy3GsO0DFEAPpU,6519
72
+ markdown/test_tools.py,sha256=mWmmlDuTzlFDWPWYeeSAWm3vuJSSo00gm-AeUJpCvk0,8392
73
+ markdown/treeprocessors.py,sha256=aa31Rtjl587HCC7Wiz6weLiR2-knM263oO2bYeW9foU,16345
74
+ markdown/util.py,sha256=ztabZWmIzs-AZM2DdFowvYJIQSUcUBGAFuRoexbmS00,11678
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.41.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/entry_points.txt ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [console_scripts]
2
+ markdown_py = markdown.__main__:run
3
+
4
+ [markdown.extensions]
5
+ abbr = markdown.extensions.abbr:AbbrExtension
6
+ admonition = markdown.extensions.admonition:AdmonitionExtension
7
+ attr_list = markdown.extensions.attr_list:AttrListExtension
8
+ codehilite = markdown.extensions.codehilite:CodeHiliteExtension
9
+ def_list = markdown.extensions.def_list:DefListExtension
10
+ extra = markdown.extensions.extra:ExtraExtension
11
+ fenced_code = markdown.extensions.fenced_code:FencedCodeExtension
12
+ footnotes = markdown.extensions.footnotes:FootnoteExtension
13
+ legacy_attrs = markdown.extensions.legacy_attrs:LegacyAttrExtension
14
+ legacy_em = markdown.extensions.legacy_em:LegacyEmExtension
15
+ md_in_html = markdown.extensions.md_in_html:MarkdownInHtmlExtension
16
+ meta = markdown.extensions.meta:MetaExtension
17
+ nl2br = markdown.extensions.nl2br:Nl2BrExtension
18
+ sane_lists = markdown.extensions.sane_lists:SaneListExtension
19
+ smarty = markdown.extensions.smarty:SmartyExtension
20
+ tables = markdown.extensions.tables:TableExtension
21
+ toc = markdown.extensions.toc:TocExtension
22
+ wikilinks = markdown.extensions.wikilinks:WikiLinkExtension
protege/deep-pantilt/venv/lib/python3.7/site-packages/Markdown-3.4.4.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ markdown
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright 2010 Pallets
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are
5
+ met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ 3. Neither the name of the copyright holder nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
24
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/METADATA ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: MarkupSafe
3
+ Version: 2.1.5
4
+ Summary: Safely add untrusted strings to HTML/XML markup.
5
+ Home-page: https://palletsprojects.com/p/markupsafe/
6
+ Maintainer: Pallets
7
+ Maintainer-email: contact@palletsprojects.com
8
+ License: BSD-3-Clause
9
+ Project-URL: Donate, https://palletsprojects.com/donate
10
+ Project-URL: Documentation, https://markupsafe.palletsprojects.com/
11
+ Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/
12
+ Project-URL: Source Code, https://github.com/pallets/markupsafe/
13
+ Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/
14
+ Project-URL: Chat, https://discord.gg/pallets
15
+ Classifier: Development Status :: 5 - Production/Stable
16
+ Classifier: Environment :: Web Environment
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: BSD License
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python
21
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
+ Classifier: Topic :: Text Processing :: Markup :: HTML
23
+ Requires-Python: >=3.7
24
+ Description-Content-Type: text/x-rst
25
+ License-File: LICENSE.rst
26
+
27
+ MarkupSafe
28
+ ==========
29
+
30
+ MarkupSafe implements a text object that escapes characters so it is
31
+ safe to use in HTML and XML. Characters that have special meanings are
32
+ replaced so that they display as the actual characters. This mitigates
33
+ injection attacks, meaning untrusted user input can safely be displayed
34
+ on a page.
35
+
36
+
37
+ Installing
38
+ ----------
39
+
40
+ Install and update using `pip`_:
41
+
42
+ .. code-block:: text
43
+
44
+ pip install -U MarkupSafe
45
+
46
+ .. _pip: https://pip.pypa.io/en/stable/getting-started/
47
+
48
+
49
+ Examples
50
+ --------
51
+
52
+ .. code-block:: pycon
53
+
54
+ >>> from markupsafe import Markup, escape
55
+
56
+ >>> # escape replaces special characters and wraps in Markup
57
+ >>> escape("<script>alert(document.cookie);</script>")
58
+ Markup('&lt;script&gt;alert(document.cookie);&lt;/script&gt;')
59
+
60
+ >>> # wrap in Markup to mark text "safe" and prevent escaping
61
+ >>> Markup("<strong>Hello</strong>")
62
+ Markup('<strong>hello</strong>')
63
+
64
+ >>> escape(Markup("<strong>Hello</strong>"))
65
+ Markup('<strong>hello</strong>')
66
+
67
+ >>> # Markup is a str subclass
68
+ >>> # methods and operators escape their arguments
69
+ >>> template = Markup("Hello <em>{name}</em>")
70
+ >>> template.format(name='"World"')
71
+ Markup('Hello <em>&#34;World&#34;</em>')
72
+
73
+
74
+ Donate
75
+ ------
76
+
77
+ The Pallets organization develops and supports MarkupSafe and other
78
+ popular packages. In order to grow the community of contributors and
79
+ users, and allow the maintainers to devote more time to the projects,
80
+ `please donate today`_.
81
+
82
+ .. _please donate today: https://palletsprojects.com/donate
83
+
84
+
85
+ Links
86
+ -----
87
+
88
+ - Documentation: https://markupsafe.palletsprojects.com/
89
+ - Changes: https://markupsafe.palletsprojects.com/changes/
90
+ - PyPI Releases: https://pypi.org/project/MarkupSafe/
91
+ - Source Code: https://github.com/pallets/markupsafe/
92
+ - Issue Tracker: https://github.com/pallets/markupsafe/issues/
93
+ - Chat: https://discord.gg/pallets
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/RECORD ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MarkupSafe-2.1.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ MarkupSafe-2.1.5.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475
3
+ MarkupSafe-2.1.5.dist-info/METADATA,sha256=2dRDPam6OZLfpX0wg1JN5P3u9arqACxVSfdGmsJU7o8,3003
4
+ MarkupSafe-2.1.5.dist-info/RECORD,,
5
+ MarkupSafe-2.1.5.dist-info/WHEEL,sha256=uAP-ukXX4cQcmS4DJIfTMngbzZ5Fat-TcU2LYkL-U3k,104
6
+ MarkupSafe-2.1.5.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11
7
+ markupsafe/__init__.py,sha256=r7VOTjUq7EMQ4v3p4R1LoVOGJg6ysfYRncLr34laRBs,10958
8
+ markupsafe/__pycache__/__init__.cpython-37.pyc,,
9
+ markupsafe/__pycache__/_native.cpython-37.pyc,,
10
+ markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713
11
+ markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083
12
+ markupsafe/_speedups.cpython-37m-arm-linux-gnueabihf.so,sha256=P4IiUcWUKMprZZXfnExbbmyOuZLbUe6efUknTcFV91s,35132
13
+ markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229
14
+ markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.41.2)
3
+ Root-Is-Purelib: false
4
+ Tag: cp37-cp37m-linux_armv7l
5
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ markupsafe
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/LICENSE.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2013-2024, Kim Davies and contributors.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the distribution.
16
+
17
+ 3. Neither the name of the copyright holder nor the names of its
18
+ contributors may be used to endorse or promote products derived from
19
+ this software without specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/METADATA ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: idna
3
+ Version: 3.10
4
+ Summary: Internationalized Domain Names in Applications (IDNA)
5
+ Author-email: Kim Davies <kim+pypi@gumleaf.org>
6
+ Requires-Python: >=3.6
7
+ Description-Content-Type: text/x-rst
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Intended Audience :: System Administrators
11
+ Classifier: License :: OSI Approved :: BSD License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.6
17
+ Classifier: Programming Language :: Python :: 3.7
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
26
+ Classifier: Topic :: Internet :: Name Service (DNS)
27
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
+ Classifier: Topic :: Utilities
29
+ Requires-Dist: ruff >= 0.6.2 ; extra == "all"
30
+ Requires-Dist: mypy >= 1.11.2 ; extra == "all"
31
+ Requires-Dist: pytest >= 8.3.2 ; extra == "all"
32
+ Requires-Dist: flake8 >= 7.1.1 ; extra == "all"
33
+ Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst
34
+ Project-URL: Issue tracker, https://github.com/kjd/idna/issues
35
+ Project-URL: Source, https://github.com/kjd/idna
36
+ Provides-Extra: all
37
+
38
+ Internationalized Domain Names in Applications (IDNA)
39
+ =====================================================
40
+
41
+ Support for the Internationalized Domain Names in
42
+ Applications (IDNA) protocol as specified in `RFC 5891
43
+ <https://tools.ietf.org/html/rfc5891>`_. This is the latest version of
44
+ the protocol and is sometimes referred to as “IDNA 2008”.
45
+
46
+ This library also provides support for Unicode Technical
47
+ Standard 46, `Unicode IDNA Compatibility Processing
48
+ <https://unicode.org/reports/tr46/>`_.
49
+
50
+ This acts as a suitable replacement for the “encodings.idna”
51
+ module that comes with the Python standard library, but which
52
+ only supports the older superseded IDNA specification (`RFC 3490
53
+ <https://tools.ietf.org/html/rfc3490>`_).
54
+
55
+ Basic functions are simply executed:
56
+
57
+ .. code-block:: pycon
58
+
59
+ >>> import idna
60
+ >>> idna.encode('ドメイン.テスト')
61
+ b'xn--eckwd4c7c.xn--zckzah'
62
+ >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
63
+ ドメイン.テスト
64
+
65
+
66
+ Installation
67
+ ------------
68
+
69
+ This package is available for installation from PyPI:
70
+
71
+ .. code-block:: bash
72
+
73
+ $ python3 -m pip install idna
74
+
75
+
76
+ Usage
77
+ -----
78
+
79
+ For typical usage, the ``encode`` and ``decode`` functions will take a
80
+ domain name argument and perform a conversion to A-labels or U-labels
81
+ respectively.
82
+
83
+ .. code-block:: pycon
84
+
85
+ >>> import idna
86
+ >>> idna.encode('ドメイン.テスト')
87
+ b'xn--eckwd4c7c.xn--zckzah'
88
+ >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
89
+ ドメイン.テスト
90
+
91
+ You may use the codec encoding and decoding methods using the
92
+ ``idna.codec`` module:
93
+
94
+ .. code-block:: pycon
95
+
96
+ >>> import idna.codec
97
+ >>> print('домен.испытание'.encode('idna2008'))
98
+ b'xn--d1acufc.xn--80akhbyknj4f'
99
+ >>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008'))
100
+ домен.испытание
101
+
102
+ Conversions can be applied at a per-label basis using the ``ulabel`` or
103
+ ``alabel`` functions if necessary:
104
+
105
+ .. code-block:: pycon
106
+
107
+ >>> idna.alabel('测试')
108
+ b'xn--0zwm56d'
109
+
110
+ Compatibility Mapping (UTS #46)
111
+ +++++++++++++++++++++++++++++++
112
+
113
+ As described in `RFC 5895 <https://tools.ietf.org/html/rfc5895>`_, the
114
+ IDNA specification does not normalize input from different potential
115
+ ways a user may input a domain name. This functionality, known as
116
+ a “mapping”, is considered by the specification to be a local
117
+ user-interface issue distinct from IDNA conversion functionality.
118
+
119
+ This library provides one such mapping that was developed by the
120
+ Unicode Consortium. Known as `Unicode IDNA Compatibility Processing
121
+ <https://unicode.org/reports/tr46/>`_, it provides for both a regular
122
+ mapping for typical applications, as well as a transitional mapping to
123
+ help migrate from older IDNA 2003 applications. Strings are
124
+ preprocessed according to Section 4.4 “Preprocessing for IDNA2008”
125
+ prior to the IDNA operations.
126
+
127
+ For example, “Königsgäßchen” is not a permissible label as *LATIN
128
+ CAPITAL LETTER K* is not allowed (nor are capital letters in general).
129
+ UTS 46 will convert this into lower case prior to applying the IDNA
130
+ conversion.
131
+
132
+ .. code-block:: pycon
133
+
134
+ >>> import idna
135
+ >>> idna.encode('Königsgäßchen')
136
+ ...
137
+ idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
138
+ >>> idna.encode('Königsgäßchen', uts46=True)
139
+ b'xn--knigsgchen-b4a3dun'
140
+ >>> print(idna.decode('xn--knigsgchen-b4a3dun'))
141
+ königsgäßchen
142
+
143
+ Transitional processing provides conversions to help transition from
144
+ the older 2003 standard to the current standard. For example, in the
145
+ original IDNA specification, the *LATIN SMALL LETTER SHARP S* (ß) was
146
+ converted into two *LATIN SMALL LETTER S* (ss), whereas in the current
147
+ IDNA specification this conversion is not performed.
148
+
149
+ .. code-block:: pycon
150
+
151
+ >>> idna.encode('Königsgäßchen', uts46=True, transitional=True)
152
+ 'xn--knigsgsschen-lcb0w'
153
+
154
+ Implementers should use transitional processing with caution, only in
155
+ rare cases where conversion from legacy labels to current labels must be
156
+ performed (i.e. IDNA implementations that pre-date 2008). For typical
157
+ applications that just need to convert labels, transitional processing
158
+ is unlikely to be beneficial and could produce unexpected incompatible
159
+ results.
160
+
161
+ ``encodings.idna`` Compatibility
162
+ ++++++++++++++++++++++++++++++++
163
+
164
+ Function calls from the Python built-in ``encodings.idna`` module are
165
+ mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
166
+ Simply substitute the ``import`` clause in your code to refer to the new
167
+ module name.
168
+
169
+ Exceptions
170
+ ----------
171
+
172
+ All errors raised during the conversion following the specification
173
+ should raise an exception derived from the ``idna.IDNAError`` base
174
+ class.
175
+
176
+ More specific exceptions that may be generated as ``idna.IDNABidiError``
177
+ when the error reflects an illegal combination of left-to-right and
178
+ right-to-left characters in a label; ``idna.InvalidCodepoint`` when
179
+ a specific codepoint is an illegal character in an IDN label (i.e.
180
+ INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is
181
+ illegal based on its positional context (i.e. it is CONTEXTO or CONTEXTJ
182
+ but the contextual requirements are not satisfied.)
183
+
184
+ Building and Diagnostics
185
+ ------------------------
186
+
187
+ The IDNA and UTS 46 functionality relies upon pre-calculated lookup
188
+ tables for performance. These tables are derived from computing against
189
+ eligibility criteria in the respective standards. These tables are
190
+ computed using the command-line script ``tools/idna-data``.
191
+
192
+ This tool will fetch relevant codepoint data from the Unicode repository
193
+ and perform the required calculations to identify eligibility. There are
194
+ three main modes:
195
+
196
+ * ``idna-data make-libdata``. Generates ``idnadata.py`` and
197
+ ``uts46data.py``, the pre-calculated lookup tables used for IDNA and
198
+ UTS 46 conversions. Implementers who wish to track this library against
199
+ a different Unicode version may use this tool to manually generate a
200
+ different version of the ``idnadata.py`` and ``uts46data.py`` files.
201
+
202
+ * ``idna-data make-table``. Generate a table of the IDNA disposition
203
+ (e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix
204
+ B.1 of RFC 5892 and the pre-computed tables published by `IANA
205
+ <https://www.iana.org/>`_.
206
+
207
+ * ``idna-data U+0061``. Prints debugging output on the various
208
+ properties associated with an individual Unicode codepoint (in this
209
+ case, U+0061), that are used to assess the IDNA and UTS 46 status of a
210
+ codepoint. This is helpful in debugging or analysis.
211
+
212
+ The tool accepts a number of arguments, described using ``idna-data
213
+ -h``. Most notably, the ``--version`` argument allows the specification
214
+ of the version of Unicode to be used in computing the table data. For
215
+ example, ``idna-data --version 9.0.0 make-libdata`` will generate
216
+ library data against Unicode 9.0.0.
217
+
218
+
219
+ Additional Notes
220
+ ----------------
221
+
222
+ * **Packages**. The latest tagged release version is published in the
223
+ `Python Package Index <https://pypi.org/project/idna/>`_.
224
+
225
+ * **Version support**. This library supports Python 3.6 and higher.
226
+ As this library serves as a low-level toolkit for a variety of
227
+ applications, many of which strive for broad compatibility with older
228
+ Python versions, there is no rush to remove older interpreter support.
229
+ Removing support for older versions should be well justified in that the
230
+ maintenance burden has become too high.
231
+
232
+ * **Python 2**. Python 2 is supported by version 2.x of this library.
233
+ Use "idna<3" in your requirements file if you need this library for
234
+ a Python 2 application. Be advised that these versions are no longer
235
+ actively developed.
236
+
237
+ * **Testing**. The library has a test suite based on each rule of the
238
+ IDNA specification, as well as tests that are provided as part of the
239
+ Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing
240
+ <https://unicode.org/reports/tr46/>`_.
241
+
242
+ * **Emoji**. It is an occasional request to support emoji domains in
243
+ this library. Encoding of symbols like emoji is expressly prohibited by
244
+ the technical standard IDNA 2008 and emoji domains are broadly phased
245
+ out across the domain industry due to associated security risks. For
246
+ now, applications that need to support these non-compliant labels
247
+ may wish to consider trying the encode/decode operation in this library
248
+ first, and then falling back to using `encodings.idna`. See `the Github
249
+ project <https://github.com/kjd/idna/issues/18>`_ for more discussion.
250
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/RECORD ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ idna-3.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ idna-3.10.dist-info/LICENSE.md,sha256=pZ8LDvNjWHQQmkRhykT_enDVBpboFHZ7-vch1Mmw2w8,1541
3
+ idna-3.10.dist-info/METADATA,sha256=URR5ZyDfQ1PCEGhkYoojqfi2Ra0tau2--lhwG4XSfjI,10158
4
+ idna-3.10.dist-info/RECORD,,
5
+ idna-3.10.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
6
+ idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
7
+ idna/__pycache__/__init__.cpython-37.pyc,,
8
+ idna/__pycache__/codec.cpython-37.pyc,,
9
+ idna/__pycache__/compat.cpython-37.pyc,,
10
+ idna/__pycache__/core.cpython-37.pyc,,
11
+ idna/__pycache__/idnadata.cpython-37.pyc,,
12
+ idna/__pycache__/intranges.cpython-37.pyc,,
13
+ idna/__pycache__/package_data.cpython-37.pyc,,
14
+ idna/__pycache__/uts46data.cpython-37.pyc,,
15
+ idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422
16
+ idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316
17
+ idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239
18
+ idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306
19
+ idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898
20
+ idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21
21
+ idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289
protege/deep-pantilt/venv/lib/python3.7/site-packages/idna-3.10.dist-info/WHEEL ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: flit 3.9.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/LICENSE ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/METADATA ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: importlib-metadata
3
+ Version: 6.7.0
4
+ Summary: Read metadata from Python packages
5
+ Home-page: https://github.com/python/importlib_metadata
6
+ Author: Jason R. Coombs
7
+ Author-email: jaraco@jaraco.com
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3 :: Only
13
+ Requires-Python: >=3.7
14
+ License-File: LICENSE
15
+ Requires-Dist: zipp (>=0.5)
16
+ Requires-Dist: typing-extensions (>=3.6.4) ; python_version < "3.8"
17
+ Provides-Extra: docs
18
+ Requires-Dist: sphinx (>=3.5) ; extra == 'docs'
19
+ Requires-Dist: jaraco.packaging (>=9) ; extra == 'docs'
20
+ Requires-Dist: rst.linker (>=1.9) ; extra == 'docs'
21
+ Requires-Dist: furo ; extra == 'docs'
22
+ Requires-Dist: sphinx-lint ; extra == 'docs'
23
+ Requires-Dist: jaraco.tidelift (>=1.4) ; extra == 'docs'
24
+ Provides-Extra: perf
25
+ Requires-Dist: ipython ; extra == 'perf'
26
+ Provides-Extra: testing
27
+ Requires-Dist: pytest (>=6) ; extra == 'testing'
28
+ Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing'
29
+ Requires-Dist: pytest-cov ; extra == 'testing'
30
+ Requires-Dist: pytest-enabler (>=1.3) ; extra == 'testing'
31
+ Requires-Dist: pytest-ruff ; extra == 'testing'
32
+ Requires-Dist: packaging ; extra == 'testing'
33
+ Requires-Dist: pyfakefs ; extra == 'testing'
34
+ Requires-Dist: flufl.flake8 ; extra == 'testing'
35
+ Requires-Dist: pytest-perf (>=0.9.2) ; extra == 'testing'
36
+ Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing'
37
+ Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing'
38
+ Requires-Dist: importlib-resources (>=1.3) ; (python_version < "3.9") and extra == 'testing'
39
+
40
+ .. image:: https://img.shields.io/pypi/v/importlib_metadata.svg
41
+ :target: https://pypi.org/project/importlib_metadata
42
+
43
+ .. image:: https://img.shields.io/pypi/pyversions/importlib_metadata.svg
44
+
45
+ .. image:: https://github.com/python/importlib_metadata/workflows/tests/badge.svg
46
+ :target: https://github.com/python/importlib_metadata/actions?query=workflow%3A%22tests%22
47
+ :alt: tests
48
+
49
+ .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
50
+ :target: https://github.com/psf/black
51
+ :alt: Code style: Black
52
+
53
+ .. image:: https://readthedocs.org/projects/importlib-metadata/badge/?version=latest
54
+ :target: https://importlib-metadata.readthedocs.io/en/latest/?badge=latest
55
+
56
+ .. image:: https://img.shields.io/badge/skeleton-2023-informational
57
+ :target: https://blog.jaraco.com/skeleton
58
+
59
+ .. image:: https://tidelift.com/badges/package/pypi/importlib-metadata
60
+ :target: https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=readme
61
+
62
+ Library to access the metadata for a Python package.
63
+
64
+ This package supplies third-party access to the functionality of
65
+ `importlib.metadata <https://docs.python.org/3/library/importlib.metadata.html>`_
66
+ including improvements added to subsequent Python versions.
67
+
68
+
69
+ Compatibility
70
+ =============
71
+
72
+ New features are introduced in this third-party library and later merged
73
+ into CPython. The following table indicates which versions of this library
74
+ were contributed to different versions in the standard library:
75
+
76
+ .. list-table::
77
+ :header-rows: 1
78
+
79
+ * - importlib_metadata
80
+ - stdlib
81
+ * - 6.5
82
+ - 3.12
83
+ * - 4.13
84
+ - 3.11
85
+ * - 4.6
86
+ - 3.10
87
+ * - 1.4
88
+ - 3.8
89
+
90
+
91
+ Usage
92
+ =====
93
+
94
+ See the `online documentation <https://importlib-metadata.readthedocs.io/>`_
95
+ for usage details.
96
+
97
+ `Finder authors
98
+ <https://docs.python.org/3/reference/import.html#finders-and-loaders>`_ can
99
+ also add support for custom package installers. See the above documentation
100
+ for details.
101
+
102
+
103
+ Caveats
104
+ =======
105
+
106
+ This project primarily supports third-party packages installed by PyPA
107
+ tools (or other conforming packages). It does not support:
108
+
109
+ - Packages in the stdlib.
110
+ - Packages installed without metadata.
111
+
112
+ Project details
113
+ ===============
114
+
115
+ * Project home: https://github.com/python/importlib_metadata
116
+ * Report bugs at: https://github.com/python/importlib_metadata/issues
117
+ * Code hosting: https://github.com/python/importlib_metadata
118
+ * Documentation: https://importlib-metadata.readthedocs.io/
119
+
120
+ For Enterprise
121
+ ==============
122
+
123
+ Available as part of the Tidelift Subscription.
124
+
125
+ This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
126
+
127
+ `Learn more <https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=referral&utm_campaign=github>`_.
128
+
129
+ Security Contact
130
+ ================
131
+
132
+ To report a security vulnerability, please use the
133
+ `Tidelift security contact <https://tidelift.com/security>`_.
134
+ Tidelift will coordinate the fix and disclosure.
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/RECORD ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ importlib_metadata-6.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ importlib_metadata-6.7.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
3
+ importlib_metadata-6.7.0.dist-info/METADATA,sha256=JDrzuuLRE3CxIRXLeXdZGGFDrVlEXUvt-chm0-s-TtI,4878
4
+ importlib_metadata-6.7.0.dist-info/RECORD,,
5
+ importlib_metadata-6.7.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
6
+ importlib_metadata-6.7.0.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19
7
+ importlib_metadata/__init__.py,sha256=MQx_tU_lZg-7U91wdrlrsDt0MGPXkpraLevB8LO1NNc,30724
8
+ importlib_metadata/__pycache__/__init__.cpython-37.pyc,,
9
+ importlib_metadata/__pycache__/_adapters.cpython-37.pyc,,
10
+ importlib_metadata/__pycache__/_collections.cpython-37.pyc,,
11
+ importlib_metadata/__pycache__/_compat.cpython-37.pyc,,
12
+ importlib_metadata/__pycache__/_functools.cpython-37.pyc,,
13
+ importlib_metadata/__pycache__/_itertools.cpython-37.pyc,,
14
+ importlib_metadata/__pycache__/_meta.cpython-37.pyc,,
15
+ importlib_metadata/__pycache__/_py39compat.cpython-37.pyc,,
16
+ importlib_metadata/__pycache__/_text.cpython-37.pyc,,
17
+ importlib_metadata/_adapters.py,sha256=i8S6Ib1OQjcILA-l4gkzktMZe18TaeUNI49PLRp6OBU,2454
18
+ importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743
19
+ importlib_metadata/_compat.py,sha256=xaiD8pwYYPCWkVgR30411iT4OmLbSbSAigzhp0nTROw,1735
20
+ importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895
21
+ importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068
22
+ importlib_metadata/_meta.py,sha256=I2AuaUMr5a6cTdZleV9WpyqUCSooqqV-zSzr1qn7FMw,1615
23
+ importlib_metadata/_py39compat.py,sha256=2Tk5twb_VgLCY-1NEAQjdZp_S9OFMC-pUzP2isuaPsQ,1098
24
+ importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166
25
+ importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.40.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata-6.7.0.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ importlib_metadata
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__init__.py ADDED
@@ -0,0 +1,1015 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import abc
4
+ import csv
5
+ import sys
6
+ import zipp
7
+ import email
8
+ import inspect
9
+ import pathlib
10
+ import operator
11
+ import textwrap
12
+ import warnings
13
+ import functools
14
+ import itertools
15
+ import posixpath
16
+ import collections
17
+
18
+ from . import _adapters, _meta, _py39compat
19
+ from ._collections import FreezableDefaultDict, Pair
20
+ from ._compat import (
21
+ NullFinder,
22
+ StrPath,
23
+ install,
24
+ pypy_partial,
25
+ )
26
+ from ._functools import method_cache, pass_none
27
+ from ._itertools import always_iterable, unique_everseen
28
+ from ._meta import PackageMetadata, SimplePath
29
+
30
+ from contextlib import suppress
31
+ from importlib import import_module
32
+ from importlib.abc import MetaPathFinder
33
+ from itertools import starmap
34
+ from typing import Iterable, List, Mapping, Optional, Set, cast
35
+
36
+ __all__ = [
37
+ 'Distribution',
38
+ 'DistributionFinder',
39
+ 'PackageMetadata',
40
+ 'PackageNotFoundError',
41
+ 'distribution',
42
+ 'distributions',
43
+ 'entry_points',
44
+ 'files',
45
+ 'metadata',
46
+ 'packages_distributions',
47
+ 'requires',
48
+ 'version',
49
+ ]
50
+
51
+
52
+ class PackageNotFoundError(ModuleNotFoundError):
53
+ """The package was not found."""
54
+
55
+ def __str__(self) -> str:
56
+ return f"No package metadata was found for {self.name}"
57
+
58
+ @property
59
+ def name(self) -> str: # type: ignore[override]
60
+ (name,) = self.args
61
+ return name
62
+
63
+
64
+ class Sectioned:
65
+ """
66
+ A simple entry point config parser for performance
67
+
68
+ >>> for item in Sectioned.read(Sectioned._sample):
69
+ ... print(item)
70
+ Pair(name='sec1', value='# comments ignored')
71
+ Pair(name='sec1', value='a = 1')
72
+ Pair(name='sec1', value='b = 2')
73
+ Pair(name='sec2', value='a = 2')
74
+
75
+ >>> res = Sectioned.section_pairs(Sectioned._sample)
76
+ >>> item = next(res)
77
+ >>> item.name
78
+ 'sec1'
79
+ >>> item.value
80
+ Pair(name='a', value='1')
81
+ >>> item = next(res)
82
+ >>> item.value
83
+ Pair(name='b', value='2')
84
+ >>> item = next(res)
85
+ >>> item.name
86
+ 'sec2'
87
+ >>> item.value
88
+ Pair(name='a', value='2')
89
+ >>> list(res)
90
+ []
91
+ """
92
+
93
+ _sample = textwrap.dedent(
94
+ """
95
+ [sec1]
96
+ # comments ignored
97
+ a = 1
98
+ b = 2
99
+
100
+ [sec2]
101
+ a = 2
102
+ """
103
+ ).lstrip()
104
+
105
+ @classmethod
106
+ def section_pairs(cls, text):
107
+ return (
108
+ section._replace(value=Pair.parse(section.value))
109
+ for section in cls.read(text, filter_=cls.valid)
110
+ if section.name is not None
111
+ )
112
+
113
+ @staticmethod
114
+ def read(text, filter_=None):
115
+ lines = filter(filter_, map(str.strip, text.splitlines()))
116
+ name = None
117
+ for value in lines:
118
+ section_match = value.startswith('[') and value.endswith(']')
119
+ if section_match:
120
+ name = value.strip('[]')
121
+ continue
122
+ yield Pair(name, value)
123
+
124
+ @staticmethod
125
+ def valid(line: str):
126
+ return line and not line.startswith('#')
127
+
128
+
129
+ class DeprecatedTuple:
130
+ """
131
+ Provide subscript item access for backward compatibility.
132
+
133
+ >>> recwarn = getfixture('recwarn')
134
+ >>> ep = EntryPoint(name='name', value='value', group='group')
135
+ >>> ep[:]
136
+ ('name', 'value', 'group')
137
+ >>> ep[0]
138
+ 'name'
139
+ >>> len(recwarn)
140
+ 1
141
+ """
142
+
143
+ # Do not remove prior to 2023-05-01 or Python 3.13
144
+ _warn = functools.partial(
145
+ warnings.warn,
146
+ "EntryPoint tuple interface is deprecated. Access members by name.",
147
+ DeprecationWarning,
148
+ stacklevel=pypy_partial(2),
149
+ )
150
+
151
+ def __getitem__(self, item):
152
+ self._warn()
153
+ return self._key()[item]
154
+
155
+
156
+ class EntryPoint(DeprecatedTuple):
157
+ """An entry point as defined by Python packaging conventions.
158
+
159
+ See `the packaging docs on entry points
160
+ <https://packaging.python.org/specifications/entry-points/>`_
161
+ for more information.
162
+
163
+ >>> ep = EntryPoint(
164
+ ... name=None, group=None, value='package.module:attr [extra1, extra2]')
165
+ >>> ep.module
166
+ 'package.module'
167
+ >>> ep.attr
168
+ 'attr'
169
+ >>> ep.extras
170
+ ['extra1', 'extra2']
171
+ """
172
+
173
+ pattern = re.compile(
174
+ r'(?P<module>[\w.]+)\s*'
175
+ r'(:\s*(?P<attr>[\w.]+)\s*)?'
176
+ r'((?P<extras>\[.*\])\s*)?$'
177
+ )
178
+ """
179
+ A regular expression describing the syntax for an entry point,
180
+ which might look like:
181
+
182
+ - module
183
+ - package.module
184
+ - package.module:attribute
185
+ - package.module:object.attribute
186
+ - package.module:attr [extra1, extra2]
187
+
188
+ Other combinations are possible as well.
189
+
190
+ The expression is lenient about whitespace around the ':',
191
+ following the attr, and following any extras.
192
+ """
193
+
194
+ name: str
195
+ value: str
196
+ group: str
197
+
198
+ dist: Optional['Distribution'] = None
199
+
200
+ def __init__(self, name: str, value: str, group: str) -> None:
201
+ vars(self).update(name=name, value=value, group=group)
202
+
203
+ def load(self):
204
+ """Load the entry point from its definition. If only a module
205
+ is indicated by the value, return that module. Otherwise,
206
+ return the named object.
207
+ """
208
+ match = self.pattern.match(self.value)
209
+ module = import_module(match.group('module'))
210
+ attrs = filter(None, (match.group('attr') or '').split('.'))
211
+ return functools.reduce(getattr, attrs, module)
212
+
213
+ @property
214
+ def module(self) -> str:
215
+ match = self.pattern.match(self.value)
216
+ assert match is not None
217
+ return match.group('module')
218
+
219
+ @property
220
+ def attr(self) -> str:
221
+ match = self.pattern.match(self.value)
222
+ assert match is not None
223
+ return match.group('attr')
224
+
225
+ @property
226
+ def extras(self) -> List[str]:
227
+ match = self.pattern.match(self.value)
228
+ assert match is not None
229
+ return re.findall(r'\w+', match.group('extras') or '')
230
+
231
+ def _for(self, dist):
232
+ vars(self).update(dist=dist)
233
+ return self
234
+
235
+ def matches(self, **params):
236
+ """
237
+ EntryPoint matches the given parameters.
238
+
239
+ >>> ep = EntryPoint(group='foo', name='bar', value='bing:bong [extra1, extra2]')
240
+ >>> ep.matches(group='foo')
241
+ True
242
+ >>> ep.matches(name='bar', value='bing:bong [extra1, extra2]')
243
+ True
244
+ >>> ep.matches(group='foo', name='other')
245
+ False
246
+ >>> ep.matches()
247
+ True
248
+ >>> ep.matches(extras=['extra1', 'extra2'])
249
+ True
250
+ >>> ep.matches(module='bing')
251
+ True
252
+ >>> ep.matches(attr='bong')
253
+ True
254
+ """
255
+ attrs = (getattr(self, param) for param in params)
256
+ return all(map(operator.eq, params.values(), attrs))
257
+
258
+ def _key(self):
259
+ return self.name, self.value, self.group
260
+
261
+ def __lt__(self, other):
262
+ return self._key() < other._key()
263
+
264
+ def __eq__(self, other):
265
+ return self._key() == other._key()
266
+
267
+ def __setattr__(self, name, value):
268
+ raise AttributeError("EntryPoint objects are immutable.")
269
+
270
+ def __repr__(self):
271
+ return (
272
+ f'EntryPoint(name={self.name!r}, value={self.value!r}, '
273
+ f'group={self.group!r})'
274
+ )
275
+
276
+ def __hash__(self) -> int:
277
+ return hash(self._key())
278
+
279
+
280
+ class EntryPoints(tuple):
281
+ """
282
+ An immutable collection of selectable EntryPoint objects.
283
+ """
284
+
285
+ __slots__ = ()
286
+
287
+ def __getitem__(self, name: str) -> EntryPoint: # type: ignore[override]
288
+ """
289
+ Get the EntryPoint in self matching name.
290
+ """
291
+ try:
292
+ return next(iter(self.select(name=name)))
293
+ except StopIteration:
294
+ raise KeyError(name)
295
+
296
+ def select(self, **params):
297
+ """
298
+ Select entry points from self that match the
299
+ given parameters (typically group and/or name).
300
+ """
301
+ return EntryPoints(ep for ep in self if _py39compat.ep_matches(ep, **params))
302
+
303
+ @property
304
+ def names(self) -> Set[str]:
305
+ """
306
+ Return the set of all names of all entry points.
307
+ """
308
+ return {ep.name for ep in self}
309
+
310
+ @property
311
+ def groups(self) -> Set[str]:
312
+ """
313
+ Return the set of all groups of all entry points.
314
+ """
315
+ return {ep.group for ep in self}
316
+
317
+ @classmethod
318
+ def _from_text_for(cls, text, dist):
319
+ return cls(ep._for(dist) for ep in cls._from_text(text))
320
+
321
+ @staticmethod
322
+ def _from_text(text):
323
+ return (
324
+ EntryPoint(name=item.value.name, value=item.value.value, group=item.name)
325
+ for item in Sectioned.section_pairs(text or '')
326
+ )
327
+
328
+
329
+ class PackagePath(pathlib.PurePosixPath):
330
+ """A reference to a path in a package"""
331
+
332
+ hash: Optional["FileHash"]
333
+ size: int
334
+ dist: "Distribution"
335
+
336
+ def read_text(self, encoding: str = 'utf-8') -> str: # type: ignore[override]
337
+ with self.locate().open(encoding=encoding) as stream:
338
+ return stream.read()
339
+
340
+ def read_binary(self) -> bytes:
341
+ with self.locate().open('rb') as stream:
342
+ return stream.read()
343
+
344
+ def locate(self) -> pathlib.Path:
345
+ """Return a path-like object for this path"""
346
+ return self.dist.locate_file(self)
347
+
348
+
349
+ class FileHash:
350
+ def __init__(self, spec: str) -> None:
351
+ self.mode, _, self.value = spec.partition('=')
352
+
353
+ def __repr__(self) -> str:
354
+ return f'<FileHash mode: {self.mode} value: {self.value}>'
355
+
356
+
357
+ class DeprecatedNonAbstract:
358
+ def __new__(cls, *args, **kwargs):
359
+ all_names = {
360
+ name for subclass in inspect.getmro(cls) for name in vars(subclass)
361
+ }
362
+ abstract = {
363
+ name
364
+ for name in all_names
365
+ if getattr(getattr(cls, name), '__isabstractmethod__', False)
366
+ }
367
+ if abstract:
368
+ warnings.warn(
369
+ f"Unimplemented abstract methods {abstract}",
370
+ DeprecationWarning,
371
+ stacklevel=2,
372
+ )
373
+ return super().__new__(cls)
374
+
375
+
376
+ class Distribution(DeprecatedNonAbstract):
377
+ """A Python distribution package."""
378
+
379
+ @abc.abstractmethod
380
+ def read_text(self, filename) -> Optional[str]:
381
+ """Attempt to load metadata file given by the name.
382
+
383
+ :param filename: The name of the file in the distribution info.
384
+ :return: The text if found, otherwise None.
385
+ """
386
+
387
+ @abc.abstractmethod
388
+ def locate_file(self, path: StrPath) -> pathlib.Path:
389
+ """
390
+ Given a path to a file in this distribution, return a path
391
+ to it.
392
+ """
393
+
394
+ @classmethod
395
+ def from_name(cls, name: str) -> "Distribution":
396
+ """Return the Distribution for the given package name.
397
+
398
+ :param name: The name of the distribution package to search for.
399
+ :return: The Distribution instance (or subclass thereof) for the named
400
+ package, if found.
401
+ :raises PackageNotFoundError: When the named package's distribution
402
+ metadata cannot be found.
403
+ :raises ValueError: When an invalid value is supplied for name.
404
+ """
405
+ if not name:
406
+ raise ValueError("A distribution name is required.")
407
+ try:
408
+ return next(iter(cls.discover(name=name)))
409
+ except StopIteration:
410
+ raise PackageNotFoundError(name)
411
+
412
+ @classmethod
413
+ def discover(cls, **kwargs) -> Iterable["Distribution"]:
414
+ """Return an iterable of Distribution objects for all packages.
415
+
416
+ Pass a ``context`` or pass keyword arguments for constructing
417
+ a context.
418
+
419
+ :context: A ``DistributionFinder.Context`` object.
420
+ :return: Iterable of Distribution objects for all packages.
421
+ """
422
+ context = kwargs.pop('context', None)
423
+ if context and kwargs:
424
+ raise ValueError("cannot accept context and kwargs")
425
+ context = context or DistributionFinder.Context(**kwargs)
426
+ return itertools.chain.from_iterable(
427
+ resolver(context) for resolver in cls._discover_resolvers()
428
+ )
429
+
430
+ @staticmethod
431
+ def at(path: StrPath) -> "Distribution":
432
+ """Return a Distribution for the indicated metadata path
433
+
434
+ :param path: a string or path-like object
435
+ :return: a concrete Distribution instance for the path
436
+ """
437
+ return PathDistribution(pathlib.Path(path))
438
+
439
+ @staticmethod
440
+ def _discover_resolvers():
441
+ """Search the meta_path for resolvers."""
442
+ declared = (
443
+ getattr(finder, 'find_distributions', None) for finder in sys.meta_path
444
+ )
445
+ return filter(None, declared)
446
+
447
+ @property
448
+ def metadata(self) -> _meta.PackageMetadata:
449
+ """Return the parsed metadata for this Distribution.
450
+
451
+ The returned object will have keys that name the various bits of
452
+ metadata. See PEP 566 for details.
453
+ """
454
+ opt_text = (
455
+ self.read_text('METADATA')
456
+ or self.read_text('PKG-INFO')
457
+ # This last clause is here to support old egg-info files. Its
458
+ # effect is to just end up using the PathDistribution's self._path
459
+ # (which points to the egg-info file) attribute unchanged.
460
+ or self.read_text('')
461
+ )
462
+ text = cast(str, opt_text)
463
+ return _adapters.Message(email.message_from_string(text))
464
+
465
+ @property
466
+ def name(self) -> str:
467
+ """Return the 'Name' metadata for the distribution package."""
468
+ return self.metadata['Name']
469
+
470
+ @property
471
+ def _normalized_name(self):
472
+ """Return a normalized version of the name."""
473
+ return Prepared.normalize(self.name)
474
+
475
+ @property
476
+ def version(self) -> str:
477
+ """Return the 'Version' metadata for the distribution package."""
478
+ return self.metadata['Version']
479
+
480
+ @property
481
+ def entry_points(self) -> EntryPoints:
482
+ return EntryPoints._from_text_for(self.read_text('entry_points.txt'), self)
483
+
484
+ @property
485
+ def files(self) -> Optional[List[PackagePath]]:
486
+ """Files in this distribution.
487
+
488
+ :return: List of PackagePath for this distribution or None
489
+
490
+ Result is `None` if the metadata file that enumerates files
491
+ (i.e. RECORD for dist-info, or installed-files.txt or
492
+ SOURCES.txt for egg-info) is missing.
493
+ Result may be empty if the metadata exists but is empty.
494
+ """
495
+
496
+ def make_file(name, hash=None, size_str=None):
497
+ result = PackagePath(name)
498
+ result.hash = FileHash(hash) if hash else None
499
+ result.size = int(size_str) if size_str else None
500
+ result.dist = self
501
+ return result
502
+
503
+ @pass_none
504
+ def make_files(lines):
505
+ return starmap(make_file, csv.reader(lines))
506
+
507
+ @pass_none
508
+ def skip_missing_files(package_paths):
509
+ return list(filter(lambda path: path.locate().exists(), package_paths))
510
+
511
+ return skip_missing_files(
512
+ make_files(
513
+ self._read_files_distinfo()
514
+ or self._read_files_egginfo_installed()
515
+ or self._read_files_egginfo_sources()
516
+ )
517
+ )
518
+
519
+ def _read_files_distinfo(self):
520
+ """
521
+ Read the lines of RECORD
522
+ """
523
+ text = self.read_text('RECORD')
524
+ return text and text.splitlines()
525
+
526
+ def _read_files_egginfo_installed(self):
527
+ """
528
+ Read installed-files.txt and return lines in a similar
529
+ CSV-parsable format as RECORD: each file must be placed
530
+ relative to the site-packages directory and must also be
531
+ quoted (since file names can contain literal commas).
532
+
533
+ This file is written when the package is installed by pip,
534
+ but it might not be written for other installation methods.
535
+ Assume the file is accurate if it exists.
536
+ """
537
+ text = self.read_text('installed-files.txt')
538
+ # Prepend the .egg-info/ subdir to the lines in this file.
539
+ # But this subdir is only available from PathDistribution's
540
+ # self._path.
541
+ subdir = getattr(self, '_path', None)
542
+ if not text or not subdir:
543
+ return
544
+
545
+ paths = (
546
+ (subdir / name)
547
+ .resolve()
548
+ .relative_to(self.locate_file('').resolve())
549
+ .as_posix()
550
+ for name in text.splitlines()
551
+ )
552
+ return map('"{}"'.format, paths)
553
+
554
+ def _read_files_egginfo_sources(self):
555
+ """
556
+ Read SOURCES.txt and return lines in a similar CSV-parsable
557
+ format as RECORD: each file name must be quoted (since it
558
+ might contain literal commas).
559
+
560
+ Note that SOURCES.txt is not a reliable source for what
561
+ files are installed by a package. This file is generated
562
+ for a source archive, and the files that are present
563
+ there (e.g. setup.py) may not correctly reflect the files
564
+ that are present after the package has been installed.
565
+ """
566
+ text = self.read_text('SOURCES.txt')
567
+ return text and map('"{}"'.format, text.splitlines())
568
+
569
+ @property
570
+ def requires(self) -> Optional[List[str]]:
571
+ """Generated requirements specified for this Distribution"""
572
+ reqs = self._read_dist_info_reqs() or self._read_egg_info_reqs()
573
+ return reqs and list(reqs)
574
+
575
+ def _read_dist_info_reqs(self):
576
+ return self.metadata.get_all('Requires-Dist')
577
+
578
+ def _read_egg_info_reqs(self):
579
+ source = self.read_text('requires.txt')
580
+ return pass_none(self._deps_from_requires_text)(source)
581
+
582
+ @classmethod
583
+ def _deps_from_requires_text(cls, source):
584
+ return cls._convert_egg_info_reqs_to_simple_reqs(Sectioned.read(source))
585
+
586
+ @staticmethod
587
+ def _convert_egg_info_reqs_to_simple_reqs(sections):
588
+ """
589
+ Historically, setuptools would solicit and store 'extra'
590
+ requirements, including those with environment markers,
591
+ in separate sections. More modern tools expect each
592
+ dependency to be defined separately, with any relevant
593
+ extras and environment markers attached directly to that
594
+ requirement. This method converts the former to the
595
+ latter. See _test_deps_from_requires_text for an example.
596
+ """
597
+
598
+ def make_condition(name):
599
+ return name and f'extra == "{name}"'
600
+
601
+ def quoted_marker(section):
602
+ section = section or ''
603
+ extra, sep, markers = section.partition(':')
604
+ if extra and markers:
605
+ markers = f'({markers})'
606
+ conditions = list(filter(None, [markers, make_condition(extra)]))
607
+ return '; ' + ' and '.join(conditions) if conditions else ''
608
+
609
+ def url_req_space(req):
610
+ """
611
+ PEP 508 requires a space between the url_spec and the quoted_marker.
612
+ Ref python/importlib_metadata#357.
613
+ """
614
+ # '@' is uniquely indicative of a url_req.
615
+ return ' ' * ('@' in req)
616
+
617
+ for section in sections:
618
+ space = url_req_space(section.value)
619
+ yield section.value + space + quoted_marker(section.name)
620
+
621
+
622
+ class DistributionFinder(MetaPathFinder):
623
+ """
624
+ A MetaPathFinder capable of discovering installed distributions.
625
+ """
626
+
627
+ class Context:
628
+ """
629
+ Keyword arguments presented by the caller to
630
+ ``distributions()`` or ``Distribution.discover()``
631
+ to narrow the scope of a search for distributions
632
+ in all DistributionFinders.
633
+
634
+ Each DistributionFinder may expect any parameters
635
+ and should attempt to honor the canonical
636
+ parameters defined below when appropriate.
637
+ """
638
+
639
+ name = None
640
+ """
641
+ Specific name for which a distribution finder should match.
642
+ A name of ``None`` matches all distributions.
643
+ """
644
+
645
+ def __init__(self, **kwargs):
646
+ vars(self).update(kwargs)
647
+
648
+ @property
649
+ def path(self) -> List[str]:
650
+ """
651
+ The sequence of directory path that a distribution finder
652
+ should search.
653
+
654
+ Typically refers to Python installed package paths such as
655
+ "site-packages" directories and defaults to ``sys.path``.
656
+ """
657
+ return vars(self).get('path', sys.path)
658
+
659
+ @abc.abstractmethod
660
+ def find_distributions(self, context=Context()) -> Iterable[Distribution]:
661
+ """
662
+ Find distributions.
663
+
664
+ Return an iterable of all Distribution instances capable of
665
+ loading the metadata for packages matching the ``context``,
666
+ a DistributionFinder.Context instance.
667
+ """
668
+
669
+
670
+ class FastPath:
671
+ """
672
+ Micro-optimized class for searching a path for
673
+ children.
674
+
675
+ >>> FastPath('').children()
676
+ ['...']
677
+ """
678
+
679
+ @functools.lru_cache() # type: ignore
680
+ def __new__(cls, root):
681
+ return super().__new__(cls)
682
+
683
+ def __init__(self, root):
684
+ self.root = root
685
+
686
+ def joinpath(self, child):
687
+ return pathlib.Path(self.root, child)
688
+
689
+ def children(self):
690
+ with suppress(Exception):
691
+ return os.listdir(self.root or '.')
692
+ with suppress(Exception):
693
+ return self.zip_children()
694
+ return []
695
+
696
+ def zip_children(self):
697
+ zip_path = zipp.Path(self.root)
698
+ names = zip_path.root.namelist()
699
+ self.joinpath = zip_path.joinpath
700
+
701
+ return dict.fromkeys(child.split(posixpath.sep, 1)[0] for child in names)
702
+
703
+ def search(self, name):
704
+ return self.lookup(self.mtime).search(name)
705
+
706
+ @property
707
+ def mtime(self):
708
+ with suppress(OSError):
709
+ return os.stat(self.root).st_mtime
710
+ self.lookup.cache_clear()
711
+
712
+ @method_cache
713
+ def lookup(self, mtime):
714
+ return Lookup(self)
715
+
716
+
717
+ class Lookup:
718
+ def __init__(self, path: FastPath):
719
+ base = os.path.basename(path.root).lower()
720
+ base_is_egg = base.endswith(".egg")
721
+ self.infos = FreezableDefaultDict(list)
722
+ self.eggs = FreezableDefaultDict(list)
723
+
724
+ for child in path.children():
725
+ low = child.lower()
726
+ if low.endswith((".dist-info", ".egg-info")):
727
+ # rpartition is faster than splitext and suitable for this purpose.
728
+ name = low.rpartition(".")[0].partition("-")[0]
729
+ normalized = Prepared.normalize(name)
730
+ self.infos[normalized].append(path.joinpath(child))
731
+ elif base_is_egg and low == "egg-info":
732
+ name = base.rpartition(".")[0].partition("-")[0]
733
+ legacy_normalized = Prepared.legacy_normalize(name)
734
+ self.eggs[legacy_normalized].append(path.joinpath(child))
735
+
736
+ self.infos.freeze()
737
+ self.eggs.freeze()
738
+
739
+ def search(self, prepared):
740
+ infos = (
741
+ self.infos[prepared.normalized]
742
+ if prepared
743
+ else itertools.chain.from_iterable(self.infos.values())
744
+ )
745
+ eggs = (
746
+ self.eggs[prepared.legacy_normalized]
747
+ if prepared
748
+ else itertools.chain.from_iterable(self.eggs.values())
749
+ )
750
+ return itertools.chain(infos, eggs)
751
+
752
+
753
+ class Prepared:
754
+ """
755
+ A prepared search for metadata on a possibly-named package.
756
+ """
757
+
758
+ normalized = None
759
+ legacy_normalized = None
760
+
761
+ def __init__(self, name):
762
+ self.name = name
763
+ if name is None:
764
+ return
765
+ self.normalized = self.normalize(name)
766
+ self.legacy_normalized = self.legacy_normalize(name)
767
+
768
+ @staticmethod
769
+ def normalize(name):
770
+ """
771
+ PEP 503 normalization plus dashes as underscores.
772
+ """
773
+ return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_')
774
+
775
+ @staticmethod
776
+ def legacy_normalize(name):
777
+ """
778
+ Normalize the package name as found in the convention in
779
+ older packaging tools versions and specs.
780
+ """
781
+ return name.lower().replace('-', '_')
782
+
783
+ def __bool__(self):
784
+ return bool(self.name)
785
+
786
+
787
+ @install
788
+ class MetadataPathFinder(NullFinder, DistributionFinder):
789
+ """A degenerate finder for distribution packages on the file system.
790
+
791
+ This finder supplies only a find_distributions() method for versions
792
+ of Python that do not have a PathFinder find_distributions().
793
+ """
794
+
795
+ def find_distributions(
796
+ self, context=DistributionFinder.Context()
797
+ ) -> Iterable["PathDistribution"]:
798
+ """
799
+ Find distributions.
800
+
801
+ Return an iterable of all Distribution instances capable of
802
+ loading the metadata for packages matching ``context.name``
803
+ (or all names if ``None`` indicated) along the paths in the list
804
+ of directories ``context.path``.
805
+ """
806
+ found = self._search_paths(context.name, context.path)
807
+ return map(PathDistribution, found)
808
+
809
+ @classmethod
810
+ def _search_paths(cls, name, paths):
811
+ """Find metadata directories in paths heuristically."""
812
+ prepared = Prepared(name)
813
+ return itertools.chain.from_iterable(
814
+ path.search(prepared) for path in map(FastPath, paths)
815
+ )
816
+
817
+ def invalidate_caches(cls) -> None:
818
+ FastPath.__new__.cache_clear()
819
+
820
+
821
+ class PathDistribution(Distribution):
822
+ def __init__(self, path: SimplePath) -> None:
823
+ """Construct a distribution.
824
+
825
+ :param path: SimplePath indicating the metadata directory.
826
+ """
827
+ self._path = path
828
+
829
+ def read_text(self, filename: StrPath) -> Optional[str]:
830
+ with suppress(
831
+ FileNotFoundError,
832
+ IsADirectoryError,
833
+ KeyError,
834
+ NotADirectoryError,
835
+ PermissionError,
836
+ ):
837
+ return self._path.joinpath(filename).read_text(encoding='utf-8')
838
+
839
+ return None
840
+
841
+ read_text.__doc__ = Distribution.read_text.__doc__
842
+
843
+ def locate_file(self, path: StrPath) -> pathlib.Path:
844
+ return self._path.parent / path
845
+
846
+ @property
847
+ def _normalized_name(self):
848
+ """
849
+ Performance optimization: where possible, resolve the
850
+ normalized name from the file system path.
851
+ """
852
+ stem = os.path.basename(str(self._path))
853
+ return (
854
+ pass_none(Prepared.normalize)(self._name_from_stem(stem))
855
+ or super()._normalized_name
856
+ )
857
+
858
+ @staticmethod
859
+ def _name_from_stem(stem):
860
+ """
861
+ >>> PathDistribution._name_from_stem('foo-3.0.egg-info')
862
+ 'foo'
863
+ >>> PathDistribution._name_from_stem('CherryPy-3.0.dist-info')
864
+ 'CherryPy'
865
+ >>> PathDistribution._name_from_stem('face.egg-info')
866
+ 'face'
867
+ >>> PathDistribution._name_from_stem('foo.bar')
868
+ """
869
+ filename, ext = os.path.splitext(stem)
870
+ if ext not in ('.dist-info', '.egg-info'):
871
+ return
872
+ name, sep, rest = filename.partition('-')
873
+ return name
874
+
875
+
876
+ def distribution(distribution_name) -> Distribution:
877
+ """Get the ``Distribution`` instance for the named package.
878
+
879
+ :param distribution_name: The name of the distribution package as a string.
880
+ :return: A ``Distribution`` instance (or subclass thereof).
881
+ """
882
+ return Distribution.from_name(distribution_name)
883
+
884
+
885
+ def distributions(**kwargs) -> Iterable[Distribution]:
886
+ """Get all ``Distribution`` instances in the current environment.
887
+
888
+ :return: An iterable of ``Distribution`` instances.
889
+ """
890
+ return Distribution.discover(**kwargs)
891
+
892
+
893
+ def metadata(distribution_name) -> _meta.PackageMetadata:
894
+ """Get the metadata for the named package.
895
+
896
+ :param distribution_name: The name of the distribution package to query.
897
+ :return: A PackageMetadata containing the parsed metadata.
898
+ """
899
+ return Distribution.from_name(distribution_name).metadata
900
+
901
+
902
+ def version(distribution_name) -> str:
903
+ """Get the version string for the named package.
904
+
905
+ :param distribution_name: The name of the distribution package to query.
906
+ :return: The version string for the package as defined in the package's
907
+ "Version" metadata key.
908
+ """
909
+ return distribution(distribution_name).version
910
+
911
+
912
+ _unique = functools.partial(
913
+ unique_everseen,
914
+ key=_py39compat.normalized_name,
915
+ )
916
+ """
917
+ Wrapper for ``distributions`` to return unique distributions by name.
918
+ """
919
+
920
+
921
+ def entry_points(**params) -> EntryPoints:
922
+ """Return EntryPoint objects for all installed packages.
923
+
924
+ Pass selection parameters (group or name) to filter the
925
+ result to entry points matching those properties (see
926
+ EntryPoints.select()).
927
+
928
+ :return: EntryPoints for all installed packages.
929
+ """
930
+ eps = itertools.chain.from_iterable(
931
+ dist.entry_points for dist in _unique(distributions())
932
+ )
933
+ return EntryPoints(eps).select(**params)
934
+
935
+
936
+ def files(distribution_name) -> Optional[List[PackagePath]]:
937
+ """Return a list of files for the named package.
938
+
939
+ :param distribution_name: The name of the distribution package to query.
940
+ :return: List of files composing the distribution.
941
+ """
942
+ return distribution(distribution_name).files
943
+
944
+
945
+ def requires(distribution_name) -> Optional[List[str]]:
946
+ """
947
+ Return a list of requirements for the named package.
948
+
949
+ :return: An iterable of requirements, suitable for
950
+ packaging.requirement.Requirement.
951
+ """
952
+ return distribution(distribution_name).requires
953
+
954
+
955
+ def packages_distributions() -> Mapping[str, List[str]]:
956
+ """
957
+ Return a mapping of top-level packages to their
958
+ distributions.
959
+
960
+ >>> import collections.abc
961
+ >>> pkgs = packages_distributions()
962
+ >>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values())
963
+ True
964
+ """
965
+ pkg_to_dist = collections.defaultdict(list)
966
+ for dist in distributions():
967
+ for pkg in _top_level_declared(dist) or _top_level_inferred(dist):
968
+ pkg_to_dist[pkg].append(dist.metadata['Name'])
969
+ return dict(pkg_to_dist)
970
+
971
+
972
+ def _top_level_declared(dist):
973
+ return (dist.read_text('top_level.txt') or '').split()
974
+
975
+
976
+ def _topmost(name: PackagePath) -> Optional[str]:
977
+ """
978
+ Return the top-most parent as long as there is a parent.
979
+ """
980
+ top, *rest = name.parts
981
+ return top if rest else None
982
+
983
+
984
+ def _get_toplevel_name(name: PackagePath) -> str:
985
+ """
986
+ Infer a possibly importable module name from a name presumed on
987
+ sys.path.
988
+
989
+ >>> _get_toplevel_name(PackagePath('foo.py'))
990
+ 'foo'
991
+ >>> _get_toplevel_name(PackagePath('foo'))
992
+ 'foo'
993
+ >>> _get_toplevel_name(PackagePath('foo.pyc'))
994
+ 'foo'
995
+ >>> _get_toplevel_name(PackagePath('foo/__init__.py'))
996
+ 'foo'
997
+ >>> _get_toplevel_name(PackagePath('foo.pth'))
998
+ 'foo.pth'
999
+ >>> _get_toplevel_name(PackagePath('foo.dist-info'))
1000
+ 'foo.dist-info'
1001
+ """
1002
+ return _topmost(name) or (
1003
+ # python/typeshed#10328
1004
+ inspect.getmodulename(name) # type: ignore
1005
+ or str(name)
1006
+ )
1007
+
1008
+
1009
+ def _top_level_inferred(dist):
1010
+ opt_names = set(map(_get_toplevel_name, always_iterable(dist.files)))
1011
+
1012
+ def importable_name(name):
1013
+ return '.' not in name
1014
+
1015
+ return filter(importable_name, opt_names)
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/__init__.cpython-37.pyc ADDED
Binary file (36.6 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_adapters.cpython-37.pyc ADDED
Binary file (2.95 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_collections.cpython-37.pyc ADDED
Binary file (1.53 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_compat.cpython-37.pyc ADDED
Binary file (2.14 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_functools.cpython-37.pyc ADDED
Binary file (3.12 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_itertools.cpython-37.pyc ADDED
Binary file (2.02 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_meta.cpython-37.pyc ADDED
Binary file (2.86 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_py39compat.cpython-37.pyc ADDED
Binary file (1.17 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/__pycache__/_text.cpython-37.pyc ADDED
Binary file (3.07 kB). View file
 
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_adapters.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import functools
2
+ import warnings
3
+ import re
4
+ import textwrap
5
+ import email.message
6
+
7
+ from ._text import FoldedCase
8
+ from ._compat import pypy_partial
9
+
10
+
11
+ # Do not remove prior to 2024-01-01 or Python 3.14
12
+ _warn = functools.partial(
13
+ warnings.warn,
14
+ "Implicit None on return values is deprecated and will raise KeyErrors.",
15
+ DeprecationWarning,
16
+ stacklevel=pypy_partial(2),
17
+ )
18
+
19
+
20
+ class Message(email.message.Message):
21
+ multiple_use_keys = set(
22
+ map(
23
+ FoldedCase,
24
+ [
25
+ 'Classifier',
26
+ 'Obsoletes-Dist',
27
+ 'Platform',
28
+ 'Project-URL',
29
+ 'Provides-Dist',
30
+ 'Provides-Extra',
31
+ 'Requires-Dist',
32
+ 'Requires-External',
33
+ 'Supported-Platform',
34
+ 'Dynamic',
35
+ ],
36
+ )
37
+ )
38
+ """
39
+ Keys that may be indicated multiple times per PEP 566.
40
+ """
41
+
42
+ def __new__(cls, orig: email.message.Message):
43
+ res = super().__new__(cls)
44
+ vars(res).update(vars(orig))
45
+ return res
46
+
47
+ def __init__(self, *args, **kwargs):
48
+ self._headers = self._repair_headers()
49
+
50
+ # suppress spurious error from mypy
51
+ def __iter__(self):
52
+ return super().__iter__()
53
+
54
+ def __getitem__(self, item):
55
+ """
56
+ Warn users that a ``KeyError`` can be expected when a
57
+ mising key is supplied. Ref python/importlib_metadata#371.
58
+ """
59
+ res = super().__getitem__(item)
60
+ if res is None:
61
+ _warn()
62
+ return res
63
+
64
+ def _repair_headers(self):
65
+ def redent(value):
66
+ "Correct for RFC822 indentation"
67
+ if not value or '\n' not in value:
68
+ return value
69
+ return textwrap.dedent(' ' * 8 + value)
70
+
71
+ headers = [(key, redent(value)) for key, value in vars(self)['_headers']]
72
+ if self._payload:
73
+ headers.append(('Description', self.get_payload()))
74
+ return headers
75
+
76
+ @property
77
+ def json(self):
78
+ """
79
+ Convert PackageMetadata to a JSON-compatible format
80
+ per PEP 0566.
81
+ """
82
+
83
+ def transform(key):
84
+ value = self.get_all(key) if key in self.multiple_use_keys else self[key]
85
+ if key == 'Keywords':
86
+ value = re.split(r'\s+', value)
87
+ tk = key.lower().replace('-', '_')
88
+ return tk, value
89
+
90
+ return dict(map(transform, map(FoldedCase, self)))
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_collections.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import collections
2
+
3
+
4
+ # from jaraco.collections 3.3
5
+ class FreezableDefaultDict(collections.defaultdict):
6
+ """
7
+ Often it is desirable to prevent the mutation of
8
+ a default dict after its initial construction, such
9
+ as to prevent mutation during iteration.
10
+
11
+ >>> dd = FreezableDefaultDict(list)
12
+ >>> dd[0].append('1')
13
+ >>> dd.freeze()
14
+ >>> dd[1]
15
+ []
16
+ >>> len(dd)
17
+ 1
18
+ """
19
+
20
+ def __missing__(self, key):
21
+ return getattr(self, '_frozen', super().__missing__)(key)
22
+
23
+ def freeze(self):
24
+ self._frozen = lambda key: self.default_factory()
25
+
26
+
27
+ class Pair(collections.namedtuple('Pair', 'name value')):
28
+ @classmethod
29
+ def parse(cls, text):
30
+ return cls(*map(str.strip, text.split("=", 1)))
protege/deep-pantilt/venv/lib/python3.7/site-packages/importlib_metadata/_compat.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import platform
4
+
5
+ from typing import Union
6
+
7
+
8
+ __all__ = ['install', 'NullFinder', 'Protocol']
9
+
10
+
11
+ try:
12
+ from typing import Protocol
13
+ except ImportError: # pragma: no cover
14
+ # Python 3.7 compatibility
15
+ from typing_extensions import Protocol # type: ignore
16
+
17
+
18
+ def install(cls):
19
+ """
20
+ Class decorator for installation on sys.meta_path.
21
+
22
+ Adds the backport DistributionFinder to sys.meta_path and
23
+ attempts to disable the finder functionality of the stdlib
24
+ DistributionFinder.
25
+ """
26
+ sys.meta_path.append(cls())
27
+ disable_stdlib_finder()
28
+ return cls
29
+
30
+
31
+ def disable_stdlib_finder():
32
+ """
33
+ Give the backport primacy for discovering path-based distributions
34
+ by monkey-patching the stdlib O_O.
35
+
36
+ See #91 for more background for rationale on this sketchy
37
+ behavior.
38
+ """
39
+
40
+ def matches(finder):
41
+ return getattr(
42
+ finder, '__module__', None
43
+ ) == '_frozen_importlib_external' and hasattr(finder, 'find_distributions')
44
+
45
+ for finder in filter(matches, sys.meta_path): # pragma: nocover
46
+ del finder.find_distributions
47
+
48
+
49
+ class NullFinder:
50
+ """
51
+ A "Finder" (aka "MetaClassFinder") that never finds any modules,
52
+ but may find distributions.
53
+ """
54
+
55
+ @staticmethod
56
+ def find_spec(*args, **kwargs):
57
+ return None
58
+
59
+
60
+ def pypy_partial(val):
61
+ """
62
+ Adjust for variable stacklevel on partial under PyPy.
63
+
64
+ Workaround for #327.
65
+ """
66
+ is_pypy = platform.python_implementation() == 'PyPy'
67
+ return val + is_pypy
68
+
69
+
70
+ if sys.version_info >= (3, 9):
71
+ StrPath = Union[str, os.PathLike[str]]
72
+ else:
73
+ # PathLike is only subscriptable at runtime in 3.9+
74
+ StrPath = Union[str, "os.PathLike[str]"] # pragma: no cover