Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .cache/pip/http-v2/0/0/e/9/d/00e9d7b0e1cda3bfdf322be5b79cb9c4a6e6ef6159d3de3d7d3abe87 +0 -0
- .cache/pip/http-v2/0/0/e/9/d/00e9d7b0e1cda3bfdf322be5b79cb9c4a6e6ef6159d3de3d7d3abe87.body +0 -0
- .cache/pip/http-v2/0/1/f/2/0/01f2082df50502ba9492d64e69db99d1fdb5730707a16c6264b355b8 +0 -0
- .cache/pip/http-v2/0/2/d/4/2/02d4221e858694abc22129c65515f1df2c4c326330eb1a34ceb0b382 +0 -0
- .cache/pip/http-v2/0/2/f/8/e/02f8e820ca8231526982c4a2b93baef519d0948ff85c925acd226f06 +0 -0
- .cache/pip/http-v2/0/2/f/8/e/02f8e820ca8231526982c4a2b93baef519d0948ff85c925acd226f06.body +0 -0
- .cache/pip/http-v2/0/5/8/9/6/0589682f53f4c502330bc0fa01138806ce0467c549c2af469b6afb31 +0 -0
- .cache/pip/http-v2/0/5/8/9/6/0589682f53f4c502330bc0fa01138806ce0467c549c2af469b6afb31.body +0 -0
- .cache/pip/http-v2/0/5/e/2/2/05e22b8b3169eed822187b7e670f3dc47b0666b777d95f87de8fb5e9 +0 -0
- .cache/pip/http-v2/0/5/e/2/2/05e22b8b3169eed822187b7e670f3dc47b0666b777d95f87de8fb5e9.body +0 -0
- .cache/pip/http-v2/0/6/7/2/6/06726d442b7e33afe35f1740674b6dee72357a95eef3aca0ef7abf21 +0 -0
- .cache/pip/http-v2/0/6/7/2/6/06726d442b7e33afe35f1740674b6dee72357a95eef3aca0ef7abf21.body +0 -0
- .cache/pip/http-v2/0/7/5/9/3/07593bb905dded4b84aacb1d96c1e64704669d6bab658dcaeab79c36.body +0 -0
- .cache/pip/http-v2/0/9/4/f/4/094f40b0ad6510929406d8b53f0945758a4aefd5c45857fe8adf0b03 +0 -0
- .cache/pip/http-v2/0/9/4/f/4/094f40b0ad6510929406d8b53f0945758a4aefd5c45857fe8adf0b03.body +0 -0
- .cache/pip/http-v2/0/9/a/c/f/09acf4ef8859e657a77d0079dea556ad6f8dc87031ab1c54b1a9cbfe +0 -0
- .cache/pip/http-v2/0/9/a/c/f/09acf4ef8859e657a77d0079dea556ad6f8dc87031ab1c54b1a9cbfe.body +0 -0
- .cache/pip/http-v2/0/e/a/4/f/0ea4f1b2570ca3d64073f1277e4faa435bd7c7cbadafd80723949de4 +0 -0
- .cache/pip/http-v2/0/e/a/4/f/0ea4f1b2570ca3d64073f1277e4faa435bd7c7cbadafd80723949de4.body +0 -0
- .cache/pip/http-v2/1/2/e/6/c/12e6c0100f8dcc54f1445b9845cfdcecf519882e2fe2767cf43bd439 +0 -0
- .cache/pip/http-v2/1/2/e/6/c/12e6c0100f8dcc54f1445b9845cfdcecf519882e2fe2767cf43bd439.body +0 -0
- .cache/pip/http-v2/1/8/e/e/a/18eea207de73c88bb45229bed4bcc74fbcbddadf2aa9f49e4df1f66a +0 -0
- .cache/pip/http-v2/1/8/e/e/a/18eea207de73c88bb45229bed4bcc74fbcbddadf2aa9f49e4df1f66a.body +88 -0
- .cache/pip/http-v2/1/d/8/a/2/1d8a24cdff71edbc3f733b6b4d52640c1c1129289938aa4d1c7adcf5 +0 -0
- .cache/pip/http-v2/1/d/8/a/2/1d8a24cdff71edbc3f733b6b4d52640c1c1129289938aa4d1c7adcf5.body +0 -0
- .cache/pip/http-v2/1/e/2/b/1/1e2b1734fc3c57a4733131da81a6167573fc77057172172ceee83a22 +0 -0
- .cache/pip/http-v2/2/e/2/d/8/2e2d841f57ca6a43dfc96af93374304dda5b757176df2cce7ca2b18d +0 -0
- .cache/pip/http-v2/4/0/2/3/b/4023be7b5b37a7a4144c804ce69828082d4fb2a124d9d8aabc855da8 +0 -0
- .cache/pip/http-v2/4/5/9/c/7/459c78bacdedb04c7e03d152081522ecf0ff46e1d14e7503997ea6c8 +0 -0
- .cache/pip/http-v2/7/1/9/e/0/719e0feaf94b669c315daed4ef76501cc929d482e4315b25fd3b0082.body +303 -0
- .cache/pip/http-v2/7/1/b/9/d/71b9df22187d5c54f1147d4ac0849d1438ec19aedc20363a3478b854.body +62 -0
- .cache/pip/http-v2/7/2/2/9/f/7229fb50bdca3f16cb03ca953b540cb67fb07fb971b675db32ae3239 +0 -0
- .cache/pip/http-v2/7/2/2/9/f/7229fb50bdca3f16cb03ca953b540cb67fb07fb971b675db32ae3239.body +522 -0
- .cache/pip/http-v2/7/3/5/4/e/7354e15b7a2b590d713d4782bd16917fac9db3c087fa80d4d8dc0db5 +0 -0
- .cache/pip/http-v2/7/3/5/4/e/7354e15b7a2b590d713d4782bd16917fac9db3c087fa80d4d8dc0db5.body +212 -0
- .cache/pip/http-v2/7/7/6/7/2/7767287c95ec4491394e4204f2ba3be9eb9e3ed9ca0ffd45d421b772 +0 -0
- .cache/pip/http-v2/7/7/6/7/2/7767287c95ec4491394e4204f2ba3be9eb9e3ed9ca0ffd45d421b772.body +0 -0
- .cache/pip/http-v2/7/c/c/b/9/7ccb994e5cb08d1aee93acb83ae5881083c4a349402f61c9f7d304f8 +0 -0
- .cache/pip/http-v2/7/c/c/b/9/7ccb994e5cb08d1aee93acb83ae5881083c4a349402f61c9f7d304f8.body +0 -0
- .cache/pip/http-v2/a/1/5/a/3/a15a3a227f3412287f03121d8de35a7e4b8889a19d0448af719d96c1 +0 -0
- .cache/pip/http-v2/a/1/5/a/3/a15a3a227f3412287f03121d8de35a7e4b8889a19d0448af719d96c1.body +0 -0
- .cache/pip/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a.body +0 -0
- .cache/pip/http-v2/a/6/6/7/4/a6674e44f8dbb270324765d1fb568b86858877aed299a2428f81e802.body +0 -0
- .cache/pip/http-v2/a/8/1/3/d/a813d38208b26d1643cfecf26bd5ddeb869c95933e4bf304b8f6f1bb.body +1573 -0
- .cache/pip/http-v2/a/e/1/3/6/ae1360498e2a7e78c3695d71a4132c94b805a9c41d71ad8f62ad998f.body +0 -0
- .cache/pip/http-v2/a/e/7/a/2/ae7a241673cf118ca18eca030dc29d2715b1980127dd0e2949514433 +0 -0
- .cache/pip/http-v2/b/6/8/7/d/b687d90e2a44328db9c9ecd9af0a9c577a4e68f9d239bbb73aebc319.body +62 -0
- .config/wandb/settings +2 -0
- .ipynb_checkpoints/train-checkpoint.py +546 -0
- .launchpadlib/api.launchpad.net/cache/api.launchpad.net,devel,-application,json,fc4e1e3a03117146fb1e9d492ab76690 +19 -0
.cache/pip/http-v2/0/0/e/9/d/00e9d7b0e1cda3bfdf322be5b79cb9c4a6e6ef6159d3de3d7d3abe87
ADDED
Binary file (1.11 kB). View file
|
|
.cache/pip/http-v2/0/0/e/9/d/00e9d7b0e1cda3bfdf322be5b79cb9c4a6e6ef6159d3de3d7d3abe87.body
ADDED
Binary file (617 kB). View file
|
|
.cache/pip/http-v2/0/1/f/2/0/01f2082df50502ba9492d64e69db99d1fdb5730707a16c6264b355b8
ADDED
Binary file (1.13 kB). View file
|
|
.cache/pip/http-v2/0/2/d/4/2/02d4221e858694abc22129c65515f1df2c4c326330eb1a34ceb0b382
ADDED
Binary file (1.12 kB). View file
|
|
.cache/pip/http-v2/0/2/f/8/e/02f8e820ca8231526982c4a2b93baef519d0948ff85c925acd226f06
ADDED
Binary file (1.82 kB). View file
|
|
.cache/pip/http-v2/0/2/f/8/e/02f8e820ca8231526982c4a2b93baef519d0948ff85c925acd226f06.body
ADDED
Binary file (37.1 kB). View file
|
|
.cache/pip/http-v2/0/5/8/9/6/0589682f53f4c502330bc0fa01138806ce0467c549c2af469b6afb31
ADDED
Binary file (1.15 kB). View file
|
|
.cache/pip/http-v2/0/5/8/9/6/0589682f53f4c502330bc0fa01138806ce0467c549c2af469b6afb31.body
ADDED
Binary file (64.9 kB). View file
|
|
.cache/pip/http-v2/0/5/e/2/2/05e22b8b3169eed822187b7e670f3dc47b0666b777d95f87de8fb5e9
ADDED
Binary file (1.11 kB). View file
|
|
.cache/pip/http-v2/0/5/e/2/2/05e22b8b3169eed822187b7e670f3dc47b0666b777d95f87de8fb5e9.body
ADDED
Binary file (24.3 kB). View file
|
|
.cache/pip/http-v2/0/6/7/2/6/06726d442b7e33afe35f1740674b6dee72357a95eef3aca0ef7abf21
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/0/6/7/2/6/06726d442b7e33afe35f1740674b6dee72357a95eef3aca0ef7abf21.body
ADDED
Binary file (7.81 kB). View file
|
|
.cache/pip/http-v2/0/7/5/9/3/07593bb905dded4b84aacb1d96c1e64704669d6bab658dcaeab79c36.body
ADDED
Binary file (1.58 kB). View file
|
|
.cache/pip/http-v2/0/9/4/f/4/094f40b0ad6510929406d8b53f0945758a4aefd5c45857fe8adf0b03
ADDED
Binary file (1.15 kB). View file
|
|
.cache/pip/http-v2/0/9/4/f/4/094f40b0ad6510929406d8b53f0945758a4aefd5c45857fe8adf0b03.body
ADDED
Binary file (472 kB). View file
|
|
.cache/pip/http-v2/0/9/a/c/f/09acf4ef8859e657a77d0079dea556ad6f8dc87031ab1c54b1a9cbfe
ADDED
Binary file (1.15 kB). View file
|
|
.cache/pip/http-v2/0/9/a/c/f/09acf4ef8859e657a77d0079dea556ad6f8dc87031ab1c54b1a9cbfe.body
ADDED
Binary file (342 kB). View file
|
|
.cache/pip/http-v2/0/e/a/4/f/0ea4f1b2570ca3d64073f1277e4faa435bd7c7cbadafd80723949de4
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/0/e/a/4/f/0ea4f1b2570ca3d64073f1277e4faa435bd7c7cbadafd80723949de4.body
ADDED
Binary file (66.6 kB). View file
|
|
.cache/pip/http-v2/1/2/e/6/c/12e6c0100f8dcc54f1445b9845cfdcecf519882e2fe2767cf43bd439
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/1/2/e/6/c/12e6c0100f8dcc54f1445b9845cfdcecf519882e2fe2767cf43bd439.body
ADDED
Binary file (2.16 kB). View file
|
|
.cache/pip/http-v2/1/8/e/e/a/18eea207de73c88bb45229bed4bcc74fbcbddadf2aa9f49e4df1f66a
ADDED
Binary file (1.19 kB). View file
|
|
.cache/pip/http-v2/1/8/e/e/a/18eea207de73c88bb45229bed4bcc74fbcbddadf2aa9f49e4df1f66a.body
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: pip
|
3 |
+
Version: 24.0
|
4 |
+
Summary: The PyPA recommended tool for installing Python packages.
|
5 |
+
Author-email: The pip developers <[email protected]>
|
6 |
+
License: MIT
|
7 |
+
Project-URL: Homepage, https://pip.pypa.io/
|
8 |
+
Project-URL: Documentation, https://pip.pypa.io
|
9 |
+
Project-URL: Source, https://github.com/pypa/pip
|
10 |
+
Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
|
11 |
+
Classifier: Development Status :: 5 - Production/Stable
|
12 |
+
Classifier: Intended Audience :: Developers
|
13 |
+
Classifier: License :: OSI Approved :: MIT License
|
14 |
+
Classifier: Topic :: Software Development :: Build Tools
|
15 |
+
Classifier: Programming Language :: Python
|
16 |
+
Classifier: Programming Language :: Python :: 3
|
17 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
18 |
+
Classifier: Programming Language :: Python :: 3.7
|
19 |
+
Classifier: Programming Language :: Python :: 3.8
|
20 |
+
Classifier: Programming Language :: Python :: 3.9
|
21 |
+
Classifier: Programming Language :: Python :: 3.10
|
22 |
+
Classifier: Programming Language :: Python :: 3.11
|
23 |
+
Classifier: Programming Language :: Python :: 3.12
|
24 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
25 |
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
26 |
+
Requires-Python: >=3.7
|
27 |
+
Description-Content-Type: text/x-rst
|
28 |
+
License-File: LICENSE.txt
|
29 |
+
License-File: AUTHORS.txt
|
30 |
+
|
31 |
+
pip - The Python Package Installer
|
32 |
+
==================================
|
33 |
+
|
34 |
+
.. image:: https://img.shields.io/pypi/v/pip.svg
|
35 |
+
:target: https://pypi.org/project/pip/
|
36 |
+
:alt: PyPI
|
37 |
+
|
38 |
+
.. image:: https://img.shields.io/pypi/pyversions/pip
|
39 |
+
:target: https://pypi.org/project/pip
|
40 |
+
:alt: PyPI - Python Version
|
41 |
+
|
42 |
+
.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
|
43 |
+
:target: https://pip.pypa.io/en/latest
|
44 |
+
:alt: Documentation
|
45 |
+
|
46 |
+
pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
|
47 |
+
|
48 |
+
Please take a look at our documentation for how to install and use pip:
|
49 |
+
|
50 |
+
* `Installation`_
|
51 |
+
* `Usage`_
|
52 |
+
|
53 |
+
We release updates regularly, with a new version every 3 months. Find more details in our documentation:
|
54 |
+
|
55 |
+
* `Release notes`_
|
56 |
+
* `Release process`_
|
57 |
+
|
58 |
+
If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
|
59 |
+
|
60 |
+
* `Issue tracking`_
|
61 |
+
* `Discourse channel`_
|
62 |
+
* `User IRC`_
|
63 |
+
|
64 |
+
If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
|
65 |
+
|
66 |
+
* `GitHub page`_
|
67 |
+
* `Development documentation`_
|
68 |
+
* `Development IRC`_
|
69 |
+
|
70 |
+
Code of Conduct
|
71 |
+
---------------
|
72 |
+
|
73 |
+
Everyone interacting in the pip project's codebases, issue trackers, chat
|
74 |
+
rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
|
75 |
+
|
76 |
+
.. _package installer: https://packaging.python.org/guides/tool-recommendations/
|
77 |
+
.. _Python Package Index: https://pypi.org
|
78 |
+
.. _Installation: https://pip.pypa.io/en/stable/installation/
|
79 |
+
.. _Usage: https://pip.pypa.io/en/stable/
|
80 |
+
.. _Release notes: https://pip.pypa.io/en/stable/news.html
|
81 |
+
.. _Release process: https://pip.pypa.io/en/latest/development/release-process/
|
82 |
+
.. _GitHub page: https://github.com/pypa/pip
|
83 |
+
.. _Development documentation: https://pip.pypa.io/en/latest/development
|
84 |
+
.. _Issue tracking: https://github.com/pypa/pip/issues
|
85 |
+
.. _Discourse channel: https://discuss.python.org/c/packaging
|
86 |
+
.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
|
87 |
+
.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
|
88 |
+
.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
|
.cache/pip/http-v2/1/d/8/a/2/1d8a24cdff71edbc3f733b6b4d52640c1c1129289938aa4d1c7adcf5
ADDED
Binary file (1.15 kB). View file
|
|
.cache/pip/http-v2/1/d/8/a/2/1d8a24cdff71edbc3f733b6b4d52640c1c1129289938aa4d1c7adcf5.body
ADDED
Binary file (207 kB). View file
|
|
.cache/pip/http-v2/1/e/2/b/1/1e2b1734fc3c57a4733131da81a6167573fc77057172172ceee83a22
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/2/e/2/d/8/2e2d841f57ca6a43dfc96af93374304dda5b757176df2cce7ca2b18d
ADDED
Binary file (1.11 kB). View file
|
|
.cache/pip/http-v2/4/0/2/3/b/4023be7b5b37a7a4144c804ce69828082d4fb2a124d9d8aabc855da8
ADDED
Binary file (1.12 kB). View file
|
|
.cache/pip/http-v2/4/5/9/c/7/459c78bacdedb04c7e03d152081522ecf0ff46e1d14e7503997ea6c8
ADDED
Binary file (1.15 kB). View file
|
|
.cache/pip/http-v2/7/1/9/e/0/719e0feaf94b669c315daed4ef76501cc929d482e4315b25fd3b0082.body
ADDED
@@ -0,0 +1,303 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: huggingface-hub
|
3 |
+
Version: 0.25.1
|
4 |
+
Summary: Client library to download and publish models, datasets and other repos on the huggingface.co hub
|
5 |
+
Home-page: https://github.com/huggingface/huggingface_hub
|
6 |
+
Author: Hugging Face, Inc.
|
7 |
+
Author-email: [email protected]
|
8 |
+
License: Apache
|
9 |
+
Keywords: model-hub machine-learning models natural-language-processing deep-learning pytorch pretrained-models
|
10 |
+
Platform: UNKNOWN
|
11 |
+
Classifier: Intended Audience :: Developers
|
12 |
+
Classifier: Intended Audience :: Education
|
13 |
+
Classifier: Intended Audience :: Science/Research
|
14 |
+
Classifier: License :: OSI Approved :: Apache Software License
|
15 |
+
Classifier: Operating System :: OS Independent
|
16 |
+
Classifier: Programming Language :: Python :: 3
|
17 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
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: Topic :: Scientific/Engineering :: Artificial Intelligence
|
23 |
+
Requires-Python: >=3.8.0
|
24 |
+
Description-Content-Type: text/markdown
|
25 |
+
License-File: LICENSE
|
26 |
+
Requires-Dist: filelock
|
27 |
+
Requires-Dist: fsspec>=2023.5.0
|
28 |
+
Requires-Dist: packaging>=20.9
|
29 |
+
Requires-Dist: pyyaml>=5.1
|
30 |
+
Requires-Dist: requests
|
31 |
+
Requires-Dist: tqdm>=4.42.1
|
32 |
+
Requires-Dist: typing-extensions>=3.7.4.3
|
33 |
+
Provides-Extra: all
|
34 |
+
Requires-Dist: InquirerPy==0.3.4; extra == "all"
|
35 |
+
Requires-Dist: aiohttp; extra == "all"
|
36 |
+
Requires-Dist: minijinja>=1.0; extra == "all"
|
37 |
+
Requires-Dist: jedi; extra == "all"
|
38 |
+
Requires-Dist: Jinja2; extra == "all"
|
39 |
+
Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "all"
|
40 |
+
Requires-Dist: pytest-cov; extra == "all"
|
41 |
+
Requires-Dist: pytest-env; extra == "all"
|
42 |
+
Requires-Dist: pytest-xdist; extra == "all"
|
43 |
+
Requires-Dist: pytest-vcr; extra == "all"
|
44 |
+
Requires-Dist: pytest-asyncio; extra == "all"
|
45 |
+
Requires-Dist: pytest-rerunfailures; extra == "all"
|
46 |
+
Requires-Dist: pytest-mock; extra == "all"
|
47 |
+
Requires-Dist: urllib3<2.0; extra == "all"
|
48 |
+
Requires-Dist: soundfile; extra == "all"
|
49 |
+
Requires-Dist: Pillow; extra == "all"
|
50 |
+
Requires-Dist: gradio; extra == "all"
|
51 |
+
Requires-Dist: numpy; extra == "all"
|
52 |
+
Requires-Dist: fastapi; extra == "all"
|
53 |
+
Requires-Dist: ruff>=0.5.0; extra == "all"
|
54 |
+
Requires-Dist: mypy==1.5.1; extra == "all"
|
55 |
+
Requires-Dist: typing-extensions>=4.8.0; extra == "all"
|
56 |
+
Requires-Dist: types-PyYAML; extra == "all"
|
57 |
+
Requires-Dist: types-requests; extra == "all"
|
58 |
+
Requires-Dist: types-simplejson; extra == "all"
|
59 |
+
Requires-Dist: types-toml; extra == "all"
|
60 |
+
Requires-Dist: types-tqdm; extra == "all"
|
61 |
+
Requires-Dist: types-urllib3; extra == "all"
|
62 |
+
Provides-Extra: cli
|
63 |
+
Requires-Dist: InquirerPy==0.3.4; extra == "cli"
|
64 |
+
Provides-Extra: dev
|
65 |
+
Requires-Dist: InquirerPy==0.3.4; extra == "dev"
|
66 |
+
Requires-Dist: aiohttp; extra == "dev"
|
67 |
+
Requires-Dist: minijinja>=1.0; extra == "dev"
|
68 |
+
Requires-Dist: jedi; extra == "dev"
|
69 |
+
Requires-Dist: Jinja2; extra == "dev"
|
70 |
+
Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "dev"
|
71 |
+
Requires-Dist: pytest-cov; extra == "dev"
|
72 |
+
Requires-Dist: pytest-env; extra == "dev"
|
73 |
+
Requires-Dist: pytest-xdist; extra == "dev"
|
74 |
+
Requires-Dist: pytest-vcr; extra == "dev"
|
75 |
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
76 |
+
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
77 |
+
Requires-Dist: pytest-mock; extra == "dev"
|
78 |
+
Requires-Dist: urllib3<2.0; extra == "dev"
|
79 |
+
Requires-Dist: soundfile; extra == "dev"
|
80 |
+
Requires-Dist: Pillow; extra == "dev"
|
81 |
+
Requires-Dist: gradio; extra == "dev"
|
82 |
+
Requires-Dist: numpy; extra == "dev"
|
83 |
+
Requires-Dist: fastapi; extra == "dev"
|
84 |
+
Requires-Dist: ruff>=0.5.0; extra == "dev"
|
85 |
+
Requires-Dist: mypy==1.5.1; extra == "dev"
|
86 |
+
Requires-Dist: typing-extensions>=4.8.0; extra == "dev"
|
87 |
+
Requires-Dist: types-PyYAML; extra == "dev"
|
88 |
+
Requires-Dist: types-requests; extra == "dev"
|
89 |
+
Requires-Dist: types-simplejson; extra == "dev"
|
90 |
+
Requires-Dist: types-toml; extra == "dev"
|
91 |
+
Requires-Dist: types-tqdm; extra == "dev"
|
92 |
+
Requires-Dist: types-urllib3; extra == "dev"
|
93 |
+
Provides-Extra: fastai
|
94 |
+
Requires-Dist: toml; extra == "fastai"
|
95 |
+
Requires-Dist: fastai>=2.4; extra == "fastai"
|
96 |
+
Requires-Dist: fastcore>=1.3.27; extra == "fastai"
|
97 |
+
Provides-Extra: hf_transfer
|
98 |
+
Requires-Dist: hf-transfer>=0.1.4; extra == "hf-transfer"
|
99 |
+
Provides-Extra: inference
|
100 |
+
Requires-Dist: aiohttp; extra == "inference"
|
101 |
+
Requires-Dist: minijinja>=1.0; extra == "inference"
|
102 |
+
Provides-Extra: quality
|
103 |
+
Requires-Dist: ruff>=0.5.0; extra == "quality"
|
104 |
+
Requires-Dist: mypy==1.5.1; extra == "quality"
|
105 |
+
Provides-Extra: tensorflow
|
106 |
+
Requires-Dist: tensorflow; extra == "tensorflow"
|
107 |
+
Requires-Dist: pydot; extra == "tensorflow"
|
108 |
+
Requires-Dist: graphviz; extra == "tensorflow"
|
109 |
+
Provides-Extra: tensorflow-testing
|
110 |
+
Requires-Dist: tensorflow; extra == "tensorflow-testing"
|
111 |
+
Requires-Dist: keras<3.0; extra == "tensorflow-testing"
|
112 |
+
Provides-Extra: testing
|
113 |
+
Requires-Dist: InquirerPy==0.3.4; extra == "testing"
|
114 |
+
Requires-Dist: aiohttp; extra == "testing"
|
115 |
+
Requires-Dist: minijinja>=1.0; extra == "testing"
|
116 |
+
Requires-Dist: jedi; extra == "testing"
|
117 |
+
Requires-Dist: Jinja2; extra == "testing"
|
118 |
+
Requires-Dist: pytest<8.2.2,>=8.1.1; extra == "testing"
|
119 |
+
Requires-Dist: pytest-cov; extra == "testing"
|
120 |
+
Requires-Dist: pytest-env; extra == "testing"
|
121 |
+
Requires-Dist: pytest-xdist; extra == "testing"
|
122 |
+
Requires-Dist: pytest-vcr; extra == "testing"
|
123 |
+
Requires-Dist: pytest-asyncio; extra == "testing"
|
124 |
+
Requires-Dist: pytest-rerunfailures; extra == "testing"
|
125 |
+
Requires-Dist: pytest-mock; extra == "testing"
|
126 |
+
Requires-Dist: urllib3<2.0; extra == "testing"
|
127 |
+
Requires-Dist: soundfile; extra == "testing"
|
128 |
+
Requires-Dist: Pillow; extra == "testing"
|
129 |
+
Requires-Dist: gradio; extra == "testing"
|
130 |
+
Requires-Dist: numpy; extra == "testing"
|
131 |
+
Requires-Dist: fastapi; extra == "testing"
|
132 |
+
Provides-Extra: torch
|
133 |
+
Requires-Dist: torch; extra == "torch"
|
134 |
+
Requires-Dist: safetensors[torch]; extra == "torch"
|
135 |
+
Provides-Extra: typing
|
136 |
+
Requires-Dist: typing-extensions>=4.8.0; extra == "typing"
|
137 |
+
Requires-Dist: types-PyYAML; extra == "typing"
|
138 |
+
Requires-Dist: types-requests; extra == "typing"
|
139 |
+
Requires-Dist: types-simplejson; extra == "typing"
|
140 |
+
Requires-Dist: types-toml; extra == "typing"
|
141 |
+
Requires-Dist: types-tqdm; extra == "typing"
|
142 |
+
Requires-Dist: types-urllib3; extra == "typing"
|
143 |
+
|
144 |
+
<p align="center">
|
145 |
+
<br/>
|
146 |
+
<img alt="huggingface_hub library logo" src="https://huggingface.co/datasets/huggingface/documentation-images/raw/main/huggingface_hub.svg" width="376" height="59" style="max-width: 100%;">
|
147 |
+
<br/>
|
148 |
+
</p>
|
149 |
+
|
150 |
+
<p align="center">
|
151 |
+
<i>The official Python client for the Huggingface Hub.</i>
|
152 |
+
</p>
|
153 |
+
|
154 |
+
<p align="center">
|
155 |
+
<a href="https://huggingface.co/docs/huggingface_hub/en/index"><img alt="Documentation" src="https://img.shields.io/website/http/huggingface.co/docs/huggingface_hub/index.svg?down_color=red&down_message=offline&up_message=online&label=doc"></a>
|
156 |
+
<a href="https://github.com/huggingface/huggingface_hub/releases"><img alt="GitHub release" src="https://img.shields.io/github/release/huggingface/huggingface_hub.svg"></a>
|
157 |
+
<a href="https://github.com/huggingface/huggingface_hub"><img alt="PyPi version" src="https://img.shields.io/pypi/pyversions/huggingface_hub.svg"></a>
|
158 |
+
<a href="https://pypi.org/project/huggingface-hub"><img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/huggingface_hub"></a>
|
159 |
+
<a href="https://codecov.io/gh/huggingface/huggingface_hub"><img alt="Code coverage" src="https://codecov.io/gh/huggingface/huggingface_hub/branch/main/graph/badge.svg?token=RXP95LE2XL"></a>
|
160 |
+
</p>
|
161 |
+
|
162 |
+
<h4 align="center">
|
163 |
+
<p>
|
164 |
+
<b>English</b> |
|
165 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_de.md">Deutsch</a> |
|
166 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_hi.md">हिंदी</a> |
|
167 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_ko.md">한국어</a> |
|
168 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_cn.md">中文(简体)</a>
|
169 |
+
<p>
|
170 |
+
</h4>
|
171 |
+
|
172 |
+
---
|
173 |
+
|
174 |
+
**Documentation**: <a href="https://hf.co/docs/huggingface_hub" target="_blank">https://hf.co/docs/huggingface_hub</a>
|
175 |
+
|
176 |
+
**Source Code**: <a href="https://github.com/huggingface/huggingface_hub" target="_blank">https://github.com/huggingface/huggingface_hub</a>
|
177 |
+
|
178 |
+
---
|
179 |
+
|
180 |
+
## Welcome to the huggingface_hub library
|
181 |
+
|
182 |
+
The `huggingface_hub` library allows you to interact with the [Hugging Face Hub](https://huggingface.co/), a platform democratizing open-source Machine Learning for creators and collaborators. Discover pre-trained models and datasets for your projects or play with the thousands of machine learning apps hosted on the Hub. You can also create and share your own models, datasets and demos with the community. The `huggingface_hub` library provides a simple way to do all these things with Python.
|
183 |
+
|
184 |
+
## Key features
|
185 |
+
|
186 |
+
- [Download files](https://huggingface.co/docs/huggingface_hub/en/guides/download) from the Hub.
|
187 |
+
- [Upload files](https://huggingface.co/docs/huggingface_hub/en/guides/upload) to the Hub.
|
188 |
+
- [Manage your repositories](https://huggingface.co/docs/huggingface_hub/en/guides/repository).
|
189 |
+
- [Run Inference](https://huggingface.co/docs/huggingface_hub/en/guides/inference) on deployed models.
|
190 |
+
- [Search](https://huggingface.co/docs/huggingface_hub/en/guides/search) for models, datasets and Spaces.
|
191 |
+
- [Share Model Cards](https://huggingface.co/docs/huggingface_hub/en/guides/model-cards) to document your models.
|
192 |
+
- [Engage with the community](https://huggingface.co/docs/huggingface_hub/en/guides/community) through PRs and comments.
|
193 |
+
|
194 |
+
## Installation
|
195 |
+
|
196 |
+
Install the `huggingface_hub` package with [pip](https://pypi.org/project/huggingface-hub/):
|
197 |
+
|
198 |
+
```bash
|
199 |
+
pip install huggingface_hub
|
200 |
+
```
|
201 |
+
|
202 |
+
If you prefer, you can also install it with [conda](https://huggingface.co/docs/huggingface_hub/en/installation#install-with-conda).
|
203 |
+
|
204 |
+
In order to keep the package minimal by default, `huggingface_hub` comes with optional dependencies useful for some use cases. For example, if you want have a complete experience for Inference, run:
|
205 |
+
|
206 |
+
```bash
|
207 |
+
pip install huggingface_hub[inference]
|
208 |
+
```
|
209 |
+
|
210 |
+
To learn more installation and optional dependencies, check out the [installation guide](https://huggingface.co/docs/huggingface_hub/en/installation).
|
211 |
+
|
212 |
+
## Quick start
|
213 |
+
|
214 |
+
### Download files
|
215 |
+
|
216 |
+
Download a single file
|
217 |
+
|
218 |
+
```py
|
219 |
+
from huggingface_hub import hf_hub_download
|
220 |
+
|
221 |
+
hf_hub_download(repo_id="tiiuae/falcon-7b-instruct", filename="config.json")
|
222 |
+
```
|
223 |
+
|
224 |
+
Or an entire repository
|
225 |
+
|
226 |
+
```py
|
227 |
+
from huggingface_hub import snapshot_download
|
228 |
+
|
229 |
+
snapshot_download("stabilityai/stable-diffusion-2-1")
|
230 |
+
```
|
231 |
+
|
232 |
+
Files will be downloaded in a local cache folder. More details in [this guide](https://huggingface.co/docs/huggingface_hub/en/guides/manage-cache).
|
233 |
+
|
234 |
+
### Login
|
235 |
+
|
236 |
+
The Hugging Face Hub uses tokens to authenticate applications (see [docs](https://huggingface.co/docs/hub/security-tokens)). To log in your machine, run the following CLI:
|
237 |
+
|
238 |
+
```bash
|
239 |
+
huggingface-cli login
|
240 |
+
# or using an environment variable
|
241 |
+
huggingface-cli login --token $HUGGINGFACE_TOKEN
|
242 |
+
```
|
243 |
+
|
244 |
+
### Create a repository
|
245 |
+
|
246 |
+
```py
|
247 |
+
from huggingface_hub import create_repo
|
248 |
+
|
249 |
+
create_repo(repo_id="super-cool-model")
|
250 |
+
```
|
251 |
+
|
252 |
+
### Upload files
|
253 |
+
|
254 |
+
Upload a single file
|
255 |
+
|
256 |
+
```py
|
257 |
+
from huggingface_hub import upload_file
|
258 |
+
|
259 |
+
upload_file(
|
260 |
+
path_or_fileobj="/home/lysandre/dummy-test/README.md",
|
261 |
+
path_in_repo="README.md",
|
262 |
+
repo_id="lysandre/test-model",
|
263 |
+
)
|
264 |
+
```
|
265 |
+
|
266 |
+
Or an entire folder
|
267 |
+
|
268 |
+
```py
|
269 |
+
from huggingface_hub import upload_folder
|
270 |
+
|
271 |
+
upload_folder(
|
272 |
+
folder_path="/path/to/local/space",
|
273 |
+
repo_id="username/my-cool-space",
|
274 |
+
repo_type="space",
|
275 |
+
)
|
276 |
+
```
|
277 |
+
|
278 |
+
For details in the [upload guide](https://huggingface.co/docs/huggingface_hub/en/guides/upload).
|
279 |
+
|
280 |
+
## Integrating to the Hub.
|
281 |
+
|
282 |
+
We're partnering with cool open source ML libraries to provide free model hosting and versioning. You can find the existing integrations [here](https://huggingface.co/docs/hub/libraries).
|
283 |
+
|
284 |
+
The advantages are:
|
285 |
+
|
286 |
+
- Free model or dataset hosting for libraries and their users.
|
287 |
+
- Built-in file versioning, even with very large files, thanks to a git-based approach.
|
288 |
+
- Serverless inference API for all models publicly available.
|
289 |
+
- In-browser widgets to play with the uploaded models.
|
290 |
+
- Anyone can upload a new model for your library, they just need to add the corresponding tag for the model to be discoverable.
|
291 |
+
- Fast downloads! We use Cloudfront (a CDN) to geo-replicate downloads so they're blazing fast from anywhere on the globe.
|
292 |
+
- Usage stats and more features to come.
|
293 |
+
|
294 |
+
If you would like to integrate your library, feel free to open an issue to begin the discussion. We wrote a [step-by-step guide](https://huggingface.co/docs/hub/adding-a-library) with ❤️ showing how to do this integration.
|
295 |
+
|
296 |
+
## Contributions (feature requests, bugs, etc.) are super welcome 💙💚💛💜🧡❤️
|
297 |
+
|
298 |
+
Everyone is welcome to contribute, and we value everybody's contribution. Code is not the only way to help the community.
|
299 |
+
Answering questions, helping others, reaching out and improving the documentations are immensely valuable to the community.
|
300 |
+
We wrote a [contribution guide](https://github.com/huggingface/huggingface_hub/blob/main/CONTRIBUTING.md) to summarize
|
301 |
+
how to get started to contribute to this repository.
|
302 |
+
|
303 |
+
|
.cache/pip/http-v2/7/1/b/9/d/71b9df22187d5c54f1147d4ac0849d1438ec19aedc20363a3478b854.body
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: docker-pycreds
|
3 |
+
Version: 0.4.0
|
4 |
+
Summary: Python bindings for the docker credentials store API
|
5 |
+
Home-page: https://github.com/shin-/dockerpy-creds
|
6 |
+
Author: UNKNOWN
|
7 |
+
Author-email: UNKNOWN
|
8 |
+
License: Apache License 2.0
|
9 |
+
Platform: UNKNOWN
|
10 |
+
Classifier: Development Status :: 4 - Beta
|
11 |
+
Classifier: Environment :: Other Environment
|
12 |
+
Classifier: Intended Audience :: Developers
|
13 |
+
Classifier: Operating System :: OS Independent
|
14 |
+
Classifier: Programming Language :: Python
|
15 |
+
Classifier: Programming Language :: Python :: 2
|
16 |
+
Classifier: Programming Language :: Python :: 2.6
|
17 |
+
Classifier: Programming Language :: Python :: 2.7
|
18 |
+
Classifier: Programming Language :: Python :: 3
|
19 |
+
Classifier: Programming Language :: Python :: 3.3
|
20 |
+
Classifier: Programming Language :: Python :: 3.4
|
21 |
+
Classifier: Programming Language :: Python :: 3.5
|
22 |
+
Classifier: Programming Language :: Python :: 3.6
|
23 |
+
Classifier: Topic :: Utilities
|
24 |
+
Classifier: License :: OSI Approved :: Apache Software License
|
25 |
+
Requires-Dist: six (>=1.4.0)
|
26 |
+
|
27 |
+
# docker-pycreds
|
28 |
+
|
29 |
+
[](https://circleci.com/gh/shin-/dockerpy-creds/tree/master)
|
30 |
+
|
31 |
+
Python bindings for the docker credentials store API
|
32 |
+
|
33 |
+
## Credentials store info
|
34 |
+
|
35 |
+
[Docker documentation page](https://docs.docker.com/engine/reference/commandline/login/#/credentials-store)
|
36 |
+
|
37 |
+
## Requirements
|
38 |
+
|
39 |
+
On top of the dependencies in `requirements.txt`, the `docker-credential`
|
40 |
+
executable for the platform must be installed on the user's system.
|
41 |
+
|
42 |
+
## API usage
|
43 |
+
|
44 |
+
```python
|
45 |
+
|
46 |
+
import dockerpycreds
|
47 |
+
|
48 |
+
store = dockerpycreds.Store('secretservice')
|
49 |
+
store.store(
|
50 |
+
server='https://index.docker.io/v1/', username='johndoe',
|
51 |
+
secret='hunter2'
|
52 |
+
)
|
53 |
+
|
54 |
+
print(store.list())
|
55 |
+
|
56 |
+
print(store.get('https://index.docker.io/v1/'))
|
57 |
+
|
58 |
+
|
59 |
+
store.erase('https://index.docker.io/v1/')
|
60 |
+
```
|
61 |
+
|
62 |
+
|
.cache/pip/http-v2/7/2/2/9/f/7229fb50bdca3f16cb03ca953b540cb67fb07fb971b675db32ae3239
ADDED
Binary file (1.17 kB). View file
|
|
.cache/pip/http-v2/7/2/2/9/f/7229fb50bdca3f16cb03ca953b540cb67fb07fb971b675db32ae3239.body
ADDED
@@ -0,0 +1,522 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: xxhash
|
3 |
+
Version: 3.5.0
|
4 |
+
Summary: Python binding for xxHash
|
5 |
+
Home-page: https://github.com/ifduyue/python-xxhash
|
6 |
+
Author: Yue Du
|
7 |
+
Author-email: [email protected]
|
8 |
+
License: BSD
|
9 |
+
Classifier: Development Status :: 5 - Production/Stable
|
10 |
+
Classifier: License :: OSI Approved :: BSD License
|
11 |
+
Classifier: Intended Audience :: Developers
|
12 |
+
Classifier: Programming Language :: Python
|
13 |
+
Classifier: Programming Language :: Python :: 3
|
14 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
15 |
+
Classifier: Programming Language :: Python :: 3.7
|
16 |
+
Classifier: Programming Language :: Python :: 3.8
|
17 |
+
Classifier: Programming Language :: Python :: 3.9
|
18 |
+
Classifier: Programming Language :: Python :: 3.10
|
19 |
+
Classifier: Programming Language :: Python :: 3.11
|
20 |
+
Classifier: Programming Language :: Python :: 3.12
|
21 |
+
Classifier: Programming Language :: Python :: 3.13
|
22 |
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
23 |
+
Requires-Python: >=3.7
|
24 |
+
Description-Content-Type: text/x-rst
|
25 |
+
License-File: LICENSE
|
26 |
+
|
27 |
+
python-xxhash
|
28 |
+
=============
|
29 |
+
|
30 |
+
.. image:: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml/badge.svg
|
31 |
+
:target: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml
|
32 |
+
:alt: Github Actions Status
|
33 |
+
|
34 |
+
.. image:: https://img.shields.io/pypi/v/xxhash.svg
|
35 |
+
:target: https://pypi.org/project/xxhash/
|
36 |
+
:alt: Latest Version
|
37 |
+
|
38 |
+
.. image:: https://img.shields.io/pypi/pyversions/xxhash.svg
|
39 |
+
:target: https://pypi.org/project/xxhash/
|
40 |
+
:alt: Supported Python versions
|
41 |
+
|
42 |
+
.. image:: https://img.shields.io/pypi/l/xxhash.svg
|
43 |
+
:target: https://pypi.org/project/xxhash/
|
44 |
+
:alt: License
|
45 |
+
|
46 |
+
|
47 |
+
.. _HMAC: http://en.wikipedia.org/wiki/Hash-based_message_authentication_code
|
48 |
+
.. _xxHash: https://github.com/Cyan4973/xxHash
|
49 |
+
.. _Cyan4973: https://github.com/Cyan4973
|
50 |
+
|
51 |
+
|
52 |
+
xxhash is a Python binding for the xxHash_ library by `Yann Collet`__.
|
53 |
+
|
54 |
+
__ Cyan4973_
|
55 |
+
|
56 |
+
Installation
|
57 |
+
------------
|
58 |
+
|
59 |
+
.. code-block:: bash
|
60 |
+
|
61 |
+
$ pip install xxhash
|
62 |
+
|
63 |
+
You can also install using conda:
|
64 |
+
|
65 |
+
.. code-block:: bash
|
66 |
+
|
67 |
+
$ conda install -c conda-forge python-xxhash
|
68 |
+
|
69 |
+
|
70 |
+
Installing From Source
|
71 |
+
~~~~~~~~~~~~~~~~~~~~~~~
|
72 |
+
|
73 |
+
.. code-block:: bash
|
74 |
+
|
75 |
+
$ pip install --no-binary xxhash xxhash
|
76 |
+
|
77 |
+
Prerequisites
|
78 |
+
++++++++++++++
|
79 |
+
|
80 |
+
On Debian/Ubuntu:
|
81 |
+
|
82 |
+
.. code-block:: bash
|
83 |
+
|
84 |
+
$ apt-get install python-dev gcc
|
85 |
+
|
86 |
+
On CentOS/Fedora:
|
87 |
+
|
88 |
+
.. code-block:: bash
|
89 |
+
|
90 |
+
$ yum install python-devel gcc redhat-rpm-config
|
91 |
+
|
92 |
+
Linking to libxxhash.so
|
93 |
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
94 |
+
|
95 |
+
By default python-xxhash will use bundled xxHash,
|
96 |
+
we can change this by specifying ENV var ``XXHASH_LINK_SO``:
|
97 |
+
|
98 |
+
.. code-block:: bash
|
99 |
+
|
100 |
+
$ XXHASH_LINK_SO=1 pip install --no-binary xxhash xxhash
|
101 |
+
|
102 |
+
Usage
|
103 |
+
--------
|
104 |
+
|
105 |
+
Module version and its backend xxHash library version can be retrieved using
|
106 |
+
the module properties ``VERSION`` AND ``XXHASH_VERSION`` respectively.
|
107 |
+
|
108 |
+
.. code-block:: python
|
109 |
+
|
110 |
+
>>> import xxhash
|
111 |
+
>>> xxhash.VERSION
|
112 |
+
'2.0.0'
|
113 |
+
>>> xxhash.XXHASH_VERSION
|
114 |
+
'0.8.0'
|
115 |
+
|
116 |
+
This module is hashlib-compliant, which means you can use it in the same way as ``hashlib.md5``.
|
117 |
+
|
118 |
+
| update() -- update the current digest with an additional string
|
119 |
+
| digest() -- return the current digest value
|
120 |
+
| hexdigest() -- return the current digest as a string of hexadecimal digits
|
121 |
+
| intdigest() -- return the current digest as an integer
|
122 |
+
| copy() -- return a copy of the current xxhash object
|
123 |
+
| reset() -- reset state
|
124 |
+
|
125 |
+
md5 digest returns bytes, but the original xxh32 and xxh64 C APIs return integers.
|
126 |
+
While this module is made hashlib-compliant, ``intdigest()`` is also provided to
|
127 |
+
get the integer digest.
|
128 |
+
|
129 |
+
Constructors for hash algorithms provided by this module are ``xxh32()`` and ``xxh64()``.
|
130 |
+
|
131 |
+
For example, to obtain the digest of the byte string ``b'Nobody inspects the spammish repetition'``:
|
132 |
+
|
133 |
+
.. code-block:: python
|
134 |
+
|
135 |
+
>>> import xxhash
|
136 |
+
>>> x = xxhash.xxh32()
|
137 |
+
>>> x.update(b'Nobody inspects')
|
138 |
+
>>> x.update(b' the spammish repetition')
|
139 |
+
>>> x.digest()
|
140 |
+
b'\xe2);/'
|
141 |
+
>>> x.digest_size
|
142 |
+
4
|
143 |
+
>>> x.block_size
|
144 |
+
16
|
145 |
+
|
146 |
+
More condensed:
|
147 |
+
|
148 |
+
.. code-block:: python
|
149 |
+
|
150 |
+
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').hexdigest()
|
151 |
+
'e2293b2f'
|
152 |
+
>>> xxhash.xxh32(b'Nobody inspects the spammish repetition').digest() == x.digest()
|
153 |
+
True
|
154 |
+
|
155 |
+
An optional seed (default is 0) can be used to alter the result predictably:
|
156 |
+
|
157 |
+
.. code-block:: python
|
158 |
+
|
159 |
+
>>> import xxhash
|
160 |
+
>>> xxhash.xxh64('xxhash').hexdigest()
|
161 |
+
'32dd38952c4bc720'
|
162 |
+
>>> xxhash.xxh64('xxhash', seed=20141025).hexdigest()
|
163 |
+
'b559b98d844e0635'
|
164 |
+
>>> x = xxhash.xxh64(seed=20141025)
|
165 |
+
>>> x.update('xxhash')
|
166 |
+
>>> x.hexdigest()
|
167 |
+
'b559b98d844e0635'
|
168 |
+
>>> x.intdigest()
|
169 |
+
13067679811253438005
|
170 |
+
|
171 |
+
Be careful that xxh32 takes an unsigned 32-bit integer as seed, while xxh64
|
172 |
+
takes an unsigned 64-bit integer. Although unsigned integer overflow is
|
173 |
+
defined behavior, it's better not to make it happen:
|
174 |
+
|
175 |
+
.. code-block:: python
|
176 |
+
|
177 |
+
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=0).hexdigest()
|
178 |
+
'f7a35af8'
|
179 |
+
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32).hexdigest()
|
180 |
+
'f7a35af8'
|
181 |
+
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=1).hexdigest()
|
182 |
+
'd8d4b4ba'
|
183 |
+
>>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32+1).hexdigest()
|
184 |
+
'd8d4b4ba'
|
185 |
+
>>>
|
186 |
+
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=0).hexdigest()
|
187 |
+
'd4cb0a70a2b8c7c1'
|
188 |
+
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64).hexdigest()
|
189 |
+
'd4cb0a70a2b8c7c1'
|
190 |
+
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=1).hexdigest()
|
191 |
+
'ce5087f12470d961'
|
192 |
+
>>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64+1).hexdigest()
|
193 |
+
'ce5087f12470d961'
|
194 |
+
|
195 |
+
|
196 |
+
``digest()`` returns bytes of the **big-endian** representation of the integer
|
197 |
+
digest:
|
198 |
+
|
199 |
+
.. code-block:: python
|
200 |
+
|
201 |
+
>>> import xxhash
|
202 |
+
>>> h = xxhash.xxh64()
|
203 |
+
>>> h.digest()
|
204 |
+
b'\xefF\xdb7Q\xd8\xe9\x99'
|
205 |
+
>>> h.intdigest().to_bytes(8, 'big')
|
206 |
+
b'\xefF\xdb7Q\xd8\xe9\x99'
|
207 |
+
>>> h.hexdigest()
|
208 |
+
'ef46db3751d8e999'
|
209 |
+
>>> format(h.intdigest(), '016x')
|
210 |
+
'ef46db3751d8e999'
|
211 |
+
>>> h.intdigest()
|
212 |
+
17241709254077376921
|
213 |
+
>>> int(h.hexdigest(), 16)
|
214 |
+
17241709254077376921
|
215 |
+
|
216 |
+
Besides xxh32/xxh64 mentioned above, oneshot functions are also provided,
|
217 |
+
so we can avoid allocating XXH32/64 state on heap:
|
218 |
+
|
219 |
+
| xxh32_digest(bytes, seed=0)
|
220 |
+
| xxh32_intdigest(bytes, seed=0)
|
221 |
+
| xxh32_hexdigest(bytes, seed=0)
|
222 |
+
| xxh64_digest(bytes, seed=0)
|
223 |
+
| xxh64_intdigest(bytes, seed=0)
|
224 |
+
| xxh64_hexdigest(bytes, seed=0)
|
225 |
+
|
226 |
+
.. code-block:: python
|
227 |
+
|
228 |
+
>>> import xxhash
|
229 |
+
>>> xxhash.xxh64('a').digest() == xxhash.xxh64_digest('a')
|
230 |
+
True
|
231 |
+
>>> xxhash.xxh64('a').intdigest() == xxhash.xxh64_intdigest('a')
|
232 |
+
True
|
233 |
+
>>> xxhash.xxh64('a').hexdigest() == xxhash.xxh64_hexdigest('a')
|
234 |
+
True
|
235 |
+
>>> xxhash.xxh64_hexdigest('xxhash', seed=20141025)
|
236 |
+
'b559b98d844e0635'
|
237 |
+
>>> xxhash.xxh64_intdigest('xxhash', seed=20141025)
|
238 |
+
13067679811253438005L
|
239 |
+
>>> xxhash.xxh64_digest('xxhash', seed=20141025)
|
240 |
+
'\xb5Y\xb9\x8d\x84N\x065'
|
241 |
+
|
242 |
+
.. code-block:: python
|
243 |
+
|
244 |
+
In [1]: import xxhash
|
245 |
+
|
246 |
+
In [2]: %timeit xxhash.xxh64_hexdigest('xxhash')
|
247 |
+
268 ns ± 24.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
|
248 |
+
|
249 |
+
In [3]: %timeit xxhash.xxh64('xxhash').hexdigest()
|
250 |
+
416 ns ± 17.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
|
251 |
+
|
252 |
+
|
253 |
+
XXH3 hashes are available since v2.0.0 (xxHash v0.8.0), they are:
|
254 |
+
|
255 |
+
Streaming classes:
|
256 |
+
|
257 |
+
| xxh3_64
|
258 |
+
| xxh3_128
|
259 |
+
|
260 |
+
Oneshot functions:
|
261 |
+
|
262 |
+
| xxh3_64_digest(bytes, seed=0)
|
263 |
+
| xxh3_64_intdigest(bytes, seed=0)
|
264 |
+
| xxh3_64_hexdigest(bytes, seed=0)
|
265 |
+
| xxh3_128_digest(bytes, seed=0)
|
266 |
+
| xxh3_128_intdigest(bytes, seed=0)
|
267 |
+
| xxh3_128_hexdigest(bytes, seed=0)
|
268 |
+
|
269 |
+
And aliases:
|
270 |
+
|
271 |
+
| xxh128 = xxh3_128
|
272 |
+
| xxh128_digest = xxh3_128_digest
|
273 |
+
| xxh128_intdigest = xxh3_128_intdigest
|
274 |
+
| xxh128_hexdigest = xxh3_128_hexdigest
|
275 |
+
|
276 |
+
Caveats
|
277 |
+
-------
|
278 |
+
|
279 |
+
SEED OVERFLOW
|
280 |
+
~~~~~~~~~~~~~~
|
281 |
+
|
282 |
+
xxh32 takes an unsigned 32-bit integer as seed, and xxh64 takes
|
283 |
+
an unsigned 64-bit integer as seed. Make sure that the seed is greater than
|
284 |
+
or equal to ``0``.
|
285 |
+
|
286 |
+
ENDIANNESS
|
287 |
+
~~~~~~~~~~~
|
288 |
+
|
289 |
+
As of python-xxhash 0.3.0, ``digest()`` returns bytes of the
|
290 |
+
**big-endian** representation of the integer digest. It used
|
291 |
+
to be little-endian.
|
292 |
+
|
293 |
+
DONT USE XXHASH IN HMAC
|
294 |
+
~~~~~~~~~~~~~~~~~~~~~~~
|
295 |
+
Though you can use xxhash as an HMAC_ hash function, but it's
|
296 |
+
highly recommended not to.
|
297 |
+
|
298 |
+
xxhash is **NOT** a cryptographic hash function, it is a
|
299 |
+
non-cryptographic hash algorithm aimed at speed and quality.
|
300 |
+
Do not put xxhash in any position where cryptographic hash
|
301 |
+
functions are required.
|
302 |
+
|
303 |
+
|
304 |
+
Copyright and License
|
305 |
+
---------------------
|
306 |
+
|
307 |
+
Copyright (c) 2014-2024 Yue Du - https://github.com/ifduyue
|
308 |
+
|
309 |
+
Licensed under `BSD 2-Clause License <http://opensource.org/licenses/BSD-2-Clause>`_
|
310 |
+
|
311 |
+
CHANGELOG
|
312 |
+
-----------
|
313 |
+
|
314 |
+
v3.5.0 2024-08-17
|
315 |
+
~~~~~~~~~~~~~~~~~
|
316 |
+
|
317 |
+
- Build wheels for Python 3.13
|
318 |
+
|
319 |
+
v3.4.1 2023-10-05
|
320 |
+
~~~~~~~~~~~~~~~~~
|
321 |
+
|
322 |
+
- Build wheels for Python 3.12
|
323 |
+
- Remove setuptools_scm
|
324 |
+
|
325 |
+
v3.4.0 2023-10-05
|
326 |
+
~~~~~~~~~~~~~~~~~
|
327 |
+
|
328 |
+
*Yanked* due to wheels building problem.
|
329 |
+
|
330 |
+
v3.3.0 2023-07-29
|
331 |
+
~~~~~~~~~~~~~~~~~
|
332 |
+
|
333 |
+
- Upgrade xxHash to v0.8.2
|
334 |
+
- Drop support for Python 3.6
|
335 |
+
|
336 |
+
v3.2.0 2022-12-28
|
337 |
+
~~~~~~~~~~~~~~~~~
|
338 |
+
|
339 |
+
This is the last version to support Python 3.6
|
340 |
+
|
341 |
+
- Build Python 3.11 wheels.
|
342 |
+
- Remove setup.py test_suites, call unittest directly
|
343 |
+
|
344 |
+
v3.1.0 2022-10-19
|
345 |
+
~~~~~~~~~~~~~~~~~
|
346 |
+
|
347 |
+
- Type annotations.
|
348 |
+
- Enabled muslinux wheels building.
|
349 |
+
|
350 |
+
v3.0.0 2022-02-25
|
351 |
+
~~~~~~~~~~~~~~~~~
|
352 |
+
|
353 |
+
- New set `algorithms_available` lists all implemented algorithms in `xxhash`
|
354 |
+
package.
|
355 |
+
- Upgrade xxHash to v0.8.1.
|
356 |
+
- Drop support for EOL Python versions, require python >= 3.6 from now on.
|
357 |
+
- Migrate to github actions and build arm64 wheels for macOS.
|
358 |
+
- Always release GIL.
|
359 |
+
|
360 |
+
|
361 |
+
v2.0.2 2021-04-15
|
362 |
+
~~~~~~~~~~~~~~~~~
|
363 |
+
|
364 |
+
- Fix Travis CI OSX dpl python2.7 get-pip.py error
|
365 |
+
|
366 |
+
v2.0.1 2021-04-15
|
367 |
+
~~~~~~~~~~~~~~~~~
|
368 |
+
|
369 |
+
- Only to trigger Python 3.9 wheels building.
|
370 |
+
|
371 |
+
v2.0.0 2020-08-03
|
372 |
+
~~~~~~~~~~~~~~~~~
|
373 |
+
|
374 |
+
- **Require xxHash version >= v0.8.0**
|
375 |
+
- Upgrade xxHash to v0.8.0
|
376 |
+
- XXH3 hashes: `xxh3_64`, `xxh3_128`, and their oneshot functions
|
377 |
+
|
378 |
+
v1.4.4 2020-06-20
|
379 |
+
~~~~~~~~~~~~~~~~~
|
380 |
+
|
381 |
+
- Upgrade xxHash to v0.7.3
|
382 |
+
- Stop using PEP393 deprecated APIs
|
383 |
+
- Use XXH(32|64)_canonicalFromHash to replace u2bytes and ull2bytes
|
384 |
+
|
385 |
+
v1.4.3 2019-11-12
|
386 |
+
~~~~~~~~~~~~~~~~~
|
387 |
+
|
388 |
+
- Upgrade xxHash to v0.7.2
|
389 |
+
- Python 3.8 wheels
|
390 |
+
|
391 |
+
v1.4.2 2019-10-13
|
392 |
+
~~~~~~~~~~~~~~~~~
|
393 |
+
|
394 |
+
- Fixed: setup.py fails when reading README.rst and the default encoding is not UTF-8
|
395 |
+
|
396 |
+
v1.4.1 2019-08-27
|
397 |
+
~~~~~~~~~~~~~~~~~
|
398 |
+
|
399 |
+
- Fixed: xxh3.h in missing from source tarball
|
400 |
+
|
401 |
+
v1.4.0 2019-08-25
|
402 |
+
~~~~~~~~~~~~~~~~~
|
403 |
+
|
404 |
+
- Upgrade xxHash to v0.7.1
|
405 |
+
|
406 |
+
v1.3.0 2018-10-21
|
407 |
+
~~~~~~~~~~~~~~~~~
|
408 |
+
|
409 |
+
- Wheels are now built automatically
|
410 |
+
- Split CFFI variant into a separate package `ifduyue/python-xxhash-cffi <https://github.com/ifduyue/python-xxhash-cffi>`_
|
411 |
+
|
412 |
+
v1.2.0 2018-07-13
|
413 |
+
~~~~~~~~~~~~~~~~~
|
414 |
+
|
415 |
+
- Add oneshot functions xxh{32,64}_{,int,hex}digest
|
416 |
+
|
417 |
+
v1.1.0 2018-07-05
|
418 |
+
~~~~~~~~~~~~~~~~~
|
419 |
+
|
420 |
+
- Allow input larger than 2GB
|
421 |
+
- Release the GIL on sufficiently large input
|
422 |
+
- Drop support for Python 3.2
|
423 |
+
|
424 |
+
v1.0.1 2017-03-02
|
425 |
+
~~~~~~~~~~~~~~~~~~
|
426 |
+
|
427 |
+
- Free state actively, instead of delegating it to ffi.gc
|
428 |
+
|
429 |
+
v1.0.0 2017-02-10
|
430 |
+
~~~~~~~~~~~~~~~~~~
|
431 |
+
|
432 |
+
- Fixed copy() segfault
|
433 |
+
- Added CFFI variant
|
434 |
+
|
435 |
+
v0.6.3 2017-02-10
|
436 |
+
~~~~~~~~~~~~~~~~~~
|
437 |
+
|
438 |
+
- Fixed copy() segfault
|
439 |
+
|
440 |
+
v0.6.2 2017-02-10
|
441 |
+
~~~~~~~~~~~~~~~~~~
|
442 |
+
|
443 |
+
- Upgrade xxHash to v0.6.2
|
444 |
+
|
445 |
+
v0.6.1 2016-06-26
|
446 |
+
~~~~~~~~~~~~~~~~~~
|
447 |
+
|
448 |
+
- Upgrade xxHash to v0.6.1
|
449 |
+
|
450 |
+
v0.5.0 2016-03-02
|
451 |
+
~~~~~~~~~~~~~~~~~~
|
452 |
+
|
453 |
+
- Upgrade xxHash to v0.5.0
|
454 |
+
|
455 |
+
v0.4.3 2015-08-21
|
456 |
+
~~~~~~~~~~~~~~~~~~
|
457 |
+
|
458 |
+
- Upgrade xxHash to r42
|
459 |
+
|
460 |
+
v0.4.1 2015-08-16
|
461 |
+
~~~~~~~~~~~~~~~~~~
|
462 |
+
|
463 |
+
- Upgrade xxHash to r41
|
464 |
+
|
465 |
+
v0.4.0 2015-08-05
|
466 |
+
~~~~~~~~~~~~~~~~~~
|
467 |
+
|
468 |
+
- Added method reset
|
469 |
+
- Upgrade xxHash to r40
|
470 |
+
|
471 |
+
v0.3.2 2015-01-27
|
472 |
+
~~~~~~~~~~~~~~~~~~
|
473 |
+
|
474 |
+
- Fixed some typos in docstrings
|
475 |
+
|
476 |
+
v0.3.1 2015-01-24
|
477 |
+
~~~~~~~~~~~~~~~~~~
|
478 |
+
|
479 |
+
- Upgrade xxHash to r39
|
480 |
+
|
481 |
+
v0.3.0 2014-11-11
|
482 |
+
~~~~~~~~~~~~~~~~~~
|
483 |
+
|
484 |
+
- Change digest() from little-endian representation to big-endian representation of the integer digest.
|
485 |
+
This change breaks compatibility (digest() results are different).
|
486 |
+
|
487 |
+
v0.2.0 2014-10-25
|
488 |
+
~~~~~~~~~~~~~~~~~~
|
489 |
+
|
490 |
+
- Make this package hashlib-compliant
|
491 |
+
|
492 |
+
v0.1.3 2014-10-23
|
493 |
+
~~~~~~~~~~~~~~~~~~
|
494 |
+
|
495 |
+
- Update xxHash to r37
|
496 |
+
|
497 |
+
v0.1.2 2014-10-19
|
498 |
+
~~~~~~~~~~~~~~~~~~
|
499 |
+
|
500 |
+
- Improve: Check XXHnn_init() return value.
|
501 |
+
- Update xxHash to r36
|
502 |
+
|
503 |
+
v0.1.1 2014-08-07
|
504 |
+
~~~~~~~~~~~~~~~~~~
|
505 |
+
|
506 |
+
- Improve: Can now be built with Visual C++ Compiler.
|
507 |
+
|
508 |
+
v0.1.0 2014-08-05
|
509 |
+
~~~~~~~~~~~~~~~~~~
|
510 |
+
|
511 |
+
- New: XXH32 and XXH64 type, which support partially update.
|
512 |
+
- Fix: build under Python 3.4
|
513 |
+
|
514 |
+
v0.0.2 2014-08-03
|
515 |
+
~~~~~~~~~~~~~~~~~~
|
516 |
+
|
517 |
+
- NEW: Support Python 3
|
518 |
+
|
519 |
+
v0.0.1 2014-07-30
|
520 |
+
~~~~~~~~~~~~~~~~~~
|
521 |
+
|
522 |
+
- NEW: xxh32 and xxh64
|
.cache/pip/http-v2/7/3/5/4/e/7354e15b7a2b590d713d4782bd16917fac9db3c087fa80d4d8dc0db5
ADDED
Binary file (1.19 kB). View file
|
|
.cache/pip/http-v2/7/3/5/4/e/7354e15b7a2b590d713d4782bd16917fac9db3c087fa80d4d8dc0db5.body
ADDED
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: pytest
|
3 |
+
Version: 8.3.3
|
4 |
+
Summary: pytest: simple powerful testing with Python
|
5 |
+
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin, Others (See AUTHORS)
|
6 |
+
License: MIT
|
7 |
+
Project-URL: Changelog, https://docs.pytest.org/en/stable/changelog.html
|
8 |
+
Project-URL: Homepage, https://docs.pytest.org/en/latest/
|
9 |
+
Project-URL: Source, https://github.com/pytest-dev/pytest
|
10 |
+
Project-URL: Tracker, https://github.com/pytest-dev/pytest/issues
|
11 |
+
Project-URL: Twitter, https://twitter.com/pytestdotorg
|
12 |
+
Keywords: test,unittest
|
13 |
+
Classifier: Development Status :: 6 - Mature
|
14 |
+
Classifier: Intended Audience :: Developers
|
15 |
+
Classifier: License :: OSI Approved :: MIT License
|
16 |
+
Classifier: Operating System :: MacOS
|
17 |
+
Classifier: Operating System :: Microsoft :: Windows
|
18 |
+
Classifier: Operating System :: POSIX
|
19 |
+
Classifier: Operating System :: Unix
|
20 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
21 |
+
Classifier: Programming Language :: Python :: 3.8
|
22 |
+
Classifier: Programming Language :: Python :: 3.9
|
23 |
+
Classifier: Programming Language :: Python :: 3.10
|
24 |
+
Classifier: Programming Language :: Python :: 3.11
|
25 |
+
Classifier: Programming Language :: Python :: 3.12
|
26 |
+
Classifier: Topic :: Software Development :: Libraries
|
27 |
+
Classifier: Topic :: Software Development :: Testing
|
28 |
+
Classifier: Topic :: Utilities
|
29 |
+
Requires-Python: >=3.8
|
30 |
+
Description-Content-Type: text/x-rst
|
31 |
+
License-File: LICENSE
|
32 |
+
License-File: AUTHORS
|
33 |
+
Requires-Dist: iniconfig
|
34 |
+
Requires-Dist: packaging
|
35 |
+
Requires-Dist: pluggy <2,>=1.5
|
36 |
+
Requires-Dist: exceptiongroup >=1.0.0rc8 ; python_version < "3.11"
|
37 |
+
Requires-Dist: tomli >=1 ; python_version < "3.11"
|
38 |
+
Requires-Dist: colorama ; sys_platform == "win32"
|
39 |
+
Provides-Extra: dev
|
40 |
+
Requires-Dist: argcomplete ; extra == 'dev'
|
41 |
+
Requires-Dist: attrs >=19.2 ; extra == 'dev'
|
42 |
+
Requires-Dist: hypothesis >=3.56 ; extra == 'dev'
|
43 |
+
Requires-Dist: mock ; extra == 'dev'
|
44 |
+
Requires-Dist: pygments >=2.7.2 ; extra == 'dev'
|
45 |
+
Requires-Dist: requests ; extra == 'dev'
|
46 |
+
Requires-Dist: setuptools ; extra == 'dev'
|
47 |
+
Requires-Dist: xmlschema ; extra == 'dev'
|
48 |
+
|
49 |
+
.. image:: https://github.com/pytest-dev/pytest/raw/main/doc/en/img/pytest_logo_curves.svg
|
50 |
+
:target: https://docs.pytest.org/en/stable/
|
51 |
+
:align: center
|
52 |
+
:height: 200
|
53 |
+
:alt: pytest
|
54 |
+
|
55 |
+
|
56 |
+
------
|
57 |
+
|
58 |
+
.. image:: https://img.shields.io/pypi/v/pytest.svg
|
59 |
+
:target: https://pypi.org/project/pytest/
|
60 |
+
|
61 |
+
.. image:: https://img.shields.io/conda/vn/conda-forge/pytest.svg
|
62 |
+
:target: https://anaconda.org/conda-forge/pytest
|
63 |
+
|
64 |
+
.. image:: https://img.shields.io/pypi/pyversions/pytest.svg
|
65 |
+
:target: https://pypi.org/project/pytest/
|
66 |
+
|
67 |
+
.. image:: https://codecov.io/gh/pytest-dev/pytest/branch/main/graph/badge.svg
|
68 |
+
:target: https://codecov.io/gh/pytest-dev/pytest
|
69 |
+
:alt: Code coverage Status
|
70 |
+
|
71 |
+
.. image:: https://github.com/pytest-dev/pytest/actions/workflows/test.yml/badge.svg
|
72 |
+
:target: https://github.com/pytest-dev/pytest/actions?query=workflow%3Atest
|
73 |
+
|
74 |
+
.. image:: https://results.pre-commit.ci/badge/github/pytest-dev/pytest/main.svg
|
75 |
+
:target: https://results.pre-commit.ci/latest/github/pytest-dev/pytest/main
|
76 |
+
:alt: pre-commit.ci status
|
77 |
+
|
78 |
+
.. image:: https://www.codetriage.com/pytest-dev/pytest/badges/users.svg
|
79 |
+
:target: https://www.codetriage.com/pytest-dev/pytest
|
80 |
+
|
81 |
+
.. image:: https://readthedocs.org/projects/pytest/badge/?version=latest
|
82 |
+
:target: https://pytest.readthedocs.io/en/latest/?badge=latest
|
83 |
+
:alt: Documentation Status
|
84 |
+
|
85 |
+
.. image:: https://img.shields.io/badge/Discord-pytest--dev-blue
|
86 |
+
:target: https://discord.com/invite/pytest-dev
|
87 |
+
:alt: Discord
|
88 |
+
|
89 |
+
.. image:: https://img.shields.io/badge/Libera%20chat-%23pytest-orange
|
90 |
+
:target: https://web.libera.chat/#pytest
|
91 |
+
:alt: Libera chat
|
92 |
+
|
93 |
+
|
94 |
+
The ``pytest`` framework makes it easy to write small tests, yet
|
95 |
+
scales to support complex functional testing for applications and libraries.
|
96 |
+
|
97 |
+
An example of a simple test:
|
98 |
+
|
99 |
+
.. code-block:: python
|
100 |
+
|
101 |
+
# content of test_sample.py
|
102 |
+
def inc(x):
|
103 |
+
return x + 1
|
104 |
+
|
105 |
+
|
106 |
+
def test_answer():
|
107 |
+
assert inc(3) == 5
|
108 |
+
|
109 |
+
|
110 |
+
To execute it::
|
111 |
+
|
112 |
+
$ pytest
|
113 |
+
============================= test session starts =============================
|
114 |
+
collected 1 items
|
115 |
+
|
116 |
+
test_sample.py F
|
117 |
+
|
118 |
+
================================== FAILURES ===================================
|
119 |
+
_________________________________ test_answer _________________________________
|
120 |
+
|
121 |
+
def test_answer():
|
122 |
+
> assert inc(3) == 5
|
123 |
+
E assert 4 == 5
|
124 |
+
E + where 4 = inc(3)
|
125 |
+
|
126 |
+
test_sample.py:5: AssertionError
|
127 |
+
========================== 1 failed in 0.04 seconds ===========================
|
128 |
+
|
129 |
+
|
130 |
+
Due to ``pytest``'s detailed assertion introspection, only plain ``assert`` statements are used. See `getting-started <https://docs.pytest.org/en/stable/getting-started.html#our-first-test-run>`_ for more examples.
|
131 |
+
|
132 |
+
|
133 |
+
Features
|
134 |
+
--------
|
135 |
+
|
136 |
+
- Detailed info on failing `assert statements <https://docs.pytest.org/en/stable/how-to/assert.html>`_ (no need to remember ``self.assert*`` names)
|
137 |
+
|
138 |
+
- `Auto-discovery
|
139 |
+
<https://docs.pytest.org/en/stable/explanation/goodpractices.html#python-test-discovery>`_
|
140 |
+
of test modules and functions
|
141 |
+
|
142 |
+
- `Modular fixtures <https://docs.pytest.org/en/stable/explanation/fixtures.html>`_ for
|
143 |
+
managing small or parametrized long-lived test resources
|
144 |
+
|
145 |
+
- Can run `unittest <https://docs.pytest.org/en/stable/how-to/unittest.html>`_ (or trial)
|
146 |
+
test suites out of the box
|
147 |
+
|
148 |
+
- Python 3.8+ or PyPy3
|
149 |
+
|
150 |
+
- Rich plugin architecture, with over 1300+ `external plugins <https://docs.pytest.org/en/latest/reference/plugin_list.html>`_ and thriving community
|
151 |
+
|
152 |
+
|
153 |
+
Documentation
|
154 |
+
-------------
|
155 |
+
|
156 |
+
For full documentation, including installation, tutorials and PDF documents, please see https://docs.pytest.org/en/stable/.
|
157 |
+
|
158 |
+
|
159 |
+
Bugs/Requests
|
160 |
+
-------------
|
161 |
+
|
162 |
+
Please use the `GitHub issue tracker <https://github.com/pytest-dev/pytest/issues>`_ to submit bugs or request features.
|
163 |
+
|
164 |
+
|
165 |
+
Changelog
|
166 |
+
---------
|
167 |
+
|
168 |
+
Consult the `Changelog <https://docs.pytest.org/en/stable/changelog.html>`__ page for fixes and enhancements of each version.
|
169 |
+
|
170 |
+
|
171 |
+
Support pytest
|
172 |
+
--------------
|
173 |
+
|
174 |
+
`Open Collective`_ is an online funding platform for open and transparent communities.
|
175 |
+
It provides tools to raise money and share your finances in full transparency.
|
176 |
+
|
177 |
+
It is the platform of choice for individuals and companies that want to make one-time or
|
178 |
+
monthly donations directly to the project.
|
179 |
+
|
180 |
+
See more details in the `pytest collective`_.
|
181 |
+
|
182 |
+
.. _Open Collective: https://opencollective.com
|
183 |
+
.. _pytest collective: https://opencollective.com/pytest
|
184 |
+
|
185 |
+
|
186 |
+
pytest for enterprise
|
187 |
+
---------------------
|
188 |
+
|
189 |
+
Available as part of the Tidelift Subscription.
|
190 |
+
|
191 |
+
The maintainers of pytest and thousands of other packages are working with Tidelift to deliver commercial support and
|
192 |
+
maintenance for the open source dependencies you use to build your applications.
|
193 |
+
Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.
|
194 |
+
|
195 |
+
`Learn more. <https://tidelift.com/subscription/pkg/pypi-pytest?utm_source=pypi-pytest&utm_medium=referral&utm_campaign=enterprise&utm_term=repo>`_
|
196 |
+
|
197 |
+
Security
|
198 |
+
^^^^^^^^
|
199 |
+
|
200 |
+
pytest has never been associated with a security vulnerability, but in any case, to report a
|
201 |
+
security vulnerability please use the `Tidelift security contact <https://tidelift.com/security>`_.
|
202 |
+
Tidelift will coordinate the fix and disclosure.
|
203 |
+
|
204 |
+
|
205 |
+
License
|
206 |
+
-------
|
207 |
+
|
208 |
+
Copyright Holger Krekel and others, 2004.
|
209 |
+
|
210 |
+
Distributed under the terms of the `MIT`_ license, pytest is free and open source software.
|
211 |
+
|
212 |
+
.. _`MIT`: https://github.com/pytest-dev/pytest/blob/main/LICENSE
|
.cache/pip/http-v2/7/7/6/7/2/7767287c95ec4491394e4204f2ba3be9eb9e3ed9ca0ffd45d421b772
ADDED
Binary file (1.11 kB). View file
|
|
.cache/pip/http-v2/7/7/6/7/2/7767287c95ec4491394e4204f2ba3be9eb9e3ed9ca0ffd45d421b772.body
ADDED
Binary file (307 kB). View file
|
|
.cache/pip/http-v2/7/c/c/b/9/7ccb994e5cb08d1aee93acb83ae5881083c4a349402f61c9f7d304f8
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/7/c/c/b/9/7ccb994e5cb08d1aee93acb83ae5881083c4a349402f61c9f7d304f8.body
ADDED
Binary file (4.37 kB). View file
|
|
.cache/pip/http-v2/a/1/5/a/3/a15a3a227f3412287f03121d8de35a7e4b8889a19d0448af719d96c1
ADDED
Binary file (1.81 kB). View file
|
|
.cache/pip/http-v2/a/1/5/a/3/a15a3a227f3412287f03121d8de35a7e4b8889a19d0448af719d96c1.body
ADDED
Binary file (1.05 kB). View file
|
|
.cache/pip/http-v2/a/1/9/5/3/a19537d3cf37c122db841d6fe4cd322bc10d1a558bb00d146b85cb9a.body
ADDED
Binary file (34.2 kB). View file
|
|
.cache/pip/http-v2/a/6/6/7/4/a6674e44f8dbb270324765d1fb568b86858877aed299a2428f81e802.body
ADDED
Binary file (45.1 kB). View file
|
|
.cache/pip/http-v2/a/8/1/3/d/a813d38208b26d1643cfecf26bd5ddeb869c95933e4bf304b8f6f1bb.body
ADDED
@@ -0,0 +1,1573 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: pandas
|
3 |
+
Version: 2.2.3
|
4 |
+
Summary: Powerful data structures for data analysis, time series, and statistics
|
5 |
+
Home-page: https://pandas.pydata.org
|
6 |
+
Author-Email: The Pandas Development Team <[email protected]>
|
7 |
+
License: BSD 3-Clause License
|
8 |
+
|
9 |
+
Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
|
10 |
+
All rights reserved.
|
11 |
+
|
12 |
+
Copyright (c) 2011-2023, Open source contributors.
|
13 |
+
|
14 |
+
Redistribution and use in source and binary forms, with or without
|
15 |
+
modification, are permitted provided that the following conditions are met:
|
16 |
+
|
17 |
+
* Redistributions of source code must retain the above copyright notice, this
|
18 |
+
list of conditions and the following disclaimer.
|
19 |
+
|
20 |
+
* Redistributions in binary form must reproduce the above copyright notice,
|
21 |
+
this list of conditions and the following disclaimer in the documentation
|
22 |
+
and/or other materials provided with the distribution.
|
23 |
+
|
24 |
+
* Neither the name of the copyright holder nor the names of its
|
25 |
+
contributors may be used to endorse or promote products derived from
|
26 |
+
this software without specific prior written permission.
|
27 |
+
|
28 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
29 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
30 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
31 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
32 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
33 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
34 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
35 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
36 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
37 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
38 |
+
Copyright (c) 2010-2019 Keith Goodman
|
39 |
+
Copyright (c) 2019 Bottleneck Developers
|
40 |
+
All rights reserved.
|
41 |
+
|
42 |
+
Redistribution and use in source and binary forms, with or without
|
43 |
+
modification, are permitted provided that the following conditions are met:
|
44 |
+
|
45 |
+
* Redistributions of source code must retain the above copyright notice,
|
46 |
+
this list of conditions and the following disclaimer.
|
47 |
+
|
48 |
+
* Redistributions in binary form must reproduce the above copyright
|
49 |
+
notice, this list of conditions and the following disclaimer in the
|
50 |
+
documentation and/or other materials provided with the distribution.
|
51 |
+
|
52 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
53 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
54 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
55 |
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
56 |
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
57 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
58 |
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
59 |
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
60 |
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
61 |
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
62 |
+
POSSIBILITY OF SUCH DAMAGE.Copyright 2017- Paul Ganssle <[email protected]>
|
63 |
+
Copyright 2017- dateutil contributors (see AUTHORS file)
|
64 |
+
|
65 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
66 |
+
you may not use this file except in compliance with the License.
|
67 |
+
You may obtain a copy of the License at
|
68 |
+
|
69 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
70 |
+
|
71 |
+
Unless required by applicable law or agreed to in writing, software
|
72 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
73 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
74 |
+
See the License for the specific language governing permissions and
|
75 |
+
limitations under the License.
|
76 |
+
|
77 |
+
The above license applies to all contributions after 2017-12-01, as well as
|
78 |
+
all contributions that have been re-licensed (see AUTHORS file for the list of
|
79 |
+
contributors who have re-licensed their code).
|
80 |
+
--------------------------------------------------------------------------------
|
81 |
+
dateutil - Extensions to the standard Python datetime module.
|
82 |
+
|
83 |
+
Copyright (c) 2003-2011 - Gustavo Niemeyer <[email protected]>
|
84 |
+
Copyright (c) 2012-2014 - Tomi Pieviläinen <[email protected]>
|
85 |
+
Copyright (c) 2014-2016 - Yaron de Leeuw <[email protected]>
|
86 |
+
Copyright (c) 2015- - Paul Ganssle <[email protected]>
|
87 |
+
Copyright (c) 2015- - dateutil contributors (see AUTHORS file)
|
88 |
+
|
89 |
+
All rights reserved.
|
90 |
+
|
91 |
+
Redistribution and use in source and binary forms, with or without
|
92 |
+
modification, are permitted provided that the following conditions are met:
|
93 |
+
|
94 |
+
* Redistributions of source code must retain the above copyright notice,
|
95 |
+
this list of conditions and the following disclaimer.
|
96 |
+
* Redistributions in binary form must reproduce the above copyright notice,
|
97 |
+
this list of conditions and the following disclaimer in the documentation
|
98 |
+
and/or other materials provided with the distribution.
|
99 |
+
* Neither the name of the copyright holder nor the names of its
|
100 |
+
contributors may be used to endorse or promote products derived from
|
101 |
+
this software without specific prior written permission.
|
102 |
+
|
103 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
104 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
105 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
106 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
107 |
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
108 |
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
109 |
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
110 |
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
111 |
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
112 |
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
113 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
114 |
+
|
115 |
+
The above BSD License Applies to all code, even that also covered by Apache 2.0.# MIT License
|
116 |
+
|
117 |
+
Copyright (c) 2019 Hadley Wickham; RStudio; and Evan Miller
|
118 |
+
|
119 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
120 |
+
of this software and associated documentation files (the "Software"), to deal
|
121 |
+
in the Software without restriction, including without limitation the rights
|
122 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
123 |
+
copies of the Software, and to permit persons to whom the Software is
|
124 |
+
furnished to do so, subject to the following conditions:
|
125 |
+
|
126 |
+
The above copyright notice and this permission notice shall be included in all
|
127 |
+
copies or substantial portions of the Software.
|
128 |
+
|
129 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
130 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
131 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
132 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
133 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
134 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
135 |
+
SOFTWARE.
|
136 |
+
Based on http://opensource.org/licenses/MIT
|
137 |
+
|
138 |
+
This is a template. Complete and ship as file LICENSE the following 2
|
139 |
+
lines (only)
|
140 |
+
|
141 |
+
YEAR:
|
142 |
+
COPYRIGHT HOLDER:
|
143 |
+
|
144 |
+
and specify as
|
145 |
+
|
146 |
+
License: MIT + file LICENSE
|
147 |
+
|
148 |
+
Copyright (c) <YEAR>, <COPYRIGHT HOLDER>
|
149 |
+
|
150 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
151 |
+
a copy of this software and associated documentation files (the
|
152 |
+
"Software"), to deal in the Software without restriction, including
|
153 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
154 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
155 |
+
permit persons to whom the Software is furnished to do so, subject to
|
156 |
+
the following conditions:
|
157 |
+
|
158 |
+
The above copyright notice and this permission notice shall be
|
159 |
+
included in all copies or substantial portions of the Software.
|
160 |
+
|
161 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
162 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
163 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
164 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
165 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
166 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
167 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
168 |
+
The MIT License
|
169 |
+
|
170 |
+
Copyright (c) 2008- Attractive Chaos <[email protected]>
|
171 |
+
|
172 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
173 |
+
a copy of this software and associated documentation files (the
|
174 |
+
"Software"), to deal in the Software without restriction, including
|
175 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
176 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
177 |
+
permit persons to whom the Software is furnished to do so, subject to
|
178 |
+
the following conditions:
|
179 |
+
|
180 |
+
The above copyright notice and this permission notice shall be
|
181 |
+
included in all copies or substantial portions of the Software.
|
182 |
+
|
183 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
184 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
185 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
186 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
187 |
+
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
188 |
+
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
189 |
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
190 |
+
SOFTWARE.musl as a whole is licensed under the following standard MIT license:
|
191 |
+
|
192 |
+
----------------------------------------------------------------------
|
193 |
+
Copyright © 2005-2020 Rich Felker, et al.
|
194 |
+
|
195 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
196 |
+
a copy of this software and associated documentation files (the
|
197 |
+
"Software"), to deal in the Software without restriction, including
|
198 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
199 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
200 |
+
permit persons to whom the Software is furnished to do so, subject to
|
201 |
+
the following conditions:
|
202 |
+
|
203 |
+
The above copyright notice and this permission notice shall be
|
204 |
+
included in all copies or substantial portions of the Software.
|
205 |
+
|
206 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
207 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
208 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
209 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
210 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
211 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
212 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
213 |
+
----------------------------------------------------------------------
|
214 |
+
|
215 |
+
Authors/contributors include:
|
216 |
+
|
217 |
+
A. Wilcox
|
218 |
+
Ada Worcester
|
219 |
+
Alex Dowad
|
220 |
+
Alex Suykov
|
221 |
+
Alexander Monakov
|
222 |
+
Andre McCurdy
|
223 |
+
Andrew Kelley
|
224 |
+
Anthony G. Basile
|
225 |
+
Aric Belsito
|
226 |
+
Arvid Picciani
|
227 |
+
Bartosz Brachaczek
|
228 |
+
Benjamin Peterson
|
229 |
+
Bobby Bingham
|
230 |
+
Boris Brezillon
|
231 |
+
Brent Cook
|
232 |
+
Chris Spiegel
|
233 |
+
Clément Vasseur
|
234 |
+
Daniel Micay
|
235 |
+
Daniel Sabogal
|
236 |
+
Daurnimator
|
237 |
+
David Carlier
|
238 |
+
David Edelsohn
|
239 |
+
Denys Vlasenko
|
240 |
+
Dmitry Ivanov
|
241 |
+
Dmitry V. Levin
|
242 |
+
Drew DeVault
|
243 |
+
Emil Renner Berthing
|
244 |
+
Fangrui Song
|
245 |
+
Felix Fietkau
|
246 |
+
Felix Janda
|
247 |
+
Gianluca Anzolin
|
248 |
+
Hauke Mehrtens
|
249 |
+
He X
|
250 |
+
Hiltjo Posthuma
|
251 |
+
Isaac Dunham
|
252 |
+
Jaydeep Patil
|
253 |
+
Jens Gustedt
|
254 |
+
Jeremy Huntwork
|
255 |
+
Jo-Philipp Wich
|
256 |
+
Joakim Sindholt
|
257 |
+
John Spencer
|
258 |
+
Julien Ramseier
|
259 |
+
Justin Cormack
|
260 |
+
Kaarle Ritvanen
|
261 |
+
Khem Raj
|
262 |
+
Kylie McClain
|
263 |
+
Leah Neukirchen
|
264 |
+
Luca Barbato
|
265 |
+
Luka Perkov
|
266 |
+
M Farkas-Dyck (Strake)
|
267 |
+
Mahesh Bodapati
|
268 |
+
Markus Wichmann
|
269 |
+
Masanori Ogino
|
270 |
+
Michael Clark
|
271 |
+
Michael Forney
|
272 |
+
Mikhail Kremnyov
|
273 |
+
Natanael Copa
|
274 |
+
Nicholas J. Kain
|
275 |
+
orc
|
276 |
+
Pascal Cuoq
|
277 |
+
Patrick Oppenlander
|
278 |
+
Petr Hosek
|
279 |
+
Petr Skocik
|
280 |
+
Pierre Carrier
|
281 |
+
Reini Urban
|
282 |
+
Rich Felker
|
283 |
+
Richard Pennington
|
284 |
+
Ryan Fairfax
|
285 |
+
Samuel Holland
|
286 |
+
Segev Finer
|
287 |
+
Shiz
|
288 |
+
sin
|
289 |
+
Solar Designer
|
290 |
+
Stefan Kristiansson
|
291 |
+
Stefan O'Rear
|
292 |
+
Szabolcs Nagy
|
293 |
+
Timo Teräs
|
294 |
+
Trutz Behn
|
295 |
+
Valentin Ochs
|
296 |
+
Will Dietz
|
297 |
+
William Haddon
|
298 |
+
William Pitcock
|
299 |
+
|
300 |
+
Portions of this software are derived from third-party works licensed
|
301 |
+
under terms compatible with the above MIT license:
|
302 |
+
|
303 |
+
The TRE regular expression implementation (src/regex/reg* and
|
304 |
+
src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
|
305 |
+
under a 2-clause BSD license (license text in the source files). The
|
306 |
+
included version has been heavily modified by Rich Felker in 2012, in
|
307 |
+
the interests of size, simplicity, and namespace cleanliness.
|
308 |
+
|
309 |
+
Much of the math library code (src/math/* and src/complex/*) is
|
310 |
+
Copyright © 1993,2004 Sun Microsystems or
|
311 |
+
Copyright © 2003-2011 David Schultz or
|
312 |
+
Copyright © 2003-2009 Steven G. Kargl or
|
313 |
+
Copyright © 2003-2009 Bruce D. Evans or
|
314 |
+
Copyright © 2008 Stephen L. Moshier or
|
315 |
+
Copyright © 2017-2018 Arm Limited
|
316 |
+
and labelled as such in comments in the individual source files. All
|
317 |
+
have been licensed under extremely permissive terms.
|
318 |
+
|
319 |
+
The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
|
320 |
+
The Android Open Source Project and is licensed under a two-clause BSD
|
321 |
+
license. It was taken from Bionic libc, used on Android.
|
322 |
+
|
323 |
+
The AArch64 memcpy and memset code (src/string/aarch64/*) are
|
324 |
+
Copyright © 1999-2019, Arm Limited.
|
325 |
+
|
326 |
+
The implementation of DES for crypt (src/crypt/crypt_des.c) is
|
327 |
+
Copyright © 1994 David Burren. It is licensed under a BSD license.
|
328 |
+
|
329 |
+
The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
|
330 |
+
originally written by Solar Designer and placed into the public
|
331 |
+
domain. The code also comes with a fallback permissive license for use
|
332 |
+
in jurisdictions that may not recognize the public domain.
|
333 |
+
|
334 |
+
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
|
335 |
+
Valentin Ochs and is licensed under an MIT-style license.
|
336 |
+
|
337 |
+
The x86_64 port was written by Nicholas J. Kain and is licensed under
|
338 |
+
the standard MIT terms.
|
339 |
+
|
340 |
+
The mips and microblaze ports were originally written by Richard
|
341 |
+
Pennington for use in the ellcc project. The original code was adapted
|
342 |
+
by Rich Felker for build system and code conventions during upstream
|
343 |
+
integration. It is licensed under the standard MIT terms.
|
344 |
+
|
345 |
+
The mips64 port was contributed by Imagination Technologies and is
|
346 |
+
licensed under the standard MIT terms.
|
347 |
+
|
348 |
+
The powerpc port was also originally written by Richard Pennington,
|
349 |
+
and later supplemented and integrated by John Spencer. It is licensed
|
350 |
+
under the standard MIT terms.
|
351 |
+
|
352 |
+
All other files which have no copyright comments are original works
|
353 |
+
produced specifically for use as part of this library, written either
|
354 |
+
by Rich Felker, the main author of the library, or by one or more
|
355 |
+
contibutors listed above. Details on authorship of individual files
|
356 |
+
can be found in the git version control history of the project. The
|
357 |
+
omission of copyright and license comments in each file is in the
|
358 |
+
interest of source tree size.
|
359 |
+
|
360 |
+
In addition, permission is hereby granted for all public header files
|
361 |
+
(include/* and arch/*/bits/*) and crt files intended to be linked into
|
362 |
+
applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
|
363 |
+
the copyright notice and permission notice otherwise required by the
|
364 |
+
license, and to use these files without any requirement of
|
365 |
+
attribution. These files include substantial contributions from:
|
366 |
+
|
367 |
+
Bobby Bingham
|
368 |
+
John Spencer
|
369 |
+
Nicholas J. Kain
|
370 |
+
Rich Felker
|
371 |
+
Richard Pennington
|
372 |
+
Stefan Kristiansson
|
373 |
+
Szabolcs Nagy
|
374 |
+
|
375 |
+
all of whom have explicitly granted such permission.
|
376 |
+
|
377 |
+
This file previously contained text expressing a belief that most of
|
378 |
+
the files covered by the above exception were sufficiently trivial not
|
379 |
+
to be subject to copyright, resulting in confusion over whether it
|
380 |
+
negated the permissions granted in the license. In the spirit of
|
381 |
+
permissive licensing, and of not having licensing issues being an
|
382 |
+
obstacle to adoption, that text has been removed.Copyright (c) 2005-2023, NumPy Developers.
|
383 |
+
All rights reserved.
|
384 |
+
|
385 |
+
Redistribution and use in source and binary forms, with or without
|
386 |
+
modification, are permitted provided that the following conditions are
|
387 |
+
met:
|
388 |
+
|
389 |
+
* Redistributions of source code must retain the above copyright
|
390 |
+
notice, this list of conditions and the following disclaimer.
|
391 |
+
|
392 |
+
* Redistributions in binary form must reproduce the above
|
393 |
+
copyright notice, this list of conditions and the following
|
394 |
+
disclaimer in the documentation and/or other materials provided
|
395 |
+
with the distribution.
|
396 |
+
|
397 |
+
* Neither the name of the NumPy Developers nor the names of any
|
398 |
+
contributors may be used to endorse or promote products derived
|
399 |
+
from this software without specific prior written permission.
|
400 |
+
|
401 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
402 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
403 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
404 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
405 |
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
406 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
407 |
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
408 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
409 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
410 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
411 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
412 |
+
Apache License
|
413 |
+
Version 2.0, January 2004
|
414 |
+
http://www.apache.org/licenses/
|
415 |
+
|
416 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
417 |
+
|
418 |
+
1. Definitions.
|
419 |
+
|
420 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
421 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
422 |
+
|
423 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
424 |
+
the copyright owner that is granting the License.
|
425 |
+
|
426 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
427 |
+
other entities that control, are controlled by, or are under common
|
428 |
+
control with that entity. For the purposes of this definition,
|
429 |
+
"control" means (i) the power, direct or indirect, to cause the
|
430 |
+
direction or management of such entity, whether by contract or
|
431 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
432 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
433 |
+
|
434 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
435 |
+
exercising permissions granted by this License.
|
436 |
+
|
437 |
+
"Source" form shall mean the preferred form for making modifications,
|
438 |
+
including but not limited to software source code, documentation
|
439 |
+
source, and configuration files.
|
440 |
+
|
441 |
+
"Object" form shall mean any form resulting from mechanical
|
442 |
+
transformation or translation of a Source form, including but
|
443 |
+
not limited to compiled object code, generated documentation,
|
444 |
+
and conversions to other media types.
|
445 |
+
|
446 |
+
"Work" shall mean the work of authorship, whether in Source or
|
447 |
+
Object form, made available under the License, as indicated by a
|
448 |
+
copyright notice that is included in or attached to the work
|
449 |
+
(an example is provided in the Appendix below).
|
450 |
+
|
451 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
452 |
+
form, that is based on (or derived from) the Work and for which the
|
453 |
+
editorial revisions, annotations, elaborations, or other modifications
|
454 |
+
represent, as a whole, an original work of authorship. For the purposes
|
455 |
+
of this License, Derivative Works shall not include works that remain
|
456 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
457 |
+
the Work and Derivative Works thereof.
|
458 |
+
|
459 |
+
"Contribution" shall mean any work of authorship, including
|
460 |
+
the original version of the Work and any modifications or additions
|
461 |
+
to that Work or Derivative Works thereof, that is intentionally
|
462 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
463 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
464 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
465 |
+
means any form of electronic, verbal, or written communication sent
|
466 |
+
to the Licensor or its representatives, including but not limited to
|
467 |
+
communication on electronic mailing lists, source code control systems,
|
468 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
469 |
+
Licensor for the purpose of discussing and improving the Work, but
|
470 |
+
excluding communication that is conspicuously marked or otherwise
|
471 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
472 |
+
|
473 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
474 |
+
on behalf of whom a Contribution has been received by Licensor and
|
475 |
+
subsequently incorporated within the Work.
|
476 |
+
|
477 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
478 |
+
this License, each Contributor hereby grants to You a perpetual,
|
479 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
480 |
+
copyright license to reproduce, prepare Derivative Works of,
|
481 |
+
publicly display, publicly perform, sublicense, and distribute the
|
482 |
+
Work and such Derivative Works in Source or Object form.
|
483 |
+
|
484 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
485 |
+
this License, each Contributor hereby grants to You a perpetual,
|
486 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
487 |
+
(except as stated in this section) patent license to make, have made,
|
488 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
489 |
+
where such license applies only to those patent claims licensable
|
490 |
+
by such Contributor that are necessarily infringed by their
|
491 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
492 |
+
with the Work to which such Contribution(s) was submitted. If You
|
493 |
+
institute patent litigation against any entity (including a
|
494 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
495 |
+
or a Contribution incorporated within the Work constitutes direct
|
496 |
+
or contributory patent infringement, then any patent licenses
|
497 |
+
granted to You under this License for that Work shall terminate
|
498 |
+
as of the date such litigation is filed.
|
499 |
+
|
500 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
501 |
+
Work or Derivative Works thereof in any medium, with or without
|
502 |
+
modifications, and in Source or Object form, provided that You
|
503 |
+
meet the following conditions:
|
504 |
+
|
505 |
+
(a) You must give any other recipients of the Work or
|
506 |
+
Derivative Works a copy of this License; and
|
507 |
+
|
508 |
+
(b) You must cause any modified files to carry prominent notices
|
509 |
+
stating that You changed the files; and
|
510 |
+
|
511 |
+
(c) You must retain, in the Source form of any Derivative Works
|
512 |
+
that You distribute, all copyright, patent, trademark, and
|
513 |
+
attribution notices from the Source form of the Work,
|
514 |
+
excluding those notices that do not pertain to any part of
|
515 |
+
the Derivative Works; and
|
516 |
+
|
517 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
518 |
+
distribution, then any Derivative Works that You distribute must
|
519 |
+
include a readable copy of the attribution notices contained
|
520 |
+
within such NOTICE file, excluding those notices that do not
|
521 |
+
pertain to any part of the Derivative Works, in at least one
|
522 |
+
of the following places: within a NOTICE text file distributed
|
523 |
+
as part of the Derivative Works; within the Source form or
|
524 |
+
documentation, if provided along with the Derivative Works; or,
|
525 |
+
within a display generated by the Derivative Works, if and
|
526 |
+
wherever such third-party notices normally appear. The contents
|
527 |
+
of the NOTICE file are for informational purposes only and
|
528 |
+
do not modify the License. You may add Your own attribution
|
529 |
+
notices within Derivative Works that You distribute, alongside
|
530 |
+
or as an addendum to the NOTICE text from the Work, provided
|
531 |
+
that such additional attribution notices cannot be construed
|
532 |
+
as modifying the License.
|
533 |
+
|
534 |
+
You may add Your own copyright statement to Your modifications and
|
535 |
+
may provide additional or different license terms and conditions
|
536 |
+
for use, reproduction, or distribution of Your modifications, or
|
537 |
+
for any such Derivative Works as a whole, provided Your use,
|
538 |
+
reproduction, and distribution of the Work otherwise complies with
|
539 |
+
the conditions stated in this License.
|
540 |
+
|
541 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
542 |
+
any Contribution intentionally submitted for inclusion in the Work
|
543 |
+
by You to the Licensor shall be under the terms and conditions of
|
544 |
+
this License, without any additional terms or conditions.
|
545 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
546 |
+
the terms of any separate license agreement you may have executed
|
547 |
+
with Licensor regarding such Contributions.
|
548 |
+
|
549 |
+
6. Trademarks. This License does not grant permission to use the trade
|
550 |
+
names, trademarks, service marks, or product names of the Licensor,
|
551 |
+
except as required for reasonable and customary use in describing the
|
552 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
553 |
+
|
554 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
555 |
+
agreed to in writing, Licensor provides the Work (and each
|
556 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
557 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
558 |
+
implied, including, without limitation, any warranties or conditions
|
559 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
560 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
561 |
+
appropriateness of using or redistributing the Work and assume any
|
562 |
+
risks associated with Your exercise of permissions under this License.
|
563 |
+
|
564 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
565 |
+
whether in tort (including negligence), contract, or otherwise,
|
566 |
+
unless required by applicable law (such as deliberate and grossly
|
567 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
568 |
+
liable to You for damages, including any direct, indirect, special,
|
569 |
+
incidental, or consequential damages of any character arising as a
|
570 |
+
result of this License or out of the use or inability to use the
|
571 |
+
Work (including but not limited to damages for loss of goodwill,
|
572 |
+
work stoppage, computer failure or malfunction, or any and all
|
573 |
+
other commercial damages or losses), even if such Contributor
|
574 |
+
has been advised of the possibility of such damages.
|
575 |
+
|
576 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
577 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
578 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
579 |
+
or other liability obligations and/or rights consistent with this
|
580 |
+
License. However, in accepting such obligations, You may act only
|
581 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
582 |
+
of any other Contributor, and only if You agree to indemnify,
|
583 |
+
defend, and hold each Contributor harmless for any liability
|
584 |
+
incurred by, or claims asserted against, such Contributor by reason
|
585 |
+
of your accepting any such warranty or additional liability.
|
586 |
+
|
587 |
+
END OF TERMS AND CONDITIONS
|
588 |
+
|
589 |
+
|
590 |
+
Copyright (c) Donald Stufft and individual contributors.
|
591 |
+
All rights reserved.
|
592 |
+
|
593 |
+
Redistribution and use in source and binary forms, with or without
|
594 |
+
modification, are permitted provided that the following conditions are met:
|
595 |
+
|
596 |
+
1. Redistributions of source code must retain the above copyright notice,
|
597 |
+
this list of conditions and the following disclaimer.
|
598 |
+
|
599 |
+
2. Redistributions in binary form must reproduce the above copyright
|
600 |
+
notice, this list of conditions and the following disclaimer in the
|
601 |
+
documentation and/or other materials provided with the distribution.
|
602 |
+
|
603 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
604 |
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
605 |
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
606 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
607 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
608 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
609 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
610 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
611 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
612 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.A. HISTORY OF THE SOFTWARE
|
613 |
+
==========================
|
614 |
+
|
615 |
+
Python was created in the early 1990s by Guido van Rossum at Stichting
|
616 |
+
Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands
|
617 |
+
as a successor of a language called ABC. Guido remains Python's
|
618 |
+
principal author, although it includes many contributions from others.
|
619 |
+
|
620 |
+
In 1995, Guido continued his work on Python at the Corporation for
|
621 |
+
National Research Initiatives (CNRI, see https://www.cnri.reston.va.us)
|
622 |
+
in Reston, Virginia where he released several versions of the
|
623 |
+
software.
|
624 |
+
|
625 |
+
In May 2000, Guido and the Python core development team moved to
|
626 |
+
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
627 |
+
year, the PythonLabs team moved to Digital Creations, which became
|
628 |
+
Zope Corporation. In 2001, the Python Software Foundation (PSF, see
|
629 |
+
https://www.python.org/psf/) was formed, a non-profit organization
|
630 |
+
created specifically to own Python-related Intellectual Property.
|
631 |
+
Zope Corporation was a sponsoring member of the PSF.
|
632 |
+
|
633 |
+
All Python releases are Open Source (see https://opensource.org for
|
634 |
+
the Open Source Definition). Historically, most, but not all, Python
|
635 |
+
releases have also been GPL-compatible; the table below summarizes
|
636 |
+
the various releases.
|
637 |
+
|
638 |
+
Release Derived Year Owner GPL-
|
639 |
+
from compatible? (1)
|
640 |
+
|
641 |
+
0.9.0 thru 1.2 1991-1995 CWI yes
|
642 |
+
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
643 |
+
1.6 1.5.2 2000 CNRI no
|
644 |
+
2.0 1.6 2000 BeOpen.com no
|
645 |
+
1.6.1 1.6 2001 CNRI yes (2)
|
646 |
+
2.1 2.0+1.6.1 2001 PSF no
|
647 |
+
2.0.1 2.0+1.6.1 2001 PSF yes
|
648 |
+
2.1.1 2.1+2.0.1 2001 PSF yes
|
649 |
+
2.1.2 2.1.1 2002 PSF yes
|
650 |
+
2.1.3 2.1.2 2002 PSF yes
|
651 |
+
2.2 and above 2.1.1 2001-now PSF yes
|
652 |
+
|
653 |
+
Footnotes:
|
654 |
+
|
655 |
+
(1) GPL-compatible doesn't mean that we're distributing Python under
|
656 |
+
the GPL. All Python licenses, unlike the GPL, let you distribute
|
657 |
+
a modified version without making your changes open source. The
|
658 |
+
GPL-compatible licenses make it possible to combine Python with
|
659 |
+
other software that is released under the GPL; the others don't.
|
660 |
+
|
661 |
+
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
662 |
+
because its license has a choice of law clause. According to
|
663 |
+
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
664 |
+
is "not incompatible" with the GPL.
|
665 |
+
|
666 |
+
Thanks to the many outside volunteers who have worked under Guido's
|
667 |
+
direction to make these releases possible.
|
668 |
+
|
669 |
+
|
670 |
+
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
671 |
+
===============================================================
|
672 |
+
|
673 |
+
Python software and documentation are licensed under the
|
674 |
+
Python Software Foundation License Version 2.
|
675 |
+
|
676 |
+
Starting with Python 3.8.6, examples, recipes, and other code in
|
677 |
+
the documentation are dual licensed under the PSF License Version 2
|
678 |
+
and the Zero-Clause BSD license.
|
679 |
+
|
680 |
+
Some software incorporated into Python is under different licenses.
|
681 |
+
The licenses are listed with code falling under that license.
|
682 |
+
|
683 |
+
|
684 |
+
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
685 |
+
--------------------------------------------
|
686 |
+
|
687 |
+
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
688 |
+
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
689 |
+
otherwise using this software ("Python") in source or binary form and
|
690 |
+
its associated documentation.
|
691 |
+
|
692 |
+
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
693 |
+
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
694 |
+
analyze, test, perform and/or display publicly, prepare derivative works,
|
695 |
+
distribute, and otherwise use Python alone or in any derivative version,
|
696 |
+
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
697 |
+
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
698 |
+
2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation;
|
699 |
+
All Rights Reserved" are retained in Python alone or in any derivative version
|
700 |
+
prepared by Licensee.
|
701 |
+
|
702 |
+
3. In the event Licensee prepares a derivative work that is based on
|
703 |
+
or incorporates Python or any part thereof, and wants to make
|
704 |
+
the derivative work available to others as provided herein, then
|
705 |
+
Licensee hereby agrees to include in any such work a brief summary of
|
706 |
+
the changes made to Python.
|
707 |
+
|
708 |
+
4. PSF is making Python available to Licensee on an "AS IS"
|
709 |
+
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
710 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
711 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
712 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
713 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
714 |
+
|
715 |
+
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
716 |
+
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
717 |
+
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
718 |
+
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
719 |
+
|
720 |
+
6. This License Agreement will automatically terminate upon a material
|
721 |
+
breach of its terms and conditions.
|
722 |
+
|
723 |
+
7. Nothing in this License Agreement shall be deemed to create any
|
724 |
+
relationship of agency, partnership, or joint venture between PSF and
|
725 |
+
Licensee. This License Agreement does not grant permission to use PSF
|
726 |
+
trademarks or trade name in a trademark sense to endorse or promote
|
727 |
+
products or services of Licensee, or any third party.
|
728 |
+
|
729 |
+
8. By copying, installing or otherwise using Python, Licensee
|
730 |
+
agrees to be bound by the terms and conditions of this License
|
731 |
+
Agreement.
|
732 |
+
|
733 |
+
|
734 |
+
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
735 |
+
-------------------------------------------
|
736 |
+
|
737 |
+
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
738 |
+
|
739 |
+
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
740 |
+
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
741 |
+
Individual or Organization ("Licensee") accessing and otherwise using
|
742 |
+
this software in source or binary form and its associated
|
743 |
+
documentation ("the Software").
|
744 |
+
|
745 |
+
2. Subject to the terms and conditions of this BeOpen Python License
|
746 |
+
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
747 |
+
royalty-free, world-wide license to reproduce, analyze, test, perform
|
748 |
+
and/or display publicly, prepare derivative works, distribute, and
|
749 |
+
otherwise use the Software alone or in any derivative version,
|
750 |
+
provided, however, that the BeOpen Python License is retained in the
|
751 |
+
Software, alone or in any derivative version prepared by Licensee.
|
752 |
+
|
753 |
+
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
754 |
+
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
755 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
756 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
757 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
758 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
759 |
+
|
760 |
+
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
761 |
+
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
762 |
+
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
763 |
+
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
764 |
+
|
765 |
+
5. This License Agreement will automatically terminate upon a material
|
766 |
+
breach of its terms and conditions.
|
767 |
+
|
768 |
+
6. This License Agreement shall be governed by and interpreted in all
|
769 |
+
respects by the law of the State of California, excluding conflict of
|
770 |
+
law provisions. Nothing in this License Agreement shall be deemed to
|
771 |
+
create any relationship of agency, partnership, or joint venture
|
772 |
+
between BeOpen and Licensee. This License Agreement does not grant
|
773 |
+
permission to use BeOpen trademarks or trade names in a trademark
|
774 |
+
sense to endorse or promote products or services of Licensee, or any
|
775 |
+
third party. As an exception, the "BeOpen Python" logos available at
|
776 |
+
http://www.pythonlabs.com/logos.html may be used according to the
|
777 |
+
permissions granted on that web page.
|
778 |
+
|
779 |
+
7. By copying, installing or otherwise using the software, Licensee
|
780 |
+
agrees to be bound by the terms and conditions of this License
|
781 |
+
Agreement.
|
782 |
+
|
783 |
+
|
784 |
+
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
785 |
+
---------------------------------------
|
786 |
+
|
787 |
+
1. This LICENSE AGREEMENT is between the Corporation for National
|
788 |
+
Research Initiatives, having an office at 1895 Preston White Drive,
|
789 |
+
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
790 |
+
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
791 |
+
source or binary form and its associated documentation.
|
792 |
+
|
793 |
+
2. Subject to the terms and conditions of this License Agreement, CNRI
|
794 |
+
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
795 |
+
license to reproduce, analyze, test, perform and/or display publicly,
|
796 |
+
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
797 |
+
alone or in any derivative version, provided, however, that CNRI's
|
798 |
+
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
799 |
+
1995-2001 Corporation for National Research Initiatives; All Rights
|
800 |
+
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
801 |
+
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
802 |
+
Agreement, Licensee may substitute the following text (omitting the
|
803 |
+
quotes): "Python 1.6.1 is made available subject to the terms and
|
804 |
+
conditions in CNRI's License Agreement. This Agreement together with
|
805 |
+
Python 1.6.1 may be located on the internet using the following
|
806 |
+
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
807 |
+
Agreement may also be obtained from a proxy server on the internet
|
808 |
+
using the following URL: http://hdl.handle.net/1895.22/1013".
|
809 |
+
|
810 |
+
3. In the event Licensee prepares a derivative work that is based on
|
811 |
+
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
812 |
+
the derivative work available to others as provided herein, then
|
813 |
+
Licensee hereby agrees to include in any such work a brief summary of
|
814 |
+
the changes made to Python 1.6.1.
|
815 |
+
|
816 |
+
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
817 |
+
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
818 |
+
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
819 |
+
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
820 |
+
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
821 |
+
INFRINGE ANY THIRD PARTY RIGHTS.
|
822 |
+
|
823 |
+
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
824 |
+
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
825 |
+
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
826 |
+
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
827 |
+
|
828 |
+
6. This License Agreement will automatically terminate upon a material
|
829 |
+
breach of its terms and conditions.
|
830 |
+
|
831 |
+
7. This License Agreement shall be governed by the federal
|
832 |
+
intellectual property law of the United States, including without
|
833 |
+
limitation the federal copyright law, and, to the extent such
|
834 |
+
U.S. federal law does not apply, by the law of the Commonwealth of
|
835 |
+
Virginia, excluding Virginia's conflict of law provisions.
|
836 |
+
Notwithstanding the foregoing, with regard to derivative works based
|
837 |
+
on Python 1.6.1 that incorporate non-separable material that was
|
838 |
+
previously distributed under the GNU General Public License (GPL), the
|
839 |
+
law of the Commonwealth of Virginia shall govern this License
|
840 |
+
Agreement only as to issues arising under or with respect to
|
841 |
+
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
842 |
+
License Agreement shall be deemed to create any relationship of
|
843 |
+
agency, partnership, or joint venture between CNRI and Licensee. This
|
844 |
+
License Agreement does not grant permission to use CNRI trademarks or
|
845 |
+
trade name in a trademark sense to endorse or promote products or
|
846 |
+
services of Licensee, or any third party.
|
847 |
+
|
848 |
+
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
849 |
+
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
850 |
+
bound by the terms and conditions of this License Agreement.
|
851 |
+
|
852 |
+
ACCEPT
|
853 |
+
|
854 |
+
|
855 |
+
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
856 |
+
--------------------------------------------------
|
857 |
+
|
858 |
+
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
859 |
+
The Netherlands. All rights reserved.
|
860 |
+
|
861 |
+
Permission to use, copy, modify, and distribute this software and its
|
862 |
+
documentation for any purpose and without fee is hereby granted,
|
863 |
+
provided that the above copyright notice appear in all copies and that
|
864 |
+
both that copyright notice and this permission notice appear in
|
865 |
+
supporting documentation, and that the name of Stichting Mathematisch
|
866 |
+
Centrum or CWI not be used in advertising or publicity pertaining to
|
867 |
+
distribution of the software without specific, written prior
|
868 |
+
permission.
|
869 |
+
|
870 |
+
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
871 |
+
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
872 |
+
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
873 |
+
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
874 |
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
875 |
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
876 |
+
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
877 |
+
|
878 |
+
ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
|
879 |
+
----------------------------------------------------------------------
|
880 |
+
|
881 |
+
Permission to use, copy, modify, and/or distribute this software for any
|
882 |
+
purpose with or without fee is hereby granted.
|
883 |
+
|
884 |
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
885 |
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
886 |
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
887 |
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
888 |
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
889 |
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
890 |
+
PERFORMANCE OF THIS SOFTWARE.
|
891 |
+
Copyright (c) 2014, Al Sweigart
|
892 |
+
All rights reserved.
|
893 |
+
|
894 |
+
Redistribution and use in source and binary forms, with or without
|
895 |
+
modification, are permitted provided that the following conditions are met:
|
896 |
+
|
897 |
+
* Redistributions of source code must retain the above copyright notice, this
|
898 |
+
list of conditions and the following disclaimer.
|
899 |
+
|
900 |
+
* Redistributions in binary form must reproduce the above copyright notice,
|
901 |
+
this list of conditions and the following disclaimer in the documentation
|
902 |
+
and/or other materials provided with the distribution.
|
903 |
+
|
904 |
+
* Neither the name of the {organization} nor the names of its
|
905 |
+
contributors may be used to endorse or promote products derived from
|
906 |
+
this software without specific prior written permission.
|
907 |
+
|
908 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
909 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
910 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
911 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
912 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
913 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
914 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
915 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
916 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
917 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.Copyright (c) 2017 Anthony Sottile
|
918 |
+
|
919 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
920 |
+
of this software and associated documentation files (the "Software"), to deal
|
921 |
+
in the Software without restriction, including without limitation the rights
|
922 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
923 |
+
copies of the Software, and to permit persons to whom the Software is
|
924 |
+
furnished to do so, subject to the following conditions:
|
925 |
+
|
926 |
+
The above copyright notice and this permission notice shall be included in
|
927 |
+
all copies or substantial portions of the Software.
|
928 |
+
|
929 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
930 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
931 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
932 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
933 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
934 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
935 |
+
THE SOFTWARE.Copyright (c) 2015-2019 Jared Hobbs
|
936 |
+
|
937 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
938 |
+
this software and associated documentation files (the "Software"), to deal in
|
939 |
+
the Software without restriction, including without limitation the rights to
|
940 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
941 |
+
of the Software, and to permit persons to whom the Software is furnished to do
|
942 |
+
so, subject to the following conditions:
|
943 |
+
|
944 |
+
The above copyright notice and this permission notice shall be included in all
|
945 |
+
copies or substantial portions of the Software.
|
946 |
+
|
947 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
948 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
949 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
950 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
951 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
952 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
953 |
+
SOFTWARE.Developed by ESN, an Electronic Arts Inc. studio.
|
954 |
+
Copyright (c) 2014, Electronic Arts Inc.
|
955 |
+
All rights reserved.
|
956 |
+
|
957 |
+
Redistribution and use in source and binary forms, with or without
|
958 |
+
modification, are permitted provided that the following conditions are met:
|
959 |
+
* Redistributions of source code must retain the above copyright
|
960 |
+
notice, this list of conditions and the following disclaimer.
|
961 |
+
* Redistributions in binary form must reproduce the above copyright
|
962 |
+
notice, this list of conditions and the following disclaimer in the
|
963 |
+
documentation and/or other materials provided with the distribution.
|
964 |
+
* Neither the name of ESN, Electronic Arts Inc. nor the
|
965 |
+
names of its contributors may be used to endorse or promote products
|
966 |
+
derived from this software without specific prior written permission.
|
967 |
+
|
968 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
969 |
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
970 |
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
971 |
+
DISCLAIMED. IN NO EVENT SHALL ELECTRONIC ARTS INC. BE LIABLE
|
972 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
973 |
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
974 |
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
975 |
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
976 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
977 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
978 |
+
|
979 |
+
----
|
980 |
+
|
981 |
+
Portions of code from MODP_ASCII - Ascii transformations (upper/lower, etc)
|
982 |
+
https://github.com/client9/stringencoders
|
983 |
+
|
984 |
+
Copyright 2005, 2006, 2007
|
985 |
+
Nick Galbreath -- nickg [at] modp [dot] com
|
986 |
+
All rights reserved.
|
987 |
+
|
988 |
+
Redistribution and use in source and binary forms, with or without
|
989 |
+
modification, are permitted provided that the following conditions are
|
990 |
+
met:
|
991 |
+
|
992 |
+
Redistributions of source code must retain the above copyright
|
993 |
+
notice, this list of conditions and the following disclaimer.
|
994 |
+
|
995 |
+
Redistributions in binary form must reproduce the above copyright
|
996 |
+
notice, this list of conditions and the following disclaimer in the
|
997 |
+
documentation and/or other materials provided with the distribution.
|
998 |
+
|
999 |
+
Neither the name of the modp.com nor the names of its
|
1000 |
+
contributors may be used to endorse or promote products derived from
|
1001 |
+
this software without specific prior written permission.
|
1002 |
+
|
1003 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
1004 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
1005 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
1006 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
1007 |
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
1008 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
1009 |
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
1010 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
1011 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
1012 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
1013 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
1014 |
+
|
1015 |
+
This is the standard "new" BSD license:
|
1016 |
+
http://www.opensource.org/licenses/bsd-license.php
|
1017 |
+
|
1018 |
+
https://github.com/client9/stringencoders/blob/cfd5c1507325ae497ea9bacdacba12c0ffd79d30/COPYING
|
1019 |
+
|
1020 |
+
----
|
1021 |
+
|
1022 |
+
Numeric decoder derived from from TCL library
|
1023 |
+
https://opensource.apple.com/source/tcl/tcl-14/tcl/license.terms
|
1024 |
+
* Copyright (c) 1988-1993 The Regents of the University of California.
|
1025 |
+
* Copyright (c) 1994 Sun Microsystems, Inc.
|
1026 |
+
|
1027 |
+
This software is copyrighted by the Regents of the University of
|
1028 |
+
California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState
|
1029 |
+
Corporation and other parties. The following terms apply to all files
|
1030 |
+
associated with the software unless explicitly disclaimed in
|
1031 |
+
individual files.
|
1032 |
+
|
1033 |
+
The authors hereby grant permission to use, copy, modify, distribute,
|
1034 |
+
and license this software and its documentation for any purpose, provided
|
1035 |
+
that existing copyright notices are retained in all copies and that this
|
1036 |
+
notice is included verbatim in any distributions. No written agreement,
|
1037 |
+
license, or royalty fee is required for any of the authorized uses.
|
1038 |
+
Modifications to this software may be copyrighted by their authors
|
1039 |
+
and need not follow the licensing terms described here, provided that
|
1040 |
+
the new terms are clearly indicated on the first page of each file where
|
1041 |
+
they apply.
|
1042 |
+
|
1043 |
+
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
|
1044 |
+
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
1045 |
+
ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
|
1046 |
+
DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
|
1047 |
+
POSSIBILITY OF SUCH DAMAGE.
|
1048 |
+
|
1049 |
+
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
|
1050 |
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
1051 |
+
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
|
1052 |
+
IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
|
1053 |
+
NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
|
1054 |
+
MODIFICATIONS.
|
1055 |
+
|
1056 |
+
GOVERNMENT USE: If you are acquiring this software on behalf of the
|
1057 |
+
U.S. government, the Government shall have only "Restricted Rights"
|
1058 |
+
in the software and related documentation as defined in the Federal
|
1059 |
+
Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
|
1060 |
+
are acquiring the software on behalf of the Department of Defense, the
|
1061 |
+
software shall be classified as "Commercial Computer Software" and the
|
1062 |
+
Government shall have only "Restricted Rights" as defined in Clause
|
1063 |
+
252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
|
1064 |
+
authors grant the U.S. Government and others acting in its behalf
|
1065 |
+
permission to use and distribute the software in accordance with the
|
1066 |
+
terms specified in this license.Apache License
|
1067 |
+
Version 2.0, January 2004
|
1068 |
+
http://www.apache.org/licenses/
|
1069 |
+
|
1070 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
1071 |
+
|
1072 |
+
1. Definitions.
|
1073 |
+
|
1074 |
+
"License" shall mean the terms and conditions for use, reproduction, and
|
1075 |
+
distribution as defined by Sections 1 through 9 of this document.
|
1076 |
+
|
1077 |
+
"Licensor" shall mean the copyright owner or entity authorized by the copyright
|
1078 |
+
owner that is granting the License.
|
1079 |
+
|
1080 |
+
"Legal Entity" shall mean the union of the acting entity and all other entities
|
1081 |
+
that control, are controlled by, or are under common control with that entity.
|
1082 |
+
For the purposes of this definition, "control" means (i) the power, direct or
|
1083 |
+
indirect, to cause the direction or management of such entity, whether by
|
1084 |
+
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
1085 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
1086 |
+
|
1087 |
+
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
1088 |
+
permissions granted by this License.
|
1089 |
+
|
1090 |
+
"Source" form shall mean the preferred form for making modifications, including
|
1091 |
+
but not limited to software source code, documentation source, and configuration
|
1092 |
+
files.
|
1093 |
+
|
1094 |
+
"Object" form shall mean any form resulting from mechanical transformation or
|
1095 |
+
translation of a Source form, including but not limited to compiled object code,
|
1096 |
+
generated documentation, and conversions to other media types.
|
1097 |
+
|
1098 |
+
"Work" shall mean the work of authorship, whether in Source or Object form, made
|
1099 |
+
available under the License, as indicated by a copyright notice that is included
|
1100 |
+
in or attached to the work (an example is provided in the Appendix below).
|
1101 |
+
|
1102 |
+
"Derivative Works" shall mean any work, whether in Source or Object form, that
|
1103 |
+
is based on (or derived from) the Work and for which the editorial revisions,
|
1104 |
+
annotations, elaborations, or other modifications represent, as a whole, an
|
1105 |
+
original work of authorship. For the purposes of this License, Derivative Works
|
1106 |
+
shall not include works that remain separable from, or merely link (or bind by
|
1107 |
+
name) to the interfaces of, the Work and Derivative Works thereof.
|
1108 |
+
|
1109 |
+
"Contribution" shall mean any work of authorship, including the original version
|
1110 |
+
of the Work and any modifications or additions to that Work or Derivative Works
|
1111 |
+
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
1112 |
+
by the copyright owner or by an individual or Legal Entity authorized to submit
|
1113 |
+
on behalf of the copyright owner. For the purposes of this definition,
|
1114 |
+
"submitted" means any form of electronic, verbal, or written communication sent
|
1115 |
+
to the Licensor or its representatives, including but not limited to
|
1116 |
+
communication on electronic mailing lists, source code control systems, and
|
1117 |
+
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
1118 |
+
the purpose of discussing and improving the Work, but excluding communication
|
1119 |
+
that is conspicuously marked or otherwise designated in writing by the copyright
|
1120 |
+
owner as "Not a Contribution."
|
1121 |
+
|
1122 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
1123 |
+
of whom a Contribution has been received by Licensor and subsequently
|
1124 |
+
incorporated within the Work.
|
1125 |
+
|
1126 |
+
2. Grant of Copyright License.
|
1127 |
+
|
1128 |
+
Subject to the terms and conditions of this License, each Contributor hereby
|
1129 |
+
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
1130 |
+
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
1131 |
+
publicly display, publicly perform, sublicense, and distribute the Work and such
|
1132 |
+
Derivative Works in Source or Object form.
|
1133 |
+
|
1134 |
+
3. Grant of Patent License.
|
1135 |
+
|
1136 |
+
Subject to the terms and conditions of this License, each Contributor hereby
|
1137 |
+
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
1138 |
+
irrevocable (except as stated in this section) patent license to make, have
|
1139 |
+
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
1140 |
+
such license applies only to those patent claims licensable by such Contributor
|
1141 |
+
that are necessarily infringed by their Contribution(s) alone or by combination
|
1142 |
+
of their Contribution(s) with the Work to which such Contribution(s) was
|
1143 |
+
submitted. If You institute patent litigation against any entity (including a
|
1144 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
1145 |
+
Contribution incorporated within the Work constitutes direct or contributory
|
1146 |
+
patent infringement, then any patent licenses granted to You under this License
|
1147 |
+
for that Work shall terminate as of the date such litigation is filed.
|
1148 |
+
|
1149 |
+
4. Redistribution.
|
1150 |
+
|
1151 |
+
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
1152 |
+
in any medium, with or without modifications, and in Source or Object form,
|
1153 |
+
provided that You meet the following conditions:
|
1154 |
+
|
1155 |
+
You must give any other recipients of the Work or Derivative Works a copy of
|
1156 |
+
this License; and
|
1157 |
+
You must cause any modified files to carry prominent notices stating that You
|
1158 |
+
changed the files; and
|
1159 |
+
You must retain, in the Source form of any Derivative Works that You distribute,
|
1160 |
+
all copyright, patent, trademark, and attribution notices from the Source form
|
1161 |
+
of the Work, excluding those notices that do not pertain to any part of the
|
1162 |
+
Derivative Works; and
|
1163 |
+
If the Work includes a "NOTICE" text file as part of its distribution, then any
|
1164 |
+
Derivative Works that You distribute must include a readable copy of the
|
1165 |
+
attribution notices contained within such NOTICE file, excluding those notices
|
1166 |
+
that do not pertain to any part of the Derivative Works, in at least one of the
|
1167 |
+
following places: within a NOTICE text file distributed as part of the
|
1168 |
+
Derivative Works; within the Source form or documentation, if provided along
|
1169 |
+
with the Derivative Works; or, within a display generated by the Derivative
|
1170 |
+
Works, if and wherever such third-party notices normally appear. The contents of
|
1171 |
+
the NOTICE file are for informational purposes only and do not modify the
|
1172 |
+
License. You may add Your own attribution notices within Derivative Works that
|
1173 |
+
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
1174 |
+
provided that such additional attribution notices cannot be construed as
|
1175 |
+
modifying the License.
|
1176 |
+
You may add Your own copyright statement to Your modifications and may provide
|
1177 |
+
additional or different license terms and conditions for use, reproduction, or
|
1178 |
+
distribution of Your modifications, or for any such Derivative Works as a whole,
|
1179 |
+
provided Your use, reproduction, and distribution of the Work otherwise complies
|
1180 |
+
with the conditions stated in this License.
|
1181 |
+
|
1182 |
+
5. Submission of Contributions.
|
1183 |
+
|
1184 |
+
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
1185 |
+
for inclusion in the Work by You to the Licensor shall be under the terms and
|
1186 |
+
conditions of this License, without any additional terms or conditions.
|
1187 |
+
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
1188 |
+
any separate license agreement you may have executed with Licensor regarding
|
1189 |
+
such Contributions.
|
1190 |
+
|
1191 |
+
6. Trademarks.
|
1192 |
+
|
1193 |
+
This License does not grant permission to use the trade names, trademarks,
|
1194 |
+
service marks, or product names of the Licensor, except as required for
|
1195 |
+
reasonable and customary use in describing the origin of the Work and
|
1196 |
+
reproducing the content of the NOTICE file.
|
1197 |
+
|
1198 |
+
7. Disclaimer of Warranty.
|
1199 |
+
|
1200 |
+
Unless required by applicable law or agreed to in writing, Licensor provides the
|
1201 |
+
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
|
1202 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
1203 |
+
including, without limitation, any warranties or conditions of TITLE,
|
1204 |
+
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
1205 |
+
solely responsible for determining the appropriateness of using or
|
1206 |
+
redistributing the Work and assume any risks associated with Your exercise of
|
1207 |
+
permissions under this License.
|
1208 |
+
|
1209 |
+
8. Limitation of Liability.
|
1210 |
+
|
1211 |
+
In no event and under no legal theory, whether in tort (including negligence),
|
1212 |
+
contract, or otherwise, unless required by applicable law (such as deliberate
|
1213 |
+
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
1214 |
+
liable to You for damages, including any direct, indirect, special, incidental,
|
1215 |
+
or consequential damages of any character arising as a result of this License or
|
1216 |
+
out of the use or inability to use the Work (including but not limited to
|
1217 |
+
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
1218 |
+
any and all other commercial damages or losses), even if such Contributor has
|
1219 |
+
been advised of the possibility of such damages.
|
1220 |
+
|
1221 |
+
9. Accepting Warranty or Additional Liability.
|
1222 |
+
|
1223 |
+
While redistributing the Work or Derivative Works thereof, You may choose to
|
1224 |
+
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
1225 |
+
other liability obligations and/or rights consistent with this License. However,
|
1226 |
+
in accepting such obligations, You may act only on Your own behalf and on Your
|
1227 |
+
sole responsibility, not on behalf of any other Contributor, and only if You
|
1228 |
+
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
1229 |
+
incurred by, or claims asserted against, such Contributor by reason of your
|
1230 |
+
accepting any such warranty or additional liability.
|
1231 |
+
|
1232 |
+
END OF TERMS AND CONDITIONS
|
1233 |
+
|
1234 |
+
APPENDIX: How to apply the Apache License to your work
|
1235 |
+
|
1236 |
+
To apply the Apache License to your work, attach the following boilerplate
|
1237 |
+
notice, with the fields enclosed by brackets "[]" replaced with your own
|
1238 |
+
identifying information. (Don't include the brackets!) The text should be
|
1239 |
+
enclosed in the appropriate comment syntax for the file format. We also
|
1240 |
+
recommend that a file or class name and description of purpose be included on
|
1241 |
+
the same "printed page" as the copyright notice for easier identification within
|
1242 |
+
third-party archives.
|
1243 |
+
|
1244 |
+
Copyright [yyyy] [name of copyright owner]
|
1245 |
+
|
1246 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
1247 |
+
you may not use this file except in compliance with the License.
|
1248 |
+
You may obtain a copy of the License at
|
1249 |
+
|
1250 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
1251 |
+
|
1252 |
+
Unless required by applicable law or agreed to in writing, software
|
1253 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
1254 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1255 |
+
See the License for the specific language governing permissions and
|
1256 |
+
limitations under the License.
|
1257 |
+
Classifier: Development Status :: 5 - Production/Stable
|
1258 |
+
Classifier: Environment :: Console
|
1259 |
+
Classifier: Intended Audience :: Science/Research
|
1260 |
+
Classifier: License :: OSI Approved :: BSD License
|
1261 |
+
Classifier: Operating System :: OS Independent
|
1262 |
+
Classifier: Programming Language :: Cython
|
1263 |
+
Classifier: Programming Language :: Python
|
1264 |
+
Classifier: Programming Language :: Python :: 3
|
1265 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
1266 |
+
Classifier: Programming Language :: Python :: 3.9
|
1267 |
+
Classifier: Programming Language :: Python :: 3.10
|
1268 |
+
Classifier: Programming Language :: Python :: 3.11
|
1269 |
+
Classifier: Programming Language :: Python :: 3.12
|
1270 |
+
Classifier: Topic :: Scientific/Engineering
|
1271 |
+
Project-URL: Homepage, https://pandas.pydata.org
|
1272 |
+
Project-URL: Documentation, https://pandas.pydata.org/docs/
|
1273 |
+
Project-URL: Repository, https://github.com/pandas-dev/pandas
|
1274 |
+
Requires-Python: >=3.9
|
1275 |
+
Requires-Dist: numpy>=1.22.4; python_version < "3.11"
|
1276 |
+
Requires-Dist: numpy>=1.23.2; python_version == "3.11"
|
1277 |
+
Requires-Dist: numpy>=1.26.0; python_version >= "3.12"
|
1278 |
+
Requires-Dist: python-dateutil>=2.8.2
|
1279 |
+
Requires-Dist: pytz>=2020.1
|
1280 |
+
Requires-Dist: tzdata>=2022.7
|
1281 |
+
Requires-Dist: hypothesis>=6.46.1; extra == "test"
|
1282 |
+
Requires-Dist: pytest>=7.3.2; extra == "test"
|
1283 |
+
Requires-Dist: pytest-xdist>=2.2.0; extra == "test"
|
1284 |
+
Requires-Dist: pyarrow>=10.0.1; extra == "pyarrow"
|
1285 |
+
Requires-Dist: bottleneck>=1.3.6; extra == "performance"
|
1286 |
+
Requires-Dist: numba>=0.56.4; extra == "performance"
|
1287 |
+
Requires-Dist: numexpr>=2.8.4; extra == "performance"
|
1288 |
+
Requires-Dist: scipy>=1.10.0; extra == "computation"
|
1289 |
+
Requires-Dist: xarray>=2022.12.0; extra == "computation"
|
1290 |
+
Requires-Dist: fsspec>=2022.11.0; extra == "fss"
|
1291 |
+
Requires-Dist: s3fs>=2022.11.0; extra == "aws"
|
1292 |
+
Requires-Dist: gcsfs>=2022.11.0; extra == "gcp"
|
1293 |
+
Requires-Dist: pandas-gbq>=0.19.0; extra == "gcp"
|
1294 |
+
Requires-Dist: odfpy>=1.4.1; extra == "excel"
|
1295 |
+
Requires-Dist: openpyxl>=3.1.0; extra == "excel"
|
1296 |
+
Requires-Dist: python-calamine>=0.1.7; extra == "excel"
|
1297 |
+
Requires-Dist: pyxlsb>=1.0.10; extra == "excel"
|
1298 |
+
Requires-Dist: xlrd>=2.0.1; extra == "excel"
|
1299 |
+
Requires-Dist: xlsxwriter>=3.0.5; extra == "excel"
|
1300 |
+
Requires-Dist: pyarrow>=10.0.1; extra == "parquet"
|
1301 |
+
Requires-Dist: pyarrow>=10.0.1; extra == "feather"
|
1302 |
+
Requires-Dist: tables>=3.8.0; extra == "hdf5"
|
1303 |
+
Requires-Dist: pyreadstat>=1.2.0; extra == "spss"
|
1304 |
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "postgresql"
|
1305 |
+
Requires-Dist: psycopg2>=2.9.6; extra == "postgresql"
|
1306 |
+
Requires-Dist: adbc-driver-postgresql>=0.8.0; extra == "postgresql"
|
1307 |
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "mysql"
|
1308 |
+
Requires-Dist: pymysql>=1.0.2; extra == "mysql"
|
1309 |
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "sql-other"
|
1310 |
+
Requires-Dist: adbc-driver-postgresql>=0.8.0; extra == "sql-other"
|
1311 |
+
Requires-Dist: adbc-driver-sqlite>=0.8.0; extra == "sql-other"
|
1312 |
+
Requires-Dist: beautifulsoup4>=4.11.2; extra == "html"
|
1313 |
+
Requires-Dist: html5lib>=1.1; extra == "html"
|
1314 |
+
Requires-Dist: lxml>=4.9.2; extra == "html"
|
1315 |
+
Requires-Dist: lxml>=4.9.2; extra == "xml"
|
1316 |
+
Requires-Dist: matplotlib>=3.6.3; extra == "plot"
|
1317 |
+
Requires-Dist: jinja2>=3.1.2; extra == "output-formatting"
|
1318 |
+
Requires-Dist: tabulate>=0.9.0; extra == "output-formatting"
|
1319 |
+
Requires-Dist: PyQt5>=5.15.9; extra == "clipboard"
|
1320 |
+
Requires-Dist: qtpy>=2.3.0; extra == "clipboard"
|
1321 |
+
Requires-Dist: zstandard>=0.19.0; extra == "compression"
|
1322 |
+
Requires-Dist: dataframe-api-compat>=0.1.7; extra == "consortium-standard"
|
1323 |
+
Requires-Dist: adbc-driver-postgresql>=0.8.0; extra == "all"
|
1324 |
+
Requires-Dist: adbc-driver-sqlite>=0.8.0; extra == "all"
|
1325 |
+
Requires-Dist: beautifulsoup4>=4.11.2; extra == "all"
|
1326 |
+
Requires-Dist: bottleneck>=1.3.6; extra == "all"
|
1327 |
+
Requires-Dist: dataframe-api-compat>=0.1.7; extra == "all"
|
1328 |
+
Requires-Dist: fastparquet>=2022.12.0; extra == "all"
|
1329 |
+
Requires-Dist: fsspec>=2022.11.0; extra == "all"
|
1330 |
+
Requires-Dist: gcsfs>=2022.11.0; extra == "all"
|
1331 |
+
Requires-Dist: html5lib>=1.1; extra == "all"
|
1332 |
+
Requires-Dist: hypothesis>=6.46.1; extra == "all"
|
1333 |
+
Requires-Dist: jinja2>=3.1.2; extra == "all"
|
1334 |
+
Requires-Dist: lxml>=4.9.2; extra == "all"
|
1335 |
+
Requires-Dist: matplotlib>=3.6.3; extra == "all"
|
1336 |
+
Requires-Dist: numba>=0.56.4; extra == "all"
|
1337 |
+
Requires-Dist: numexpr>=2.8.4; extra == "all"
|
1338 |
+
Requires-Dist: odfpy>=1.4.1; extra == "all"
|
1339 |
+
Requires-Dist: openpyxl>=3.1.0; extra == "all"
|
1340 |
+
Requires-Dist: pandas-gbq>=0.19.0; extra == "all"
|
1341 |
+
Requires-Dist: psycopg2>=2.9.6; extra == "all"
|
1342 |
+
Requires-Dist: pyarrow>=10.0.1; extra == "all"
|
1343 |
+
Requires-Dist: pymysql>=1.0.2; extra == "all"
|
1344 |
+
Requires-Dist: PyQt5>=5.15.9; extra == "all"
|
1345 |
+
Requires-Dist: pyreadstat>=1.2.0; extra == "all"
|
1346 |
+
Requires-Dist: pytest>=7.3.2; extra == "all"
|
1347 |
+
Requires-Dist: pytest-xdist>=2.2.0; extra == "all"
|
1348 |
+
Requires-Dist: python-calamine>=0.1.7; extra == "all"
|
1349 |
+
Requires-Dist: pyxlsb>=1.0.10; extra == "all"
|
1350 |
+
Requires-Dist: qtpy>=2.3.0; extra == "all"
|
1351 |
+
Requires-Dist: scipy>=1.10.0; extra == "all"
|
1352 |
+
Requires-Dist: s3fs>=2022.11.0; extra == "all"
|
1353 |
+
Requires-Dist: SQLAlchemy>=2.0.0; extra == "all"
|
1354 |
+
Requires-Dist: tables>=3.8.0; extra == "all"
|
1355 |
+
Requires-Dist: tabulate>=0.9.0; extra == "all"
|
1356 |
+
Requires-Dist: xarray>=2022.12.0; extra == "all"
|
1357 |
+
Requires-Dist: xlrd>=2.0.1; extra == "all"
|
1358 |
+
Requires-Dist: xlsxwriter>=3.0.5; extra == "all"
|
1359 |
+
Requires-Dist: zstandard>=0.19.0; extra == "all"
|
1360 |
+
Provides-Extra: test
|
1361 |
+
Provides-Extra: pyarrow
|
1362 |
+
Provides-Extra: performance
|
1363 |
+
Provides-Extra: computation
|
1364 |
+
Provides-Extra: fss
|
1365 |
+
Provides-Extra: aws
|
1366 |
+
Provides-Extra: gcp
|
1367 |
+
Provides-Extra: excel
|
1368 |
+
Provides-Extra: parquet
|
1369 |
+
Provides-Extra: feather
|
1370 |
+
Provides-Extra: hdf5
|
1371 |
+
Provides-Extra: spss
|
1372 |
+
Provides-Extra: postgresql
|
1373 |
+
Provides-Extra: mysql
|
1374 |
+
Provides-Extra: sql-other
|
1375 |
+
Provides-Extra: html
|
1376 |
+
Provides-Extra: xml
|
1377 |
+
Provides-Extra: plot
|
1378 |
+
Provides-Extra: output-formatting
|
1379 |
+
Provides-Extra: clipboard
|
1380 |
+
Provides-Extra: compression
|
1381 |
+
Provides-Extra: consortium-standard
|
1382 |
+
Provides-Extra: all
|
1383 |
+
Description-Content-Type: text/markdown
|
1384 |
+
|
1385 |
+
<div align="center">
|
1386 |
+
<img src="https://pandas.pydata.org/static/img/pandas.svg"><br>
|
1387 |
+
</div>
|
1388 |
+
|
1389 |
+
-----------------
|
1390 |
+
|
1391 |
+
# pandas: powerful Python data analysis toolkit
|
1392 |
+
|
1393 |
+
| | |
|
1394 |
+
| --- | --- |
|
1395 |
+
| Testing | [](https://github.com/pandas-dev/pandas/actions/workflows/unit-tests.yml) [](https://codecov.io/gh/pandas-dev/pandas) |
|
1396 |
+
| Package | [](https://pypi.org/project/pandas/) [](https://pypi.org/project/pandas/) [](https://anaconda.org/conda-forge/pandas) [](https://anaconda.org/conda-forge/pandas) |
|
1397 |
+
| Meta | [](https://numfocus.org) [](https://doi.org/10.5281/zenodo.3509134) [](https://github.com/pandas-dev/pandas/blob/main/LICENSE) [](https://pandas.pydata.org/docs/dev/development/community.html?highlight=slack#community-slack) |
|
1398 |
+
|
1399 |
+
|
1400 |
+
## What is it?
|
1401 |
+
|
1402 |
+
**pandas** is a Python package that provides fast, flexible, and expressive data
|
1403 |
+
structures designed to make working with "relational" or "labeled" data both
|
1404 |
+
easy and intuitive. It aims to be the fundamental high-level building block for
|
1405 |
+
doing practical, **real world** data analysis in Python. Additionally, it has
|
1406 |
+
the broader goal of becoming **the most powerful and flexible open source data
|
1407 |
+
analysis / manipulation tool available in any language**. It is already well on
|
1408 |
+
its way towards this goal.
|
1409 |
+
|
1410 |
+
## Table of Contents
|
1411 |
+
|
1412 |
+
- [Main Features](#main-features)
|
1413 |
+
- [Where to get it](#where-to-get-it)
|
1414 |
+
- [Dependencies](#dependencies)
|
1415 |
+
- [Installation from sources](#installation-from-sources)
|
1416 |
+
- [License](#license)
|
1417 |
+
- [Documentation](#documentation)
|
1418 |
+
- [Background](#background)
|
1419 |
+
- [Getting Help](#getting-help)
|
1420 |
+
- [Discussion and Development](#discussion-and-development)
|
1421 |
+
- [Contributing to pandas](#contributing-to-pandas)
|
1422 |
+
|
1423 |
+
## Main Features
|
1424 |
+
Here are just a few of the things that pandas does well:
|
1425 |
+
|
1426 |
+
- Easy handling of [**missing data**][missing-data] (represented as
|
1427 |
+
`NaN`, `NA`, or `NaT`) in floating point as well as non-floating point data
|
1428 |
+
- Size mutability: columns can be [**inserted and
|
1429 |
+
deleted**][insertion-deletion] from DataFrame and higher dimensional
|
1430 |
+
objects
|
1431 |
+
- Automatic and explicit [**data alignment**][alignment]: objects can
|
1432 |
+
be explicitly aligned to a set of labels, or the user can simply
|
1433 |
+
ignore the labels and let `Series`, `DataFrame`, etc. automatically
|
1434 |
+
align the data for you in computations
|
1435 |
+
- Powerful, flexible [**group by**][groupby] functionality to perform
|
1436 |
+
split-apply-combine operations on data sets, for both aggregating
|
1437 |
+
and transforming data
|
1438 |
+
- Make it [**easy to convert**][conversion] ragged,
|
1439 |
+
differently-indexed data in other Python and NumPy data structures
|
1440 |
+
into DataFrame objects
|
1441 |
+
- Intelligent label-based [**slicing**][slicing], [**fancy
|
1442 |
+
indexing**][fancy-indexing], and [**subsetting**][subsetting] of
|
1443 |
+
large data sets
|
1444 |
+
- Intuitive [**merging**][merging] and [**joining**][joining] data
|
1445 |
+
sets
|
1446 |
+
- Flexible [**reshaping**][reshape] and [**pivoting**][pivot-table] of
|
1447 |
+
data sets
|
1448 |
+
- [**Hierarchical**][mi] labeling of axes (possible to have multiple
|
1449 |
+
labels per tick)
|
1450 |
+
- Robust IO tools for loading data from [**flat files**][flat-files]
|
1451 |
+
(CSV and delimited), [**Excel files**][excel], [**databases**][db],
|
1452 |
+
and saving/loading data from the ultrafast [**HDF5 format**][hdfstore]
|
1453 |
+
- [**Time series**][timeseries]-specific functionality: date range
|
1454 |
+
generation and frequency conversion, moving window statistics,
|
1455 |
+
date shifting and lagging
|
1456 |
+
|
1457 |
+
|
1458 |
+
[missing-data]: https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html
|
1459 |
+
[insertion-deletion]: https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#column-selection-addition-deletion
|
1460 |
+
[alignment]: https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html?highlight=alignment#intro-to-data-structures
|
1461 |
+
[groupby]: https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#group-by-split-apply-combine
|
1462 |
+
[conversion]: https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe
|
1463 |
+
[slicing]: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#slicing-ranges
|
1464 |
+
[fancy-indexing]: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html#advanced
|
1465 |
+
[subsetting]: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#boolean-indexing
|
1466 |
+
[merging]: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#database-style-dataframe-or-named-series-joining-merging
|
1467 |
+
[joining]: https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#joining-on-index
|
1468 |
+
[reshape]: https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html
|
1469 |
+
[pivot-table]: https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html
|
1470 |
+
[mi]: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#hierarchical-indexing-multiindex
|
1471 |
+
[flat-files]: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#csv-text-files
|
1472 |
+
[excel]: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#excel-files
|
1473 |
+
[db]: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#sql-queries
|
1474 |
+
[hdfstore]: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#hdf5-pytables
|
1475 |
+
[timeseries]: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#time-series-date-functionality
|
1476 |
+
|
1477 |
+
## Where to get it
|
1478 |
+
The source code is currently hosted on GitHub at:
|
1479 |
+
https://github.com/pandas-dev/pandas
|
1480 |
+
|
1481 |
+
Binary installers for the latest released version are available at the [Python
|
1482 |
+
Package Index (PyPI)](https://pypi.org/project/pandas) and on [Conda](https://docs.conda.io/en/latest/).
|
1483 |
+
|
1484 |
+
```sh
|
1485 |
+
# conda
|
1486 |
+
conda install -c conda-forge pandas
|
1487 |
+
```
|
1488 |
+
|
1489 |
+
```sh
|
1490 |
+
# or PyPI
|
1491 |
+
pip install pandas
|
1492 |
+
```
|
1493 |
+
|
1494 |
+
The list of changes to pandas between each release can be found
|
1495 |
+
[here](https://pandas.pydata.org/pandas-docs/stable/whatsnew/index.html). For full
|
1496 |
+
details, see the commit logs at https://github.com/pandas-dev/pandas.
|
1497 |
+
|
1498 |
+
## Dependencies
|
1499 |
+
- [NumPy - Adds support for large, multi-dimensional arrays, matrices and high-level mathematical functions to operate on these arrays](https://www.numpy.org)
|
1500 |
+
- [python-dateutil - Provides powerful extensions to the standard datetime module](https://dateutil.readthedocs.io/en/stable/index.html)
|
1501 |
+
- [pytz - Brings the Olson tz database into Python which allows accurate and cross platform timezone calculations](https://github.com/stub42/pytz)
|
1502 |
+
|
1503 |
+
See the [full installation instructions](https://pandas.pydata.org/pandas-docs/stable/install.html#dependencies) for minimum supported versions of required, recommended and optional dependencies.
|
1504 |
+
|
1505 |
+
## Installation from sources
|
1506 |
+
To install pandas from source you need [Cython](https://cython.org/) in addition to the normal
|
1507 |
+
dependencies above. Cython can be installed from PyPI:
|
1508 |
+
|
1509 |
+
```sh
|
1510 |
+
pip install cython
|
1511 |
+
```
|
1512 |
+
|
1513 |
+
In the `pandas` directory (same one where you found this file after
|
1514 |
+
cloning the git repo), execute:
|
1515 |
+
|
1516 |
+
```sh
|
1517 |
+
pip install .
|
1518 |
+
```
|
1519 |
+
|
1520 |
+
or for installing in [development mode](https://pip.pypa.io/en/latest/cli/pip_install/#install-editable):
|
1521 |
+
|
1522 |
+
|
1523 |
+
```sh
|
1524 |
+
python -m pip install -ve . --no-build-isolation --config-settings=editable-verbose=true
|
1525 |
+
```
|
1526 |
+
|
1527 |
+
See the full instructions for [installing from source](https://pandas.pydata.org/docs/dev/development/contributing_environment.html).
|
1528 |
+
|
1529 |
+
## License
|
1530 |
+
[BSD 3](LICENSE)
|
1531 |
+
|
1532 |
+
## Documentation
|
1533 |
+
The official documentation is hosted on [PyData.org](https://pandas.pydata.org/pandas-docs/stable/).
|
1534 |
+
|
1535 |
+
## Background
|
1536 |
+
Work on ``pandas`` started at [AQR](https://www.aqr.com/) (a quantitative hedge fund) in 2008 and
|
1537 |
+
has been under active development since then.
|
1538 |
+
|
1539 |
+
## Getting Help
|
1540 |
+
|
1541 |
+
For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/pandas).
|
1542 |
+
Further, general questions and discussions can also take place on the [pydata mailing list](https://groups.google.com/forum/?fromgroups#!forum/pydata).
|
1543 |
+
|
1544 |
+
## Discussion and Development
|
1545 |
+
Most development discussions take place on GitHub in this repo, via the [GitHub issue tracker](https://github.com/pandas-dev/pandas/issues).
|
1546 |
+
|
1547 |
+
Further, the [pandas-dev mailing list](https://mail.python.org/mailman/listinfo/pandas-dev) can also be used for specialized discussions or design issues, and a [Slack channel](https://pandas.pydata.org/docs/dev/development/community.html?highlight=slack#community-slack) is available for quick development related questions.
|
1548 |
+
|
1549 |
+
There are also frequent [community meetings](https://pandas.pydata.org/docs/dev/development/community.html#community-meeting) for project maintainers open to the community as well as monthly [new contributor meetings](https://pandas.pydata.org/docs/dev/development/community.html#new-contributor-meeting) to help support new contributors.
|
1550 |
+
|
1551 |
+
Additional information on the communication channels can be found on the [contributor community](https://pandas.pydata.org/docs/development/community.html) page.
|
1552 |
+
|
1553 |
+
## Contributing to pandas
|
1554 |
+
|
1555 |
+
[](https://www.codetriage.com/pandas-dev/pandas)
|
1556 |
+
|
1557 |
+
All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome.
|
1558 |
+
|
1559 |
+
A detailed overview on how to contribute can be found in the **[contributing guide](https://pandas.pydata.org/docs/dev/development/contributing.html)**.
|
1560 |
+
|
1561 |
+
If you are simply looking to start working with the pandas codebase, navigate to the [GitHub "issues" tab](https://github.com/pandas-dev/pandas/issues) and start looking through interesting issues. There are a number of issues listed under [Docs](https://github.com/pandas-dev/pandas/issues?labels=Docs&sort=updated&state=open) and [good first issue](https://github.com/pandas-dev/pandas/issues?labels=good+first+issue&sort=updated&state=open) where you could start out.
|
1562 |
+
|
1563 |
+
You can also triage issues which may include reproducing bug reports, or asking for vital information such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to [subscribe to pandas on CodeTriage](https://www.codetriage.com/pandas-dev/pandas).
|
1564 |
+
|
1565 |
+
Or maybe through using pandas you have an idea of your own or are looking for something in the documentation and thinking ‘this can be improved’...you can do something about it!
|
1566 |
+
|
1567 |
+
Feel free to ask questions on the [mailing list](https://groups.google.com/forum/?fromgroups#!forum/pydata) or on [Slack](https://pandas.pydata.org/docs/dev/development/community.html?highlight=slack#community-slack).
|
1568 |
+
|
1569 |
+
As contributors and maintainers to this project, you are expected to abide by pandas' code of conduct. More information can be found at: [Contributor Code of Conduct](https://github.com/pandas-dev/.github/blob/master/CODE_OF_CONDUCT.md)
|
1570 |
+
|
1571 |
+
<hr>
|
1572 |
+
|
1573 |
+
[Go to Top](#table-of-contents)
|
.cache/pip/http-v2/a/e/1/3/6/ae1360498e2a7e78c3695d71a4132c94b805a9c41d71ad8f62ad998f.body
ADDED
Binary file (5.72 kB). View file
|
|
.cache/pip/http-v2/a/e/7/a/2/ae7a241673cf118ca18eca030dc29d2715b1980127dd0e2949514433
ADDED
Binary file (1.19 kB). View file
|
|
.cache/pip/http-v2/b/6/8/7/d/b687d90e2a44328db9c9ecd9af0a9c577a4e68f9d239bbb73aebc319.body
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: wheel
|
3 |
+
Version: 0.42.0
|
4 |
+
Summary: A built-package format for Python
|
5 |
+
Keywords: wheel,packaging
|
6 |
+
Author-email: Daniel Holth <[email protected]>
|
7 |
+
Maintainer-email: Alex Grönholm <[email protected]>
|
8 |
+
Requires-Python: >=3.7
|
9 |
+
Description-Content-Type: text/x-rst
|
10 |
+
Classifier: Development Status :: 5 - Production/Stable
|
11 |
+
Classifier: Intended Audience :: Developers
|
12 |
+
Classifier: Topic :: System :: Archiving :: Packaging
|
13 |
+
Classifier: License :: OSI Approved :: MIT License
|
14 |
+
Classifier: Programming Language :: Python
|
15 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
16 |
+
Classifier: Programming Language :: Python :: 3.7
|
17 |
+
Classifier: Programming Language :: Python :: 3.8
|
18 |
+
Classifier: Programming Language :: Python :: 3.9
|
19 |
+
Classifier: Programming Language :: Python :: 3.10
|
20 |
+
Classifier: Programming Language :: Python :: 3.11
|
21 |
+
Classifier: Programming Language :: Python :: 3.12
|
22 |
+
Requires-Dist: pytest >= 6.0.0 ; extra == "test"
|
23 |
+
Requires-Dist: setuptools >= 65 ; extra == "test"
|
24 |
+
Project-URL: Changelog, https://wheel.readthedocs.io/en/stable/news.html
|
25 |
+
Project-URL: Documentation, https://wheel.readthedocs.io/
|
26 |
+
Project-URL: Issue Tracker, https://github.com/pypa/wheel/issues
|
27 |
+
Project-URL: Source, https://github.com/pypa/wheel
|
28 |
+
Provides-Extra: test
|
29 |
+
|
30 |
+
wheel
|
31 |
+
=====
|
32 |
+
|
33 |
+
This library is the reference implementation of the Python wheel packaging
|
34 |
+
standard, as defined in `PEP 427`_.
|
35 |
+
|
36 |
+
It has two different roles:
|
37 |
+
|
38 |
+
#. A setuptools_ extension for building wheels that provides the
|
39 |
+
``bdist_wheel`` setuptools command
|
40 |
+
#. A command line tool for working with wheel files
|
41 |
+
|
42 |
+
It should be noted that wheel is **not** intended to be used as a library, and
|
43 |
+
as such there is no stable, public API.
|
44 |
+
|
45 |
+
.. _PEP 427: https://www.python.org/dev/peps/pep-0427/
|
46 |
+
.. _setuptools: https://pypi.org/project/setuptools/
|
47 |
+
|
48 |
+
Documentation
|
49 |
+
-------------
|
50 |
+
|
51 |
+
The documentation_ can be found on Read The Docs.
|
52 |
+
|
53 |
+
.. _documentation: https://wheel.readthedocs.io/
|
54 |
+
|
55 |
+
Code of Conduct
|
56 |
+
---------------
|
57 |
+
|
58 |
+
Everyone interacting in the wheel project's codebases, issue trackers, chat
|
59 |
+
rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
|
60 |
+
|
61 |
+
.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
|
62 |
+
|
.config/wandb/settings
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
[default]
|
2 |
+
|
.ipynb_checkpoints/train-checkpoint.py
ADDED
@@ -0,0 +1,546 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# torchrun --standalone --nproc_per_node=2 train.py --batch_size=96
|
2 |
+
|
3 |
+
# train.py
|
4 |
+
import os
|
5 |
+
import time
|
6 |
+
import math
|
7 |
+
from contextlib import nullcontext
|
8 |
+
import json
|
9 |
+
|
10 |
+
import numpy as np
|
11 |
+
import torch
|
12 |
+
from torch.nn.parallel import DistributedDataParallel as DDP
|
13 |
+
from torch.distributed import init_process_group, destroy_process_group
|
14 |
+
import pandas as pd
|
15 |
+
|
16 |
+
import tiktoken
|
17 |
+
from model import GPTConfig, GPT
|
18 |
+
|
19 |
+
# Import wandb and tqdm
|
20 |
+
import wandb
|
21 |
+
from tqdm.auto import tqdm
|
22 |
+
|
23 |
+
# -----------------------------------------------------------------------------
|
24 |
+
# Default configuration with added positional encoding options
|
25 |
+
# I/O
|
26 |
+
out_dir = 'out'
|
27 |
+
eval_interval = 100 # Evaluate every 100 iterations
|
28 |
+
log_interval = 1 # Log every iteration
|
29 |
+
eval_iters = 100
|
30 |
+
eval_only = False
|
31 |
+
always_save_checkpoint = True
|
32 |
+
init_from = 'scratch' # 'scratch' | 'resume' | 'checkpoint'
|
33 |
+
checkpoint_path = '' # Path to a specific checkpoint to load
|
34 |
+
# wandb logging
|
35 |
+
wandb_log = True
|
36 |
+
wandb_project = 'gpt2_positional_encodings_10B'
|
37 |
+
wandb_run_name = 'experiment'
|
38 |
+
# data
|
39 |
+
dataset = 'fineweb'
|
40 |
+
gradient_accumulation_steps = 40
|
41 |
+
batch_size = 12
|
42 |
+
block_size = 512
|
43 |
+
# model
|
44 |
+
n_layer = 4
|
45 |
+
n_head = 4
|
46 |
+
n_embd = 256
|
47 |
+
dropout = 0.0
|
48 |
+
bias = False
|
49 |
+
# adamw optimizer
|
50 |
+
learning_rate = 6e-4
|
51 |
+
max_iters = 10000
|
52 |
+
weight_decay = 1e-1
|
53 |
+
beta1 = 0.9
|
54 |
+
beta2 = 0.95
|
55 |
+
grad_clip = 1.0
|
56 |
+
# learning rate decay settings
|
57 |
+
decay_lr = True
|
58 |
+
warmup_iters = 100
|
59 |
+
lr_decay_iters = 10000
|
60 |
+
min_lr = 6e-5
|
61 |
+
# DDP settings
|
62 |
+
backend = 'nccl'
|
63 |
+
# system
|
64 |
+
device = 'cuda'
|
65 |
+
dtype = 'bfloat16' if torch.cuda.is_available() and torch.cuda.is_bf16_supported() else 'float16'
|
66 |
+
compile = True
|
67 |
+
# Positional Encodings
|
68 |
+
embedding_types = ['sinusoidal', 'polynomial_legendre',
|
69 |
+
'polynomial_chebyshev']
|
70 |
+
attention_types = ['default']
|
71 |
+
# Data collection options
|
72 |
+
collect_attention_patterns = False # Set to True to collect attention patterns
|
73 |
+
collect_activations = False # Set to True to collect activations
|
74 |
+
# Evaluation datasets
|
75 |
+
eval_datasets = ['wikitext-103-v1', 'ptb', 'lambada'] # WikiText-103 and Penn Treebank
|
76 |
+
seed = 1337
|
77 |
+
# -----------------------------------------------------------------------------
|
78 |
+
config_keys = [k for k, v in globals().items() if not k.startswith('_') and isinstance(v, (int, float, bool, str, list, tuple))]
|
79 |
+
exec(open('configurator.py').read())
|
80 |
+
config = {k: globals()[k] for k in config_keys}
|
81 |
+
# -----------------------------------------------------------------------------
|
82 |
+
|
83 |
+
def is_compatible(embedding_type, attention_type):
|
84 |
+
# Incompatible combinations can be specified here
|
85 |
+
incompatible_combinations = [
|
86 |
+
# If specific combinations are incompatible
|
87 |
+
]
|
88 |
+
|
89 |
+
# If embedding_type or attention_type is 'none', some attention methods may not function properly
|
90 |
+
if embedding_type == 'none' and attention_type in ['relative', 'rope']:
|
91 |
+
return False
|
92 |
+
|
93 |
+
# 'rope' attention requires even dimension per head
|
94 |
+
if attention_type == 'rope' and ((n_embd // n_head) % 2 != 0):
|
95 |
+
return False
|
96 |
+
|
97 |
+
return (embedding_type, attention_type) not in incompatible_combinations
|
98 |
+
|
99 |
+
def main():
|
100 |
+
# Initialize DDP if needed
|
101 |
+
global gradient_accumulation_steps
|
102 |
+
ddp = int(os.environ.get('RANK', -1)) != -1
|
103 |
+
if ddp:
|
104 |
+
init_process_group(backend=backend)
|
105 |
+
ddp_rank = int(os.environ['RANK'])
|
106 |
+
ddp_local_rank = int(os.environ['LOCAL_RANK'])
|
107 |
+
ddp_world_size = int(os.environ['WORLD_SIZE'])
|
108 |
+
device_local = f'cuda:{ddp_local_rank}'
|
109 |
+
torch.cuda.set_device(device_local)
|
110 |
+
master_process = ddp_rank == 0
|
111 |
+
seed_offset = ddp_rank
|
112 |
+
assert gradient_accumulation_steps % ddp_world_size == 0
|
113 |
+
gradient_accumulation_steps //= ddp_world_size
|
114 |
+
else:
|
115 |
+
master_process = True
|
116 |
+
seed_offset = 0
|
117 |
+
ddp_world_size = 1
|
118 |
+
device_local = device # Use the default device
|
119 |
+
|
120 |
+
tokens_per_iter = gradient_accumulation_steps * ddp_world_size * batch_size * block_size
|
121 |
+
if master_process:
|
122 |
+
print(f"Tokens per iteration will be: {tokens_per_iter:,}")
|
123 |
+
|
124 |
+
if master_process:
|
125 |
+
os.makedirs(out_dir, exist_ok=True)
|
126 |
+
|
127 |
+
# Set random seed
|
128 |
+
global seed
|
129 |
+
seed += seed_offset
|
130 |
+
torch.manual_seed(seed)
|
131 |
+
np.random.seed(seed)
|
132 |
+
torch.backends.cuda.matmul.allow_tf32 = True
|
133 |
+
torch.backends.cudnn.allow_tf32 = True
|
134 |
+
device_type = 'cuda' if 'cuda' in device_local else 'cpu'
|
135 |
+
ptdtype = {'float32': torch.float32, 'bfloat16': torch.bfloat16, 'float16': torch.float16}[dtype]
|
136 |
+
ctx = nullcontext() if device_type == 'cpu' else torch.amp.autocast(device_type=device_type, dtype=ptdtype)
|
137 |
+
|
138 |
+
# Load tokenizer using tiktoken
|
139 |
+
tokenizer = tiktoken.get_encoding("gpt2")
|
140 |
+
|
141 |
+
# Prepare evaluation datasets
|
142 |
+
eval_data = {}
|
143 |
+
for eval_dataset in eval_datasets:
|
144 |
+
eval_data_path = os.path.join('data', eval_dataset)
|
145 |
+
if not os.path.exists(eval_data_path):
|
146 |
+
raise FileNotFoundError(f"Dataset {eval_dataset} not found. Please run prepare_evaluation_data.py first.")
|
147 |
+
|
148 |
+
if eval_dataset in ['wikitext-2-v1', 'wikitext-103-v1']:
|
149 |
+
train_file = [f for f in os.listdir(eval_data_path) if f.startswith('train')][0]
|
150 |
+
val_file = [f for f in os.listdir(eval_data_path) if f.startswith('validation')][0]
|
151 |
+
|
152 |
+
train_df = pd.read_parquet(os.path.join(eval_data_path, train_file))
|
153 |
+
val_df = pd.read_parquet(os.path.join(eval_data_path, val_file))
|
154 |
+
|
155 |
+
train_text = '\n'.join(train_df['text'])
|
156 |
+
val_text = '\n'.join(val_df['text'])
|
157 |
+
|
158 |
+
elif eval_dataset == 'ptb':
|
159 |
+
with open(os.path.join(eval_data_path, 'train.txt'), 'r') as f:
|
160 |
+
train_text = f.read()
|
161 |
+
with open(os.path.join(eval_data_path, 'valid.txt'), 'r') as f:
|
162 |
+
val_text = f.read()
|
163 |
+
|
164 |
+
elif eval_dataset == 'lambada':
|
165 |
+
with open(os.path.join(eval_data_path, 'lambada_test.jsonl'), 'r') as f:
|
166 |
+
data = [json.loads(line) for line in f]
|
167 |
+
test_text = '\n'.join([item['text'] for item in data])
|
168 |
+
train_text = test_text[:len(test_text)//2] # Use first half as pseudo-train
|
169 |
+
val_text = test_text[len(test_text)//2:] # Use second half as pseudo-val
|
170 |
+
|
171 |
+
else:
|
172 |
+
raise ValueError(f"Unknown dataset: {eval_dataset}")
|
173 |
+
|
174 |
+
# Tokenize
|
175 |
+
train_ids = tokenizer.encode_ordinary(train_text)
|
176 |
+
val_ids = tokenizer.encode_ordinary(val_text)
|
177 |
+
|
178 |
+
# Convert to numpy arrays
|
179 |
+
train_ids = np.array(train_ids, dtype=np.uint16)
|
180 |
+
val_ids = np.array(val_ids, dtype=np.uint16)
|
181 |
+
|
182 |
+
eval_data[eval_dataset] = {'train': train_ids, 'val': val_ids}
|
183 |
+
|
184 |
+
# Data loading
|
185 |
+
data_dir = os.path.join('data', dataset)
|
186 |
+
# Update the get_batch function to handle evaluation datasets
|
187 |
+
def get_batch(split, dataset='main'):
|
188 |
+
if dataset == 'main':
|
189 |
+
if split == 'train':
|
190 |
+
data = np.memmap(os.path.join(data_dir, 'train.bin'), dtype=np.uint16, mode='r')
|
191 |
+
else:
|
192 |
+
data = np.memmap(os.path.join(data_dir, 'val.bin'), dtype=np.uint16, mode='r')
|
193 |
+
else:
|
194 |
+
data = eval_data[dataset][split]
|
195 |
+
|
196 |
+
ix = torch.randint(len(data) - block_size, (batch_size,))
|
197 |
+
x = torch.stack([torch.from_numpy((data[i:i+block_size]).astype(np.int64)) for i in ix])
|
198 |
+
y = torch.stack([torch.from_numpy((data[i+1:i+1+block_size]).astype(np.int64)) for i in ix])
|
199 |
+
if device_type == 'cuda':
|
200 |
+
x, y = x.pin_memory().to(device_local, non_blocking=True), y.pin_memory().to(device_local, non_blocking=True)
|
201 |
+
else:
|
202 |
+
x, y = x.to(device_local), y.to(device_local)
|
203 |
+
return x, y
|
204 |
+
|
205 |
+
# Attempt to derive vocab_size from the dataset
|
206 |
+
meta_path = os.path.join(data_dir, 'meta.json')
|
207 |
+
meta_vocab_size = None
|
208 |
+
if os.path.exists(meta_path):
|
209 |
+
with open(meta_path, 'r') as f:
|
210 |
+
meta = json.load(f)
|
211 |
+
meta_vocab_size = meta['vocab_size']
|
212 |
+
if master_process:
|
213 |
+
print(f"Found vocab_size = {meta_vocab_size} (inside {meta_path})")
|
214 |
+
|
215 |
+
# Helps estimate loss and collect attention patterns and activations
|
216 |
+
@torch.no_grad()
|
217 |
+
def estimate_loss(model, collect_attention_patterns=False, collect_activations=False, save_dir=None, max_batches_to_save=None):
|
218 |
+
out = {}
|
219 |
+
model.eval()
|
220 |
+
# Access the underlying model if wrapped with DDP
|
221 |
+
raw_model = model.module if hasattr(model, 'module') else model
|
222 |
+
|
223 |
+
# Set tracking flags on the underlying model
|
224 |
+
raw_model.config.track_attention_patterns = collect_attention_patterns
|
225 |
+
raw_model.config.track_activations = collect_activations
|
226 |
+
|
227 |
+
if collect_attention_patterns or collect_activations:
|
228 |
+
if save_dir is None:
|
229 |
+
raise ValueError("save_dir must be specified when collecting attention patterns or activations.")
|
230 |
+
if master_process:
|
231 |
+
os.makedirs(save_dir, exist_ok=True)
|
232 |
+
|
233 |
+
for split in ['train', 'val']:
|
234 |
+
losses = torch.zeros(eval_iters)
|
235 |
+
save_count = 0 # Counter for saved batches
|
236 |
+
for k in range(eval_iters):
|
237 |
+
X, Y = get_batch(split)
|
238 |
+
with ctx:
|
239 |
+
logits, loss = model(X, Y)
|
240 |
+
losses[k] = loss.item()
|
241 |
+
# Collect and save attention patterns and activations
|
242 |
+
if (collect_attention_patterns or collect_activations) and save_count < (max_batches_to_save or eval_iters):
|
243 |
+
if collect_attention_patterns or collect_activations:
|
244 |
+
if master_process:
|
245 |
+
batch_dir = os.path.join(save_dir, f"{split}_batch_{k}")
|
246 |
+
os.makedirs(batch_dir, exist_ok=True)
|
247 |
+
# Save activations
|
248 |
+
if collect_activations and hasattr(raw_model, 'activations'):
|
249 |
+
for idx, activation in enumerate(raw_model.activations):
|
250 |
+
activation_path = os.path.join(batch_dir, f"activation_layer_{idx}.pt")
|
251 |
+
torch.save(activation, activation_path)
|
252 |
+
# Save attention patterns
|
253 |
+
if collect_attention_patterns and hasattr(raw_model, 'attention_patterns'):
|
254 |
+
for idx, attention in enumerate(raw_model.attention_patterns):
|
255 |
+
attention_path = os.path.join(batch_dir, f"attention_layer_{idx}.pt")
|
256 |
+
torch.save(attention, attention_path)
|
257 |
+
# Clear activations and attention patterns from the model
|
258 |
+
raw_model.activations = []
|
259 |
+
raw_model.attention_patterns = []
|
260 |
+
save_count += 1
|
261 |
+
out[split] = losses.mean().item()
|
262 |
+
|
263 |
+
# Evaluate on additional datasets
|
264 |
+
for eval_dataset in eval_datasets:
|
265 |
+
split_losses = {}
|
266 |
+
for split in ['train', 'val']:
|
267 |
+
losses = torch.zeros(eval_iters)
|
268 |
+
save_count = 0 # Counter for saved batches
|
269 |
+
for k in range(eval_iters):
|
270 |
+
X, Y = get_batch(split, dataset=eval_dataset)
|
271 |
+
with ctx:
|
272 |
+
logits, loss = model(X, Y)
|
273 |
+
losses[k] = loss.item()
|
274 |
+
# Collect and save attention patterns and activations
|
275 |
+
if (collect_attention_patterns or collect_activations) and save_count < (max_batches_to_save or eval_iters):
|
276 |
+
if collect_attention_patterns or collect_activations:
|
277 |
+
if master_process:
|
278 |
+
batch_dir = os.path.join(save_dir, f"{eval_dataset}_{split}_batch_{k}")
|
279 |
+
os.makedirs(batch_dir, exist_ok=True)
|
280 |
+
# Save activations
|
281 |
+
if collect_activations and hasattr(raw_model, 'activations'):
|
282 |
+
for idx, activation in enumerate(raw_model.activations):
|
283 |
+
activation_path = os.path.join(batch_dir, f"activation_layer_{idx}.pt")
|
284 |
+
torch.save(activation, activation_path)
|
285 |
+
# Save attention patterns
|
286 |
+
if collect_attention_patterns and hasattr(raw_model, 'attention_patterns'):
|
287 |
+
for idx, attention in enumerate(raw_model.attention_patterns):
|
288 |
+
attention_path = os.path.join(batch_dir, f"attention_layer_{idx}.pt")
|
289 |
+
torch.save(attention, attention_path)
|
290 |
+
# Clear activations and attention patterns from the model
|
291 |
+
raw_model.activations = []
|
292 |
+
raw_model.attention_patterns = []
|
293 |
+
save_count += 1
|
294 |
+
split_losses[split] = losses.mean().item()
|
295 |
+
out[eval_dataset] = split_losses
|
296 |
+
model.train()
|
297 |
+
# Reset tracking flags
|
298 |
+
raw_model.config.track_attention_patterns = False
|
299 |
+
raw_model.config.track_activations = False
|
300 |
+
return out
|
301 |
+
|
302 |
+
# Learning rate decay scheduler
|
303 |
+
def get_lr(it):
|
304 |
+
if it < warmup_iters:
|
305 |
+
return learning_rate * it / warmup_iters
|
306 |
+
if it > lr_decay_iters:
|
307 |
+
return min_lr
|
308 |
+
decay_ratio = (it - warmup_iters) / (lr_decay_iters - warmup_iters)
|
309 |
+
coeff = 0.5 * (1.0 + math.cos(math.pi * decay_ratio))
|
310 |
+
return min_lr + coeff * (learning_rate - min_lr)
|
311 |
+
|
312 |
+
# Training loop over positional encoding combinations
|
313 |
+
for embedding_type in embedding_types:
|
314 |
+
for attention_type in attention_types:
|
315 |
+
if not is_compatible(embedding_type, attention_type):
|
316 |
+
if master_process:
|
317 |
+
print(f"Skipping incompatible combination: Embedding={embedding_type}, Attention={attention_type}")
|
318 |
+
continue
|
319 |
+
|
320 |
+
# Configure model arguments
|
321 |
+
model_args = dict(
|
322 |
+
n_layer=n_layer,
|
323 |
+
n_head=n_head,
|
324 |
+
n_embd=n_embd,
|
325 |
+
block_size=block_size,
|
326 |
+
bias=bias,
|
327 |
+
vocab_size=None,
|
328 |
+
dropout=dropout,
|
329 |
+
embedding_type=embedding_type,
|
330 |
+
attention_type=attention_type,
|
331 |
+
track_activations=False,
|
332 |
+
track_attention_patterns=False,
|
333 |
+
)
|
334 |
+
|
335 |
+
# Initialize or resume model
|
336 |
+
iter_num = 0
|
337 |
+
best_val_loss = 1e9 # initialize best val loss to a high value
|
338 |
+
checkpoint = None
|
339 |
+
run_id = None # Initialize run_id to None
|
340 |
+
|
341 |
+
if init_from == 'scratch':
|
342 |
+
if master_process:
|
343 |
+
print(f"\nInitializing new model with embedding_type={embedding_type}, attention_type={attention_type}")
|
344 |
+
if meta_vocab_size is None:
|
345 |
+
if master_process:
|
346 |
+
print("Defaulting to vocab_size of GPT-2 to 50257")
|
347 |
+
model_args['vocab_size'] = meta_vocab_size if meta_vocab_size is not None else 50257
|
348 |
+
gptconf = GPTConfig(**model_args)
|
349 |
+
model = GPT(gptconf)
|
350 |
+
elif init_from == 'resume':
|
351 |
+
# Resume from the latest checkpoint
|
352 |
+
ckpt_path = os.path.join(out_dir, f"ckpt_{embedding_type}_{attention_type}.pt")
|
353 |
+
if not os.path.exists(ckpt_path):
|
354 |
+
raise FileNotFoundError(f"Checkpoint not found at {ckpt_path}")
|
355 |
+
if master_process:
|
356 |
+
print(f"\nResuming training from checkpoint {ckpt_path}")
|
357 |
+
checkpoint = torch.load(ckpt_path, map_location=device_local)
|
358 |
+
gptconf = GPTConfig(**checkpoint['model_args'])
|
359 |
+
model = GPT(gptconf)
|
360 |
+
model.load_state_dict(checkpoint['model'])
|
361 |
+
iter_num = checkpoint['iter_num']
|
362 |
+
best_val_loss = checkpoint['best_val_loss']
|
363 |
+
seed = checkpoint.get('seed', seed)
|
364 |
+
run_id = checkpoint.get('wandb_run_id', None)
|
365 |
+
elif init_from == 'checkpoint':
|
366 |
+
# Resume from a specific checkpoint
|
367 |
+
if not checkpoint_path or not os.path.exists(checkpoint_path):
|
368 |
+
raise FileNotFoundError(f"Checkpoint not found at {checkpoint_path}")
|
369 |
+
if master_process:
|
370 |
+
print(f"\nLoading model from checkpoint {checkpoint_path}")
|
371 |
+
checkpoint = torch.load(checkpoint_path, map_location=device_local)
|
372 |
+
gptconf = GPTConfig(**checkpoint['model_args'])
|
373 |
+
model = GPT(gptconf)
|
374 |
+
model.load_state_dict(checkpoint['model'])
|
375 |
+
iter_num = checkpoint['iter_num']
|
376 |
+
best_val_loss = checkpoint['best_val_loss']
|
377 |
+
seed = checkpoint.get('seed', seed)
|
378 |
+
run_id = checkpoint.get('wandb_run_id', None)
|
379 |
+
else:
|
380 |
+
raise ValueError(f"Unknown init_from '{init_from}'")
|
381 |
+
|
382 |
+
# Set random seed
|
383 |
+
seed += seed_offset
|
384 |
+
torch.manual_seed(seed)
|
385 |
+
np.random.seed(seed)
|
386 |
+
|
387 |
+
model.to(device_local)
|
388 |
+
scaler = torch.cuda.amp.GradScaler(enabled=(dtype == 'float16'))
|
389 |
+
optimizer = model.configure_optimizers(weight_decay, learning_rate, (beta1, beta2), device_type)
|
390 |
+
|
391 |
+
# Load optimizer state if resuming
|
392 |
+
if checkpoint is not None:
|
393 |
+
optimizer.load_state_dict(checkpoint['optimizer'])
|
394 |
+
|
395 |
+
if compile:
|
396 |
+
if master_process:
|
397 |
+
print("Compiling the model... (takes a ~minute)")
|
398 |
+
unoptimized_model = model
|
399 |
+
model = torch.compile(model)
|
400 |
+
|
401 |
+
if ddp:
|
402 |
+
model = DDP(model, device_ids=[ddp_local_rank])
|
403 |
+
|
404 |
+
# Logging with WandB
|
405 |
+
if wandb_log and master_process:
|
406 |
+
run_name = f"{embedding_type}_{attention_type}_{wandb_run_name}"
|
407 |
+
# Initialize WandB
|
408 |
+
wandb.init(project=wandb_project, name=run_name, config=config, resume='allow', id=run_id)
|
409 |
+
# Save the run ID for resuming later
|
410 |
+
run_id = wandb.run.id
|
411 |
+
else:
|
412 |
+
run_id = None
|
413 |
+
|
414 |
+
# Training loop
|
415 |
+
X, Y = get_batch('train')
|
416 |
+
t0 = time.time()
|
417 |
+
local_iter_num = 0
|
418 |
+
raw_model = model.module if hasattr(model, 'module') else model
|
419 |
+
running_mfu = -1.0
|
420 |
+
progress_bar = tqdm(total=max_iters, initial=iter_num, desc=f"Training {embedding_type} + {attention_type}", disable=not master_process)
|
421 |
+
progress_bar_update_freq = 1 # Update progress bar every iteration
|
422 |
+
|
423 |
+
while True:
|
424 |
+
# Determine learning rate
|
425 |
+
lr = get_lr(iter_num) if decay_lr else learning_rate
|
426 |
+
for param_group in optimizer.param_groups:
|
427 |
+
param_group['lr'] = lr
|
428 |
+
|
429 |
+
# Evaluate and checkpoint
|
430 |
+
if iter_num % eval_interval == 0 and iter_num > 0:
|
431 |
+
# Define save_dir for collected data
|
432 |
+
eval_data_dir = os.path.join('data', 'eval_data', f"{embedding_type}_{attention_type}", f"step_{iter_num}")
|
433 |
+
# Set a limit on the number of batches to save during evaluation
|
434 |
+
max_batches_to_save = 10 # Adjust this number as needed to control storage usage
|
435 |
+
losses = estimate_loss(model,
|
436 |
+
collect_attention_patterns=collect_attention_patterns,
|
437 |
+
collect_activations=collect_activations,
|
438 |
+
save_dir=eval_data_dir,
|
439 |
+
max_batches_to_save=max_batches_to_save)
|
440 |
+
if master_process:
|
441 |
+
print(f"\nStep {iter_num}:")
|
442 |
+
print(f"Train loss: {losses['train']:.4f}, Val loss: {losses['val']:.4f}")
|
443 |
+
for eval_dataset in eval_datasets:
|
444 |
+
print(f"{eval_dataset} - Train loss: {losses[eval_dataset]['train']:.4f}, Val loss: {losses[eval_dataset]['val']:.4f}")
|
445 |
+
# Log to wandb
|
446 |
+
if wandb_log:
|
447 |
+
wandb_metrics = {
|
448 |
+
"iter": iter_num,
|
449 |
+
"train/loss": losses['train'],
|
450 |
+
"val/loss": losses['val'],
|
451 |
+
"lr": lr,
|
452 |
+
"mfu": running_mfu * 100,
|
453 |
+
}
|
454 |
+
for eval_dataset in eval_datasets:
|
455 |
+
wandb_metrics[f"{eval_dataset}/train_loss"] = losses[eval_dataset]['train']
|
456 |
+
wandb_metrics[f"{eval_dataset}/val_loss"] = losses[eval_dataset]['val']
|
457 |
+
wandb.log(wandb_metrics, step=iter_num)
|
458 |
+
if losses['val'] < best_val_loss or always_save_checkpoint:
|
459 |
+
best_val_loss = losses['val']
|
460 |
+
if iter_num > 0:
|
461 |
+
checkpoint = {
|
462 |
+
'model': raw_model.state_dict(),
|
463 |
+
'optimizer': optimizer.state_dict(),
|
464 |
+
'model_args': model_args,
|
465 |
+
'iter_num': iter_num,
|
466 |
+
'best_val_loss': best_val_loss,
|
467 |
+
'config': config,
|
468 |
+
'seed': seed,
|
469 |
+
'wandb_run_id': run_id
|
470 |
+
}
|
471 |
+
ckpt_path = os.path.join(out_dir, f"ckpt_{embedding_type}_{attention_type}.pt")
|
472 |
+
if master_process:
|
473 |
+
print(f"Saving checkpoint to {ckpt_path}")
|
474 |
+
torch.save(checkpoint, ckpt_path)
|
475 |
+
# Update progress bar postfix
|
476 |
+
if master_process:
|
477 |
+
postfix_dict = {
|
478 |
+
'train_loss': f"{losses['train']:.4f}",
|
479 |
+
'val_loss': f"{losses['val']:.4f}"
|
480 |
+
}
|
481 |
+
for eval_dataset in eval_datasets:
|
482 |
+
postfix_dict[f"{eval_dataset}_val_loss"] = f"{losses[eval_dataset]['val']:.4f}"
|
483 |
+
progress_bar.set_postfix(postfix_dict)
|
484 |
+
|
485 |
+
if eval_only:
|
486 |
+
break
|
487 |
+
|
488 |
+
# Forward backward update
|
489 |
+
for micro_step in range(gradient_accumulation_steps):
|
490 |
+
if ddp:
|
491 |
+
model.require_backward_grad_sync = (micro_step == gradient_accumulation_steps - 1)
|
492 |
+
with ctx:
|
493 |
+
logits, loss = model(X, Y)
|
494 |
+
loss = loss / gradient_accumulation_steps
|
495 |
+
X, Y = get_batch('train')
|
496 |
+
scaler.scale(loss).backward()
|
497 |
+
if grad_clip != 0.0:
|
498 |
+
scaler.unscale_(optimizer)
|
499 |
+
torch.nn.utils.clip_grad_norm_(model.parameters(), grad_clip)
|
500 |
+
scaler.step(optimizer)
|
501 |
+
scaler.update()
|
502 |
+
optimizer.zero_grad(set_to_none=True)
|
503 |
+
|
504 |
+
# Logging
|
505 |
+
t1 = time.time()
|
506 |
+
dt = t1 - t0
|
507 |
+
t0 = t1
|
508 |
+
if iter_num % log_interval == 0:
|
509 |
+
lossf = loss.item() * gradient_accumulation_steps
|
510 |
+
if local_iter_num >= 5:
|
511 |
+
mfu = raw_model.estimate_mfu(batch_size * gradient_accumulation_steps, dt)
|
512 |
+
running_mfu = mfu if running_mfu == -1.0 else 0.9 * running_mfu + 0.1 * mfu
|
513 |
+
if master_process:
|
514 |
+
progress_bar.set_postfix({
|
515 |
+
'loss': f"{lossf:.4f}",
|
516 |
+
'lr': f"{lr:.2e}",
|
517 |
+
'mfu': f"{running_mfu*100:.2f}%",
|
518 |
+
'time_per_iter_ms': f"{dt * 1000:.2f}ms",
|
519 |
+
})
|
520 |
+
if wandb_log:
|
521 |
+
wandb.log({
|
522 |
+
"iter": iter_num,
|
523 |
+
"train/loss": lossf,
|
524 |
+
"lr": lr,
|
525 |
+
"mfu": running_mfu * 100,
|
526 |
+
"time_per_iter_ms": dt * 1000,
|
527 |
+
}, step=iter_num)
|
528 |
+
iter_num += 1
|
529 |
+
local_iter_num += 1
|
530 |
+
if master_process:
|
531 |
+
progress_bar.update(progress_bar_update_freq)
|
532 |
+
# Termination conditions
|
533 |
+
if iter_num > max_iters:
|
534 |
+
break
|
535 |
+
|
536 |
+
if master_process:
|
537 |
+
progress_bar.close()
|
538 |
+
if wandb_log and master_process:
|
539 |
+
wandb.finish()
|
540 |
+
|
541 |
+
# Destroy the process group after all models have been trained
|
542 |
+
if ddp:
|
543 |
+
destroy_process_group()
|
544 |
+
|
545 |
+
if __name__ == '__main__':
|
546 |
+
main()
|
.launchpadlib/api.launchpad.net/cache/api.launchpad.net,devel,-application,json,fc4e1e3a03117146fb1e9d492ab76690
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
status: 200
|
2 |
+
date: Mon, 05 Feb 2024 23:25:35 GMT
|
3 |
+
server: Apache/2.4.41 (Ubuntu)
|
4 |
+
content-location: index.json
|
5 |
+
vary: negotiate,accept,Accept-Encoding
|
6 |
+
tcn: choice
|
7 |
+
last-modified: Wed, 31 Jan 2024 08:46:52 GMT
|
8 |
+
etag: "8fa-61039eb973700-gzip"
|
9 |
+
accept-ranges: bytes
|
10 |
+
content-type: application/json; qs=0.9
|
11 |
+
x-cache: MISS from juju-98d295-prod-launchpad-30
|
12 |
+
x-cache-lookup: MISS from juju-98d295-prod-launchpad-30:3128
|
13 |
+
via: 1.1 juju-98d295-prod-launchpad-30 (squid/4.10)
|
14 |
+
content-length: 2298
|
15 |
+
-content-encoding: gzip
|
16 |
+
-varied-accept: application/json
|
17 |
+
-varied-accept-encoding: gzip, deflate
|
18 |
+
|
19 |
+
{"resource_type_link": "https://api.launchpad.net/devel/#service-root", "temporary_blobs_collection_link": "https://api.launchpad.net/devel/temporary-blobs", "countries_collection_link": "https://api.launchpad.net/devel/+countries", "languages_collection_link": "https://api.launchpad.net/devel/+languages", "questions_collection_link": "https://api.launchpad.net/devel/questions", "specifications_collection_link": "https://api.launchpad.net/devel/", "bug_trackers_collection_link": "https://api.launchpad.net/devel/bugs/bugtrackers", "cves_collection_link": "https://api.launchpad.net/devel/bugs/cve", "bugs_collection_link": "https://api.launchpad.net/devel/bugs", "builders_collection_link": "https://api.launchpad.net/devel/builders", "processors_collection_link": "https://api.launchpad.net/devel/+processors", "charm_bases_collection_link": "https://api.launchpad.net/devel/+charm-bases", "charm_recipes_collection_link": "https://api.launchpad.net/devel/+charm-recipes", "branches_collection_link": "https://api.launchpad.net/devel/branches", "git_repositories_collection_link": "https://api.launchpad.net/devel/+git", "snap_bases_collection_link": "https://api.launchpad.net/devel/+snap-bases", "snaps_collection_link": "https://api.launchpad.net/devel/+snaps", "snappy_serieses_collection_link": "https://api.launchpad.net/devel/+snappy-series", "archives_collection_link": "https://api.launchpad.net/devel/archives", "livefses_collection_link": "https://api.launchpad.net/devel/livefses", "packagesets_collection_link": "https://api.launchpad.net/devel/package-sets", "translation_groups_collection_link": "https://api.launchpad.net/devel/+groups", "translation_import_queue_entries_collection_link": "https://api.launchpad.net/devel/+imports", "distributions_collection_link": "https://api.launchpad.net/devel/distros", "people_collection_link": "https://api.launchpad.net/devel/people", "polls_collection_link": "https://api.launchpad.net/devel/+polls", "projects_collection_link": "https://api.launchpad.net/devel/projects", "project_groups_collection_link": "https://api.launchpad.net/devel/projectgroups", "services_link": "https://api.launchpad.net/devel/services", "pillars_link": "https://api.launchpad.net/devel/pillars", "me_link": "https://api.launchpad.net/devel/people/+me"}
|