4799229696a145898acfae86a49f8b88b6858651674b0f1d8137083b7feba481
Browse files- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/INSTALLER +1 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/LICENSE +201 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/METADATA +293 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/RECORD +147 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/REQUESTED +0 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/WHEEL +5 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/entry_points.txt +6 -0
- lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/top_level.txt +1 -0
- lib/python3.11/site-packages/huggingface_hub/utils/_validators.py +230 -0
- lib/python3.11/site-packages/huggingface_hub/utils/endpoint_helpers.py +223 -0
- lib/python3.11/site-packages/huggingface_hub/utils/insecure_hashlib.py +34 -0
- lib/python3.11/site-packages/huggingface_hub/utils/logging.py +182 -0
- lib/python3.11/site-packages/huggingface_hub/utils/sha.py +28 -0
- lib/python3.11/site-packages/huggingface_hub/utils/tqdm.py +186 -0
- lib/python3.11/site-packages/idna-3.6.dist-info/INSTALLER +1 -0
- lib/python3.11/site-packages/idna-3.6.dist-info/LICENSE.md +31 -0
- lib/python3.11/site-packages/idna-3.6.dist-info/METADATA +243 -0
- lib/python3.11/site-packages/idna-3.6.dist-info/RECORD +22 -0
- lib/python3.11/site-packages/idna-3.6.dist-info/WHEEL +4 -0
- lib/python3.11/site-packages/idna/__init__.py +44 -0
- lib/python3.11/site-packages/idna/__pycache__/__init__.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/codec.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/compat.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/core.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/idnadata.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/intranges.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/package_data.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/__pycache__/uts46data.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/idna/codec.py +118 -0
- lib/python3.11/site-packages/idna/compat.py +13 -0
- lib/python3.11/site-packages/idna/core.py +400 -0
- lib/python3.11/site-packages/idna/idnadata.py +2150 -0
- lib/python3.11/site-packages/idna/intranges.py +54 -0
- lib/python3.11/site-packages/idna/package_data.py +2 -0
- lib/python3.11/site-packages/idna/py.typed +0 -0
- lib/python3.11/site-packages/idna/uts46data.py +0 -0
- lib/python3.11/site-packages/isympy.py +342 -0
- lib/python3.11/site-packages/jinja2/__init__.py +37 -0
- lib/python3.11/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/constants.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/debug.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/environment.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/ext.cpython-311.pyc +0 -0
- lib/python3.11/site-packages/jinja2/__pycache__/filters.cpython-311.pyc +0 -0
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/INSTALLER
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pip
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/LICENSE
ADDED
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Apache License
|
2 |
+
Version 2.0, January 2004
|
3 |
+
http://www.apache.org/licenses/
|
4 |
+
|
5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6 |
+
|
7 |
+
1. Definitions.
|
8 |
+
|
9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
11 |
+
|
12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13 |
+
the copyright owner that is granting the License.
|
14 |
+
|
15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
16 |
+
other entities that control, are controlled by, or are under common
|
17 |
+
control with that entity. For the purposes of this definition,
|
18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
19 |
+
direction or management of such entity, whether by contract or
|
20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22 |
+
|
23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24 |
+
exercising permissions granted by this License.
|
25 |
+
|
26 |
+
"Source" form shall mean the preferred form for making modifications,
|
27 |
+
including but not limited to software source code, documentation
|
28 |
+
source, and configuration files.
|
29 |
+
|
30 |
+
"Object" form shall mean any form resulting from mechanical
|
31 |
+
transformation or translation of a Source form, including but
|
32 |
+
not limited to compiled object code, generated documentation,
|
33 |
+
and conversions to other media types.
|
34 |
+
|
35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
36 |
+
Object form, made available under the License, as indicated by a
|
37 |
+
copyright notice that is included in or attached to the work
|
38 |
+
(an example is provided in the Appendix below).
|
39 |
+
|
40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41 |
+
form, that is based on (or derived from) the Work and for which the
|
42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
44 |
+
of this License, Derivative Works shall not include works that remain
|
45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46 |
+
the Work and Derivative Works thereof.
|
47 |
+
|
48 |
+
"Contribution" shall mean any work of authorship, including
|
49 |
+
the original version of the Work and any modifications or additions
|
50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
54 |
+
means any form of electronic, verbal, or written communication sent
|
55 |
+
to the Licensor or its representatives, including but not limited to
|
56 |
+
communication on electronic mailing lists, source code control systems,
|
57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
59 |
+
excluding communication that is conspicuously marked or otherwise
|
60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
61 |
+
|
62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
64 |
+
subsequently incorporated within the Work.
|
65 |
+
|
66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
71 |
+
Work and such Derivative Works in Source or Object form.
|
72 |
+
|
73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76 |
+
(except as stated in this section) patent license to make, have made,
|
77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78 |
+
where such license applies only to those patent claims licensable
|
79 |
+
by such Contributor that are necessarily infringed by their
|
80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
82 |
+
institute patent litigation against any entity (including a
|
83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84 |
+
or a Contribution incorporated within the Work constitutes direct
|
85 |
+
or contributory patent infringement, then any patent licenses
|
86 |
+
granted to You under this License for that Work shall terminate
|
87 |
+
as of the date such litigation is filed.
|
88 |
+
|
89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
90 |
+
Work or Derivative Works thereof in any medium, with or without
|
91 |
+
modifications, and in Source or Object form, provided that You
|
92 |
+
meet the following conditions:
|
93 |
+
|
94 |
+
(a) You must give any other recipients of the Work or
|
95 |
+
Derivative Works a copy of this License; and
|
96 |
+
|
97 |
+
(b) You must cause any modified files to carry prominent notices
|
98 |
+
stating that You changed the files; and
|
99 |
+
|
100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
101 |
+
that You distribute, all copyright, patent, trademark, and
|
102 |
+
attribution notices from the Source form of the Work,
|
103 |
+
excluding those notices that do not pertain to any part of
|
104 |
+
the Derivative Works; and
|
105 |
+
|
106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107 |
+
distribution, then any Derivative Works that You distribute must
|
108 |
+
include a readable copy of the attribution notices contained
|
109 |
+
within such NOTICE file, excluding those notices that do not
|
110 |
+
pertain to any part of the Derivative Works, in at least one
|
111 |
+
of the following places: within a NOTICE text file distributed
|
112 |
+
as part of the Derivative Works; within the Source form or
|
113 |
+
documentation, if provided along with the Derivative Works; or,
|
114 |
+
within a display generated by the Derivative Works, if and
|
115 |
+
wherever such third-party notices normally appear. The contents
|
116 |
+
of the NOTICE file are for informational purposes only and
|
117 |
+
do not modify the License. You may add Your own attribution
|
118 |
+
notices within Derivative Works that You distribute, alongside
|
119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
120 |
+
that such additional attribution notices cannot be construed
|
121 |
+
as modifying the License.
|
122 |
+
|
123 |
+
You may add Your own copyright statement to Your modifications and
|
124 |
+
may provide additional or different license terms and conditions
|
125 |
+
for use, reproduction, or distribution of Your modifications, or
|
126 |
+
for any such Derivative Works as a whole, provided Your use,
|
127 |
+
reproduction, and distribution of the Work otherwise complies with
|
128 |
+
the conditions stated in this License.
|
129 |
+
|
130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
132 |
+
by You to the Licensor shall be under the terms and conditions of
|
133 |
+
this License, without any additional terms or conditions.
|
134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135 |
+
the terms of any separate license agreement you may have executed
|
136 |
+
with Licensor regarding such Contributions.
|
137 |
+
|
138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
140 |
+
except as required for reasonable and customary use in describing the
|
141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
142 |
+
|
143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144 |
+
agreed to in writing, Licensor provides the Work (and each
|
145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147 |
+
implied, including, without limitation, any warranties or conditions
|
148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150 |
+
appropriateness of using or redistributing the Work and assume any
|
151 |
+
risks associated with Your exercise of permissions under this License.
|
152 |
+
|
153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
154 |
+
whether in tort (including negligence), contract, or otherwise,
|
155 |
+
unless required by applicable law (such as deliberate and grossly
|
156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157 |
+
liable to You for damages, including any direct, indirect, special,
|
158 |
+
incidental, or consequential damages of any character arising as a
|
159 |
+
result of this License or out of the use or inability to use the
|
160 |
+
Work (including but not limited to damages for loss of goodwill,
|
161 |
+
work stoppage, computer failure or malfunction, or any and all
|
162 |
+
other commercial damages or losses), even if such Contributor
|
163 |
+
has been advised of the possibility of such damages.
|
164 |
+
|
165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168 |
+
or other liability obligations and/or rights consistent with this
|
169 |
+
License. However, in accepting such obligations, You may act only
|
170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171 |
+
of any other Contributor, and only if You agree to indemnify,
|
172 |
+
defend, and hold each Contributor harmless for any liability
|
173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
174 |
+
of your accepting any such warranty or additional liability.
|
175 |
+
|
176 |
+
END OF TERMS AND CONDITIONS
|
177 |
+
|
178 |
+
APPENDIX: How to apply the Apache License to your work.
|
179 |
+
|
180 |
+
To apply the Apache License to your work, attach the following
|
181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
182 |
+
replaced with your own identifying information. (Don't include
|
183 |
+
the brackets!) The text should be enclosed in the appropriate
|
184 |
+
comment syntax for the file format. We also recommend that a
|
185 |
+
file or class name and description of purpose be included on the
|
186 |
+
same "printed page" as the copyright notice for easier
|
187 |
+
identification within third-party archives.
|
188 |
+
|
189 |
+
Copyright [yyyy] [name of copyright owner]
|
190 |
+
|
191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
192 |
+
you may not use this file except in compliance with the License.
|
193 |
+
You may obtain a copy of the License at
|
194 |
+
|
195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
196 |
+
|
197 |
+
Unless required by applicable law or agreed to in writing, software
|
198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200 |
+
See the License for the specific language governing permissions and
|
201 |
+
limitations under the License.
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/METADATA
ADDED
@@ -0,0 +1,293 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: huggingface-hub
|
3 |
+
Version: 0.20.2
|
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: requests
|
29 |
+
Requires-Dist: tqdm >=4.42.1
|
30 |
+
Requires-Dist: pyyaml >=5.1
|
31 |
+
Requires-Dist: typing-extensions >=3.7.4.3
|
32 |
+
Requires-Dist: packaging >=20.9
|
33 |
+
Provides-Extra: all
|
34 |
+
Requires-Dist: InquirerPy ==0.3.4 ; extra == 'all'
|
35 |
+
Requires-Dist: aiohttp ; extra == 'all'
|
36 |
+
Requires-Dist: jedi ; extra == 'all'
|
37 |
+
Requires-Dist: Jinja2 ; extra == 'all'
|
38 |
+
Requires-Dist: pytest ; extra == 'all'
|
39 |
+
Requires-Dist: pytest-cov ; extra == 'all'
|
40 |
+
Requires-Dist: pytest-env ; extra == 'all'
|
41 |
+
Requires-Dist: pytest-xdist ; extra == 'all'
|
42 |
+
Requires-Dist: pytest-vcr ; extra == 'all'
|
43 |
+
Requires-Dist: pytest-asyncio ; extra == 'all'
|
44 |
+
Requires-Dist: pytest-rerunfailures ; extra == 'all'
|
45 |
+
Requires-Dist: urllib3 <2.0 ; extra == 'all'
|
46 |
+
Requires-Dist: soundfile ; extra == 'all'
|
47 |
+
Requires-Dist: Pillow ; extra == 'all'
|
48 |
+
Requires-Dist: gradio ; extra == 'all'
|
49 |
+
Requires-Dist: numpy ; extra == 'all'
|
50 |
+
Requires-Dist: ruff >=0.1.3 ; extra == 'all'
|
51 |
+
Requires-Dist: mypy ==1.5.1 ; extra == 'all'
|
52 |
+
Requires-Dist: typing-extensions >=4.8.0 ; extra == 'all'
|
53 |
+
Requires-Dist: types-PyYAML ; extra == 'all'
|
54 |
+
Requires-Dist: types-requests ; extra == 'all'
|
55 |
+
Requires-Dist: types-simplejson ; extra == 'all'
|
56 |
+
Requires-Dist: types-toml ; extra == 'all'
|
57 |
+
Requires-Dist: types-tqdm ; extra == 'all'
|
58 |
+
Requires-Dist: types-urllib3 ; extra == 'all'
|
59 |
+
Requires-Dist: pydantic <2.0,>1.1 ; (python_version == "3.8") and extra == 'all'
|
60 |
+
Requires-Dist: pydantic <3.0,>1.1 ; (python_version > "3.8") and extra == 'all'
|
61 |
+
Provides-Extra: cli
|
62 |
+
Requires-Dist: InquirerPy ==0.3.4 ; extra == 'cli'
|
63 |
+
Provides-Extra: dev
|
64 |
+
Requires-Dist: InquirerPy ==0.3.4 ; extra == 'dev'
|
65 |
+
Requires-Dist: aiohttp ; extra == 'dev'
|
66 |
+
Requires-Dist: jedi ; extra == 'dev'
|
67 |
+
Requires-Dist: Jinja2 ; extra == 'dev'
|
68 |
+
Requires-Dist: pytest ; extra == 'dev'
|
69 |
+
Requires-Dist: pytest-cov ; extra == 'dev'
|
70 |
+
Requires-Dist: pytest-env ; extra == 'dev'
|
71 |
+
Requires-Dist: pytest-xdist ; extra == 'dev'
|
72 |
+
Requires-Dist: pytest-vcr ; extra == 'dev'
|
73 |
+
Requires-Dist: pytest-asyncio ; extra == 'dev'
|
74 |
+
Requires-Dist: pytest-rerunfailures ; extra == 'dev'
|
75 |
+
Requires-Dist: urllib3 <2.0 ; extra == 'dev'
|
76 |
+
Requires-Dist: soundfile ; extra == 'dev'
|
77 |
+
Requires-Dist: Pillow ; extra == 'dev'
|
78 |
+
Requires-Dist: gradio ; extra == 'dev'
|
79 |
+
Requires-Dist: numpy ; extra == 'dev'
|
80 |
+
Requires-Dist: ruff >=0.1.3 ; extra == 'dev'
|
81 |
+
Requires-Dist: mypy ==1.5.1 ; extra == 'dev'
|
82 |
+
Requires-Dist: typing-extensions >=4.8.0 ; extra == 'dev'
|
83 |
+
Requires-Dist: types-PyYAML ; extra == 'dev'
|
84 |
+
Requires-Dist: types-requests ; extra == 'dev'
|
85 |
+
Requires-Dist: types-simplejson ; extra == 'dev'
|
86 |
+
Requires-Dist: types-toml ; extra == 'dev'
|
87 |
+
Requires-Dist: types-tqdm ; extra == 'dev'
|
88 |
+
Requires-Dist: types-urllib3 ; extra == 'dev'
|
89 |
+
Requires-Dist: pydantic <2.0,>1.1 ; (python_version == "3.8") and extra == 'dev'
|
90 |
+
Requires-Dist: pydantic <3.0,>1.1 ; (python_version > "3.8") and extra == 'dev'
|
91 |
+
Provides-Extra: fastai
|
92 |
+
Requires-Dist: toml ; extra == 'fastai'
|
93 |
+
Requires-Dist: fastai >=2.4 ; extra == 'fastai'
|
94 |
+
Requires-Dist: fastcore >=1.3.27 ; extra == 'fastai'
|
95 |
+
Provides-Extra: inference
|
96 |
+
Requires-Dist: aiohttp ; extra == 'inference'
|
97 |
+
Requires-Dist: pydantic <2.0,>1.1 ; (python_version == "3.8") and extra == 'inference'
|
98 |
+
Requires-Dist: pydantic <3.0,>1.1 ; (python_version > "3.8") and extra == 'inference'
|
99 |
+
Provides-Extra: quality
|
100 |
+
Requires-Dist: ruff >=0.1.3 ; extra == 'quality'
|
101 |
+
Requires-Dist: mypy ==1.5.1 ; extra == 'quality'
|
102 |
+
Provides-Extra: tensorflow
|
103 |
+
Requires-Dist: tensorflow ; extra == 'tensorflow'
|
104 |
+
Requires-Dist: pydot ; extra == 'tensorflow'
|
105 |
+
Requires-Dist: graphviz ; extra == 'tensorflow'
|
106 |
+
Provides-Extra: testing
|
107 |
+
Requires-Dist: InquirerPy ==0.3.4 ; extra == 'testing'
|
108 |
+
Requires-Dist: aiohttp ; extra == 'testing'
|
109 |
+
Requires-Dist: jedi ; extra == 'testing'
|
110 |
+
Requires-Dist: Jinja2 ; extra == 'testing'
|
111 |
+
Requires-Dist: pytest ; extra == 'testing'
|
112 |
+
Requires-Dist: pytest-cov ; extra == 'testing'
|
113 |
+
Requires-Dist: pytest-env ; extra == 'testing'
|
114 |
+
Requires-Dist: pytest-xdist ; extra == 'testing'
|
115 |
+
Requires-Dist: pytest-vcr ; extra == 'testing'
|
116 |
+
Requires-Dist: pytest-asyncio ; extra == 'testing'
|
117 |
+
Requires-Dist: pytest-rerunfailures ; extra == 'testing'
|
118 |
+
Requires-Dist: urllib3 <2.0 ; extra == 'testing'
|
119 |
+
Requires-Dist: soundfile ; extra == 'testing'
|
120 |
+
Requires-Dist: Pillow ; extra == 'testing'
|
121 |
+
Requires-Dist: gradio ; extra == 'testing'
|
122 |
+
Requires-Dist: numpy ; extra == 'testing'
|
123 |
+
Requires-Dist: pydantic <2.0,>1.1 ; (python_version == "3.8") and extra == 'testing'
|
124 |
+
Requires-Dist: pydantic <3.0,>1.1 ; (python_version > "3.8") and extra == 'testing'
|
125 |
+
Provides-Extra: torch
|
126 |
+
Requires-Dist: torch ; extra == 'torch'
|
127 |
+
Provides-Extra: typing
|
128 |
+
Requires-Dist: typing-extensions >=4.8.0 ; extra == 'typing'
|
129 |
+
Requires-Dist: types-PyYAML ; extra == 'typing'
|
130 |
+
Requires-Dist: types-requests ; extra == 'typing'
|
131 |
+
Requires-Dist: types-simplejson ; extra == 'typing'
|
132 |
+
Requires-Dist: types-toml ; extra == 'typing'
|
133 |
+
Requires-Dist: types-tqdm ; extra == 'typing'
|
134 |
+
Requires-Dist: types-urllib3 ; extra == 'typing'
|
135 |
+
|
136 |
+
<p align="center">
|
137 |
+
<br/>
|
138 |
+
<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%;">
|
139 |
+
<br/>
|
140 |
+
</p>
|
141 |
+
|
142 |
+
<p align="center">
|
143 |
+
<i>The official Python client for the Huggingface Hub.</i>
|
144 |
+
</p>
|
145 |
+
|
146 |
+
<p align="center">
|
147 |
+
<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>
|
148 |
+
<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>
|
149 |
+
<a href="https://github.com/huggingface/huggingface_hub"><img alt="PyPi version" src="https://img.shields.io/pypi/pyversions/huggingface_hub.svg"></a>
|
150 |
+
<a href="https://pypi.org/project/huggingface-hub"><img alt="downloads" src="https://static.pepy.tech/badge/huggingface_hub/month"></a>
|
151 |
+
<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>
|
152 |
+
</p>
|
153 |
+
|
154 |
+
<h4 align="center">
|
155 |
+
<p>
|
156 |
+
<b>English</b> |
|
157 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_de.md">Deutsch</a> |
|
158 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_hi.md">हिंदी</a> |
|
159 |
+
<a href="https://github.com/huggingface/huggingface_hub/blob/main/README_ko.md">한국어</a>
|
160 |
+
<p>
|
161 |
+
</h4>
|
162 |
+
---
|
163 |
+
|
164 |
+
**Documentation**: <a href="https://hf.co/docs/huggingface_hub" target="_blank">https://hf.co/docs/huggingface_hub</a>
|
165 |
+
|
166 |
+
**Source Code**: <a href="https://github.com/huggingface/huggingface_hub" target="_blank">https://github.com/huggingface/huggingface_hub</a>
|
167 |
+
|
168 |
+
---
|
169 |
+
|
170 |
+
## Welcome to the huggingface_hub library
|
171 |
+
|
172 |
+
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.
|
173 |
+
|
174 |
+
## Key features
|
175 |
+
|
176 |
+
- [Download files](https://huggingface.co/docs/huggingface_hub/en/guides/download) from the Hub.
|
177 |
+
- [Upload files](https://huggingface.co/docs/huggingface_hub/en/guides/upload) to the Hub.
|
178 |
+
- [Manage your repositories](https://huggingface.co/docs/huggingface_hub/en/guides/repository).
|
179 |
+
- [Run Inference](https://huggingface.co/docs/huggingface_hub/en/guides/inference) on deployed models.
|
180 |
+
- [Search](https://huggingface.co/docs/huggingface_hub/en/guides/search) for models, datasets and Spaces.
|
181 |
+
- [Share Model Cards](https://huggingface.co/docs/huggingface_hub/en/guides/model-cards) to document your models.
|
182 |
+
- [Engage with the community](https://huggingface.co/docs/huggingface_hub/en/guides/community) through PRs and comments.
|
183 |
+
|
184 |
+
## Installation
|
185 |
+
|
186 |
+
Install the `huggingface_hub` package with [pip](https://pypi.org/project/huggingface-hub/):
|
187 |
+
|
188 |
+
```bash
|
189 |
+
pip install huggingface_hub
|
190 |
+
```
|
191 |
+
|
192 |
+
If you prefer, you can also install it with [conda](https://huggingface.co/docs/huggingface_hub/en/installation#install-with-conda).
|
193 |
+
|
194 |
+
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:
|
195 |
+
|
196 |
+
```bash
|
197 |
+
pip install huggingface_hub[inference]
|
198 |
+
```
|
199 |
+
|
200 |
+
To learn more installation and optional dependencies, check out the [installation guide](https://huggingface.co/docs/huggingface_hub/en/installation).
|
201 |
+
|
202 |
+
## Quick start
|
203 |
+
|
204 |
+
### Download files
|
205 |
+
|
206 |
+
Download a single file
|
207 |
+
|
208 |
+
```py
|
209 |
+
from huggingface_hub import hf_hub_download
|
210 |
+
|
211 |
+
hf_hub_download(repo_id="tiiuae/falcon-7b-instruct", filename="config.json")
|
212 |
+
```
|
213 |
+
|
214 |
+
Or an entire repository
|
215 |
+
|
216 |
+
```py
|
217 |
+
from huggingface_hub import snapshot_download
|
218 |
+
|
219 |
+
snapshot_download("stabilityai/stable-diffusion-2-1")
|
220 |
+
```
|
221 |
+
|
222 |
+
Files will be downloaded in a local cache folder. More details in [this guide](https://huggingface.co/docs/huggingface_hub/en/guides/manage-cache).
|
223 |
+
|
224 |
+
### Login
|
225 |
+
|
226 |
+
The Hugging Face Hub uses tokens to authenticate applications (see [docs](https://huggingface.co/docs/hub/security-tokens)). To login your machine, run the following CLI:
|
227 |
+
|
228 |
+
```bash
|
229 |
+
huggingface-cli login
|
230 |
+
# or using an environment variable
|
231 |
+
huggingface-cli login --token $HUGGINGFACE_TOKEN
|
232 |
+
```
|
233 |
+
|
234 |
+
### Create a repository
|
235 |
+
|
236 |
+
```py
|
237 |
+
from huggingface_hub import create_repo
|
238 |
+
|
239 |
+
create_repo(repo_id="super-cool-model")
|
240 |
+
```
|
241 |
+
|
242 |
+
### Upload files
|
243 |
+
|
244 |
+
Upload a single file
|
245 |
+
|
246 |
+
```py
|
247 |
+
from huggingface_hub import upload_file
|
248 |
+
|
249 |
+
upload_file(
|
250 |
+
path_or_fileobj="/home/lysandre/dummy-test/README.md",
|
251 |
+
path_in_repo="README.md",
|
252 |
+
repo_id="lysandre/test-model",
|
253 |
+
)
|
254 |
+
```
|
255 |
+
|
256 |
+
Or an entire folder
|
257 |
+
|
258 |
+
```py
|
259 |
+
from huggingface_hub import upload_folder
|
260 |
+
|
261 |
+
upload_folder(
|
262 |
+
folder_path="/path/to/local/space",
|
263 |
+
repo_id="username/my-cool-space",
|
264 |
+
repo_type="space",
|
265 |
+
)
|
266 |
+
```
|
267 |
+
|
268 |
+
For details in the [upload guide](https://huggingface.co/docs/huggingface_hub/en/guides/upload).
|
269 |
+
|
270 |
+
## Integrating to the Hub.
|
271 |
+
|
272 |
+
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).
|
273 |
+
|
274 |
+
The advantages are:
|
275 |
+
|
276 |
+
- Free model or dataset hosting for libraries and their users.
|
277 |
+
- Built-in file versioning, even with very large files, thanks to a git-based approach.
|
278 |
+
- Hosted inference API for all models publicly available.
|
279 |
+
- In-browser widgets to play with the uploaded models.
|
280 |
+
- Anyone can upload a new model for your library, they just need to add the corresponding tag for the model to be discoverable.
|
281 |
+
- Fast downloads! We use Cloudfront (a CDN) to geo-replicate downloads so they're blazing fast from anywhere on the globe.
|
282 |
+
- Usage stats and more features to come.
|
283 |
+
|
284 |
+
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.
|
285 |
+
|
286 |
+
## Contributions (feature requests, bugs, etc.) are super welcome 💙💚💛💜🧡❤️
|
287 |
+
|
288 |
+
Everyone is welcome to contribute, and we value everybody's contribution. Code is not the only way to help the community.
|
289 |
+
Answering questions, helping others, reaching out and improving the documentations are immensely valuable to the community.
|
290 |
+
We wrote a [contribution guide](https://github.com/huggingface/huggingface_hub/blob/main/CONTRIBUTING.md) to summarize
|
291 |
+
how to get started to contribute to this repository.
|
292 |
+
|
293 |
+
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/RECORD
ADDED
@@ -0,0 +1,147 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
../../../bin/huggingface-cli,sha256=42ZeW_3Nn1vHZKQItmZ_VOOsdDLj25vF8xg4DWUhluQ,302
|
2 |
+
huggingface_hub-0.20.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
3 |
+
huggingface_hub-0.20.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
4 |
+
huggingface_hub-0.20.2.dist-info/METADATA,sha256=D1vK91f8NEHzMiWLSl7_TQs6rZ6cr0E4ecRkkFB0lMM,12930
|
5 |
+
huggingface_hub-0.20.2.dist-info/RECORD,,
|
6 |
+
huggingface_hub-0.20.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7 |
+
huggingface_hub-0.20.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
8 |
+
huggingface_hub-0.20.2.dist-info/entry_points.txt,sha256=Y3Z2L02rBG7va_iE6RPXolIgwOdwUFONyRN3kXMxZ0g,131
|
9 |
+
huggingface_hub-0.20.2.dist-info/top_level.txt,sha256=8KzlQJAY4miUvjAssOAJodqKOw3harNzuiwGQ9qLSSk,16
|
10 |
+
huggingface_hub/__init__.py,sha256=ixK6-0G7PFdH1mCZ9c5g8ZuYHsxSpVo8TTuA7O0mun8,20809
|
11 |
+
huggingface_hub/__pycache__/__init__.cpython-311.pyc,,
|
12 |
+
huggingface_hub/__pycache__/_commit_api.cpython-311.pyc,,
|
13 |
+
huggingface_hub/__pycache__/_commit_scheduler.cpython-311.pyc,,
|
14 |
+
huggingface_hub/__pycache__/_inference_endpoints.cpython-311.pyc,,
|
15 |
+
huggingface_hub/__pycache__/_login.cpython-311.pyc,,
|
16 |
+
huggingface_hub/__pycache__/_multi_commits.cpython-311.pyc,,
|
17 |
+
huggingface_hub/__pycache__/_snapshot_download.cpython-311.pyc,,
|
18 |
+
huggingface_hub/__pycache__/_space_api.cpython-311.pyc,,
|
19 |
+
huggingface_hub/__pycache__/_tensorboard_logger.cpython-311.pyc,,
|
20 |
+
huggingface_hub/__pycache__/_webhooks_payload.cpython-311.pyc,,
|
21 |
+
huggingface_hub/__pycache__/_webhooks_server.cpython-311.pyc,,
|
22 |
+
huggingface_hub/__pycache__/community.cpython-311.pyc,,
|
23 |
+
huggingface_hub/__pycache__/constants.cpython-311.pyc,,
|
24 |
+
huggingface_hub/__pycache__/fastai_utils.cpython-311.pyc,,
|
25 |
+
huggingface_hub/__pycache__/file_download.cpython-311.pyc,,
|
26 |
+
huggingface_hub/__pycache__/hf_api.cpython-311.pyc,,
|
27 |
+
huggingface_hub/__pycache__/hf_file_system.cpython-311.pyc,,
|
28 |
+
huggingface_hub/__pycache__/hub_mixin.cpython-311.pyc,,
|
29 |
+
huggingface_hub/__pycache__/inference_api.cpython-311.pyc,,
|
30 |
+
huggingface_hub/__pycache__/keras_mixin.cpython-311.pyc,,
|
31 |
+
huggingface_hub/__pycache__/lfs.cpython-311.pyc,,
|
32 |
+
huggingface_hub/__pycache__/repocard.cpython-311.pyc,,
|
33 |
+
huggingface_hub/__pycache__/repocard_data.cpython-311.pyc,,
|
34 |
+
huggingface_hub/__pycache__/repository.cpython-311.pyc,,
|
35 |
+
huggingface_hub/_commit_api.py,sha256=LWwx0PmTHzh-gwO6-cl0GWTrSnzCy8tfZ8DDCxnfb7Y,27795
|
36 |
+
huggingface_hub/_commit_scheduler.py,sha256=FgfjYv3E0oK3iBxDdy45Y7t78FWkmjnBR4dRd5aZviU,13653
|
37 |
+
huggingface_hub/_inference_endpoints.py,sha256=FW36nfm9UNNnc6L6hyL2KLiItglPGcQuYJ6DA2w4Gp4,14929
|
38 |
+
huggingface_hub/_login.py,sha256=8Y_OlSayd185u5lInGvY4zeYzBKaaaMBwTJl7MhIgSE,15325
|
39 |
+
huggingface_hub/_multi_commits.py,sha256=xEiS4N8ZmIrrDxVGS93mA33VoVrbhlAp5T8M_XQTMiA,12518
|
40 |
+
huggingface_hub/_snapshot_download.py,sha256=-0Kpp1gG1m2Slkbyj4GhvdOZeqzDTChqMQ1TGFHNjnA,15377
|
41 |
+
huggingface_hub/_space_api.py,sha256=Kr1rRpbMVoUs51U52KFY_FQcMA9TEC7RDCKGB4nzGus,5116
|
42 |
+
huggingface_hub/_tensorboard_logger.py,sha256=3W8eUS3jhZ3WyVG9Hi6rVwZC-jcCyRunBns5vIniGfA,7165
|
43 |
+
huggingface_hub/_webhooks_payload.py,sha256=raqcWHIw98bsFvam5kkqiSEbDA8W0TU055ZlpmbUrWs,2831
|
44 |
+
huggingface_hub/_webhooks_server.py,sha256=u3Kua_O4okXPgnH60GDIhJTDEEyIiVX6Go4CUNX4ifE,15196
|
45 |
+
huggingface_hub/commands/__init__.py,sha256=AkbM2a-iGh0Vq_xAWhK3mu3uZ44km8-X5uWjKcvcrUQ,928
|
46 |
+
huggingface_hub/commands/__pycache__/__init__.cpython-311.pyc,,
|
47 |
+
huggingface_hub/commands/__pycache__/_cli_utils.cpython-311.pyc,,
|
48 |
+
huggingface_hub/commands/__pycache__/delete_cache.cpython-311.pyc,,
|
49 |
+
huggingface_hub/commands/__pycache__/download.cpython-311.pyc,,
|
50 |
+
huggingface_hub/commands/__pycache__/env.cpython-311.pyc,,
|
51 |
+
huggingface_hub/commands/__pycache__/huggingface_cli.cpython-311.pyc,,
|
52 |
+
huggingface_hub/commands/__pycache__/lfs.cpython-311.pyc,,
|
53 |
+
huggingface_hub/commands/__pycache__/scan_cache.cpython-311.pyc,,
|
54 |
+
huggingface_hub/commands/__pycache__/upload.cpython-311.pyc,,
|
55 |
+
huggingface_hub/commands/__pycache__/user.cpython-311.pyc,,
|
56 |
+
huggingface_hub/commands/_cli_utils.py,sha256=VA_3cHzIlsEQmKPnfNTgJNI36UtcrxRmfB44RdbP1LA,1970
|
57 |
+
huggingface_hub/commands/delete_cache.py,sha256=9Nn2ihdORPpkULkhAzju6aYar2rsa4laSE38rt8645I,16130
|
58 |
+
huggingface_hub/commands/download.py,sha256=sthMmLQD3E0uybAlGoYt1Mpk_8w7r_im7FyDGJrZWyo,9161
|
59 |
+
huggingface_hub/commands/env.py,sha256=LJjOxo-m0DrvQdyhWGjnLGtWt91ec63BMI4FQ-5bWXQ,1225
|
60 |
+
huggingface_hub/commands/huggingface_cli.py,sha256=o862C98OcZoyqCzY7mNpia1h0KaLJUgSb0y10ot8sxA,1924
|
61 |
+
huggingface_hub/commands/lfs.py,sha256=6E769AoRxUDiIOapn1_QvTbNtdUnUiouu2F4Gopp4do,7318
|
62 |
+
huggingface_hub/commands/scan_cache.py,sha256=nMEJxBScezxs00EWyAvJtWCjhwxCL1YlBE6qNfiT3RY,5182
|
63 |
+
huggingface_hub/commands/upload.py,sha256=vrac37T3sYwzaf6gpVR5qWzwh4fOhqakRvDUrLEx4Kg,13621
|
64 |
+
huggingface_hub/commands/user.py,sha256=QApZJOCQEHADhjunM3hlQ72uqHsearCiCE4SdpzGdcc,6893
|
65 |
+
huggingface_hub/community.py,sha256=SHc_LOZYSzCuk5aA73InLObrrnW-0MJuv2e63FXwg50,12202
|
66 |
+
huggingface_hub/constants.py,sha256=fYBWYCLnyFOOldgN6a8E8PLmDVuGNdnKhfm5Qu8SLfE,7717
|
67 |
+
huggingface_hub/fastai_utils.py,sha256=5I7zAfgHJU_mZnxnf9wgWTHrCRu_EAV8VTangDVfE_o,16676
|
68 |
+
huggingface_hub/file_download.py,sha256=g97wMUn2yYAG8Xm8ZJevkqZSUyrQO_7-l18E6f_b_DE,75284
|
69 |
+
huggingface_hub/hf_api.py,sha256=NDG8cEpM_3Z2DddirrNbCELY9sQxDiamgOajO6sUBck,356971
|
70 |
+
huggingface_hub/hf_file_system.py,sha256=tTVDwh_60rpH_Iqvrf6mo_Z0ZhcY_4mHjxs1sQ6snrE,29535
|
71 |
+
huggingface_hub/hub_mixin.py,sha256=yoOrifi6Vq7N8L_DjXYtltvdURrfbx1XEyt59wyAaXs,16099
|
72 |
+
huggingface_hub/inference/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73 |
+
huggingface_hub/inference/__pycache__/__init__.cpython-311.pyc,,
|
74 |
+
huggingface_hub/inference/__pycache__/_client.cpython-311.pyc,,
|
75 |
+
huggingface_hub/inference/__pycache__/_common.cpython-311.pyc,,
|
76 |
+
huggingface_hub/inference/__pycache__/_text_generation.cpython-311.pyc,,
|
77 |
+
huggingface_hub/inference/__pycache__/_types.cpython-311.pyc,,
|
78 |
+
huggingface_hub/inference/_client.py,sha256=hhJSPBmDw5dVw1LoH2255-pX4uwMo8vHSkrhB_m54xY,86559
|
79 |
+
huggingface_hub/inference/_common.py,sha256=8GaagYW1hoSWjilWgMdbpJU4sK78l1RPKPBsvGHpXGU,11331
|
80 |
+
huggingface_hub/inference/_generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81 |
+
huggingface_hub/inference/_generated/__pycache__/__init__.cpython-311.pyc,,
|
82 |
+
huggingface_hub/inference/_generated/__pycache__/_async_client.cpython-311.pyc,,
|
83 |
+
huggingface_hub/inference/_generated/_async_client.py,sha256=v6CRLNY2GJz1TCzlPQVvphmeJL_OZ6yfupG2fF_WmJg,89343
|
84 |
+
huggingface_hub/inference/_text_generation.py,sha256=VGZ7bulJmUc2iXKDAr1zaArC3vgAktkfSdWWp9HzIR4,20349
|
85 |
+
huggingface_hub/inference/_types.py,sha256=fRrORbJbZqCxZVQG4HK4Zx4xHwPej-Hppz_cb1wJ1I0,5664
|
86 |
+
huggingface_hub/inference_api.py,sha256=UXOKu_Ez2I3hDsjguqCcCrj03WFDndehpngYiIAucdg,8331
|
87 |
+
huggingface_hub/keras_mixin.py,sha256=fxVjwm742fwsLwbuNVt7Slo3KAjEX7sCcTudKnolPZM,18741
|
88 |
+
huggingface_hub/lfs.py,sha256=CnXzAoDyGDSsNDN4b88-7hXhx1BFSsbFY6vGc3O2lRs,19122
|
89 |
+
huggingface_hub/repocard.py,sha256=kJGupeVIE2eQqo4sOGrUWRf6vOdkKdQtryMdZKNxqoc,34257
|
90 |
+
huggingface_hub/repocard_data.py,sha256=ESn22o1V5ynxwQp0JSxUSzSuWE9J0KBzj9FOEITNPCo,31077
|
91 |
+
huggingface_hub/repository.py,sha256=8oNhKNvJRye3dr67cTn8faKkBSiWFgvj7bIBlOpI-8U,54489
|
92 |
+
huggingface_hub/templates/datasetcard_template.md,sha256=tWvaTQhO3WkU9Igi8Odwb44my9oYKAakb2ArfnTn1AU,5502
|
93 |
+
huggingface_hub/templates/modelcard_template.md,sha256=-z_riTFlcsX5pUja2FDd9ySGOkNy8vr6hroLct1hjJI,6874
|
94 |
+
huggingface_hub/utils/__init__.py,sha256=1msx7YIf9N22P92k3rcpZel2zvLqs-TsAxylD9WDavo,3239
|
95 |
+
huggingface_hub/utils/__pycache__/__init__.cpython-311.pyc,,
|
96 |
+
huggingface_hub/utils/__pycache__/_cache_assets.cpython-311.pyc,,
|
97 |
+
huggingface_hub/utils/__pycache__/_cache_manager.cpython-311.pyc,,
|
98 |
+
huggingface_hub/utils/__pycache__/_chunk_utils.cpython-311.pyc,,
|
99 |
+
huggingface_hub/utils/__pycache__/_datetime.cpython-311.pyc,,
|
100 |
+
huggingface_hub/utils/__pycache__/_deprecation.cpython-311.pyc,,
|
101 |
+
huggingface_hub/utils/__pycache__/_errors.cpython-311.pyc,,
|
102 |
+
huggingface_hub/utils/__pycache__/_experimental.cpython-311.pyc,,
|
103 |
+
huggingface_hub/utils/__pycache__/_fixes.cpython-311.pyc,,
|
104 |
+
huggingface_hub/utils/__pycache__/_git_credential.cpython-311.pyc,,
|
105 |
+
huggingface_hub/utils/__pycache__/_headers.cpython-311.pyc,,
|
106 |
+
huggingface_hub/utils/__pycache__/_hf_folder.cpython-311.pyc,,
|
107 |
+
huggingface_hub/utils/__pycache__/_http.cpython-311.pyc,,
|
108 |
+
huggingface_hub/utils/__pycache__/_pagination.cpython-311.pyc,,
|
109 |
+
huggingface_hub/utils/__pycache__/_paths.cpython-311.pyc,,
|
110 |
+
huggingface_hub/utils/__pycache__/_runtime.cpython-311.pyc,,
|
111 |
+
huggingface_hub/utils/__pycache__/_safetensors.cpython-311.pyc,,
|
112 |
+
huggingface_hub/utils/__pycache__/_subprocess.cpython-311.pyc,,
|
113 |
+
huggingface_hub/utils/__pycache__/_telemetry.cpython-311.pyc,,
|
114 |
+
huggingface_hub/utils/__pycache__/_token.cpython-311.pyc,,
|
115 |
+
huggingface_hub/utils/__pycache__/_typing.cpython-311.pyc,,
|
116 |
+
huggingface_hub/utils/__pycache__/_validators.cpython-311.pyc,,
|
117 |
+
huggingface_hub/utils/__pycache__/endpoint_helpers.cpython-311.pyc,,
|
118 |
+
huggingface_hub/utils/__pycache__/insecure_hashlib.cpython-311.pyc,,
|
119 |
+
huggingface_hub/utils/__pycache__/logging.cpython-311.pyc,,
|
120 |
+
huggingface_hub/utils/__pycache__/sha.cpython-311.pyc,,
|
121 |
+
huggingface_hub/utils/__pycache__/tqdm.cpython-311.pyc,,
|
122 |
+
huggingface_hub/utils/_cache_assets.py,sha256=kai77HPQMfYpROouMBQCr_gdBCaeTm996Sqj0dExbNg,5728
|
123 |
+
huggingface_hub/utils/_cache_manager.py,sha256=zRBo37DaHS6IDWyQ_53oCL4-U6p--inAGsC8DLtAQ_I,29103
|
124 |
+
huggingface_hub/utils/_chunk_utils.py,sha256=6VRyjiGr2bPupPl1azSUTxKuJ51wdgELipwJ2YRfH5U,2129
|
125 |
+
huggingface_hub/utils/_datetime.py,sha256=7pwXpJy2J4mNb4PwNxilYynvhPWMYX261pHiNbfUSEg,2918
|
126 |
+
huggingface_hub/utils/_deprecation.py,sha256=HZhRGGUX_QMKBBBwHHlffLtmCSK01TOpeXHefZbPfwI,4872
|
127 |
+
huggingface_hub/utils/_errors.py,sha256=nnvanhnSqX9nQ2LvOxNI38W5mYLYVYEQLhRr89LpQzc,13697
|
128 |
+
huggingface_hub/utils/_experimental.py,sha256=rBx4gV2NU1dT_OfeRzsCmCWyIF4Wxcf0PdkmIASoT6o,2394
|
129 |
+
huggingface_hub/utils/_fixes.py,sha256=wFvfTYj62Il2OwkQB_Qp0xONG6SARQ5oEkT3_FhB4rc,2437
|
130 |
+
huggingface_hub/utils/_git_credential.py,sha256=NMfMmuqdub_QX3T2d32Jhpf3RBnf2eh4VnDhHoqyZRA,4595
|
131 |
+
huggingface_hub/utils/_headers.py,sha256=wz0kPrpu9PHpeCIJAq8MBiHuR2HbNWGukd0QgWS6lWo,9344
|
132 |
+
huggingface_hub/utils/_hf_folder.py,sha256=9FlyCbiMP-PuyR4MP8sh5wiYbphkCjP18sCma0P7XDw,4488
|
133 |
+
huggingface_hub/utils/_http.py,sha256=qJ9wlsv-SU9L4Epr8FLHznY3COIcOrUUmGMjJXfrQvI,12889
|
134 |
+
huggingface_hub/utils/_pagination.py,sha256=VfpmMLyNCRo24fw0o_yWysMK69d9M6sSg2-nWtuypO4,1840
|
135 |
+
huggingface_hub/utils/_paths.py,sha256=nUaxXN-R2EcWfHE8ivFWfHqEKMIvXEdUeCGDC_QHMqc,4397
|
136 |
+
huggingface_hub/utils/_runtime.py,sha256=6sMMfwixkJAJj7pqYAva9A1g3-MBNWenKtlvBB985aY,10186
|
137 |
+
huggingface_hub/utils/_safetensors.py,sha256=EE9v9HflWBUqIegn0dCGHgNu9G9Db3v2aszvG4ldPF8,4876
|
138 |
+
huggingface_hub/utils/_subprocess.py,sha256=LW9b8TWh9rsm3pW9_5b-mVV_AtYNyLXgC6e09SthkWI,4616
|
139 |
+
huggingface_hub/utils/_telemetry.py,sha256=jHAdgWNcL9nVvMT3ec3i78O-cwL09GnlifuokzpQjMI,4641
|
140 |
+
huggingface_hub/utils/_token.py,sha256=e3GGABkd6zPYLE4-RdUxnH6vyen4vsvNxEl2PgStiTA,5475
|
141 |
+
huggingface_hub/utils/_typing.py,sha256=zTA0nTJAILGveXbJKyeh6u9uIagrFgPoRqr-uCEGDQI,921
|
142 |
+
huggingface_hub/utils/_validators.py,sha256=3ZmHubjslDRwFYe1oKyaUw6DZrc3DsuV2gABPrx7PTw,9358
|
143 |
+
huggingface_hub/utils/endpoint_helpers.py,sha256=reLS2ic6_BTe9RuZY5WLcd5dLjIWt5Klh5EHZ7XvHng,8533
|
144 |
+
huggingface_hub/utils/insecure_hashlib.py,sha256=OjxlvtSQHpbLp9PWSrXBDJ0wHjxCBU-SQJgucEEXDbU,1058
|
145 |
+
huggingface_hub/utils/logging.py,sha256=mARNwc5gY6apMQ9IM5zymn-RsYnFbYW3b0HDMYXmBS0,4729
|
146 |
+
huggingface_hub/utils/sha.py,sha256=IVi7CfBthfu-ExLduY_CQltTy-tVGTbrvURCTOWKcLA,901
|
147 |
+
huggingface_hub/utils/tqdm.py,sha256=zBWgoxxwHooOceABVREVqSNpJGcMpaByKFVDU8VbuUQ,6334
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/REQUESTED
ADDED
File without changes
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/WHEEL
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Wheel-Version: 1.0
|
2 |
+
Generator: bdist_wheel (0.42.0)
|
3 |
+
Root-Is-Purelib: true
|
4 |
+
Tag: py3-none-any
|
5 |
+
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/entry_points.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[console_scripts]
|
2 |
+
huggingface-cli = huggingface_hub.commands.huggingface_cli:main
|
3 |
+
|
4 |
+
[fsspec.specs]
|
5 |
+
hf=huggingface_hub.HfFileSystem
|
6 |
+
|
lib/python3.11/site-packages/huggingface_hub-0.20.2.dist-info/top_level.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
huggingface_hub
|
lib/python3.11/site-packages/huggingface_hub/utils/_validators.py
ADDED
@@ -0,0 +1,230 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# coding=utf-8
|
2 |
+
# Copyright 2022-present, the HuggingFace Inc. team.
|
3 |
+
#
|
4 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5 |
+
# you may not use this file except in compliance with the License.
|
6 |
+
# You may obtain a copy of the License at
|
7 |
+
#
|
8 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
#
|
10 |
+
# Unless required by applicable law or agreed to in writing, software
|
11 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13 |
+
# See the License for the specific language governing permissions and
|
14 |
+
# limitations under the License.
|
15 |
+
"""Contains utilities to validate argument values in `huggingface_hub`."""
|
16 |
+
import inspect
|
17 |
+
import re
|
18 |
+
import warnings
|
19 |
+
from functools import wraps
|
20 |
+
from itertools import chain
|
21 |
+
from typing import Any, Dict
|
22 |
+
|
23 |
+
from ._typing import CallableT
|
24 |
+
|
25 |
+
|
26 |
+
REPO_ID_REGEX = re.compile(
|
27 |
+
r"""
|
28 |
+
^
|
29 |
+
(\b[\w\-.]+\b/)? # optional namespace (username or organization)
|
30 |
+
\b # starts with a word boundary
|
31 |
+
[\w\-.]{1,96} # repo_name: alphanumeric + . _ -
|
32 |
+
\b # ends with a word boundary
|
33 |
+
$
|
34 |
+
""",
|
35 |
+
flags=re.VERBOSE,
|
36 |
+
)
|
37 |
+
|
38 |
+
|
39 |
+
class HFValidationError(ValueError):
|
40 |
+
"""Generic exception thrown by `huggingface_hub` validators.
|
41 |
+
|
42 |
+
Inherits from [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError).
|
43 |
+
"""
|
44 |
+
|
45 |
+
|
46 |
+
def validate_hf_hub_args(fn: CallableT) -> CallableT:
|
47 |
+
"""Validate values received as argument for any public method of `huggingface_hub`.
|
48 |
+
|
49 |
+
The goal of this decorator is to harmonize validation of arguments reused
|
50 |
+
everywhere. By default, all defined validators are tested.
|
51 |
+
|
52 |
+
Validators:
|
53 |
+
- [`~utils.validate_repo_id`]: `repo_id` must be `"repo_name"`
|
54 |
+
or `"namespace/repo_name"`. Namespace is a username or an organization.
|
55 |
+
- [`~utils.smoothly_deprecate_use_auth_token`]: Use `token` instead of
|
56 |
+
`use_auth_token` (only if `use_auth_token` is not expected by the decorated
|
57 |
+
function - in practice, always the case in `huggingface_hub`).
|
58 |
+
|
59 |
+
Example:
|
60 |
+
```py
|
61 |
+
>>> from huggingface_hub.utils import validate_hf_hub_args
|
62 |
+
|
63 |
+
>>> @validate_hf_hub_args
|
64 |
+
... def my_cool_method(repo_id: str):
|
65 |
+
... print(repo_id)
|
66 |
+
|
67 |
+
>>> my_cool_method(repo_id="valid_repo_id")
|
68 |
+
valid_repo_id
|
69 |
+
|
70 |
+
>>> my_cool_method("other..repo..id")
|
71 |
+
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.
|
72 |
+
|
73 |
+
>>> my_cool_method(repo_id="other..repo..id")
|
74 |
+
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.
|
75 |
+
|
76 |
+
>>> @validate_hf_hub_args
|
77 |
+
... def my_cool_auth_method(token: str):
|
78 |
+
... print(token)
|
79 |
+
|
80 |
+
>>> my_cool_auth_method(token="a token")
|
81 |
+
"a token"
|
82 |
+
|
83 |
+
>>> my_cool_auth_method(use_auth_token="a use_auth_token")
|
84 |
+
"a use_auth_token"
|
85 |
+
|
86 |
+
>>> my_cool_auth_method(token="a token", use_auth_token="a use_auth_token")
|
87 |
+
UserWarning: Both `token` and `use_auth_token` are passed (...)
|
88 |
+
"a token"
|
89 |
+
```
|
90 |
+
|
91 |
+
Raises:
|
92 |
+
[`~utils.HFValidationError`]:
|
93 |
+
If an input is not valid.
|
94 |
+
"""
|
95 |
+
# TODO: add an argument to opt-out validation for specific argument?
|
96 |
+
signature = inspect.signature(fn)
|
97 |
+
|
98 |
+
# Should the validator switch `use_auth_token` values to `token`? In practice, always
|
99 |
+
# True in `huggingface_hub`. Might not be the case in a downstream library.
|
100 |
+
check_use_auth_token = "use_auth_token" not in signature.parameters and "token" in signature.parameters
|
101 |
+
|
102 |
+
@wraps(fn)
|
103 |
+
def _inner_fn(*args, **kwargs):
|
104 |
+
has_token = False
|
105 |
+
for arg_name, arg_value in chain(
|
106 |
+
zip(signature.parameters, args), # Args values
|
107 |
+
kwargs.items(), # Kwargs values
|
108 |
+
):
|
109 |
+
if arg_name in ["repo_id", "from_id", "to_id"]:
|
110 |
+
validate_repo_id(arg_value)
|
111 |
+
|
112 |
+
elif arg_name == "token" and arg_value is not None:
|
113 |
+
has_token = True
|
114 |
+
|
115 |
+
if check_use_auth_token:
|
116 |
+
kwargs = smoothly_deprecate_use_auth_token(fn_name=fn.__name__, has_token=has_token, kwargs=kwargs)
|
117 |
+
|
118 |
+
return fn(*args, **kwargs)
|
119 |
+
|
120 |
+
return _inner_fn # type: ignore
|
121 |
+
|
122 |
+
|
123 |
+
def validate_repo_id(repo_id: str) -> None:
|
124 |
+
"""Validate `repo_id` is valid.
|
125 |
+
|
126 |
+
This is not meant to replace the proper validation made on the Hub but rather to
|
127 |
+
avoid local inconsistencies whenever possible (example: passing `repo_type` in the
|
128 |
+
`repo_id` is forbidden).
|
129 |
+
|
130 |
+
Rules:
|
131 |
+
- Between 1 and 96 characters.
|
132 |
+
- Either "repo_name" or "namespace/repo_name"
|
133 |
+
- [a-zA-Z0-9] or "-", "_", "."
|
134 |
+
- "--" and ".." are forbidden
|
135 |
+
|
136 |
+
Valid: `"foo"`, `"foo/bar"`, `"123"`, `"Foo-BAR_foo.bar123"`
|
137 |
+
|
138 |
+
Not valid: `"datasets/foo/bar"`, `".repo_id"`, `"foo--bar"`, `"foo.git"`
|
139 |
+
|
140 |
+
Example:
|
141 |
+
```py
|
142 |
+
>>> from huggingface_hub.utils import validate_repo_id
|
143 |
+
>>> validate_repo_id(repo_id="valid_repo_id")
|
144 |
+
>>> validate_repo_id(repo_id="other..repo..id")
|
145 |
+
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.
|
146 |
+
```
|
147 |
+
|
148 |
+
Discussed in https://github.com/huggingface/huggingface_hub/issues/1008.
|
149 |
+
In moon-landing (internal repository):
|
150 |
+
- https://github.com/huggingface/moon-landing/blob/main/server/lib/Names.ts#L27
|
151 |
+
- https://github.com/huggingface/moon-landing/blob/main/server/views/components/NewRepoForm/NewRepoForm.svelte#L138
|
152 |
+
"""
|
153 |
+
if not isinstance(repo_id, str):
|
154 |
+
# Typically, a Path is not a repo_id
|
155 |
+
raise HFValidationError(f"Repo id must be a string, not {type(repo_id)}: '{repo_id}'.")
|
156 |
+
|
157 |
+
if repo_id.count("/") > 1:
|
158 |
+
raise HFValidationError(
|
159 |
+
"Repo id must be in the form 'repo_name' or 'namespace/repo_name':"
|
160 |
+
f" '{repo_id}'. Use `repo_type` argument if needed."
|
161 |
+
)
|
162 |
+
|
163 |
+
if not REPO_ID_REGEX.match(repo_id):
|
164 |
+
raise HFValidationError(
|
165 |
+
"Repo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are"
|
166 |
+
" forbidden, '-' and '.' cannot start or end the name, max length is 96:"
|
167 |
+
f" '{repo_id}'."
|
168 |
+
)
|
169 |
+
|
170 |
+
if "--" in repo_id or ".." in repo_id:
|
171 |
+
raise HFValidationError(f"Cannot have -- or .. in repo_id: '{repo_id}'.")
|
172 |
+
|
173 |
+
if repo_id.endswith(".git"):
|
174 |
+
raise HFValidationError(f"Repo_id cannot end by '.git': '{repo_id}'.")
|
175 |
+
|
176 |
+
|
177 |
+
def smoothly_deprecate_use_auth_token(fn_name: str, has_token: bool, kwargs: Dict[str, Any]) -> Dict[str, Any]:
|
178 |
+
"""Smoothly deprecate `use_auth_token` in the `huggingface_hub` codebase.
|
179 |
+
|
180 |
+
The long-term goal is to remove any mention of `use_auth_token` in the codebase in
|
181 |
+
favor of a unique and less verbose `token` argument. This will be done a few steps:
|
182 |
+
|
183 |
+
0. Step 0: methods that require a read-access to the Hub use the `use_auth_token`
|
184 |
+
argument (`str`, `bool` or `None`). Methods requiring write-access have a `token`
|
185 |
+
argument (`str`, `None`). This implicit rule exists to be able to not send the
|
186 |
+
token when not necessary (`use_auth_token=False`) even if logged in.
|
187 |
+
|
188 |
+
1. Step 1: we want to harmonize everything and use `token` everywhere (supporting
|
189 |
+
`token=False` for read-only methods). In order not to break existing code, if
|
190 |
+
`use_auth_token` is passed to a function, the `use_auth_token` value is passed
|
191 |
+
as `token` instead, without any warning.
|
192 |
+
a. Corner case: if both `use_auth_token` and `token` values are passed, a warning
|
193 |
+
is thrown and the `use_auth_token` value is ignored.
|
194 |
+
|
195 |
+
2. Step 2: Once it is release, we should push downstream libraries to switch from
|
196 |
+
`use_auth_token` to `token` as much as possible, but without throwing a warning
|
197 |
+
(e.g. manually create issues on the corresponding repos).
|
198 |
+
|
199 |
+
3. Step 3: After a transitional period (6 months e.g. until April 2023?), we update
|
200 |
+
`huggingface_hub` to throw a warning on `use_auth_token`. Hopefully, very few
|
201 |
+
users will be impacted as it would have already been fixed.
|
202 |
+
In addition, unit tests in `huggingface_hub` must be adapted to expect warnings
|
203 |
+
to be thrown (but still use `use_auth_token` as before).
|
204 |
+
|
205 |
+
4. Step 4: After a normal deprecation cycle (3 releases ?), remove this validator.
|
206 |
+
`use_auth_token` will definitely not be supported.
|
207 |
+
In addition, we update unit tests in `huggingface_hub` to use `token` everywhere.
|
208 |
+
|
209 |
+
This has been discussed in:
|
210 |
+
- https://github.com/huggingface/huggingface_hub/issues/1094.
|
211 |
+
- https://github.com/huggingface/huggingface_hub/pull/928
|
212 |
+
- (related) https://github.com/huggingface/huggingface_hub/pull/1064
|
213 |
+
"""
|
214 |
+
new_kwargs = kwargs.copy() # do not mutate input !
|
215 |
+
|
216 |
+
use_auth_token = new_kwargs.pop("use_auth_token", None) # remove from kwargs
|
217 |
+
if use_auth_token is not None:
|
218 |
+
if has_token:
|
219 |
+
warnings.warn(
|
220 |
+
"Both `token` and `use_auth_token` are passed to"
|
221 |
+
f" `{fn_name}` with non-None values. `token` is now the"
|
222 |
+
" preferred argument to pass a User Access Token."
|
223 |
+
" `use_auth_token` value will be ignored."
|
224 |
+
)
|
225 |
+
else:
|
226 |
+
# `token` argument is not passed and a non-None value is passed in
|
227 |
+
# `use_auth_token` => use `use_auth_token` value as `token` kwarg.
|
228 |
+
new_kwargs["token"] = use_auth_token
|
229 |
+
|
230 |
+
return new_kwargs
|
lib/python3.11/site-packages/huggingface_hub/utils/endpoint_helpers.py
ADDED
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2 |
+
# you may not use this file except in compliance with the License.
|
3 |
+
# You may obtain a copy of the License at
|
4 |
+
#
|
5 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6 |
+
#
|
7 |
+
# Unless required by applicable law or agreed to in writing, software
|
8 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10 |
+
# See the License for the specific language governing permissions and
|
11 |
+
# limitations under the License.
|
12 |
+
"""
|
13 |
+
Helpful utility functions and classes in relation to exploring API endpoints
|
14 |
+
with the aim for a user-friendly interface.
|
15 |
+
"""
|
16 |
+
import math
|
17 |
+
import re
|
18 |
+
from dataclasses import dataclass
|
19 |
+
from typing import TYPE_CHECKING, List, Optional, Union
|
20 |
+
|
21 |
+
from ..repocard_data import ModelCardData
|
22 |
+
|
23 |
+
|
24 |
+
if TYPE_CHECKING:
|
25 |
+
from ..hf_api import ModelInfo
|
26 |
+
|
27 |
+
|
28 |
+
def _is_emission_within_treshold(model_info: "ModelInfo", minimum_threshold: float, maximum_threshold: float) -> bool:
|
29 |
+
"""Checks if a model's emission is within a given threshold.
|
30 |
+
|
31 |
+
Args:
|
32 |
+
model_info (`ModelInfo`):
|
33 |
+
A model info object containing the model's emission information.
|
34 |
+
minimum_threshold (`float`):
|
35 |
+
A minimum carbon threshold to filter by, such as 1.
|
36 |
+
maximum_threshold (`float`):
|
37 |
+
A maximum carbon threshold to filter by, such as 10.
|
38 |
+
|
39 |
+
Returns:
|
40 |
+
`bool`: Whether the model's emission is within the given threshold.
|
41 |
+
"""
|
42 |
+
if minimum_threshold is None and maximum_threshold is None:
|
43 |
+
raise ValueError("Both `minimum_threshold` and `maximum_threshold` cannot both be `None`")
|
44 |
+
if minimum_threshold is None:
|
45 |
+
minimum_threshold = -1
|
46 |
+
if maximum_threshold is None:
|
47 |
+
maximum_threshold = math.inf
|
48 |
+
|
49 |
+
card_data = getattr(model_info, "card_data", None)
|
50 |
+
if card_data is None or not isinstance(card_data, (dict, ModelCardData)):
|
51 |
+
return False
|
52 |
+
|
53 |
+
# Get CO2 emission metadata
|
54 |
+
emission = card_data.get("co2_eq_emissions", None)
|
55 |
+
if isinstance(emission, dict):
|
56 |
+
emission = emission["emissions"]
|
57 |
+
if not emission:
|
58 |
+
return False
|
59 |
+
|
60 |
+
# Filter out if value is missing or out of range
|
61 |
+
matched = re.search(r"\d+\.\d+|\d+", str(emission))
|
62 |
+
if matched is None:
|
63 |
+
return False
|
64 |
+
|
65 |
+
emission_value = float(matched.group(0))
|
66 |
+
return minimum_threshold <= emission_value <= maximum_threshold
|
67 |
+
|
68 |
+
|
69 |
+
@dataclass
|
70 |
+
class DatasetFilter:
|
71 |
+
"""
|
72 |
+
A class that converts human-readable dataset search parameters into ones
|
73 |
+
compatible with the REST API. For all parameters capitalization does not
|
74 |
+
matter.
|
75 |
+
|
76 |
+
Args:
|
77 |
+
author (`str`, *optional*):
|
78 |
+
A string or list of strings that can be used to identify datasets on
|
79 |
+
the Hub by the original uploader (author or organization), such as
|
80 |
+
`facebook` or `huggingface`.
|
81 |
+
benchmark (`str` or `List`, *optional*):
|
82 |
+
A string or list of strings that can be used to identify datasets on
|
83 |
+
the Hub by their official benchmark.
|
84 |
+
dataset_name (`str`, *optional*):
|
85 |
+
A string or list of strings that can be used to identify datasets on
|
86 |
+
the Hub by its name, such as `SQAC` or `wikineural`
|
87 |
+
language_creators (`str` or `List`, *optional*):
|
88 |
+
A string or list of strings that can be used to identify datasets on
|
89 |
+
the Hub with how the data was curated, such as `crowdsourced` or
|
90 |
+
`machine_generated`.
|
91 |
+
language (`str` or `List`, *optional*):
|
92 |
+
A string or list of strings representing a two-character language to
|
93 |
+
filter datasets by on the Hub.
|
94 |
+
multilinguality (`str` or `List`, *optional*):
|
95 |
+
A string or list of strings representing a filter for datasets that
|
96 |
+
contain multiple languages.
|
97 |
+
size_categories (`str` or `List`, *optional*):
|
98 |
+
A string or list of strings that can be used to identify datasets on
|
99 |
+
the Hub by the size of the dataset such as `100K<n<1M` or
|
100 |
+
`1M<n<10M`.
|
101 |
+
task_categories (`str` or `List`, *optional*):
|
102 |
+
A string or list of strings that can be used to identify datasets on
|
103 |
+
the Hub by the designed task, such as `audio_classification` or
|
104 |
+
`named_entity_recognition`.
|
105 |
+
task_ids (`str` or `List`, *optional*):
|
106 |
+
A string or list of strings that can be used to identify datasets on
|
107 |
+
the Hub by the specific task such as `speech_emotion_recognition` or
|
108 |
+
`paraphrase`.
|
109 |
+
|
110 |
+
Examples:
|
111 |
+
|
112 |
+
```py
|
113 |
+
>>> from huggingface_hub import DatasetFilter
|
114 |
+
|
115 |
+
>>> # Using author
|
116 |
+
>>> new_filter = DatasetFilter(author="facebook")
|
117 |
+
|
118 |
+
>>> # Using benchmark
|
119 |
+
>>> new_filter = DatasetFilter(benchmark="raft")
|
120 |
+
|
121 |
+
>>> # Using dataset_name
|
122 |
+
>>> new_filter = DatasetFilter(dataset_name="wikineural")
|
123 |
+
|
124 |
+
>>> # Using language_creator
|
125 |
+
>>> new_filter = DatasetFilter(language_creator="crowdsourced")
|
126 |
+
|
127 |
+
>>> # Using language
|
128 |
+
>>> new_filter = DatasetFilter(language="en")
|
129 |
+
|
130 |
+
>>> # Using multilinguality
|
131 |
+
>>> new_filter = DatasetFilter(multilinguality="multilingual")
|
132 |
+
|
133 |
+
>>> # Using size_categories
|
134 |
+
>>> new_filter = DatasetFilter(size_categories="100K<n<1M")
|
135 |
+
|
136 |
+
>>> # Using task_categories
|
137 |
+
>>> new_filter = DatasetFilter(task_categories="audio_classification")
|
138 |
+
|
139 |
+
>>> # Using task_ids
|
140 |
+
>>> new_filter = DatasetFilter(task_ids="paraphrase")
|
141 |
+
```
|
142 |
+
"""
|
143 |
+
|
144 |
+
author: Optional[str] = None
|
145 |
+
benchmark: Optional[Union[str, List[str]]] = None
|
146 |
+
dataset_name: Optional[str] = None
|
147 |
+
language_creators: Optional[Union[str, List[str]]] = None
|
148 |
+
language: Optional[Union[str, List[str]]] = None
|
149 |
+
multilinguality: Optional[Union[str, List[str]]] = None
|
150 |
+
size_categories: Optional[Union[str, List[str]]] = None
|
151 |
+
task_categories: Optional[Union[str, List[str]]] = None
|
152 |
+
task_ids: Optional[Union[str, List[str]]] = None
|
153 |
+
|
154 |
+
|
155 |
+
@dataclass
|
156 |
+
class ModelFilter:
|
157 |
+
"""
|
158 |
+
A class that converts human-readable model search parameters into ones
|
159 |
+
compatible with the REST API. For all parameters capitalization does not
|
160 |
+
matter.
|
161 |
+
|
162 |
+
Args:
|
163 |
+
author (`str`, *optional*):
|
164 |
+
A string that can be used to identify models on the Hub by the
|
165 |
+
original uploader (author or organization), such as `facebook` or
|
166 |
+
`huggingface`.
|
167 |
+
library (`str` or `List`, *optional*):
|
168 |
+
A string or list of strings of foundational libraries models were
|
169 |
+
originally trained from, such as pytorch, tensorflow, or allennlp.
|
170 |
+
language (`str` or `List`, *optional*):
|
171 |
+
A string or list of strings of languages, both by name and country
|
172 |
+
code, such as "en" or "English"
|
173 |
+
model_name (`str`, *optional*):
|
174 |
+
A string that contain complete or partial names for models on the
|
175 |
+
Hub, such as "bert" or "bert-base-cased"
|
176 |
+
task (`str` or `List`, *optional*):
|
177 |
+
A string or list of strings of tasks models were designed for, such
|
178 |
+
as: "fill-mask" or "automatic-speech-recognition"
|
179 |
+
tags (`str` or `List`, *optional*):
|
180 |
+
A string tag or a list of tags to filter models on the Hub by, such
|
181 |
+
as `text-generation` or `spacy`.
|
182 |
+
trained_dataset (`str` or `List`, *optional*):
|
183 |
+
A string tag or a list of string tags of the trained dataset for a
|
184 |
+
model on the Hub.
|
185 |
+
|
186 |
+
|
187 |
+
```python
|
188 |
+
>>> from huggingface_hub import ModelFilter
|
189 |
+
|
190 |
+
>>> # For the author_or_organization
|
191 |
+
>>> new_filter = ModelFilter(author_or_organization="facebook")
|
192 |
+
|
193 |
+
>>> # For the library
|
194 |
+
>>> new_filter = ModelFilter(library="pytorch")
|
195 |
+
|
196 |
+
>>> # For the language
|
197 |
+
>>> new_filter = ModelFilter(language="french")
|
198 |
+
|
199 |
+
>>> # For the model_name
|
200 |
+
>>> new_filter = ModelFilter(model_name="bert")
|
201 |
+
|
202 |
+
>>> # For the task
|
203 |
+
>>> new_filter = ModelFilter(task="text-classification")
|
204 |
+
|
205 |
+
>>> from huggingface_hub import HfApi
|
206 |
+
|
207 |
+
>>> api = HfApi()
|
208 |
+
# To list model tags
|
209 |
+
|
210 |
+
>>> new_filter = ModelFilter(tags="benchmark:raft")
|
211 |
+
|
212 |
+
>>> # Related to the dataset
|
213 |
+
>>> new_filter = ModelFilter(trained_dataset="common_voice")
|
214 |
+
```
|
215 |
+
"""
|
216 |
+
|
217 |
+
author: Optional[str] = None
|
218 |
+
library: Optional[Union[str, List[str]]] = None
|
219 |
+
language: Optional[Union[str, List[str]]] = None
|
220 |
+
model_name: Optional[str] = None
|
221 |
+
task: Optional[Union[str, List[str]]] = None
|
222 |
+
trained_dataset: Optional[Union[str, List[str]]] = None
|
223 |
+
tags: Optional[Union[str, List[str]]] = None
|
lib/python3.11/site-packages/huggingface_hub/utils/insecure_hashlib.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Taken from https://github.com/mlflow/mlflow/pull/10119
|
2 |
+
#
|
3 |
+
# DO NOT use this function for security purposes (e.g., password hashing).
|
4 |
+
#
|
5 |
+
# In Python >= 3.9, insecure hashing algorithms such as MD5 fail in FIPS-compliant
|
6 |
+
# environments unless `usedforsecurity=False` is explicitly passed.
|
7 |
+
#
|
8 |
+
# References:
|
9 |
+
# - https://github.com/mlflow/mlflow/issues/9905
|
10 |
+
# - https://github.com/mlflow/mlflow/pull/10119
|
11 |
+
# - https://docs.python.org/3/library/hashlib.html
|
12 |
+
# - https://github.com/huggingface/transformers/pull/27038
|
13 |
+
#
|
14 |
+
# Usage:
|
15 |
+
# ```python
|
16 |
+
# # Use
|
17 |
+
# from huggingface_hub.utils.insecure_hashlib import sha256
|
18 |
+
# # instead of
|
19 |
+
# from hashlib import sha256
|
20 |
+
#
|
21 |
+
# # Use
|
22 |
+
# from huggingface_hub.utils import insecure_hashlib
|
23 |
+
# # instead of
|
24 |
+
# import hashlib
|
25 |
+
# ```
|
26 |
+
import functools
|
27 |
+
import hashlib
|
28 |
+
import sys
|
29 |
+
|
30 |
+
|
31 |
+
_kwargs = {"usedforsecurity": False} if sys.version_info >= (3, 9) else {}
|
32 |
+
md5 = functools.partial(hashlib.md5, **_kwargs)
|
33 |
+
sha1 = functools.partial(hashlib.sha1, **_kwargs)
|
34 |
+
sha256 = functools.partial(hashlib.sha256, **_kwargs)
|
lib/python3.11/site-packages/huggingface_hub/utils/logging.py
ADDED
@@ -0,0 +1,182 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# coding=utf-8
|
2 |
+
# Copyright 2020 Optuna, Hugging Face
|
3 |
+
#
|
4 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5 |
+
# you may not use this file except in compliance with the License.
|
6 |
+
# You may obtain a copy of the License at
|
7 |
+
#
|
8 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9 |
+
#
|
10 |
+
# Unless required by applicable law or agreed to in writing, software
|
11 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13 |
+
# See the License for the specific language governing permissions and
|
14 |
+
# limitations under the License.
|
15 |
+
""" Logging utilities."""
|
16 |
+
|
17 |
+
import logging
|
18 |
+
import os
|
19 |
+
from logging import (
|
20 |
+
CRITICAL, # NOQA
|
21 |
+
DEBUG, # NOQA
|
22 |
+
ERROR, # NOQA
|
23 |
+
FATAL, # NOQA
|
24 |
+
INFO, # NOQA
|
25 |
+
NOTSET, # NOQA
|
26 |
+
WARN, # NOQA
|
27 |
+
WARNING, # NOQA
|
28 |
+
)
|
29 |
+
from typing import Optional
|
30 |
+
|
31 |
+
|
32 |
+
log_levels = {
|
33 |
+
"debug": logging.DEBUG,
|
34 |
+
"info": logging.INFO,
|
35 |
+
"warning": logging.WARNING,
|
36 |
+
"error": logging.ERROR,
|
37 |
+
"critical": logging.CRITICAL,
|
38 |
+
}
|
39 |
+
|
40 |
+
_default_log_level = logging.WARNING
|
41 |
+
|
42 |
+
|
43 |
+
def _get_library_name() -> str:
|
44 |
+
return __name__.split(".")[0]
|
45 |
+
|
46 |
+
|
47 |
+
def _get_library_root_logger() -> logging.Logger:
|
48 |
+
return logging.getLogger(_get_library_name())
|
49 |
+
|
50 |
+
|
51 |
+
def _get_default_logging_level():
|
52 |
+
"""
|
53 |
+
If `HF_HUB_VERBOSITY` env var is set to one of the valid choices return that as the new default level. If it is not
|
54 |
+
- fall back to `_default_log_level`
|
55 |
+
"""
|
56 |
+
env_level_str = os.getenv("HF_HUB_VERBOSITY", None)
|
57 |
+
if env_level_str:
|
58 |
+
if env_level_str in log_levels:
|
59 |
+
return log_levels[env_level_str]
|
60 |
+
else:
|
61 |
+
logging.getLogger().warning(
|
62 |
+
f"Unknown option HF_HUB_VERBOSITY={env_level_str}, has to be one of: { ', '.join(log_levels.keys()) }"
|
63 |
+
)
|
64 |
+
return _default_log_level
|
65 |
+
|
66 |
+
|
67 |
+
def _configure_library_root_logger() -> None:
|
68 |
+
library_root_logger = _get_library_root_logger()
|
69 |
+
library_root_logger.addHandler(logging.StreamHandler())
|
70 |
+
library_root_logger.setLevel(_get_default_logging_level())
|
71 |
+
|
72 |
+
|
73 |
+
def _reset_library_root_logger() -> None:
|
74 |
+
library_root_logger = _get_library_root_logger()
|
75 |
+
library_root_logger.setLevel(logging.NOTSET)
|
76 |
+
|
77 |
+
|
78 |
+
def get_logger(name: Optional[str] = None) -> logging.Logger:
|
79 |
+
"""
|
80 |
+
Returns a logger with the specified name. This function is not supposed
|
81 |
+
to be directly accessed by library users.
|
82 |
+
|
83 |
+
Args:
|
84 |
+
name (`str`, *optional*):
|
85 |
+
The name of the logger to get, usually the filename
|
86 |
+
|
87 |
+
Example:
|
88 |
+
|
89 |
+
```python
|
90 |
+
>>> from huggingface_hub import get_logger
|
91 |
+
|
92 |
+
>>> logger = get_logger(__file__)
|
93 |
+
>>> logger.set_verbosity_info()
|
94 |
+
```
|
95 |
+
"""
|
96 |
+
|
97 |
+
if name is None:
|
98 |
+
name = _get_library_name()
|
99 |
+
|
100 |
+
return logging.getLogger(name)
|
101 |
+
|
102 |
+
|
103 |
+
def get_verbosity() -> int:
|
104 |
+
"""Return the current level for the HuggingFace Hub's root logger.
|
105 |
+
|
106 |
+
Returns:
|
107 |
+
Logging level, e.g., `huggingface_hub.logging.DEBUG` and
|
108 |
+
`huggingface_hub.logging.INFO`.
|
109 |
+
|
110 |
+
<Tip>
|
111 |
+
|
112 |
+
HuggingFace Hub has following logging levels:
|
113 |
+
|
114 |
+
- `huggingface_hub.logging.CRITICAL`, `huggingface_hub.logging.FATAL`
|
115 |
+
- `huggingface_hub.logging.ERROR`
|
116 |
+
- `huggingface_hub.logging.WARNING`, `huggingface_hub.logging.WARN`
|
117 |
+
- `huggingface_hub.logging.INFO`
|
118 |
+
- `huggingface_hub.logging.DEBUG`
|
119 |
+
|
120 |
+
</Tip>
|
121 |
+
"""
|
122 |
+
return _get_library_root_logger().getEffectiveLevel()
|
123 |
+
|
124 |
+
|
125 |
+
def set_verbosity(verbosity: int) -> None:
|
126 |
+
"""
|
127 |
+
Sets the level for the HuggingFace Hub's root logger.
|
128 |
+
|
129 |
+
Args:
|
130 |
+
verbosity (`int`):
|
131 |
+
Logging level, e.g., `huggingface_hub.logging.DEBUG` and
|
132 |
+
`huggingface_hub.logging.INFO`.
|
133 |
+
"""
|
134 |
+
_get_library_root_logger().setLevel(verbosity)
|
135 |
+
|
136 |
+
|
137 |
+
def set_verbosity_info():
|
138 |
+
"""
|
139 |
+
Sets the verbosity to `logging.INFO`.
|
140 |
+
"""
|
141 |
+
return set_verbosity(INFO)
|
142 |
+
|
143 |
+
|
144 |
+
def set_verbosity_warning():
|
145 |
+
"""
|
146 |
+
Sets the verbosity to `logging.WARNING`.
|
147 |
+
"""
|
148 |
+
return set_verbosity(WARNING)
|
149 |
+
|
150 |
+
|
151 |
+
def set_verbosity_debug():
|
152 |
+
"""
|
153 |
+
Sets the verbosity to `logging.DEBUG`.
|
154 |
+
"""
|
155 |
+
return set_verbosity(DEBUG)
|
156 |
+
|
157 |
+
|
158 |
+
def set_verbosity_error():
|
159 |
+
"""
|
160 |
+
Sets the verbosity to `logging.ERROR`.
|
161 |
+
"""
|
162 |
+
return set_verbosity(ERROR)
|
163 |
+
|
164 |
+
|
165 |
+
def disable_propagation() -> None:
|
166 |
+
"""
|
167 |
+
Disable propagation of the library log outputs. Note that log propagation is
|
168 |
+
disabled by default.
|
169 |
+
"""
|
170 |
+
_get_library_root_logger().propagate = False
|
171 |
+
|
172 |
+
|
173 |
+
def enable_propagation() -> None:
|
174 |
+
"""
|
175 |
+
Enable propagation of the library log outputs. Please disable the
|
176 |
+
HuggingFace Hub's default handler to prevent double logging if the root
|
177 |
+
logger has been configured.
|
178 |
+
"""
|
179 |
+
_get_library_root_logger().propagate = True
|
180 |
+
|
181 |
+
|
182 |
+
_configure_library_root_logger()
|
lib/python3.11/site-packages/huggingface_hub/utils/sha.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Utilities to efficiently compute the SHA 256 hash of a bunch of bytes."""
|
2 |
+
from typing import BinaryIO, Optional
|
3 |
+
|
4 |
+
from .insecure_hashlib import sha256
|
5 |
+
|
6 |
+
|
7 |
+
def sha_fileobj(fileobj: BinaryIO, chunk_size: Optional[int] = None) -> bytes:
|
8 |
+
"""
|
9 |
+
Computes the sha256 hash of the given file object, by chunks of size `chunk_size`.
|
10 |
+
|
11 |
+
Args:
|
12 |
+
fileobj (file-like object):
|
13 |
+
The File object to compute sha256 for, typically obtained with `open(path, "rb")`
|
14 |
+
chunk_size (`int`, *optional*):
|
15 |
+
The number of bytes to read from `fileobj` at once, defaults to 1MB.
|
16 |
+
|
17 |
+
Returns:
|
18 |
+
`bytes`: `fileobj`'s sha256 hash as bytes
|
19 |
+
"""
|
20 |
+
chunk_size = chunk_size if chunk_size is not None else 1024 * 1024
|
21 |
+
|
22 |
+
sha = sha256()
|
23 |
+
while True:
|
24 |
+
chunk = fileobj.read(chunk_size)
|
25 |
+
sha.update(chunk)
|
26 |
+
if not chunk:
|
27 |
+
break
|
28 |
+
return sha.digest()
|
lib/python3.11/site-packages/huggingface_hub/utils/tqdm.py
ADDED
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/usr/bin/env python
|
2 |
+
# coding=utf-8
|
3 |
+
# Copyright 2021 The HuggingFace Inc. team. All rights reserved.
|
4 |
+
#
|
5 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
# you may not use this file except in compliance with the License.
|
7 |
+
# You may obtain a copy of the License at
|
8 |
+
#
|
9 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10 |
+
#
|
11 |
+
# Unless required by applicable law or agreed to in writing, software
|
12 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
# See the License for the specific language governing permissions and
|
15 |
+
# limitations under the License
|
16 |
+
"""Utility helpers to handle progress bars in `huggingface_hub`.
|
17 |
+
|
18 |
+
Example:
|
19 |
+
1. Use `huggingface_hub.utils.tqdm` as you would use `tqdm.tqdm` or `tqdm.auto.tqdm`.
|
20 |
+
2. To disable progress bars, either use `disable_progress_bars()` helper or set the
|
21 |
+
environment variable `HF_HUB_DISABLE_PROGRESS_BARS` to 1.
|
22 |
+
3. To re-enable progress bars, use `enable_progress_bars()`.
|
23 |
+
4. To check whether progress bars are disabled, use `are_progress_bars_disabled()`.
|
24 |
+
|
25 |
+
NOTE: Environment variable `HF_HUB_DISABLE_PROGRESS_BARS` has the priority.
|
26 |
+
|
27 |
+
Example:
|
28 |
+
```py
|
29 |
+
from huggingface_hub.utils import (
|
30 |
+
are_progress_bars_disabled,
|
31 |
+
disable_progress_bars,
|
32 |
+
enable_progress_bars,
|
33 |
+
tqdm,
|
34 |
+
)
|
35 |
+
|
36 |
+
# Disable progress bars globally
|
37 |
+
disable_progress_bars()
|
38 |
+
|
39 |
+
# Use as normal `tqdm`
|
40 |
+
for _ in tqdm(range(5)):
|
41 |
+
do_something()
|
42 |
+
|
43 |
+
# Still not showing progress bars, as `disable=False` is overwritten to `True`.
|
44 |
+
for _ in tqdm(range(5), disable=False):
|
45 |
+
do_something()
|
46 |
+
|
47 |
+
are_progress_bars_disabled() # True
|
48 |
+
|
49 |
+
# Re-enable progress bars globally
|
50 |
+
enable_progress_bars()
|
51 |
+
|
52 |
+
# Progress bar will be shown !
|
53 |
+
for _ in tqdm(range(5)):
|
54 |
+
do_something()
|
55 |
+
```
|
56 |
+
"""
|
57 |
+
import io
|
58 |
+
import warnings
|
59 |
+
from contextlib import contextmanager
|
60 |
+
from pathlib import Path
|
61 |
+
from typing import Iterator, Optional, Union
|
62 |
+
|
63 |
+
from tqdm.auto import tqdm as old_tqdm
|
64 |
+
|
65 |
+
from ..constants import HF_HUB_DISABLE_PROGRESS_BARS
|
66 |
+
|
67 |
+
|
68 |
+
# `HF_HUB_DISABLE_PROGRESS_BARS` is `Optional[bool]` while `_hf_hub_progress_bars_disabled`
|
69 |
+
# is a `bool`. If `HF_HUB_DISABLE_PROGRESS_BARS` is set to True or False, it has priority.
|
70 |
+
# If `HF_HUB_DISABLE_PROGRESS_BARS` is None, it means the user have not set the
|
71 |
+
# environment variable and is free to enable/disable progress bars programmatically.
|
72 |
+
# TL;DR: env variable has priority over code.
|
73 |
+
#
|
74 |
+
# By default, progress bars are enabled.
|
75 |
+
_hf_hub_progress_bars_disabled: bool = HF_HUB_DISABLE_PROGRESS_BARS or False
|
76 |
+
|
77 |
+
|
78 |
+
def disable_progress_bars() -> None:
|
79 |
+
"""
|
80 |
+
Disable globally progress bars used in `huggingface_hub` except if `HF_HUB_DISABLE_PROGRESS_BARS` environment
|
81 |
+
variable has been set.
|
82 |
+
|
83 |
+
Use [`~utils.enable_progress_bars`] to re-enable them.
|
84 |
+
"""
|
85 |
+
if HF_HUB_DISABLE_PROGRESS_BARS is False:
|
86 |
+
warnings.warn(
|
87 |
+
"Cannot disable progress bars: environment variable `HF_HUB_DISABLE_PROGRESS_BARS=0` is set and has"
|
88 |
+
" priority."
|
89 |
+
)
|
90 |
+
return
|
91 |
+
global _hf_hub_progress_bars_disabled
|
92 |
+
_hf_hub_progress_bars_disabled = True
|
93 |
+
|
94 |
+
|
95 |
+
def enable_progress_bars() -> None:
|
96 |
+
"""
|
97 |
+
Enable globally progress bars used in `huggingface_hub` except if `HF_HUB_DISABLE_PROGRESS_BARS` environment
|
98 |
+
variable has been set.
|
99 |
+
|
100 |
+
Use [`~utils.disable_progress_bars`] to disable them.
|
101 |
+
"""
|
102 |
+
if HF_HUB_DISABLE_PROGRESS_BARS is True:
|
103 |
+
warnings.warn(
|
104 |
+
"Cannot enable progress bars: environment variable `HF_HUB_DISABLE_PROGRESS_BARS=1` is set and has"
|
105 |
+
" priority."
|
106 |
+
)
|
107 |
+
return
|
108 |
+
global _hf_hub_progress_bars_disabled
|
109 |
+
_hf_hub_progress_bars_disabled = False
|
110 |
+
|
111 |
+
|
112 |
+
def are_progress_bars_disabled() -> bool:
|
113 |
+
"""Return whether progress bars are globally disabled or not.
|
114 |
+
|
115 |
+
Progress bars used in `huggingface_hub` can be enable or disabled globally using [`~utils.enable_progress_bars`]
|
116 |
+
and [`~utils.disable_progress_bars`] or by setting `HF_HUB_DISABLE_PROGRESS_BARS` as environment variable.
|
117 |
+
"""
|
118 |
+
global _hf_hub_progress_bars_disabled
|
119 |
+
return _hf_hub_progress_bars_disabled
|
120 |
+
|
121 |
+
|
122 |
+
class tqdm(old_tqdm):
|
123 |
+
"""
|
124 |
+
Class to override `disable` argument in case progress bars are globally disabled.
|
125 |
+
|
126 |
+
Taken from https://github.com/tqdm/tqdm/issues/619#issuecomment-619639324.
|
127 |
+
"""
|
128 |
+
|
129 |
+
def __init__(self, *args, **kwargs):
|
130 |
+
if are_progress_bars_disabled():
|
131 |
+
kwargs["disable"] = True
|
132 |
+
super().__init__(*args, **kwargs)
|
133 |
+
|
134 |
+
def __delattr__(self, attr: str) -> None:
|
135 |
+
"""Fix for https://github.com/huggingface/huggingface_hub/issues/1603"""
|
136 |
+
try:
|
137 |
+
super().__delattr__(attr)
|
138 |
+
except AttributeError:
|
139 |
+
if attr != "_lock":
|
140 |
+
raise
|
141 |
+
|
142 |
+
|
143 |
+
@contextmanager
|
144 |
+
def tqdm_stream_file(path: Union[Path, str]) -> Iterator[io.BufferedReader]:
|
145 |
+
"""
|
146 |
+
Open a file as binary and wrap the `read` method to display a progress bar when it's streamed.
|
147 |
+
|
148 |
+
First implemented in `transformers` in 2019 but removed when switched to git-lfs. Used in `huggingface_hub` to show
|
149 |
+
progress bar when uploading an LFS file to the Hub. See github.com/huggingface/transformers/pull/2078#discussion_r354739608
|
150 |
+
for implementation details.
|
151 |
+
|
152 |
+
Note: currently implementation handles only files stored on disk as it is the most common use case. Could be
|
153 |
+
extended to stream any `BinaryIO` object but we might have to debug some corner cases.
|
154 |
+
|
155 |
+
Example:
|
156 |
+
```py
|
157 |
+
>>> with tqdm_stream_file("config.json") as f:
|
158 |
+
>>> requests.put(url, data=f)
|
159 |
+
config.json: 100%|█████████████████████████| 8.19k/8.19k [00:02<00:00, 3.72kB/s]
|
160 |
+
```
|
161 |
+
"""
|
162 |
+
if isinstance(path, str):
|
163 |
+
path = Path(path)
|
164 |
+
|
165 |
+
with path.open("rb") as f:
|
166 |
+
total_size = path.stat().st_size
|
167 |
+
pbar = tqdm(
|
168 |
+
unit="B",
|
169 |
+
unit_scale=True,
|
170 |
+
total=total_size,
|
171 |
+
initial=0,
|
172 |
+
desc=path.name,
|
173 |
+
)
|
174 |
+
|
175 |
+
f_read = f.read
|
176 |
+
|
177 |
+
def _inner_read(size: Optional[int] = -1) -> bytes:
|
178 |
+
data = f_read(size)
|
179 |
+
pbar.update(len(data))
|
180 |
+
return data
|
181 |
+
|
182 |
+
f.read = _inner_read # type: ignore
|
183 |
+
|
184 |
+
yield f
|
185 |
+
|
186 |
+
pbar.close()
|
lib/python3.11/site-packages/idna-3.6.dist-info/INSTALLER
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
pip
|
lib/python3.11/site-packages/idna-3.6.dist-info/LICENSE.md
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
BSD 3-Clause License
|
2 |
+
|
3 |
+
Copyright (c) 2013-2023, Kim Davies and contributors.
|
4 |
+
All rights reserved.
|
5 |
+
|
6 |
+
Redistribution and use in source and binary forms, with or without
|
7 |
+
modification, are permitted provided that the following conditions are
|
8 |
+
met:
|
9 |
+
|
10 |
+
1. Redistributions of source code must retain the above copyright
|
11 |
+
notice, this list of conditions and the following disclaimer.
|
12 |
+
|
13 |
+
2. Redistributions in binary form must reproduce the above copyright
|
14 |
+
notice, this list of conditions and the following disclaimer in the
|
15 |
+
documentation and/or other materials provided with the distribution.
|
16 |
+
|
17 |
+
3. Neither the name of the copyright holder nor the names of its
|
18 |
+
contributors may be used to endorse or promote products derived from
|
19 |
+
this software without specific prior written permission.
|
20 |
+
|
21 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
22 |
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
23 |
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
24 |
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
25 |
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
26 |
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
27 |
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
28 |
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
29 |
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
30 |
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
31 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
lib/python3.11/site-packages/idna-3.6.dist-info/METADATA
ADDED
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Metadata-Version: 2.1
|
2 |
+
Name: idna
|
3 |
+
Version: 3.6
|
4 |
+
Summary: Internationalized Domain Names in Applications (IDNA)
|
5 |
+
Author-email: Kim Davies <[email protected]>
|
6 |
+
Requires-Python: >=3.5
|
7 |
+
Description-Content-Type: text/x-rst
|
8 |
+
Classifier: Development Status :: 5 - Production/Stable
|
9 |
+
Classifier: Intended Audience :: Developers
|
10 |
+
Classifier: Intended Audience :: System Administrators
|
11 |
+
Classifier: License :: OSI Approved :: BSD License
|
12 |
+
Classifier: Operating System :: OS Independent
|
13 |
+
Classifier: Programming Language :: Python
|
14 |
+
Classifier: Programming Language :: Python :: 3
|
15 |
+
Classifier: Programming Language :: Python :: 3 :: Only
|
16 |
+
Classifier: Programming Language :: Python :: 3.5
|
17 |
+
Classifier: Programming Language :: Python :: 3.6
|
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 |
+
Classifier: Topic :: Internet :: Name Service (DNS)
|
27 |
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
28 |
+
Classifier: Topic :: Utilities
|
29 |
+
Project-URL: Changelog, https://github.com/kjd/idna/blob/master/HISTORY.rst
|
30 |
+
Project-URL: Issue tracker, https://github.com/kjd/idna/issues
|
31 |
+
Project-URL: Source, https://github.com/kjd/idna
|
32 |
+
|
33 |
+
Internationalized Domain Names in Applications (IDNA)
|
34 |
+
=====================================================
|
35 |
+
|
36 |
+
Support for the Internationalized Domain Names in
|
37 |
+
Applications (IDNA) protocol as specified in `RFC 5891
|
38 |
+
<https://tools.ietf.org/html/rfc5891>`_. This is the latest version of
|
39 |
+
the protocol and is sometimes referred to as “IDNA 2008”.
|
40 |
+
|
41 |
+
This library also provides support for Unicode Technical
|
42 |
+
Standard 46, `Unicode IDNA Compatibility Processing
|
43 |
+
<https://unicode.org/reports/tr46/>`_.
|
44 |
+
|
45 |
+
This acts as a suitable replacement for the “encodings.idna”
|
46 |
+
module that comes with the Python standard library, but which
|
47 |
+
only supports the older superseded IDNA specification (`RFC 3490
|
48 |
+
<https://tools.ietf.org/html/rfc3490>`_).
|
49 |
+
|
50 |
+
Basic functions are simply executed:
|
51 |
+
|
52 |
+
.. code-block:: pycon
|
53 |
+
|
54 |
+
>>> import idna
|
55 |
+
>>> idna.encode('ドメイン.テスト')
|
56 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
57 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
58 |
+
ドメイン.テスト
|
59 |
+
|
60 |
+
|
61 |
+
Installation
|
62 |
+
------------
|
63 |
+
|
64 |
+
This package is available for installation from PyPI:
|
65 |
+
|
66 |
+
.. code-block:: bash
|
67 |
+
|
68 |
+
$ python3 -m pip install idna
|
69 |
+
|
70 |
+
|
71 |
+
Usage
|
72 |
+
-----
|
73 |
+
|
74 |
+
For typical usage, the ``encode`` and ``decode`` functions will take a
|
75 |
+
domain name argument and perform a conversion to A-labels or U-labels
|
76 |
+
respectively.
|
77 |
+
|
78 |
+
.. code-block:: pycon
|
79 |
+
|
80 |
+
>>> import idna
|
81 |
+
>>> idna.encode('ドメイン.テスト')
|
82 |
+
b'xn--eckwd4c7c.xn--zckzah'
|
83 |
+
>>> print(idna.decode('xn--eckwd4c7c.xn--zckzah'))
|
84 |
+
ドメイン.テスト
|
85 |
+
|
86 |
+
You may use the codec encoding and decoding methods using the
|
87 |
+
``idna.codec`` module:
|
88 |
+
|
89 |
+
.. code-block:: pycon
|
90 |
+
|
91 |
+
>>> import idna.codec
|
92 |
+
>>> print('домен.испытание'.encode('idna2008'))
|
93 |
+
b'xn--d1acufc.xn--80akhbyknj4f'
|
94 |
+
>>> print(b'xn--d1acufc.xn--80akhbyknj4f'.decode('idna2008'))
|
95 |
+
домен.испытание
|
96 |
+
|
97 |
+
Conversions can be applied at a per-label basis using the ``ulabel`` or
|
98 |
+
``alabel`` functions if necessary:
|
99 |
+
|
100 |
+
.. code-block:: pycon
|
101 |
+
|
102 |
+
>>> idna.alabel('测试')
|
103 |
+
b'xn--0zwm56d'
|
104 |
+
|
105 |
+
Compatibility Mapping (UTS #46)
|
106 |
+
+++++++++++++++++++++++++++++++
|
107 |
+
|
108 |
+
As described in `RFC 5895 <https://tools.ietf.org/html/rfc5895>`_, the
|
109 |
+
IDNA specification does not normalize input from different potential
|
110 |
+
ways a user may input a domain name. This functionality, known as
|
111 |
+
a “mapping”, is considered by the specification to be a local
|
112 |
+
user-interface issue distinct from IDNA conversion functionality.
|
113 |
+
|
114 |
+
This library provides one such mapping that was developed by the
|
115 |
+
Unicode Consortium. Known as `Unicode IDNA Compatibility Processing
|
116 |
+
<https://unicode.org/reports/tr46/>`_, it provides for both a regular
|
117 |
+
mapping for typical applications, as well as a transitional mapping to
|
118 |
+
help migrate from older IDNA 2003 applications.
|
119 |
+
|
120 |
+
For example, “Königsgäßchen” is not a permissible label as *LATIN
|
121 |
+
CAPITAL LETTER K* is not allowed (nor are capital letters in general).
|
122 |
+
UTS 46 will convert this into lower case prior to applying the IDNA
|
123 |
+
conversion.
|
124 |
+
|
125 |
+
.. code-block:: pycon
|
126 |
+
|
127 |
+
>>> import idna
|
128 |
+
>>> idna.encode('Königsgäßchen')
|
129 |
+
...
|
130 |
+
idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed
|
131 |
+
>>> idna.encode('Königsgäßchen', uts46=True)
|
132 |
+
b'xn--knigsgchen-b4a3dun'
|
133 |
+
>>> print(idna.decode('xn--knigsgchen-b4a3dun'))
|
134 |
+
königsgäßchen
|
135 |
+
|
136 |
+
Transitional processing provides conversions to help transition from
|
137 |
+
the older 2003 standard to the current standard. For example, in the
|
138 |
+
original IDNA specification, the *LATIN SMALL LETTER SHARP S* (ß) was
|
139 |
+
converted into two *LATIN SMALL LETTER S* (ss), whereas in the current
|
140 |
+
IDNA specification this conversion is not performed.
|
141 |
+
|
142 |
+
.. code-block:: pycon
|
143 |
+
|
144 |
+
>>> idna.encode('Königsgäßchen', uts46=True, transitional=True)
|
145 |
+
'xn--knigsgsschen-lcb0w'
|
146 |
+
|
147 |
+
Implementers should use transitional processing with caution, only in
|
148 |
+
rare cases where conversion from legacy labels to current labels must be
|
149 |
+
performed (i.e. IDNA implementations that pre-date 2008). For typical
|
150 |
+
applications that just need to convert labels, transitional processing
|
151 |
+
is unlikely to be beneficial and could produce unexpected incompatible
|
152 |
+
results.
|
153 |
+
|
154 |
+
``encodings.idna`` Compatibility
|
155 |
+
++++++++++++++++++++++++++++++++
|
156 |
+
|
157 |
+
Function calls from the Python built-in ``encodings.idna`` module are
|
158 |
+
mapped to their IDNA 2008 equivalents using the ``idna.compat`` module.
|
159 |
+
Simply substitute the ``import`` clause in your code to refer to the new
|
160 |
+
module name.
|
161 |
+
|
162 |
+
Exceptions
|
163 |
+
----------
|
164 |
+
|
165 |
+
All errors raised during the conversion following the specification
|
166 |
+
should raise an exception derived from the ``idna.IDNAError`` base
|
167 |
+
class.
|
168 |
+
|
169 |
+
More specific exceptions that may be generated as ``idna.IDNABidiError``
|
170 |
+
when the error reflects an illegal combination of left-to-right and
|
171 |
+
right-to-left characters in a label; ``idna.InvalidCodepoint`` when
|
172 |
+
a specific codepoint is an illegal character in an IDN label (i.e.
|
173 |
+
INVALID); and ``idna.InvalidCodepointContext`` when the codepoint is
|
174 |
+
illegal based on its positional context (i.e. it is CONTEXTO or CONTEXTJ
|
175 |
+
but the contextual requirements are not satisfied.)
|
176 |
+
|
177 |
+
Building and Diagnostics
|
178 |
+
------------------------
|
179 |
+
|
180 |
+
The IDNA and UTS 46 functionality relies upon pre-calculated lookup
|
181 |
+
tables for performance. These tables are derived from computing against
|
182 |
+
eligibility criteria in the respective standards. These tables are
|
183 |
+
computed using the command-line script ``tools/idna-data``.
|
184 |
+
|
185 |
+
This tool will fetch relevant codepoint data from the Unicode repository
|
186 |
+
and perform the required calculations to identify eligibility. There are
|
187 |
+
three main modes:
|
188 |
+
|
189 |
+
* ``idna-data make-libdata``. Generates ``idnadata.py`` and
|
190 |
+
``uts46data.py``, the pre-calculated lookup tables used for IDNA and
|
191 |
+
UTS 46 conversions. Implementers who wish to track this library against
|
192 |
+
a different Unicode version may use this tool to manually generate a
|
193 |
+
different version of the ``idnadata.py`` and ``uts46data.py`` files.
|
194 |
+
|
195 |
+
* ``idna-data make-table``. Generate a table of the IDNA disposition
|
196 |
+
(e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix
|
197 |
+
B.1 of RFC 5892 and the pre-computed tables published by `IANA
|
198 |
+
<https://www.iana.org/>`_.
|
199 |
+
|
200 |
+
* ``idna-data U+0061``. Prints debugging output on the various
|
201 |
+
properties associated with an individual Unicode codepoint (in this
|
202 |
+
case, U+0061), that are used to assess the IDNA and UTS 46 status of a
|
203 |
+
codepoint. This is helpful in debugging or analysis.
|
204 |
+
|
205 |
+
The tool accepts a number of arguments, described using ``idna-data
|
206 |
+
-h``. Most notably, the ``--version`` argument allows the specification
|
207 |
+
of the version of Unicode to be used in computing the table data. For
|
208 |
+
example, ``idna-data --version 9.0.0 make-libdata`` will generate
|
209 |
+
library data against Unicode 9.0.0.
|
210 |
+
|
211 |
+
|
212 |
+
Additional Notes
|
213 |
+
----------------
|
214 |
+
|
215 |
+
* **Packages**. The latest tagged release version is published in the
|
216 |
+
`Python Package Index <https://pypi.org/project/idna/>`_.
|
217 |
+
|
218 |
+
* **Version support**. This library supports Python 3.5 and higher.
|
219 |
+
As this library serves as a low-level toolkit for a variety of
|
220 |
+
applications, many of which strive for broad compatibility with older
|
221 |
+
Python versions, there is no rush to remove older interpreter support.
|
222 |
+
Removing support for older versions should be well justified in that the
|
223 |
+
maintenance burden has become too high.
|
224 |
+
|
225 |
+
* **Python 2**. Python 2 is supported by version 2.x of this library.
|
226 |
+
While active development of the version 2.x series has ended, notable
|
227 |
+
issues being corrected may be backported to 2.x. Use "idna<3" in your
|
228 |
+
requirements file if you need this library for a Python 2 application.
|
229 |
+
|
230 |
+
* **Testing**. The library has a test suite based on each rule of the
|
231 |
+
IDNA specification, as well as tests that are provided as part of the
|
232 |
+
Unicode Technical Standard 46, `Unicode IDNA Compatibility Processing
|
233 |
+
<https://unicode.org/reports/tr46/>`_.
|
234 |
+
|
235 |
+
* **Emoji**. It is an occasional request to support emoji domains in
|
236 |
+
this library. Encoding of symbols like emoji is expressly prohibited by
|
237 |
+
the technical standard IDNA 2008 and emoji domains are broadly phased
|
238 |
+
out across the domain industry due to associated security risks. For
|
239 |
+
now, applications that need to support these non-compliant labels
|
240 |
+
may wish to consider trying the encode/decode operation in this library
|
241 |
+
first, and then falling back to using `encodings.idna`. See `the Github
|
242 |
+
project <https://github.com/kjd/idna/issues/18>`_ for more discussion.
|
243 |
+
|
lib/python3.11/site-packages/idna-3.6.dist-info/RECORD
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
idna-3.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
2 |
+
idna-3.6.dist-info/LICENSE.md,sha256=yy-vDKGMbTh-x8tm8yGTn7puZ-nawJ0xR3y52NP-aJk,1541
|
3 |
+
idna-3.6.dist-info/METADATA,sha256=N93B509dkvvkd_Y0E_VxCHPkVkrD6InxoyfXvX4egds,9888
|
4 |
+
idna-3.6.dist-info/RECORD,,
|
5 |
+
idna-3.6.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
6 |
+
idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849
|
7 |
+
idna/__pycache__/__init__.cpython-311.pyc,,
|
8 |
+
idna/__pycache__/codec.cpython-311.pyc,,
|
9 |
+
idna/__pycache__/compat.cpython-311.pyc,,
|
10 |
+
idna/__pycache__/core.cpython-311.pyc,,
|
11 |
+
idna/__pycache__/idnadata.cpython-311.pyc,,
|
12 |
+
idna/__pycache__/intranges.cpython-311.pyc,,
|
13 |
+
idna/__pycache__/package_data.cpython-311.pyc,,
|
14 |
+
idna/__pycache__/uts46data.cpython-311.pyc,,
|
15 |
+
idna/codec.py,sha256=PS6m-XmdST7Wj7J7ulRMakPDt5EBJyYrT3CPtjh-7t4,3426
|
16 |
+
idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321
|
17 |
+
idna/core.py,sha256=Bxz9L1rH0N5U-yukGfPuDRTxR2jDUl96NCq1ql3YAUw,12908
|
18 |
+
idna/idnadata.py,sha256=9u3Ec_GRrhlcbs7QM3pAZ2ObEQzPIOm99FaVOm91UGg,44351
|
19 |
+
idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881
|
20 |
+
idna/package_data.py,sha256=y-iv-qJdmHsWVR5FszYwsMo1AQg8qpdU2aU5nT-S2oQ,21
|
21 |
+
idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22 |
+
idna/uts46data.py,sha256=1KuksWqLuccPXm2uyRVkhfiFLNIhM_H2m4azCcnOqEU,206503
|
lib/python3.11/site-packages/idna-3.6.dist-info/WHEEL
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Wheel-Version: 1.0
|
2 |
+
Generator: flit 3.9.0
|
3 |
+
Root-Is-Purelib: true
|
4 |
+
Tag: py3-none-any
|
lib/python3.11/site-packages/idna/__init__.py
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .package_data import __version__
|
2 |
+
from .core import (
|
3 |
+
IDNABidiError,
|
4 |
+
IDNAError,
|
5 |
+
InvalidCodepoint,
|
6 |
+
InvalidCodepointContext,
|
7 |
+
alabel,
|
8 |
+
check_bidi,
|
9 |
+
check_hyphen_ok,
|
10 |
+
check_initial_combiner,
|
11 |
+
check_label,
|
12 |
+
check_nfc,
|
13 |
+
decode,
|
14 |
+
encode,
|
15 |
+
ulabel,
|
16 |
+
uts46_remap,
|
17 |
+
valid_contextj,
|
18 |
+
valid_contexto,
|
19 |
+
valid_label_length,
|
20 |
+
valid_string_length,
|
21 |
+
)
|
22 |
+
from .intranges import intranges_contain
|
23 |
+
|
24 |
+
__all__ = [
|
25 |
+
"IDNABidiError",
|
26 |
+
"IDNAError",
|
27 |
+
"InvalidCodepoint",
|
28 |
+
"InvalidCodepointContext",
|
29 |
+
"alabel",
|
30 |
+
"check_bidi",
|
31 |
+
"check_hyphen_ok",
|
32 |
+
"check_initial_combiner",
|
33 |
+
"check_label",
|
34 |
+
"check_nfc",
|
35 |
+
"decode",
|
36 |
+
"encode",
|
37 |
+
"intranges_contain",
|
38 |
+
"ulabel",
|
39 |
+
"uts46_remap",
|
40 |
+
"valid_contextj",
|
41 |
+
"valid_contexto",
|
42 |
+
"valid_label_length",
|
43 |
+
"valid_string_length",
|
44 |
+
]
|
lib/python3.11/site-packages/idna/__pycache__/__init__.cpython-311.pyc
ADDED
Binary file (1.12 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/codec.cpython-311.pyc
ADDED
Binary file (5.81 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/compat.cpython-311.pyc
ADDED
Binary file (1.04 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/core.cpython-311.pyc
ADDED
Binary file (19.4 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/idnadata.cpython-311.pyc
ADDED
Binary file (39 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/intranges.cpython-311.pyc
ADDED
Binary file (3.01 kB). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/package_data.cpython-311.pyc
ADDED
Binary file (241 Bytes). View file
|
|
lib/python3.11/site-packages/idna/__pycache__/uts46data.cpython-311.pyc
ADDED
Binary file (163 kB). View file
|
|
lib/python3.11/site-packages/idna/codec.py
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .core import encode, decode, alabel, ulabel, IDNAError
|
2 |
+
import codecs
|
3 |
+
import re
|
4 |
+
from typing import Any, Tuple, Optional
|
5 |
+
|
6 |
+
_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
|
7 |
+
|
8 |
+
class Codec(codecs.Codec):
|
9 |
+
|
10 |
+
def encode(self, data: str, errors: str = 'strict') -> Tuple[bytes, int]:
|
11 |
+
if errors != 'strict':
|
12 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
13 |
+
|
14 |
+
if not data:
|
15 |
+
return b"", 0
|
16 |
+
|
17 |
+
return encode(data), len(data)
|
18 |
+
|
19 |
+
def decode(self, data: bytes, errors: str = 'strict') -> Tuple[str, int]:
|
20 |
+
if errors != 'strict':
|
21 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
22 |
+
|
23 |
+
if not data:
|
24 |
+
return '', 0
|
25 |
+
|
26 |
+
return decode(data), len(data)
|
27 |
+
|
28 |
+
class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
|
29 |
+
def _buffer_encode(self, data: str, errors: str, final: bool) -> Tuple[bytes, int]:
|
30 |
+
if errors != 'strict':
|
31 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
32 |
+
|
33 |
+
if not data:
|
34 |
+
return b'', 0
|
35 |
+
|
36 |
+
labels = _unicode_dots_re.split(data)
|
37 |
+
trailing_dot = b''
|
38 |
+
if labels:
|
39 |
+
if not labels[-1]:
|
40 |
+
trailing_dot = b'.'
|
41 |
+
del labels[-1]
|
42 |
+
elif not final:
|
43 |
+
# Keep potentially unfinished label until the next call
|
44 |
+
del labels[-1]
|
45 |
+
if labels:
|
46 |
+
trailing_dot = b'.'
|
47 |
+
|
48 |
+
result = []
|
49 |
+
size = 0
|
50 |
+
for label in labels:
|
51 |
+
result.append(alabel(label))
|
52 |
+
if size:
|
53 |
+
size += 1
|
54 |
+
size += len(label)
|
55 |
+
|
56 |
+
# Join with U+002E
|
57 |
+
result_bytes = b'.'.join(result) + trailing_dot
|
58 |
+
size += len(trailing_dot)
|
59 |
+
return result_bytes, size
|
60 |
+
|
61 |
+
class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
|
62 |
+
def _buffer_decode(self, data: Any, errors: str, final: bool) -> Tuple[str, int]:
|
63 |
+
if errors != 'strict':
|
64 |
+
raise IDNAError('Unsupported error handling \"{}\"'.format(errors))
|
65 |
+
|
66 |
+
if not data:
|
67 |
+
return ('', 0)
|
68 |
+
|
69 |
+
if not isinstance(data, str):
|
70 |
+
data = str(data, 'ascii')
|
71 |
+
|
72 |
+
labels = _unicode_dots_re.split(data)
|
73 |
+
trailing_dot = ''
|
74 |
+
if labels:
|
75 |
+
if not labels[-1]:
|
76 |
+
trailing_dot = '.'
|
77 |
+
del labels[-1]
|
78 |
+
elif not final:
|
79 |
+
# Keep potentially unfinished label until the next call
|
80 |
+
del labels[-1]
|
81 |
+
if labels:
|
82 |
+
trailing_dot = '.'
|
83 |
+
|
84 |
+
result = []
|
85 |
+
size = 0
|
86 |
+
for label in labels:
|
87 |
+
result.append(ulabel(label))
|
88 |
+
if size:
|
89 |
+
size += 1
|
90 |
+
size += len(label)
|
91 |
+
|
92 |
+
result_str = '.'.join(result) + trailing_dot
|
93 |
+
size += len(trailing_dot)
|
94 |
+
return (result_str, size)
|
95 |
+
|
96 |
+
|
97 |
+
class StreamWriter(Codec, codecs.StreamWriter):
|
98 |
+
pass
|
99 |
+
|
100 |
+
|
101 |
+
class StreamReader(Codec, codecs.StreamReader):
|
102 |
+
pass
|
103 |
+
|
104 |
+
|
105 |
+
def search_function(name: str) -> Optional[codecs.CodecInfo]:
|
106 |
+
if name != 'idna2008':
|
107 |
+
return None
|
108 |
+
return codecs.CodecInfo(
|
109 |
+
name=name,
|
110 |
+
encode=Codec().encode,
|
111 |
+
decode=Codec().decode,
|
112 |
+
incrementalencoder=IncrementalEncoder,
|
113 |
+
incrementaldecoder=IncrementalDecoder,
|
114 |
+
streamwriter=StreamWriter,
|
115 |
+
streamreader=StreamReader,
|
116 |
+
)
|
117 |
+
|
118 |
+
codecs.register(search_function)
|
lib/python3.11/site-packages/idna/compat.py
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .core import *
|
2 |
+
from .codec import *
|
3 |
+
from typing import Any, Union
|
4 |
+
|
5 |
+
def ToASCII(label: str) -> bytes:
|
6 |
+
return encode(label)
|
7 |
+
|
8 |
+
def ToUnicode(label: Union[bytes, bytearray]) -> str:
|
9 |
+
return decode(label)
|
10 |
+
|
11 |
+
def nameprep(s: Any) -> None:
|
12 |
+
raise NotImplementedError('IDNA 2008 does not utilise nameprep protocol')
|
13 |
+
|
lib/python3.11/site-packages/idna/core.py
ADDED
@@ -0,0 +1,400 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from . import idnadata
|
2 |
+
import bisect
|
3 |
+
import unicodedata
|
4 |
+
import re
|
5 |
+
from typing import Union, Optional
|
6 |
+
from .intranges import intranges_contain
|
7 |
+
|
8 |
+
_virama_combining_class = 9
|
9 |
+
_alabel_prefix = b'xn--'
|
10 |
+
_unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
|
11 |
+
|
12 |
+
class IDNAError(UnicodeError):
|
13 |
+
""" Base exception for all IDNA-encoding related problems """
|
14 |
+
pass
|
15 |
+
|
16 |
+
|
17 |
+
class IDNABidiError(IDNAError):
|
18 |
+
""" Exception when bidirectional requirements are not satisfied """
|
19 |
+
pass
|
20 |
+
|
21 |
+
|
22 |
+
class InvalidCodepoint(IDNAError):
|
23 |
+
""" Exception when a disallowed or unallocated codepoint is used """
|
24 |
+
pass
|
25 |
+
|
26 |
+
|
27 |
+
class InvalidCodepointContext(IDNAError):
|
28 |
+
""" Exception when the codepoint is not valid in the context it is used """
|
29 |
+
pass
|
30 |
+
|
31 |
+
|
32 |
+
def _combining_class(cp: int) -> int:
|
33 |
+
v = unicodedata.combining(chr(cp))
|
34 |
+
if v == 0:
|
35 |
+
if not unicodedata.name(chr(cp)):
|
36 |
+
raise ValueError('Unknown character in unicodedata')
|
37 |
+
return v
|
38 |
+
|
39 |
+
def _is_script(cp: str, script: str) -> bool:
|
40 |
+
return intranges_contain(ord(cp), idnadata.scripts[script])
|
41 |
+
|
42 |
+
def _punycode(s: str) -> bytes:
|
43 |
+
return s.encode('punycode')
|
44 |
+
|
45 |
+
def _unot(s: int) -> str:
|
46 |
+
return 'U+{:04X}'.format(s)
|
47 |
+
|
48 |
+
|
49 |
+
def valid_label_length(label: Union[bytes, str]) -> bool:
|
50 |
+
if len(label) > 63:
|
51 |
+
return False
|
52 |
+
return True
|
53 |
+
|
54 |
+
|
55 |
+
def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool:
|
56 |
+
if len(label) > (254 if trailing_dot else 253):
|
57 |
+
return False
|
58 |
+
return True
|
59 |
+
|
60 |
+
|
61 |
+
def check_bidi(label: str, check_ltr: bool = False) -> bool:
|
62 |
+
# Bidi rules should only be applied if string contains RTL characters
|
63 |
+
bidi_label = False
|
64 |
+
for (idx, cp) in enumerate(label, 1):
|
65 |
+
direction = unicodedata.bidirectional(cp)
|
66 |
+
if direction == '':
|
67 |
+
# String likely comes from a newer version of Unicode
|
68 |
+
raise IDNABidiError('Unknown directionality in label {} at position {}'.format(repr(label), idx))
|
69 |
+
if direction in ['R', 'AL', 'AN']:
|
70 |
+
bidi_label = True
|
71 |
+
if not bidi_label and not check_ltr:
|
72 |
+
return True
|
73 |
+
|
74 |
+
# Bidi rule 1
|
75 |
+
direction = unicodedata.bidirectional(label[0])
|
76 |
+
if direction in ['R', 'AL']:
|
77 |
+
rtl = True
|
78 |
+
elif direction == 'L':
|
79 |
+
rtl = False
|
80 |
+
else:
|
81 |
+
raise IDNABidiError('First codepoint in label {} must be directionality L, R or AL'.format(repr(label)))
|
82 |
+
|
83 |
+
valid_ending = False
|
84 |
+
number_type = None # type: Optional[str]
|
85 |
+
for (idx, cp) in enumerate(label, 1):
|
86 |
+
direction = unicodedata.bidirectional(cp)
|
87 |
+
|
88 |
+
if rtl:
|
89 |
+
# Bidi rule 2
|
90 |
+
if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
|
91 |
+
raise IDNABidiError('Invalid direction for codepoint at position {} in a right-to-left label'.format(idx))
|
92 |
+
# Bidi rule 3
|
93 |
+
if direction in ['R', 'AL', 'EN', 'AN']:
|
94 |
+
valid_ending = True
|
95 |
+
elif direction != 'NSM':
|
96 |
+
valid_ending = False
|
97 |
+
# Bidi rule 4
|
98 |
+
if direction in ['AN', 'EN']:
|
99 |
+
if not number_type:
|
100 |
+
number_type = direction
|
101 |
+
else:
|
102 |
+
if number_type != direction:
|
103 |
+
raise IDNABidiError('Can not mix numeral types in a right-to-left label')
|
104 |
+
else:
|
105 |
+
# Bidi rule 5
|
106 |
+
if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
|
107 |
+
raise IDNABidiError('Invalid direction for codepoint at position {} in a left-to-right label'.format(idx))
|
108 |
+
# Bidi rule 6
|
109 |
+
if direction in ['L', 'EN']:
|
110 |
+
valid_ending = True
|
111 |
+
elif direction != 'NSM':
|
112 |
+
valid_ending = False
|
113 |
+
|
114 |
+
if not valid_ending:
|
115 |
+
raise IDNABidiError('Label ends with illegal codepoint directionality')
|
116 |
+
|
117 |
+
return True
|
118 |
+
|
119 |
+
|
120 |
+
def check_initial_combiner(label: str) -> bool:
|
121 |
+
if unicodedata.category(label[0])[0] == 'M':
|
122 |
+
raise IDNAError('Label begins with an illegal combining character')
|
123 |
+
return True
|
124 |
+
|
125 |
+
|
126 |
+
def check_hyphen_ok(label: str) -> bool:
|
127 |
+
if label[2:4] == '--':
|
128 |
+
raise IDNAError('Label has disallowed hyphens in 3rd and 4th position')
|
129 |
+
if label[0] == '-' or label[-1] == '-':
|
130 |
+
raise IDNAError('Label must not start or end with a hyphen')
|
131 |
+
return True
|
132 |
+
|
133 |
+
|
134 |
+
def check_nfc(label: str) -> None:
|
135 |
+
if unicodedata.normalize('NFC', label) != label:
|
136 |
+
raise IDNAError('Label must be in Normalization Form C')
|
137 |
+
|
138 |
+
|
139 |
+
def valid_contextj(label: str, pos: int) -> bool:
|
140 |
+
cp_value = ord(label[pos])
|
141 |
+
|
142 |
+
if cp_value == 0x200c:
|
143 |
+
|
144 |
+
if pos > 0:
|
145 |
+
if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
|
146 |
+
return True
|
147 |
+
|
148 |
+
ok = False
|
149 |
+
for i in range(pos-1, -1, -1):
|
150 |
+
joining_type = idnadata.joining_types.get(ord(label[i]))
|
151 |
+
if joining_type == ord('T'):
|
152 |
+
continue
|
153 |
+
if joining_type in [ord('L'), ord('D')]:
|
154 |
+
ok = True
|
155 |
+
break
|
156 |
+
|
157 |
+
if not ok:
|
158 |
+
return False
|
159 |
+
|
160 |
+
ok = False
|
161 |
+
for i in range(pos+1, len(label)):
|
162 |
+
joining_type = idnadata.joining_types.get(ord(label[i]))
|
163 |
+
if joining_type == ord('T'):
|
164 |
+
continue
|
165 |
+
if joining_type in [ord('R'), ord('D')]:
|
166 |
+
ok = True
|
167 |
+
break
|
168 |
+
return ok
|
169 |
+
|
170 |
+
if cp_value == 0x200d:
|
171 |
+
|
172 |
+
if pos > 0:
|
173 |
+
if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
|
174 |
+
return True
|
175 |
+
return False
|
176 |
+
|
177 |
+
else:
|
178 |
+
|
179 |
+
return False
|
180 |
+
|
181 |
+
|
182 |
+
def valid_contexto(label: str, pos: int, exception: bool = False) -> bool:
|
183 |
+
cp_value = ord(label[pos])
|
184 |
+
|
185 |
+
if cp_value == 0x00b7:
|
186 |
+
if 0 < pos < len(label)-1:
|
187 |
+
if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c:
|
188 |
+
return True
|
189 |
+
return False
|
190 |
+
|
191 |
+
elif cp_value == 0x0375:
|
192 |
+
if pos < len(label)-1 and len(label) > 1:
|
193 |
+
return _is_script(label[pos + 1], 'Greek')
|
194 |
+
return False
|
195 |
+
|
196 |
+
elif cp_value == 0x05f3 or cp_value == 0x05f4:
|
197 |
+
if pos > 0:
|
198 |
+
return _is_script(label[pos - 1], 'Hebrew')
|
199 |
+
return False
|
200 |
+
|
201 |
+
elif cp_value == 0x30fb:
|
202 |
+
for cp in label:
|
203 |
+
if cp == '\u30fb':
|
204 |
+
continue
|
205 |
+
if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'):
|
206 |
+
return True
|
207 |
+
return False
|
208 |
+
|
209 |
+
elif 0x660 <= cp_value <= 0x669:
|
210 |
+
for cp in label:
|
211 |
+
if 0x6f0 <= ord(cp) <= 0x06f9:
|
212 |
+
return False
|
213 |
+
return True
|
214 |
+
|
215 |
+
elif 0x6f0 <= cp_value <= 0x6f9:
|
216 |
+
for cp in label:
|
217 |
+
if 0x660 <= ord(cp) <= 0x0669:
|
218 |
+
return False
|
219 |
+
return True
|
220 |
+
|
221 |
+
return False
|
222 |
+
|
223 |
+
|
224 |
+
def check_label(label: Union[str, bytes, bytearray]) -> None:
|
225 |
+
if isinstance(label, (bytes, bytearray)):
|
226 |
+
label = label.decode('utf-8')
|
227 |
+
if len(label) == 0:
|
228 |
+
raise IDNAError('Empty Label')
|
229 |
+
|
230 |
+
check_nfc(label)
|
231 |
+
check_hyphen_ok(label)
|
232 |
+
check_initial_combiner(label)
|
233 |
+
|
234 |
+
for (pos, cp) in enumerate(label):
|
235 |
+
cp_value = ord(cp)
|
236 |
+
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
|
237 |
+
continue
|
238 |
+
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
|
239 |
+
try:
|
240 |
+
if not valid_contextj(label, pos):
|
241 |
+
raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
|
242 |
+
_unot(cp_value), pos+1, repr(label)))
|
243 |
+
except ValueError:
|
244 |
+
raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format(
|
245 |
+
_unot(cp_value), pos+1, repr(label)))
|
246 |
+
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
|
247 |
+
if not valid_contexto(label, pos):
|
248 |
+
raise InvalidCodepointContext('Codepoint {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label)))
|
249 |
+
else:
|
250 |
+
raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label)))
|
251 |
+
|
252 |
+
check_bidi(label)
|
253 |
+
|
254 |
+
|
255 |
+
def alabel(label: str) -> bytes:
|
256 |
+
try:
|
257 |
+
label_bytes = label.encode('ascii')
|
258 |
+
ulabel(label_bytes)
|
259 |
+
if not valid_label_length(label_bytes):
|
260 |
+
raise IDNAError('Label too long')
|
261 |
+
return label_bytes
|
262 |
+
except UnicodeEncodeError:
|
263 |
+
pass
|
264 |
+
|
265 |
+
if not label:
|
266 |
+
raise IDNAError('No Input')
|
267 |
+
|
268 |
+
label = str(label)
|
269 |
+
check_label(label)
|
270 |
+
label_bytes = _punycode(label)
|
271 |
+
label_bytes = _alabel_prefix + label_bytes
|
272 |
+
|
273 |
+
if not valid_label_length(label_bytes):
|
274 |
+
raise IDNAError('Label too long')
|
275 |
+
|
276 |
+
return label_bytes
|
277 |
+
|
278 |
+
|
279 |
+
def ulabel(label: Union[str, bytes, bytearray]) -> str:
|
280 |
+
if not isinstance(label, (bytes, bytearray)):
|
281 |
+
try:
|
282 |
+
label_bytes = label.encode('ascii')
|
283 |
+
except UnicodeEncodeError:
|
284 |
+
check_label(label)
|
285 |
+
return label
|
286 |
+
else:
|
287 |
+
label_bytes = label
|
288 |
+
|
289 |
+
label_bytes = label_bytes.lower()
|
290 |
+
if label_bytes.startswith(_alabel_prefix):
|
291 |
+
label_bytes = label_bytes[len(_alabel_prefix):]
|
292 |
+
if not label_bytes:
|
293 |
+
raise IDNAError('Malformed A-label, no Punycode eligible content found')
|
294 |
+
if label_bytes.decode('ascii')[-1] == '-':
|
295 |
+
raise IDNAError('A-label must not end with a hyphen')
|
296 |
+
else:
|
297 |
+
check_label(label_bytes)
|
298 |
+
return label_bytes.decode('ascii')
|
299 |
+
|
300 |
+
try:
|
301 |
+
label = label_bytes.decode('punycode')
|
302 |
+
except UnicodeError:
|
303 |
+
raise IDNAError('Invalid A-label')
|
304 |
+
check_label(label)
|
305 |
+
return label
|
306 |
+
|
307 |
+
|
308 |
+
def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str:
|
309 |
+
"""Re-map the characters in the string according to UTS46 processing."""
|
310 |
+
from .uts46data import uts46data
|
311 |
+
output = ''
|
312 |
+
|
313 |
+
for pos, char in enumerate(domain):
|
314 |
+
code_point = ord(char)
|
315 |
+
try:
|
316 |
+
uts46row = uts46data[code_point if code_point < 256 else
|
317 |
+
bisect.bisect_left(uts46data, (code_point, 'Z')) - 1]
|
318 |
+
status = uts46row[1]
|
319 |
+
replacement = None # type: Optional[str]
|
320 |
+
if len(uts46row) == 3:
|
321 |
+
replacement = uts46row[2]
|
322 |
+
if (status == 'V' or
|
323 |
+
(status == 'D' and not transitional) or
|
324 |
+
(status == '3' and not std3_rules and replacement is None)):
|
325 |
+
output += char
|
326 |
+
elif replacement is not None and (status == 'M' or
|
327 |
+
(status == '3' and not std3_rules) or
|
328 |
+
(status == 'D' and transitional)):
|
329 |
+
output += replacement
|
330 |
+
elif status != 'I':
|
331 |
+
raise IndexError()
|
332 |
+
except IndexError:
|
333 |
+
raise InvalidCodepoint(
|
334 |
+
'Codepoint {} not allowed at position {} in {}'.format(
|
335 |
+
_unot(code_point), pos + 1, repr(domain)))
|
336 |
+
|
337 |
+
return unicodedata.normalize('NFC', output)
|
338 |
+
|
339 |
+
|
340 |
+
def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes:
|
341 |
+
if not isinstance(s, str):
|
342 |
+
try:
|
343 |
+
s = str(s, 'ascii')
|
344 |
+
except UnicodeDecodeError:
|
345 |
+
raise IDNAError('should pass a unicode string to the function rather than a byte string.')
|
346 |
+
if uts46:
|
347 |
+
s = uts46_remap(s, std3_rules, transitional)
|
348 |
+
trailing_dot = False
|
349 |
+
result = []
|
350 |
+
if strict:
|
351 |
+
labels = s.split('.')
|
352 |
+
else:
|
353 |
+
labels = _unicode_dots_re.split(s)
|
354 |
+
if not labels or labels == ['']:
|
355 |
+
raise IDNAError('Empty domain')
|
356 |
+
if labels[-1] == '':
|
357 |
+
del labels[-1]
|
358 |
+
trailing_dot = True
|
359 |
+
for label in labels:
|
360 |
+
s = alabel(label)
|
361 |
+
if s:
|
362 |
+
result.append(s)
|
363 |
+
else:
|
364 |
+
raise IDNAError('Empty label')
|
365 |
+
if trailing_dot:
|
366 |
+
result.append(b'')
|
367 |
+
s = b'.'.join(result)
|
368 |
+
if not valid_string_length(s, trailing_dot):
|
369 |
+
raise IDNAError('Domain too long')
|
370 |
+
return s
|
371 |
+
|
372 |
+
|
373 |
+
def decode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str:
|
374 |
+
try:
|
375 |
+
if not isinstance(s, str):
|
376 |
+
s = str(s, 'ascii')
|
377 |
+
except UnicodeDecodeError:
|
378 |
+
raise IDNAError('Invalid ASCII in A-label')
|
379 |
+
if uts46:
|
380 |
+
s = uts46_remap(s, std3_rules, False)
|
381 |
+
trailing_dot = False
|
382 |
+
result = []
|
383 |
+
if not strict:
|
384 |
+
labels = _unicode_dots_re.split(s)
|
385 |
+
else:
|
386 |
+
labels = s.split('.')
|
387 |
+
if not labels or labels == ['']:
|
388 |
+
raise IDNAError('Empty domain')
|
389 |
+
if not labels[-1]:
|
390 |
+
del labels[-1]
|
391 |
+
trailing_dot = True
|
392 |
+
for label in labels:
|
393 |
+
s = ulabel(label)
|
394 |
+
if s:
|
395 |
+
result.append(s)
|
396 |
+
else:
|
397 |
+
raise IDNAError('Empty label')
|
398 |
+
if trailing_dot:
|
399 |
+
result.append('')
|
400 |
+
return '.'.join(result)
|
lib/python3.11/site-packages/idna/idnadata.py
ADDED
@@ -0,0 +1,2150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file is automatically generated by tools/idna-data
|
2 |
+
|
3 |
+
__version__ = '15.1.0'
|
4 |
+
scripts = {
|
5 |
+
'Greek': (
|
6 |
+
0x37000000374,
|
7 |
+
0x37500000378,
|
8 |
+
0x37a0000037e,
|
9 |
+
0x37f00000380,
|
10 |
+
0x38400000385,
|
11 |
+
0x38600000387,
|
12 |
+
0x3880000038b,
|
13 |
+
0x38c0000038d,
|
14 |
+
0x38e000003a2,
|
15 |
+
0x3a3000003e2,
|
16 |
+
0x3f000000400,
|
17 |
+
0x1d2600001d2b,
|
18 |
+
0x1d5d00001d62,
|
19 |
+
0x1d6600001d6b,
|
20 |
+
0x1dbf00001dc0,
|
21 |
+
0x1f0000001f16,
|
22 |
+
0x1f1800001f1e,
|
23 |
+
0x1f2000001f46,
|
24 |
+
0x1f4800001f4e,
|
25 |
+
0x1f5000001f58,
|
26 |
+
0x1f5900001f5a,
|
27 |
+
0x1f5b00001f5c,
|
28 |
+
0x1f5d00001f5e,
|
29 |
+
0x1f5f00001f7e,
|
30 |
+
0x1f8000001fb5,
|
31 |
+
0x1fb600001fc5,
|
32 |
+
0x1fc600001fd4,
|
33 |
+
0x1fd600001fdc,
|
34 |
+
0x1fdd00001ff0,
|
35 |
+
0x1ff200001ff5,
|
36 |
+
0x1ff600001fff,
|
37 |
+
0x212600002127,
|
38 |
+
0xab650000ab66,
|
39 |
+
0x101400001018f,
|
40 |
+
0x101a0000101a1,
|
41 |
+
0x1d2000001d246,
|
42 |
+
),
|
43 |
+
'Han': (
|
44 |
+
0x2e8000002e9a,
|
45 |
+
0x2e9b00002ef4,
|
46 |
+
0x2f0000002fd6,
|
47 |
+
0x300500003006,
|
48 |
+
0x300700003008,
|
49 |
+
0x30210000302a,
|
50 |
+
0x30380000303c,
|
51 |
+
0x340000004dc0,
|
52 |
+
0x4e000000a000,
|
53 |
+
0xf9000000fa6e,
|
54 |
+
0xfa700000fada,
|
55 |
+
0x16fe200016fe4,
|
56 |
+
0x16ff000016ff2,
|
57 |
+
0x200000002a6e0,
|
58 |
+
0x2a7000002b73a,
|
59 |
+
0x2b7400002b81e,
|
60 |
+
0x2b8200002cea2,
|
61 |
+
0x2ceb00002ebe1,
|
62 |
+
0x2ebf00002ee5e,
|
63 |
+
0x2f8000002fa1e,
|
64 |
+
0x300000003134b,
|
65 |
+
0x31350000323b0,
|
66 |
+
),
|
67 |
+
'Hebrew': (
|
68 |
+
0x591000005c8,
|
69 |
+
0x5d0000005eb,
|
70 |
+
0x5ef000005f5,
|
71 |
+
0xfb1d0000fb37,
|
72 |
+
0xfb380000fb3d,
|
73 |
+
0xfb3e0000fb3f,
|
74 |
+
0xfb400000fb42,
|
75 |
+
0xfb430000fb45,
|
76 |
+
0xfb460000fb50,
|
77 |
+
),
|
78 |
+
'Hiragana': (
|
79 |
+
0x304100003097,
|
80 |
+
0x309d000030a0,
|
81 |
+
0x1b0010001b120,
|
82 |
+
0x1b1320001b133,
|
83 |
+
0x1b1500001b153,
|
84 |
+
0x1f2000001f201,
|
85 |
+
),
|
86 |
+
'Katakana': (
|
87 |
+
0x30a1000030fb,
|
88 |
+
0x30fd00003100,
|
89 |
+
0x31f000003200,
|
90 |
+
0x32d0000032ff,
|
91 |
+
0x330000003358,
|
92 |
+
0xff660000ff70,
|
93 |
+
0xff710000ff9e,
|
94 |
+
0x1aff00001aff4,
|
95 |
+
0x1aff50001affc,
|
96 |
+
0x1affd0001afff,
|
97 |
+
0x1b0000001b001,
|
98 |
+
0x1b1200001b123,
|
99 |
+
0x1b1550001b156,
|
100 |
+
0x1b1640001b168,
|
101 |
+
),
|
102 |
+
}
|
103 |
+
joining_types = {
|
104 |
+
0x600: 85,
|
105 |
+
0x601: 85,
|
106 |
+
0x602: 85,
|
107 |
+
0x603: 85,
|
108 |
+
0x604: 85,
|
109 |
+
0x605: 85,
|
110 |
+
0x608: 85,
|
111 |
+
0x60b: 85,
|
112 |
+
0x620: 68,
|
113 |
+
0x621: 85,
|
114 |
+
0x622: 82,
|
115 |
+
0x623: 82,
|
116 |
+
0x624: 82,
|
117 |
+
0x625: 82,
|
118 |
+
0x626: 68,
|
119 |
+
0x627: 82,
|
120 |
+
0x628: 68,
|
121 |
+
0x629: 82,
|
122 |
+
0x62a: 68,
|
123 |
+
0x62b: 68,
|
124 |
+
0x62c: 68,
|
125 |
+
0x62d: 68,
|
126 |
+
0x62e: 68,
|
127 |
+
0x62f: 82,
|
128 |
+
0x630: 82,
|
129 |
+
0x631: 82,
|
130 |
+
0x632: 82,
|
131 |
+
0x633: 68,
|
132 |
+
0x634: 68,
|
133 |
+
0x635: 68,
|
134 |
+
0x636: 68,
|
135 |
+
0x637: 68,
|
136 |
+
0x638: 68,
|
137 |
+
0x639: 68,
|
138 |
+
0x63a: 68,
|
139 |
+
0x63b: 68,
|
140 |
+
0x63c: 68,
|
141 |
+
0x63d: 68,
|
142 |
+
0x63e: 68,
|
143 |
+
0x63f: 68,
|
144 |
+
0x640: 67,
|
145 |
+
0x641: 68,
|
146 |
+
0x642: 68,
|
147 |
+
0x643: 68,
|
148 |
+
0x644: 68,
|
149 |
+
0x645: 68,
|
150 |
+
0x646: 68,
|
151 |
+
0x647: 68,
|
152 |
+
0x648: 82,
|
153 |
+
0x649: 68,
|
154 |
+
0x64a: 68,
|
155 |
+
0x66e: 68,
|
156 |
+
0x66f: 68,
|
157 |
+
0x671: 82,
|
158 |
+
0x672: 82,
|
159 |
+
0x673: 82,
|
160 |
+
0x674: 85,
|
161 |
+
0x675: 82,
|
162 |
+
0x676: 82,
|
163 |
+
0x677: 82,
|
164 |
+
0x678: 68,
|
165 |
+
0x679: 68,
|
166 |
+
0x67a: 68,
|
167 |
+
0x67b: 68,
|
168 |
+
0x67c: 68,
|
169 |
+
0x67d: 68,
|
170 |
+
0x67e: 68,
|
171 |
+
0x67f: 68,
|
172 |
+
0x680: 68,
|
173 |
+
0x681: 68,
|
174 |
+
0x682: 68,
|
175 |
+
0x683: 68,
|
176 |
+
0x684: 68,
|
177 |
+
0x685: 68,
|
178 |
+
0x686: 68,
|
179 |
+
0x687: 68,
|
180 |
+
0x688: 82,
|
181 |
+
0x689: 82,
|
182 |
+
0x68a: 82,
|
183 |
+
0x68b: 82,
|
184 |
+
0x68c: 82,
|
185 |
+
0x68d: 82,
|
186 |
+
0x68e: 82,
|
187 |
+
0x68f: 82,
|
188 |
+
0x690: 82,
|
189 |
+
0x691: 82,
|
190 |
+
0x692: 82,
|
191 |
+
0x693: 82,
|
192 |
+
0x694: 82,
|
193 |
+
0x695: 82,
|
194 |
+
0x696: 82,
|
195 |
+
0x697: 82,
|
196 |
+
0x698: 82,
|
197 |
+
0x699: 82,
|
198 |
+
0x69a: 68,
|
199 |
+
0x69b: 68,
|
200 |
+
0x69c: 68,
|
201 |
+
0x69d: 68,
|
202 |
+
0x69e: 68,
|
203 |
+
0x69f: 68,
|
204 |
+
0x6a0: 68,
|
205 |
+
0x6a1: 68,
|
206 |
+
0x6a2: 68,
|
207 |
+
0x6a3: 68,
|
208 |
+
0x6a4: 68,
|
209 |
+
0x6a5: 68,
|
210 |
+
0x6a6: 68,
|
211 |
+
0x6a7: 68,
|
212 |
+
0x6a8: 68,
|
213 |
+
0x6a9: 68,
|
214 |
+
0x6aa: 68,
|
215 |
+
0x6ab: 68,
|
216 |
+
0x6ac: 68,
|
217 |
+
0x6ad: 68,
|
218 |
+
0x6ae: 68,
|
219 |
+
0x6af: 68,
|
220 |
+
0x6b0: 68,
|
221 |
+
0x6b1: 68,
|
222 |
+
0x6b2: 68,
|
223 |
+
0x6b3: 68,
|
224 |
+
0x6b4: 68,
|
225 |
+
0x6b5: 68,
|
226 |
+
0x6b6: 68,
|
227 |
+
0x6b7: 68,
|
228 |
+
0x6b8: 68,
|
229 |
+
0x6b9: 68,
|
230 |
+
0x6ba: 68,
|
231 |
+
0x6bb: 68,
|
232 |
+
0x6bc: 68,
|
233 |
+
0x6bd: 68,
|
234 |
+
0x6be: 68,
|
235 |
+
0x6bf: 68,
|
236 |
+
0x6c0: 82,
|
237 |
+
0x6c1: 68,
|
238 |
+
0x6c2: 68,
|
239 |
+
0x6c3: 82,
|
240 |
+
0x6c4: 82,
|
241 |
+
0x6c5: 82,
|
242 |
+
0x6c6: 82,
|
243 |
+
0x6c7: 82,
|
244 |
+
0x6c8: 82,
|
245 |
+
0x6c9: 82,
|
246 |
+
0x6ca: 82,
|
247 |
+
0x6cb: 82,
|
248 |
+
0x6cc: 68,
|
249 |
+
0x6cd: 82,
|
250 |
+
0x6ce: 68,
|
251 |
+
0x6cf: 82,
|
252 |
+
0x6d0: 68,
|
253 |
+
0x6d1: 68,
|
254 |
+
0x6d2: 82,
|
255 |
+
0x6d3: 82,
|
256 |
+
0x6d5: 82,
|
257 |
+
0x6dd: 85,
|
258 |
+
0x6ee: 82,
|
259 |
+
0x6ef: 82,
|
260 |
+
0x6fa: 68,
|
261 |
+
0x6fb: 68,
|
262 |
+
0x6fc: 68,
|
263 |
+
0x6ff: 68,
|
264 |
+
0x70f: 84,
|
265 |
+
0x710: 82,
|
266 |
+
0x712: 68,
|
267 |
+
0x713: 68,
|
268 |
+
0x714: 68,
|
269 |
+
0x715: 82,
|
270 |
+
0x716: 82,
|
271 |
+
0x717: 82,
|
272 |
+
0x718: 82,
|
273 |
+
0x719: 82,
|
274 |
+
0x71a: 68,
|
275 |
+
0x71b: 68,
|
276 |
+
0x71c: 68,
|
277 |
+
0x71d: 68,
|
278 |
+
0x71e: 82,
|
279 |
+
0x71f: 68,
|
280 |
+
0x720: 68,
|
281 |
+
0x721: 68,
|
282 |
+
0x722: 68,
|
283 |
+
0x723: 68,
|
284 |
+
0x724: 68,
|
285 |
+
0x725: 68,
|
286 |
+
0x726: 68,
|
287 |
+
0x727: 68,
|
288 |
+
0x728: 82,
|
289 |
+
0x729: 68,
|
290 |
+
0x72a: 82,
|
291 |
+
0x72b: 68,
|
292 |
+
0x72c: 82,
|
293 |
+
0x72d: 68,
|
294 |
+
0x72e: 68,
|
295 |
+
0x72f: 82,
|
296 |
+
0x74d: 82,
|
297 |
+
0x74e: 68,
|
298 |
+
0x74f: 68,
|
299 |
+
0x750: 68,
|
300 |
+
0x751: 68,
|
301 |
+
0x752: 68,
|
302 |
+
0x753: 68,
|
303 |
+
0x754: 68,
|
304 |
+
0x755: 68,
|
305 |
+
0x756: 68,
|
306 |
+
0x757: 68,
|
307 |
+
0x758: 68,
|
308 |
+
0x759: 82,
|
309 |
+
0x75a: 82,
|
310 |
+
0x75b: 82,
|
311 |
+
0x75c: 68,
|
312 |
+
0x75d: 68,
|
313 |
+
0x75e: 68,
|
314 |
+
0x75f: 68,
|
315 |
+
0x760: 68,
|
316 |
+
0x761: 68,
|
317 |
+
0x762: 68,
|
318 |
+
0x763: 68,
|
319 |
+
0x764: 68,
|
320 |
+
0x765: 68,
|
321 |
+
0x766: 68,
|
322 |
+
0x767: 68,
|
323 |
+
0x768: 68,
|
324 |
+
0x769: 68,
|
325 |
+
0x76a: 68,
|
326 |
+
0x76b: 82,
|
327 |
+
0x76c: 82,
|
328 |
+
0x76d: 68,
|
329 |
+
0x76e: 68,
|
330 |
+
0x76f: 68,
|
331 |
+
0x770: 68,
|
332 |
+
0x771: 82,
|
333 |
+
0x772: 68,
|
334 |
+
0x773: 82,
|
335 |
+
0x774: 82,
|
336 |
+
0x775: 68,
|
337 |
+
0x776: 68,
|
338 |
+
0x777: 68,
|
339 |
+
0x778: 82,
|
340 |
+
0x779: 82,
|
341 |
+
0x77a: 68,
|
342 |
+
0x77b: 68,
|
343 |
+
0x77c: 68,
|
344 |
+
0x77d: 68,
|
345 |
+
0x77e: 68,
|
346 |
+
0x77f: 68,
|
347 |
+
0x7ca: 68,
|
348 |
+
0x7cb: 68,
|
349 |
+
0x7cc: 68,
|
350 |
+
0x7cd: 68,
|
351 |
+
0x7ce: 68,
|
352 |
+
0x7cf: 68,
|
353 |
+
0x7d0: 68,
|
354 |
+
0x7d1: 68,
|
355 |
+
0x7d2: 68,
|
356 |
+
0x7d3: 68,
|
357 |
+
0x7d4: 68,
|
358 |
+
0x7d5: 68,
|
359 |
+
0x7d6: 68,
|
360 |
+
0x7d7: 68,
|
361 |
+
0x7d8: 68,
|
362 |
+
0x7d9: 68,
|
363 |
+
0x7da: 68,
|
364 |
+
0x7db: 68,
|
365 |
+
0x7dc: 68,
|
366 |
+
0x7dd: 68,
|
367 |
+
0x7de: 68,
|
368 |
+
0x7df: 68,
|
369 |
+
0x7e0: 68,
|
370 |
+
0x7e1: 68,
|
371 |
+
0x7e2: 68,
|
372 |
+
0x7e3: 68,
|
373 |
+
0x7e4: 68,
|
374 |
+
0x7e5: 68,
|
375 |
+
0x7e6: 68,
|
376 |
+
0x7e7: 68,
|
377 |
+
0x7e8: 68,
|
378 |
+
0x7e9: 68,
|
379 |
+
0x7ea: 68,
|
380 |
+
0x7fa: 67,
|
381 |
+
0x840: 82,
|
382 |
+
0x841: 68,
|
383 |
+
0x842: 68,
|
384 |
+
0x843: 68,
|
385 |
+
0x844: 68,
|
386 |
+
0x845: 68,
|
387 |
+
0x846: 82,
|
388 |
+
0x847: 82,
|
389 |
+
0x848: 68,
|
390 |
+
0x849: 82,
|
391 |
+
0x84a: 68,
|
392 |
+
0x84b: 68,
|
393 |
+
0x84c: 68,
|
394 |
+
0x84d: 68,
|
395 |
+
0x84e: 68,
|
396 |
+
0x84f: 68,
|
397 |
+
0x850: 68,
|
398 |
+
0x851: 68,
|
399 |
+
0x852: 68,
|
400 |
+
0x853: 68,
|
401 |
+
0x854: 82,
|
402 |
+
0x855: 68,
|
403 |
+
0x856: 82,
|
404 |
+
0x857: 82,
|
405 |
+
0x858: 82,
|
406 |
+
0x860: 68,
|
407 |
+
0x861: 85,
|
408 |
+
0x862: 68,
|
409 |
+
0x863: 68,
|
410 |
+
0x864: 68,
|
411 |
+
0x865: 68,
|
412 |
+
0x866: 85,
|
413 |
+
0x867: 82,
|
414 |
+
0x868: 68,
|
415 |
+
0x869: 82,
|
416 |
+
0x86a: 82,
|
417 |
+
0x870: 82,
|
418 |
+
0x871: 82,
|
419 |
+
0x872: 82,
|
420 |
+
0x873: 82,
|
421 |
+
0x874: 82,
|
422 |
+
0x875: 82,
|
423 |
+
0x876: 82,
|
424 |
+
0x877: 82,
|
425 |
+
0x878: 82,
|
426 |
+
0x879: 82,
|
427 |
+
0x87a: 82,
|
428 |
+
0x87b: 82,
|
429 |
+
0x87c: 82,
|
430 |
+
0x87d: 82,
|
431 |
+
0x87e: 82,
|
432 |
+
0x87f: 82,
|
433 |
+
0x880: 82,
|
434 |
+
0x881: 82,
|
435 |
+
0x882: 82,
|
436 |
+
0x883: 67,
|
437 |
+
0x884: 67,
|
438 |
+
0x885: 67,
|
439 |
+
0x886: 68,
|
440 |
+
0x887: 85,
|
441 |
+
0x888: 85,
|
442 |
+
0x889: 68,
|
443 |
+
0x88a: 68,
|
444 |
+
0x88b: 68,
|
445 |
+
0x88c: 68,
|
446 |
+
0x88d: 68,
|
447 |
+
0x88e: 82,
|
448 |
+
0x890: 85,
|
449 |
+
0x891: 85,
|
450 |
+
0x8a0: 68,
|
451 |
+
0x8a1: 68,
|
452 |
+
0x8a2: 68,
|
453 |
+
0x8a3: 68,
|
454 |
+
0x8a4: 68,
|
455 |
+
0x8a5: 68,
|
456 |
+
0x8a6: 68,
|
457 |
+
0x8a7: 68,
|
458 |
+
0x8a8: 68,
|
459 |
+
0x8a9: 68,
|
460 |
+
0x8aa: 82,
|
461 |
+
0x8ab: 82,
|
462 |
+
0x8ac: 82,
|
463 |
+
0x8ad: 85,
|
464 |
+
0x8ae: 82,
|
465 |
+
0x8af: 68,
|
466 |
+
0x8b0: 68,
|
467 |
+
0x8b1: 82,
|
468 |
+
0x8b2: 82,
|
469 |
+
0x8b3: 68,
|
470 |
+
0x8b4: 68,
|
471 |
+
0x8b5: 68,
|
472 |
+
0x8b6: 68,
|
473 |
+
0x8b7: 68,
|
474 |
+
0x8b8: 68,
|
475 |
+
0x8b9: 82,
|
476 |
+
0x8ba: 68,
|
477 |
+
0x8bb: 68,
|
478 |
+
0x8bc: 68,
|
479 |
+
0x8bd: 68,
|
480 |
+
0x8be: 68,
|
481 |
+
0x8bf: 68,
|
482 |
+
0x8c0: 68,
|
483 |
+
0x8c1: 68,
|
484 |
+
0x8c2: 68,
|
485 |
+
0x8c3: 68,
|
486 |
+
0x8c4: 68,
|
487 |
+
0x8c5: 68,
|
488 |
+
0x8c6: 68,
|
489 |
+
0x8c7: 68,
|
490 |
+
0x8c8: 68,
|
491 |
+
0x8e2: 85,
|
492 |
+
0x1806: 85,
|
493 |
+
0x1807: 68,
|
494 |
+
0x180a: 67,
|
495 |
+
0x180e: 85,
|
496 |
+
0x1820: 68,
|
497 |
+
0x1821: 68,
|
498 |
+
0x1822: 68,
|
499 |
+
0x1823: 68,
|
500 |
+
0x1824: 68,
|
501 |
+
0x1825: 68,
|
502 |
+
0x1826: 68,
|
503 |
+
0x1827: 68,
|
504 |
+
0x1828: 68,
|
505 |
+
0x1829: 68,
|
506 |
+
0x182a: 68,
|
507 |
+
0x182b: 68,
|
508 |
+
0x182c: 68,
|
509 |
+
0x182d: 68,
|
510 |
+
0x182e: 68,
|
511 |
+
0x182f: 68,
|
512 |
+
0x1830: 68,
|
513 |
+
0x1831: 68,
|
514 |
+
0x1832: 68,
|
515 |
+
0x1833: 68,
|
516 |
+
0x1834: 68,
|
517 |
+
0x1835: 68,
|
518 |
+
0x1836: 68,
|
519 |
+
0x1837: 68,
|
520 |
+
0x1838: 68,
|
521 |
+
0x1839: 68,
|
522 |
+
0x183a: 68,
|
523 |
+
0x183b: 68,
|
524 |
+
0x183c: 68,
|
525 |
+
0x183d: 68,
|
526 |
+
0x183e: 68,
|
527 |
+
0x183f: 68,
|
528 |
+
0x1840: 68,
|
529 |
+
0x1841: 68,
|
530 |
+
0x1842: 68,
|
531 |
+
0x1843: 68,
|
532 |
+
0x1844: 68,
|
533 |
+
0x1845: 68,
|
534 |
+
0x1846: 68,
|
535 |
+
0x1847: 68,
|
536 |
+
0x1848: 68,
|
537 |
+
0x1849: 68,
|
538 |
+
0x184a: 68,
|
539 |
+
0x184b: 68,
|
540 |
+
0x184c: 68,
|
541 |
+
0x184d: 68,
|
542 |
+
0x184e: 68,
|
543 |
+
0x184f: 68,
|
544 |
+
0x1850: 68,
|
545 |
+
0x1851: 68,
|
546 |
+
0x1852: 68,
|
547 |
+
0x1853: 68,
|
548 |
+
0x1854: 68,
|
549 |
+
0x1855: 68,
|
550 |
+
0x1856: 68,
|
551 |
+
0x1857: 68,
|
552 |
+
0x1858: 68,
|
553 |
+
0x1859: 68,
|
554 |
+
0x185a: 68,
|
555 |
+
0x185b: 68,
|
556 |
+
0x185c: 68,
|
557 |
+
0x185d: 68,
|
558 |
+
0x185e: 68,
|
559 |
+
0x185f: 68,
|
560 |
+
0x1860: 68,
|
561 |
+
0x1861: 68,
|
562 |
+
0x1862: 68,
|
563 |
+
0x1863: 68,
|
564 |
+
0x1864: 68,
|
565 |
+
0x1865: 68,
|
566 |
+
0x1866: 68,
|
567 |
+
0x1867: 68,
|
568 |
+
0x1868: 68,
|
569 |
+
0x1869: 68,
|
570 |
+
0x186a: 68,
|
571 |
+
0x186b: 68,
|
572 |
+
0x186c: 68,
|
573 |
+
0x186d: 68,
|
574 |
+
0x186e: 68,
|
575 |
+
0x186f: 68,
|
576 |
+
0x1870: 68,
|
577 |
+
0x1871: 68,
|
578 |
+
0x1872: 68,
|
579 |
+
0x1873: 68,
|
580 |
+
0x1874: 68,
|
581 |
+
0x1875: 68,
|
582 |
+
0x1876: 68,
|
583 |
+
0x1877: 68,
|
584 |
+
0x1878: 68,
|
585 |
+
0x1880: 85,
|
586 |
+
0x1881: 85,
|
587 |
+
0x1882: 85,
|
588 |
+
0x1883: 85,
|
589 |
+
0x1884: 85,
|
590 |
+
0x1885: 84,
|
591 |
+
0x1886: 84,
|
592 |
+
0x1887: 68,
|
593 |
+
0x1888: 68,
|
594 |
+
0x1889: 68,
|
595 |
+
0x188a: 68,
|
596 |
+
0x188b: 68,
|
597 |
+
0x188c: 68,
|
598 |
+
0x188d: 68,
|
599 |
+
0x188e: 68,
|
600 |
+
0x188f: 68,
|
601 |
+
0x1890: 68,
|
602 |
+
0x1891: 68,
|
603 |
+
0x1892: 68,
|
604 |
+
0x1893: 68,
|
605 |
+
0x1894: 68,
|
606 |
+
0x1895: 68,
|
607 |
+
0x1896: 68,
|
608 |
+
0x1897: 68,
|
609 |
+
0x1898: 68,
|
610 |
+
0x1899: 68,
|
611 |
+
0x189a: 68,
|
612 |
+
0x189b: 68,
|
613 |
+
0x189c: 68,
|
614 |
+
0x189d: 68,
|
615 |
+
0x189e: 68,
|
616 |
+
0x189f: 68,
|
617 |
+
0x18a0: 68,
|
618 |
+
0x18a1: 68,
|
619 |
+
0x18a2: 68,
|
620 |
+
0x18a3: 68,
|
621 |
+
0x18a4: 68,
|
622 |
+
0x18a5: 68,
|
623 |
+
0x18a6: 68,
|
624 |
+
0x18a7: 68,
|
625 |
+
0x18a8: 68,
|
626 |
+
0x18aa: 68,
|
627 |
+
0x200c: 85,
|
628 |
+
0x200d: 67,
|
629 |
+
0x202f: 85,
|
630 |
+
0x2066: 85,
|
631 |
+
0x2067: 85,
|
632 |
+
0x2068: 85,
|
633 |
+
0x2069: 85,
|
634 |
+
0xa840: 68,
|
635 |
+
0xa841: 68,
|
636 |
+
0xa842: 68,
|
637 |
+
0xa843: 68,
|
638 |
+
0xa844: 68,
|
639 |
+
0xa845: 68,
|
640 |
+
0xa846: 68,
|
641 |
+
0xa847: 68,
|
642 |
+
0xa848: 68,
|
643 |
+
0xa849: 68,
|
644 |
+
0xa84a: 68,
|
645 |
+
0xa84b: 68,
|
646 |
+
0xa84c: 68,
|
647 |
+
0xa84d: 68,
|
648 |
+
0xa84e: 68,
|
649 |
+
0xa84f: 68,
|
650 |
+
0xa850: 68,
|
651 |
+
0xa851: 68,
|
652 |
+
0xa852: 68,
|
653 |
+
0xa853: 68,
|
654 |
+
0xa854: 68,
|
655 |
+
0xa855: 68,
|
656 |
+
0xa856: 68,
|
657 |
+
0xa857: 68,
|
658 |
+
0xa858: 68,
|
659 |
+
0xa859: 68,
|
660 |
+
0xa85a: 68,
|
661 |
+
0xa85b: 68,
|
662 |
+
0xa85c: 68,
|
663 |
+
0xa85d: 68,
|
664 |
+
0xa85e: 68,
|
665 |
+
0xa85f: 68,
|
666 |
+
0xa860: 68,
|
667 |
+
0xa861: 68,
|
668 |
+
0xa862: 68,
|
669 |
+
0xa863: 68,
|
670 |
+
0xa864: 68,
|
671 |
+
0xa865: 68,
|
672 |
+
0xa866: 68,
|
673 |
+
0xa867: 68,
|
674 |
+
0xa868: 68,
|
675 |
+
0xa869: 68,
|
676 |
+
0xa86a: 68,
|
677 |
+
0xa86b: 68,
|
678 |
+
0xa86c: 68,
|
679 |
+
0xa86d: 68,
|
680 |
+
0xa86e: 68,
|
681 |
+
0xa86f: 68,
|
682 |
+
0xa870: 68,
|
683 |
+
0xa871: 68,
|
684 |
+
0xa872: 76,
|
685 |
+
0xa873: 85,
|
686 |
+
0x10ac0: 68,
|
687 |
+
0x10ac1: 68,
|
688 |
+
0x10ac2: 68,
|
689 |
+
0x10ac3: 68,
|
690 |
+
0x10ac4: 68,
|
691 |
+
0x10ac5: 82,
|
692 |
+
0x10ac6: 85,
|
693 |
+
0x10ac7: 82,
|
694 |
+
0x10ac8: 85,
|
695 |
+
0x10ac9: 82,
|
696 |
+
0x10aca: 82,
|
697 |
+
0x10acb: 85,
|
698 |
+
0x10acc: 85,
|
699 |
+
0x10acd: 76,
|
700 |
+
0x10ace: 82,
|
701 |
+
0x10acf: 82,
|
702 |
+
0x10ad0: 82,
|
703 |
+
0x10ad1: 82,
|
704 |
+
0x10ad2: 82,
|
705 |
+
0x10ad3: 68,
|
706 |
+
0x10ad4: 68,
|
707 |
+
0x10ad5: 68,
|
708 |
+
0x10ad6: 68,
|
709 |
+
0x10ad7: 76,
|
710 |
+
0x10ad8: 68,
|
711 |
+
0x10ad9: 68,
|
712 |
+
0x10ada: 68,
|
713 |
+
0x10adb: 68,
|
714 |
+
0x10adc: 68,
|
715 |
+
0x10add: 82,
|
716 |
+
0x10ade: 68,
|
717 |
+
0x10adf: 68,
|
718 |
+
0x10ae0: 68,
|
719 |
+
0x10ae1: 82,
|
720 |
+
0x10ae2: 85,
|
721 |
+
0x10ae3: 85,
|
722 |
+
0x10ae4: 82,
|
723 |
+
0x10aeb: 68,
|
724 |
+
0x10aec: 68,
|
725 |
+
0x10aed: 68,
|
726 |
+
0x10aee: 68,
|
727 |
+
0x10aef: 82,
|
728 |
+
0x10b80: 68,
|
729 |
+
0x10b81: 82,
|
730 |
+
0x10b82: 68,
|
731 |
+
0x10b83: 82,
|
732 |
+
0x10b84: 82,
|
733 |
+
0x10b85: 82,
|
734 |
+
0x10b86: 68,
|
735 |
+
0x10b87: 68,
|
736 |
+
0x10b88: 68,
|
737 |
+
0x10b89: 82,
|
738 |
+
0x10b8a: 68,
|
739 |
+
0x10b8b: 68,
|
740 |
+
0x10b8c: 82,
|
741 |
+
0x10b8d: 68,
|
742 |
+
0x10b8e: 82,
|
743 |
+
0x10b8f: 82,
|
744 |
+
0x10b90: 68,
|
745 |
+
0x10b91: 82,
|
746 |
+
0x10ba9: 82,
|
747 |
+
0x10baa: 82,
|
748 |
+
0x10bab: 82,
|
749 |
+
0x10bac: 82,
|
750 |
+
0x10bad: 68,
|
751 |
+
0x10bae: 68,
|
752 |
+
0x10baf: 85,
|
753 |
+
0x10d00: 76,
|
754 |
+
0x10d01: 68,
|
755 |
+
0x10d02: 68,
|
756 |
+
0x10d03: 68,
|
757 |
+
0x10d04: 68,
|
758 |
+
0x10d05: 68,
|
759 |
+
0x10d06: 68,
|
760 |
+
0x10d07: 68,
|
761 |
+
0x10d08: 68,
|
762 |
+
0x10d09: 68,
|
763 |
+
0x10d0a: 68,
|
764 |
+
0x10d0b: 68,
|
765 |
+
0x10d0c: 68,
|
766 |
+
0x10d0d: 68,
|
767 |
+
0x10d0e: 68,
|
768 |
+
0x10d0f: 68,
|
769 |
+
0x10d10: 68,
|
770 |
+
0x10d11: 68,
|
771 |
+
0x10d12: 68,
|
772 |
+
0x10d13: 68,
|
773 |
+
0x10d14: 68,
|
774 |
+
0x10d15: 68,
|
775 |
+
0x10d16: 68,
|
776 |
+
0x10d17: 68,
|
777 |
+
0x10d18: 68,
|
778 |
+
0x10d19: 68,
|
779 |
+
0x10d1a: 68,
|
780 |
+
0x10d1b: 68,
|
781 |
+
0x10d1c: 68,
|
782 |
+
0x10d1d: 68,
|
783 |
+
0x10d1e: 68,
|
784 |
+
0x10d1f: 68,
|
785 |
+
0x10d20: 68,
|
786 |
+
0x10d21: 68,
|
787 |
+
0x10d22: 82,
|
788 |
+
0x10d23: 68,
|
789 |
+
0x10f30: 68,
|
790 |
+
0x10f31: 68,
|
791 |
+
0x10f32: 68,
|
792 |
+
0x10f33: 82,
|
793 |
+
0x10f34: 68,
|
794 |
+
0x10f35: 68,
|
795 |
+
0x10f36: 68,
|
796 |
+
0x10f37: 68,
|
797 |
+
0x10f38: 68,
|
798 |
+
0x10f39: 68,
|
799 |
+
0x10f3a: 68,
|
800 |
+
0x10f3b: 68,
|
801 |
+
0x10f3c: 68,
|
802 |
+
0x10f3d: 68,
|
803 |
+
0x10f3e: 68,
|
804 |
+
0x10f3f: 68,
|
805 |
+
0x10f40: 68,
|
806 |
+
0x10f41: 68,
|
807 |
+
0x10f42: 68,
|
808 |
+
0x10f43: 68,
|
809 |
+
0x10f44: 68,
|
810 |
+
0x10f45: 85,
|
811 |
+
0x10f51: 68,
|
812 |
+
0x10f52: 68,
|
813 |
+
0x10f53: 68,
|
814 |
+
0x10f54: 82,
|
815 |
+
0x10f70: 68,
|
816 |
+
0x10f71: 68,
|
817 |
+
0x10f72: 68,
|
818 |
+
0x10f73: 68,
|
819 |
+
0x10f74: 82,
|
820 |
+
0x10f75: 82,
|
821 |
+
0x10f76: 68,
|
822 |
+
0x10f77: 68,
|
823 |
+
0x10f78: 68,
|
824 |
+
0x10f79: 68,
|
825 |
+
0x10f7a: 68,
|
826 |
+
0x10f7b: 68,
|
827 |
+
0x10f7c: 68,
|
828 |
+
0x10f7d: 68,
|
829 |
+
0x10f7e: 68,
|
830 |
+
0x10f7f: 68,
|
831 |
+
0x10f80: 68,
|
832 |
+
0x10f81: 68,
|
833 |
+
0x10fb0: 68,
|
834 |
+
0x10fb1: 85,
|
835 |
+
0x10fb2: 68,
|
836 |
+
0x10fb3: 68,
|
837 |
+
0x10fb4: 82,
|
838 |
+
0x10fb5: 82,
|
839 |
+
0x10fb6: 82,
|
840 |
+
0x10fb7: 85,
|
841 |
+
0x10fb8: 68,
|
842 |
+
0x10fb9: 82,
|
843 |
+
0x10fba: 82,
|
844 |
+
0x10fbb: 68,
|
845 |
+
0x10fbc: 68,
|
846 |
+
0x10fbd: 82,
|
847 |
+
0x10fbe: 68,
|
848 |
+
0x10fbf: 68,
|
849 |
+
0x10fc0: 85,
|
850 |
+
0x10fc1: 68,
|
851 |
+
0x10fc2: 82,
|
852 |
+
0x10fc3: 82,
|
853 |
+
0x10fc4: 68,
|
854 |
+
0x10fc5: 85,
|
855 |
+
0x10fc6: 85,
|
856 |
+
0x10fc7: 85,
|
857 |
+
0x10fc8: 85,
|
858 |
+
0x10fc9: 82,
|
859 |
+
0x10fca: 68,
|
860 |
+
0x10fcb: 76,
|
861 |
+
0x110bd: 85,
|
862 |
+
0x110cd: 85,
|
863 |
+
0x1e900: 68,
|
864 |
+
0x1e901: 68,
|
865 |
+
0x1e902: 68,
|
866 |
+
0x1e903: 68,
|
867 |
+
0x1e904: 68,
|
868 |
+
0x1e905: 68,
|
869 |
+
0x1e906: 68,
|
870 |
+
0x1e907: 68,
|
871 |
+
0x1e908: 68,
|
872 |
+
0x1e909: 68,
|
873 |
+
0x1e90a: 68,
|
874 |
+
0x1e90b: 68,
|
875 |
+
0x1e90c: 68,
|
876 |
+
0x1e90d: 68,
|
877 |
+
0x1e90e: 68,
|
878 |
+
0x1e90f: 68,
|
879 |
+
0x1e910: 68,
|
880 |
+
0x1e911: 68,
|
881 |
+
0x1e912: 68,
|
882 |
+
0x1e913: 68,
|
883 |
+
0x1e914: 68,
|
884 |
+
0x1e915: 68,
|
885 |
+
0x1e916: 68,
|
886 |
+
0x1e917: 68,
|
887 |
+
0x1e918: 68,
|
888 |
+
0x1e919: 68,
|
889 |
+
0x1e91a: 68,
|
890 |
+
0x1e91b: 68,
|
891 |
+
0x1e91c: 68,
|
892 |
+
0x1e91d: 68,
|
893 |
+
0x1e91e: 68,
|
894 |
+
0x1e91f: 68,
|
895 |
+
0x1e920: 68,
|
896 |
+
0x1e921: 68,
|
897 |
+
0x1e922: 68,
|
898 |
+
0x1e923: 68,
|
899 |
+
0x1e924: 68,
|
900 |
+
0x1e925: 68,
|
901 |
+
0x1e926: 68,
|
902 |
+
0x1e927: 68,
|
903 |
+
0x1e928: 68,
|
904 |
+
0x1e929: 68,
|
905 |
+
0x1e92a: 68,
|
906 |
+
0x1e92b: 68,
|
907 |
+
0x1e92c: 68,
|
908 |
+
0x1e92d: 68,
|
909 |
+
0x1e92e: 68,
|
910 |
+
0x1e92f: 68,
|
911 |
+
0x1e930: 68,
|
912 |
+
0x1e931: 68,
|
913 |
+
0x1e932: 68,
|
914 |
+
0x1e933: 68,
|
915 |
+
0x1e934: 68,
|
916 |
+
0x1e935: 68,
|
917 |
+
0x1e936: 68,
|
918 |
+
0x1e937: 68,
|
919 |
+
0x1e938: 68,
|
920 |
+
0x1e939: 68,
|
921 |
+
0x1e93a: 68,
|
922 |
+
0x1e93b: 68,
|
923 |
+
0x1e93c: 68,
|
924 |
+
0x1e93d: 68,
|
925 |
+
0x1e93e: 68,
|
926 |
+
0x1e93f: 68,
|
927 |
+
0x1e940: 68,
|
928 |
+
0x1e941: 68,
|
929 |
+
0x1e942: 68,
|
930 |
+
0x1e943: 68,
|
931 |
+
0x1e94b: 84,
|
932 |
+
}
|
933 |
+
codepoint_classes = {
|
934 |
+
'PVALID': (
|
935 |
+
0x2d0000002e,
|
936 |
+
0x300000003a,
|
937 |
+
0x610000007b,
|
938 |
+
0xdf000000f7,
|
939 |
+
0xf800000100,
|
940 |
+
0x10100000102,
|
941 |
+
0x10300000104,
|
942 |
+
0x10500000106,
|
943 |
+
0x10700000108,
|
944 |
+
0x1090000010a,
|
945 |
+
0x10b0000010c,
|
946 |
+
0x10d0000010e,
|
947 |
+
0x10f00000110,
|
948 |
+
0x11100000112,
|
949 |
+
0x11300000114,
|
950 |
+
0x11500000116,
|
951 |
+
0x11700000118,
|
952 |
+
0x1190000011a,
|
953 |
+
0x11b0000011c,
|
954 |
+
0x11d0000011e,
|
955 |
+
0x11f00000120,
|
956 |
+
0x12100000122,
|
957 |
+
0x12300000124,
|
958 |
+
0x12500000126,
|
959 |
+
0x12700000128,
|
960 |
+
0x1290000012a,
|
961 |
+
0x12b0000012c,
|
962 |
+
0x12d0000012e,
|
963 |
+
0x12f00000130,
|
964 |
+
0x13100000132,
|
965 |
+
0x13500000136,
|
966 |
+
0x13700000139,
|
967 |
+
0x13a0000013b,
|
968 |
+
0x13c0000013d,
|
969 |
+
0x13e0000013f,
|
970 |
+
0x14200000143,
|
971 |
+
0x14400000145,
|
972 |
+
0x14600000147,
|
973 |
+
0x14800000149,
|
974 |
+
0x14b0000014c,
|
975 |
+
0x14d0000014e,
|
976 |
+
0x14f00000150,
|
977 |
+
0x15100000152,
|
978 |
+
0x15300000154,
|
979 |
+
0x15500000156,
|
980 |
+
0x15700000158,
|
981 |
+
0x1590000015a,
|
982 |
+
0x15b0000015c,
|
983 |
+
0x15d0000015e,
|
984 |
+
0x15f00000160,
|
985 |
+
0x16100000162,
|
986 |
+
0x16300000164,
|
987 |
+
0x16500000166,
|
988 |
+
0x16700000168,
|
989 |
+
0x1690000016a,
|
990 |
+
0x16b0000016c,
|
991 |
+
0x16d0000016e,
|
992 |
+
0x16f00000170,
|
993 |
+
0x17100000172,
|
994 |
+
0x17300000174,
|
995 |
+
0x17500000176,
|
996 |
+
0x17700000178,
|
997 |
+
0x17a0000017b,
|
998 |
+
0x17c0000017d,
|
999 |
+
0x17e0000017f,
|
1000 |
+
0x18000000181,
|
1001 |
+
0x18300000184,
|
1002 |
+
0x18500000186,
|
1003 |
+
0x18800000189,
|
1004 |
+
0x18c0000018e,
|
1005 |
+
0x19200000193,
|
1006 |
+
0x19500000196,
|
1007 |
+
0x1990000019c,
|
1008 |
+
0x19e0000019f,
|
1009 |
+
0x1a1000001a2,
|
1010 |
+
0x1a3000001a4,
|
1011 |
+
0x1a5000001a6,
|
1012 |
+
0x1a8000001a9,
|
1013 |
+
0x1aa000001ac,
|
1014 |
+
0x1ad000001ae,
|
1015 |
+
0x1b0000001b1,
|
1016 |
+
0x1b4000001b5,
|
1017 |
+
0x1b6000001b7,
|
1018 |
+
0x1b9000001bc,
|
1019 |
+
0x1bd000001c4,
|
1020 |
+
0x1ce000001cf,
|
1021 |
+
0x1d0000001d1,
|
1022 |
+
0x1d2000001d3,
|
1023 |
+
0x1d4000001d5,
|
1024 |
+
0x1d6000001d7,
|
1025 |
+
0x1d8000001d9,
|
1026 |
+
0x1da000001db,
|
1027 |
+
0x1dc000001de,
|
1028 |
+
0x1df000001e0,
|
1029 |
+
0x1e1000001e2,
|
1030 |
+
0x1e3000001e4,
|
1031 |
+
0x1e5000001e6,
|
1032 |
+
0x1e7000001e8,
|
1033 |
+
0x1e9000001ea,
|
1034 |
+
0x1eb000001ec,
|
1035 |
+
0x1ed000001ee,
|
1036 |
+
0x1ef000001f1,
|
1037 |
+
0x1f5000001f6,
|
1038 |
+
0x1f9000001fa,
|
1039 |
+
0x1fb000001fc,
|
1040 |
+
0x1fd000001fe,
|
1041 |
+
0x1ff00000200,
|
1042 |
+
0x20100000202,
|
1043 |
+
0x20300000204,
|
1044 |
+
0x20500000206,
|
1045 |
+
0x20700000208,
|
1046 |
+
0x2090000020a,
|
1047 |
+
0x20b0000020c,
|
1048 |
+
0x20d0000020e,
|
1049 |
+
0x20f00000210,
|
1050 |
+
0x21100000212,
|
1051 |
+
0x21300000214,
|
1052 |
+
0x21500000216,
|
1053 |
+
0x21700000218,
|
1054 |
+
0x2190000021a,
|
1055 |
+
0x21b0000021c,
|
1056 |
+
0x21d0000021e,
|
1057 |
+
0x21f00000220,
|
1058 |
+
0x22100000222,
|
1059 |
+
0x22300000224,
|
1060 |
+
0x22500000226,
|
1061 |
+
0x22700000228,
|
1062 |
+
0x2290000022a,
|
1063 |
+
0x22b0000022c,
|
1064 |
+
0x22d0000022e,
|
1065 |
+
0x22f00000230,
|
1066 |
+
0x23100000232,
|
1067 |
+
0x2330000023a,
|
1068 |
+
0x23c0000023d,
|
1069 |
+
0x23f00000241,
|
1070 |
+
0x24200000243,
|
1071 |
+
0x24700000248,
|
1072 |
+
0x2490000024a,
|
1073 |
+
0x24b0000024c,
|
1074 |
+
0x24d0000024e,
|
1075 |
+
0x24f000002b0,
|
1076 |
+
0x2b9000002c2,
|
1077 |
+
0x2c6000002d2,
|
1078 |
+
0x2ec000002ed,
|
1079 |
+
0x2ee000002ef,
|
1080 |
+
0x30000000340,
|
1081 |
+
0x34200000343,
|
1082 |
+
0x3460000034f,
|
1083 |
+
0x35000000370,
|
1084 |
+
0x37100000372,
|
1085 |
+
0x37300000374,
|
1086 |
+
0x37700000378,
|
1087 |
+
0x37b0000037e,
|
1088 |
+
0x39000000391,
|
1089 |
+
0x3ac000003cf,
|
1090 |
+
0x3d7000003d8,
|
1091 |
+
0x3d9000003da,
|
1092 |
+
0x3db000003dc,
|
1093 |
+
0x3dd000003de,
|
1094 |
+
0x3df000003e0,
|
1095 |
+
0x3e1000003e2,
|
1096 |
+
0x3e3000003e4,
|
1097 |
+
0x3e5000003e6,
|
1098 |
+
0x3e7000003e8,
|
1099 |
+
0x3e9000003ea,
|
1100 |
+
0x3eb000003ec,
|
1101 |
+
0x3ed000003ee,
|
1102 |
+
0x3ef000003f0,
|
1103 |
+
0x3f3000003f4,
|
1104 |
+
0x3f8000003f9,
|
1105 |
+
0x3fb000003fd,
|
1106 |
+
0x43000000460,
|
1107 |
+
0x46100000462,
|
1108 |
+
0x46300000464,
|
1109 |
+
0x46500000466,
|
1110 |
+
0x46700000468,
|
1111 |
+
0x4690000046a,
|
1112 |
+
0x46b0000046c,
|
1113 |
+
0x46d0000046e,
|
1114 |
+
0x46f00000470,
|
1115 |
+
0x47100000472,
|
1116 |
+
0x47300000474,
|
1117 |
+
0x47500000476,
|
1118 |
+
0x47700000478,
|
1119 |
+
0x4790000047a,
|
1120 |
+
0x47b0000047c,
|
1121 |
+
0x47d0000047e,
|
1122 |
+
0x47f00000480,
|
1123 |
+
0x48100000482,
|
1124 |
+
0x48300000488,
|
1125 |
+
0x48b0000048c,
|
1126 |
+
0x48d0000048e,
|
1127 |
+
0x48f00000490,
|
1128 |
+
0x49100000492,
|
1129 |
+
0x49300000494,
|
1130 |
+
0x49500000496,
|
1131 |
+
0x49700000498,
|
1132 |
+
0x4990000049a,
|
1133 |
+
0x49b0000049c,
|
1134 |
+
0x49d0000049e,
|
1135 |
+
0x49f000004a0,
|
1136 |
+
0x4a1000004a2,
|
1137 |
+
0x4a3000004a4,
|
1138 |
+
0x4a5000004a6,
|
1139 |
+
0x4a7000004a8,
|
1140 |
+
0x4a9000004aa,
|
1141 |
+
0x4ab000004ac,
|
1142 |
+
0x4ad000004ae,
|
1143 |
+
0x4af000004b0,
|
1144 |
+
0x4b1000004b2,
|
1145 |
+
0x4b3000004b4,
|
1146 |
+
0x4b5000004b6,
|
1147 |
+
0x4b7000004b8,
|
1148 |
+
0x4b9000004ba,
|
1149 |
+
0x4bb000004bc,
|
1150 |
+
0x4bd000004be,
|
1151 |
+
0x4bf000004c0,
|
1152 |
+
0x4c2000004c3,
|
1153 |
+
0x4c4000004c5,
|
1154 |
+
0x4c6000004c7,
|
1155 |
+
0x4c8000004c9,
|
1156 |
+
0x4ca000004cb,
|
1157 |
+
0x4cc000004cd,
|
1158 |
+
0x4ce000004d0,
|
1159 |
+
0x4d1000004d2,
|
1160 |
+
0x4d3000004d4,
|
1161 |
+
0x4d5000004d6,
|
1162 |
+
0x4d7000004d8,
|
1163 |
+
0x4d9000004da,
|
1164 |
+
0x4db000004dc,
|
1165 |
+
0x4dd000004de,
|
1166 |
+
0x4df000004e0,
|
1167 |
+
0x4e1000004e2,
|
1168 |
+
0x4e3000004e4,
|
1169 |
+
0x4e5000004e6,
|
1170 |
+
0x4e7000004e8,
|
1171 |
+
0x4e9000004ea,
|
1172 |
+
0x4eb000004ec,
|
1173 |
+
0x4ed000004ee,
|
1174 |
+
0x4ef000004f0,
|
1175 |
+
0x4f1000004f2,
|
1176 |
+
0x4f3000004f4,
|
1177 |
+
0x4f5000004f6,
|
1178 |
+
0x4f7000004f8,
|
1179 |
+
0x4f9000004fa,
|
1180 |
+
0x4fb000004fc,
|
1181 |
+
0x4fd000004fe,
|
1182 |
+
0x4ff00000500,
|
1183 |
+
0x50100000502,
|
1184 |
+
0x50300000504,
|
1185 |
+
0x50500000506,
|
1186 |
+
0x50700000508,
|
1187 |
+
0x5090000050a,
|
1188 |
+
0x50b0000050c,
|
1189 |
+
0x50d0000050e,
|
1190 |
+
0x50f00000510,
|
1191 |
+
0x51100000512,
|
1192 |
+
0x51300000514,
|
1193 |
+
0x51500000516,
|
1194 |
+
0x51700000518,
|
1195 |
+
0x5190000051a,
|
1196 |
+
0x51b0000051c,
|
1197 |
+
0x51d0000051e,
|
1198 |
+
0x51f00000520,
|
1199 |
+
0x52100000522,
|
1200 |
+
0x52300000524,
|
1201 |
+
0x52500000526,
|
1202 |
+
0x52700000528,
|
1203 |
+
0x5290000052a,
|
1204 |
+
0x52b0000052c,
|
1205 |
+
0x52d0000052e,
|
1206 |
+
0x52f00000530,
|
1207 |
+
0x5590000055a,
|
1208 |
+
0x56000000587,
|
1209 |
+
0x58800000589,
|
1210 |
+
0x591000005be,
|
1211 |
+
0x5bf000005c0,
|
1212 |
+
0x5c1000005c3,
|
1213 |
+
0x5c4000005c6,
|
1214 |
+
0x5c7000005c8,
|
1215 |
+
0x5d0000005eb,
|
1216 |
+
0x5ef000005f3,
|
1217 |
+
0x6100000061b,
|
1218 |
+
0x62000000640,
|
1219 |
+
0x64100000660,
|
1220 |
+
0x66e00000675,
|
1221 |
+
0x679000006d4,
|
1222 |
+
0x6d5000006dd,
|
1223 |
+
0x6df000006e9,
|
1224 |
+
0x6ea000006f0,
|
1225 |
+
0x6fa00000700,
|
1226 |
+
0x7100000074b,
|
1227 |
+
0x74d000007b2,
|
1228 |
+
0x7c0000007f6,
|
1229 |
+
0x7fd000007fe,
|
1230 |
+
0x8000000082e,
|
1231 |
+
0x8400000085c,
|
1232 |
+
0x8600000086b,
|
1233 |
+
0x87000000888,
|
1234 |
+
0x8890000088f,
|
1235 |
+
0x898000008e2,
|
1236 |
+
0x8e300000958,
|
1237 |
+
0x96000000964,
|
1238 |
+
0x96600000970,
|
1239 |
+
0x97100000984,
|
1240 |
+
0x9850000098d,
|
1241 |
+
0x98f00000991,
|
1242 |
+
0x993000009a9,
|
1243 |
+
0x9aa000009b1,
|
1244 |
+
0x9b2000009b3,
|
1245 |
+
0x9b6000009ba,
|
1246 |
+
0x9bc000009c5,
|
1247 |
+
0x9c7000009c9,
|
1248 |
+
0x9cb000009cf,
|
1249 |
+
0x9d7000009d8,
|
1250 |
+
0x9e0000009e4,
|
1251 |
+
0x9e6000009f2,
|
1252 |
+
0x9fc000009fd,
|
1253 |
+
0x9fe000009ff,
|
1254 |
+
0xa0100000a04,
|
1255 |
+
0xa0500000a0b,
|
1256 |
+
0xa0f00000a11,
|
1257 |
+
0xa1300000a29,
|
1258 |
+
0xa2a00000a31,
|
1259 |
+
0xa3200000a33,
|
1260 |
+
0xa3500000a36,
|
1261 |
+
0xa3800000a3a,
|
1262 |
+
0xa3c00000a3d,
|
1263 |
+
0xa3e00000a43,
|
1264 |
+
0xa4700000a49,
|
1265 |
+
0xa4b00000a4e,
|
1266 |
+
0xa5100000a52,
|
1267 |
+
0xa5c00000a5d,
|
1268 |
+
0xa6600000a76,
|
1269 |
+
0xa8100000a84,
|
1270 |
+
0xa8500000a8e,
|
1271 |
+
0xa8f00000a92,
|
1272 |
+
0xa9300000aa9,
|
1273 |
+
0xaaa00000ab1,
|
1274 |
+
0xab200000ab4,
|
1275 |
+
0xab500000aba,
|
1276 |
+
0xabc00000ac6,
|
1277 |
+
0xac700000aca,
|
1278 |
+
0xacb00000ace,
|
1279 |
+
0xad000000ad1,
|
1280 |
+
0xae000000ae4,
|
1281 |
+
0xae600000af0,
|
1282 |
+
0xaf900000b00,
|
1283 |
+
0xb0100000b04,
|
1284 |
+
0xb0500000b0d,
|
1285 |
+
0xb0f00000b11,
|
1286 |
+
0xb1300000b29,
|
1287 |
+
0xb2a00000b31,
|
1288 |
+
0xb3200000b34,
|
1289 |
+
0xb3500000b3a,
|
1290 |
+
0xb3c00000b45,
|
1291 |
+
0xb4700000b49,
|
1292 |
+
0xb4b00000b4e,
|
1293 |
+
0xb5500000b58,
|
1294 |
+
0xb5f00000b64,
|
1295 |
+
0xb6600000b70,
|
1296 |
+
0xb7100000b72,
|
1297 |
+
0xb8200000b84,
|
1298 |
+
0xb8500000b8b,
|
1299 |
+
0xb8e00000b91,
|
1300 |
+
0xb9200000b96,
|
1301 |
+
0xb9900000b9b,
|
1302 |
+
0xb9c00000b9d,
|
1303 |
+
0xb9e00000ba0,
|
1304 |
+
0xba300000ba5,
|
1305 |
+
0xba800000bab,
|
1306 |
+
0xbae00000bba,
|
1307 |
+
0xbbe00000bc3,
|
1308 |
+
0xbc600000bc9,
|
1309 |
+
0xbca00000bce,
|
1310 |
+
0xbd000000bd1,
|
1311 |
+
0xbd700000bd8,
|
1312 |
+
0xbe600000bf0,
|
1313 |
+
0xc0000000c0d,
|
1314 |
+
0xc0e00000c11,
|
1315 |
+
0xc1200000c29,
|
1316 |
+
0xc2a00000c3a,
|
1317 |
+
0xc3c00000c45,
|
1318 |
+
0xc4600000c49,
|
1319 |
+
0xc4a00000c4e,
|
1320 |
+
0xc5500000c57,
|
1321 |
+
0xc5800000c5b,
|
1322 |
+
0xc5d00000c5e,
|
1323 |
+
0xc6000000c64,
|
1324 |
+
0xc6600000c70,
|
1325 |
+
0xc8000000c84,
|
1326 |
+
0xc8500000c8d,
|
1327 |
+
0xc8e00000c91,
|
1328 |
+
0xc9200000ca9,
|
1329 |
+
0xcaa00000cb4,
|
1330 |
+
0xcb500000cba,
|
1331 |
+
0xcbc00000cc5,
|
1332 |
+
0xcc600000cc9,
|
1333 |
+
0xcca00000cce,
|
1334 |
+
0xcd500000cd7,
|
1335 |
+
0xcdd00000cdf,
|
1336 |
+
0xce000000ce4,
|
1337 |
+
0xce600000cf0,
|
1338 |
+
0xcf100000cf4,
|
1339 |
+
0xd0000000d0d,
|
1340 |
+
0xd0e00000d11,
|
1341 |
+
0xd1200000d45,
|
1342 |
+
0xd4600000d49,
|
1343 |
+
0xd4a00000d4f,
|
1344 |
+
0xd5400000d58,
|
1345 |
+
0xd5f00000d64,
|
1346 |
+
0xd6600000d70,
|
1347 |
+
0xd7a00000d80,
|
1348 |
+
0xd8100000d84,
|
1349 |
+
0xd8500000d97,
|
1350 |
+
0xd9a00000db2,
|
1351 |
+
0xdb300000dbc,
|
1352 |
+
0xdbd00000dbe,
|
1353 |
+
0xdc000000dc7,
|
1354 |
+
0xdca00000dcb,
|
1355 |
+
0xdcf00000dd5,
|
1356 |
+
0xdd600000dd7,
|
1357 |
+
0xdd800000de0,
|
1358 |
+
0xde600000df0,
|
1359 |
+
0xdf200000df4,
|
1360 |
+
0xe0100000e33,
|
1361 |
+
0xe3400000e3b,
|
1362 |
+
0xe4000000e4f,
|
1363 |
+
0xe5000000e5a,
|
1364 |
+
0xe8100000e83,
|
1365 |
+
0xe8400000e85,
|
1366 |
+
0xe8600000e8b,
|
1367 |
+
0xe8c00000ea4,
|
1368 |
+
0xea500000ea6,
|
1369 |
+
0xea700000eb3,
|
1370 |
+
0xeb400000ebe,
|
1371 |
+
0xec000000ec5,
|
1372 |
+
0xec600000ec7,
|
1373 |
+
0xec800000ecf,
|
1374 |
+
0xed000000eda,
|
1375 |
+
0xede00000ee0,
|
1376 |
+
0xf0000000f01,
|
1377 |
+
0xf0b00000f0c,
|
1378 |
+
0xf1800000f1a,
|
1379 |
+
0xf2000000f2a,
|
1380 |
+
0xf3500000f36,
|
1381 |
+
0xf3700000f38,
|
1382 |
+
0xf3900000f3a,
|
1383 |
+
0xf3e00000f43,
|
1384 |
+
0xf4400000f48,
|
1385 |
+
0xf4900000f4d,
|
1386 |
+
0xf4e00000f52,
|
1387 |
+
0xf5300000f57,
|
1388 |
+
0xf5800000f5c,
|
1389 |
+
0xf5d00000f69,
|
1390 |
+
0xf6a00000f6d,
|
1391 |
+
0xf7100000f73,
|
1392 |
+
0xf7400000f75,
|
1393 |
+
0xf7a00000f81,
|
1394 |
+
0xf8200000f85,
|
1395 |
+
0xf8600000f93,
|
1396 |
+
0xf9400000f98,
|
1397 |
+
0xf9900000f9d,
|
1398 |
+
0xf9e00000fa2,
|
1399 |
+
0xfa300000fa7,
|
1400 |
+
0xfa800000fac,
|
1401 |
+
0xfad00000fb9,
|
1402 |
+
0xfba00000fbd,
|
1403 |
+
0xfc600000fc7,
|
1404 |
+
0x10000000104a,
|
1405 |
+
0x10500000109e,
|
1406 |
+
0x10d0000010fb,
|
1407 |
+
0x10fd00001100,
|
1408 |
+
0x120000001249,
|
1409 |
+
0x124a0000124e,
|
1410 |
+
0x125000001257,
|
1411 |
+
0x125800001259,
|
1412 |
+
0x125a0000125e,
|
1413 |
+
0x126000001289,
|
1414 |
+
0x128a0000128e,
|
1415 |
+
0x1290000012b1,
|
1416 |
+
0x12b2000012b6,
|
1417 |
+
0x12b8000012bf,
|
1418 |
+
0x12c0000012c1,
|
1419 |
+
0x12c2000012c6,
|
1420 |
+
0x12c8000012d7,
|
1421 |
+
0x12d800001311,
|
1422 |
+
0x131200001316,
|
1423 |
+
0x13180000135b,
|
1424 |
+
0x135d00001360,
|
1425 |
+
0x138000001390,
|
1426 |
+
0x13a0000013f6,
|
1427 |
+
0x14010000166d,
|
1428 |
+
0x166f00001680,
|
1429 |
+
0x16810000169b,
|
1430 |
+
0x16a0000016eb,
|
1431 |
+
0x16f1000016f9,
|
1432 |
+
0x170000001716,
|
1433 |
+
0x171f00001735,
|
1434 |
+
0x174000001754,
|
1435 |
+
0x17600000176d,
|
1436 |
+
0x176e00001771,
|
1437 |
+
0x177200001774,
|
1438 |
+
0x1780000017b4,
|
1439 |
+
0x17b6000017d4,
|
1440 |
+
0x17d7000017d8,
|
1441 |
+
0x17dc000017de,
|
1442 |
+
0x17e0000017ea,
|
1443 |
+
0x18100000181a,
|
1444 |
+
0x182000001879,
|
1445 |
+
0x1880000018ab,
|
1446 |
+
0x18b0000018f6,
|
1447 |
+
0x19000000191f,
|
1448 |
+
0x19200000192c,
|
1449 |
+
0x19300000193c,
|
1450 |
+
0x19460000196e,
|
1451 |
+
0x197000001975,
|
1452 |
+
0x1980000019ac,
|
1453 |
+
0x19b0000019ca,
|
1454 |
+
0x19d0000019da,
|
1455 |
+
0x1a0000001a1c,
|
1456 |
+
0x1a2000001a5f,
|
1457 |
+
0x1a6000001a7d,
|
1458 |
+
0x1a7f00001a8a,
|
1459 |
+
0x1a9000001a9a,
|
1460 |
+
0x1aa700001aa8,
|
1461 |
+
0x1ab000001abe,
|
1462 |
+
0x1abf00001acf,
|
1463 |
+
0x1b0000001b4d,
|
1464 |
+
0x1b5000001b5a,
|
1465 |
+
0x1b6b00001b74,
|
1466 |
+
0x1b8000001bf4,
|
1467 |
+
0x1c0000001c38,
|
1468 |
+
0x1c4000001c4a,
|
1469 |
+
0x1c4d00001c7e,
|
1470 |
+
0x1cd000001cd3,
|
1471 |
+
0x1cd400001cfb,
|
1472 |
+
0x1d0000001d2c,
|
1473 |
+
0x1d2f00001d30,
|
1474 |
+
0x1d3b00001d3c,
|
1475 |
+
0x1d4e00001d4f,
|
1476 |
+
0x1d6b00001d78,
|
1477 |
+
0x1d7900001d9b,
|
1478 |
+
0x1dc000001e00,
|
1479 |
+
0x1e0100001e02,
|
1480 |
+
0x1e0300001e04,
|
1481 |
+
0x1e0500001e06,
|
1482 |
+
0x1e0700001e08,
|
1483 |
+
0x1e0900001e0a,
|
1484 |
+
0x1e0b00001e0c,
|
1485 |
+
0x1e0d00001e0e,
|
1486 |
+
0x1e0f00001e10,
|
1487 |
+
0x1e1100001e12,
|
1488 |
+
0x1e1300001e14,
|
1489 |
+
0x1e1500001e16,
|
1490 |
+
0x1e1700001e18,
|
1491 |
+
0x1e1900001e1a,
|
1492 |
+
0x1e1b00001e1c,
|
1493 |
+
0x1e1d00001e1e,
|
1494 |
+
0x1e1f00001e20,
|
1495 |
+
0x1e2100001e22,
|
1496 |
+
0x1e2300001e24,
|
1497 |
+
0x1e2500001e26,
|
1498 |
+
0x1e2700001e28,
|
1499 |
+
0x1e2900001e2a,
|
1500 |
+
0x1e2b00001e2c,
|
1501 |
+
0x1e2d00001e2e,
|
1502 |
+
0x1e2f00001e30,
|
1503 |
+
0x1e3100001e32,
|
1504 |
+
0x1e3300001e34,
|
1505 |
+
0x1e3500001e36,
|
1506 |
+
0x1e3700001e38,
|
1507 |
+
0x1e3900001e3a,
|
1508 |
+
0x1e3b00001e3c,
|
1509 |
+
0x1e3d00001e3e,
|
1510 |
+
0x1e3f00001e40,
|
1511 |
+
0x1e4100001e42,
|
1512 |
+
0x1e4300001e44,
|
1513 |
+
0x1e4500001e46,
|
1514 |
+
0x1e4700001e48,
|
1515 |
+
0x1e4900001e4a,
|
1516 |
+
0x1e4b00001e4c,
|
1517 |
+
0x1e4d00001e4e,
|
1518 |
+
0x1e4f00001e50,
|
1519 |
+
0x1e5100001e52,
|
1520 |
+
0x1e5300001e54,
|
1521 |
+
0x1e5500001e56,
|
1522 |
+
0x1e5700001e58,
|
1523 |
+
0x1e5900001e5a,
|
1524 |
+
0x1e5b00001e5c,
|
1525 |
+
0x1e5d00001e5e,
|
1526 |
+
0x1e5f00001e60,
|
1527 |
+
0x1e6100001e62,
|
1528 |
+
0x1e6300001e64,
|
1529 |
+
0x1e6500001e66,
|
1530 |
+
0x1e6700001e68,
|
1531 |
+
0x1e6900001e6a,
|
1532 |
+
0x1e6b00001e6c,
|
1533 |
+
0x1e6d00001e6e,
|
1534 |
+
0x1e6f00001e70,
|
1535 |
+
0x1e7100001e72,
|
1536 |
+
0x1e7300001e74,
|
1537 |
+
0x1e7500001e76,
|
1538 |
+
0x1e7700001e78,
|
1539 |
+
0x1e7900001e7a,
|
1540 |
+
0x1e7b00001e7c,
|
1541 |
+
0x1e7d00001e7e,
|
1542 |
+
0x1e7f00001e80,
|
1543 |
+
0x1e8100001e82,
|
1544 |
+
0x1e8300001e84,
|
1545 |
+
0x1e8500001e86,
|
1546 |
+
0x1e8700001e88,
|
1547 |
+
0x1e8900001e8a,
|
1548 |
+
0x1e8b00001e8c,
|
1549 |
+
0x1e8d00001e8e,
|
1550 |
+
0x1e8f00001e90,
|
1551 |
+
0x1e9100001e92,
|
1552 |
+
0x1e9300001e94,
|
1553 |
+
0x1e9500001e9a,
|
1554 |
+
0x1e9c00001e9e,
|
1555 |
+
0x1e9f00001ea0,
|
1556 |
+
0x1ea100001ea2,
|
1557 |
+
0x1ea300001ea4,
|
1558 |
+
0x1ea500001ea6,
|
1559 |
+
0x1ea700001ea8,
|
1560 |
+
0x1ea900001eaa,
|
1561 |
+
0x1eab00001eac,
|
1562 |
+
0x1ead00001eae,
|
1563 |
+
0x1eaf00001eb0,
|
1564 |
+
0x1eb100001eb2,
|
1565 |
+
0x1eb300001eb4,
|
1566 |
+
0x1eb500001eb6,
|
1567 |
+
0x1eb700001eb8,
|
1568 |
+
0x1eb900001eba,
|
1569 |
+
0x1ebb00001ebc,
|
1570 |
+
0x1ebd00001ebe,
|
1571 |
+
0x1ebf00001ec0,
|
1572 |
+
0x1ec100001ec2,
|
1573 |
+
0x1ec300001ec4,
|
1574 |
+
0x1ec500001ec6,
|
1575 |
+
0x1ec700001ec8,
|
1576 |
+
0x1ec900001eca,
|
1577 |
+
0x1ecb00001ecc,
|
1578 |
+
0x1ecd00001ece,
|
1579 |
+
0x1ecf00001ed0,
|
1580 |
+
0x1ed100001ed2,
|
1581 |
+
0x1ed300001ed4,
|
1582 |
+
0x1ed500001ed6,
|
1583 |
+
0x1ed700001ed8,
|
1584 |
+
0x1ed900001eda,
|
1585 |
+
0x1edb00001edc,
|
1586 |
+
0x1edd00001ede,
|
1587 |
+
0x1edf00001ee0,
|
1588 |
+
0x1ee100001ee2,
|
1589 |
+
0x1ee300001ee4,
|
1590 |
+
0x1ee500001ee6,
|
1591 |
+
0x1ee700001ee8,
|
1592 |
+
0x1ee900001eea,
|
1593 |
+
0x1eeb00001eec,
|
1594 |
+
0x1eed00001eee,
|
1595 |
+
0x1eef00001ef0,
|
1596 |
+
0x1ef100001ef2,
|
1597 |
+
0x1ef300001ef4,
|
1598 |
+
0x1ef500001ef6,
|
1599 |
+
0x1ef700001ef8,
|
1600 |
+
0x1ef900001efa,
|
1601 |
+
0x1efb00001efc,
|
1602 |
+
0x1efd00001efe,
|
1603 |
+
0x1eff00001f08,
|
1604 |
+
0x1f1000001f16,
|
1605 |
+
0x1f2000001f28,
|
1606 |
+
0x1f3000001f38,
|
1607 |
+
0x1f4000001f46,
|
1608 |
+
0x1f5000001f58,
|
1609 |
+
0x1f6000001f68,
|
1610 |
+
0x1f7000001f71,
|
1611 |
+
0x1f7200001f73,
|
1612 |
+
0x1f7400001f75,
|
1613 |
+
0x1f7600001f77,
|
1614 |
+
0x1f7800001f79,
|
1615 |
+
0x1f7a00001f7b,
|
1616 |
+
0x1f7c00001f7d,
|
1617 |
+
0x1fb000001fb2,
|
1618 |
+
0x1fb600001fb7,
|
1619 |
+
0x1fc600001fc7,
|
1620 |
+
0x1fd000001fd3,
|
1621 |
+
0x1fd600001fd8,
|
1622 |
+
0x1fe000001fe3,
|
1623 |
+
0x1fe400001fe8,
|
1624 |
+
0x1ff600001ff7,
|
1625 |
+
0x214e0000214f,
|
1626 |
+
0x218400002185,
|
1627 |
+
0x2c3000002c60,
|
1628 |
+
0x2c6100002c62,
|
1629 |
+
0x2c6500002c67,
|
1630 |
+
0x2c6800002c69,
|
1631 |
+
0x2c6a00002c6b,
|
1632 |
+
0x2c6c00002c6d,
|
1633 |
+
0x2c7100002c72,
|
1634 |
+
0x2c7300002c75,
|
1635 |
+
0x2c7600002c7c,
|
1636 |
+
0x2c8100002c82,
|
1637 |
+
0x2c8300002c84,
|
1638 |
+
0x2c8500002c86,
|
1639 |
+
0x2c8700002c88,
|
1640 |
+
0x2c8900002c8a,
|
1641 |
+
0x2c8b00002c8c,
|
1642 |
+
0x2c8d00002c8e,
|
1643 |
+
0x2c8f00002c90,
|
1644 |
+
0x2c9100002c92,
|
1645 |
+
0x2c9300002c94,
|
1646 |
+
0x2c9500002c96,
|
1647 |
+
0x2c9700002c98,
|
1648 |
+
0x2c9900002c9a,
|
1649 |
+
0x2c9b00002c9c,
|
1650 |
+
0x2c9d00002c9e,
|
1651 |
+
0x2c9f00002ca0,
|
1652 |
+
0x2ca100002ca2,
|
1653 |
+
0x2ca300002ca4,
|
1654 |
+
0x2ca500002ca6,
|
1655 |
+
0x2ca700002ca8,
|
1656 |
+
0x2ca900002caa,
|
1657 |
+
0x2cab00002cac,
|
1658 |
+
0x2cad00002cae,
|
1659 |
+
0x2caf00002cb0,
|
1660 |
+
0x2cb100002cb2,
|
1661 |
+
0x2cb300002cb4,
|
1662 |
+
0x2cb500002cb6,
|
1663 |
+
0x2cb700002cb8,
|
1664 |
+
0x2cb900002cba,
|
1665 |
+
0x2cbb00002cbc,
|
1666 |
+
0x2cbd00002cbe,
|
1667 |
+
0x2cbf00002cc0,
|
1668 |
+
0x2cc100002cc2,
|
1669 |
+
0x2cc300002cc4,
|
1670 |
+
0x2cc500002cc6,
|
1671 |
+
0x2cc700002cc8,
|
1672 |
+
0x2cc900002cca,
|
1673 |
+
0x2ccb00002ccc,
|
1674 |
+
0x2ccd00002cce,
|
1675 |
+
0x2ccf00002cd0,
|
1676 |
+
0x2cd100002cd2,
|
1677 |
+
0x2cd300002cd4,
|
1678 |
+
0x2cd500002cd6,
|
1679 |
+
0x2cd700002cd8,
|
1680 |
+
0x2cd900002cda,
|
1681 |
+
0x2cdb00002cdc,
|
1682 |
+
0x2cdd00002cde,
|
1683 |
+
0x2cdf00002ce0,
|
1684 |
+
0x2ce100002ce2,
|
1685 |
+
0x2ce300002ce5,
|
1686 |
+
0x2cec00002ced,
|
1687 |
+
0x2cee00002cf2,
|
1688 |
+
0x2cf300002cf4,
|
1689 |
+
0x2d0000002d26,
|
1690 |
+
0x2d2700002d28,
|
1691 |
+
0x2d2d00002d2e,
|
1692 |
+
0x2d3000002d68,
|
1693 |
+
0x2d7f00002d97,
|
1694 |
+
0x2da000002da7,
|
1695 |
+
0x2da800002daf,
|
1696 |
+
0x2db000002db7,
|
1697 |
+
0x2db800002dbf,
|
1698 |
+
0x2dc000002dc7,
|
1699 |
+
0x2dc800002dcf,
|
1700 |
+
0x2dd000002dd7,
|
1701 |
+
0x2dd800002ddf,
|
1702 |
+
0x2de000002e00,
|
1703 |
+
0x2e2f00002e30,
|
1704 |
+
0x300500003008,
|
1705 |
+
0x302a0000302e,
|
1706 |
+
0x303c0000303d,
|
1707 |
+
0x304100003097,
|
1708 |
+
0x30990000309b,
|
1709 |
+
0x309d0000309f,
|
1710 |
+
0x30a1000030fb,
|
1711 |
+
0x30fc000030ff,
|
1712 |
+
0x310500003130,
|
1713 |
+
0x31a0000031c0,
|
1714 |
+
0x31f000003200,
|
1715 |
+
0x340000004dc0,
|
1716 |
+
0x4e000000a48d,
|
1717 |
+
0xa4d00000a4fe,
|
1718 |
+
0xa5000000a60d,
|
1719 |
+
0xa6100000a62c,
|
1720 |
+
0xa6410000a642,
|
1721 |
+
0xa6430000a644,
|
1722 |
+
0xa6450000a646,
|
1723 |
+
0xa6470000a648,
|
1724 |
+
0xa6490000a64a,
|
1725 |
+
0xa64b0000a64c,
|
1726 |
+
0xa64d0000a64e,
|
1727 |
+
0xa64f0000a650,
|
1728 |
+
0xa6510000a652,
|
1729 |
+
0xa6530000a654,
|
1730 |
+
0xa6550000a656,
|
1731 |
+
0xa6570000a658,
|
1732 |
+
0xa6590000a65a,
|
1733 |
+
0xa65b0000a65c,
|
1734 |
+
0xa65d0000a65e,
|
1735 |
+
0xa65f0000a660,
|
1736 |
+
0xa6610000a662,
|
1737 |
+
0xa6630000a664,
|
1738 |
+
0xa6650000a666,
|
1739 |
+
0xa6670000a668,
|
1740 |
+
0xa6690000a66a,
|
1741 |
+
0xa66b0000a66c,
|
1742 |
+
0xa66d0000a670,
|
1743 |
+
0xa6740000a67e,
|
1744 |
+
0xa67f0000a680,
|
1745 |
+
0xa6810000a682,
|
1746 |
+
0xa6830000a684,
|
1747 |
+
0xa6850000a686,
|
1748 |
+
0xa6870000a688,
|
1749 |
+
0xa6890000a68a,
|
1750 |
+
0xa68b0000a68c,
|
1751 |
+
0xa68d0000a68e,
|
1752 |
+
0xa68f0000a690,
|
1753 |
+
0xa6910000a692,
|
1754 |
+
0xa6930000a694,
|
1755 |
+
0xa6950000a696,
|
1756 |
+
0xa6970000a698,
|
1757 |
+
0xa6990000a69a,
|
1758 |
+
0xa69b0000a69c,
|
1759 |
+
0xa69e0000a6e6,
|
1760 |
+
0xa6f00000a6f2,
|
1761 |
+
0xa7170000a720,
|
1762 |
+
0xa7230000a724,
|
1763 |
+
0xa7250000a726,
|
1764 |
+
0xa7270000a728,
|
1765 |
+
0xa7290000a72a,
|
1766 |
+
0xa72b0000a72c,
|
1767 |
+
0xa72d0000a72e,
|
1768 |
+
0xa72f0000a732,
|
1769 |
+
0xa7330000a734,
|
1770 |
+
0xa7350000a736,
|
1771 |
+
0xa7370000a738,
|
1772 |
+
0xa7390000a73a,
|
1773 |
+
0xa73b0000a73c,
|
1774 |
+
0xa73d0000a73e,
|
1775 |
+
0xa73f0000a740,
|
1776 |
+
0xa7410000a742,
|
1777 |
+
0xa7430000a744,
|
1778 |
+
0xa7450000a746,
|
1779 |
+
0xa7470000a748,
|
1780 |
+
0xa7490000a74a,
|
1781 |
+
0xa74b0000a74c,
|
1782 |
+
0xa74d0000a74e,
|
1783 |
+
0xa74f0000a750,
|
1784 |
+
0xa7510000a752,
|
1785 |
+
0xa7530000a754,
|
1786 |
+
0xa7550000a756,
|
1787 |
+
0xa7570000a758,
|
1788 |
+
0xa7590000a75a,
|
1789 |
+
0xa75b0000a75c,
|
1790 |
+
0xa75d0000a75e,
|
1791 |
+
0xa75f0000a760,
|
1792 |
+
0xa7610000a762,
|
1793 |
+
0xa7630000a764,
|
1794 |
+
0xa7650000a766,
|
1795 |
+
0xa7670000a768,
|
1796 |
+
0xa7690000a76a,
|
1797 |
+
0xa76b0000a76c,
|
1798 |
+
0xa76d0000a76e,
|
1799 |
+
0xa76f0000a770,
|
1800 |
+
0xa7710000a779,
|
1801 |
+
0xa77a0000a77b,
|
1802 |
+
0xa77c0000a77d,
|
1803 |
+
0xa77f0000a780,
|
1804 |
+
0xa7810000a782,
|
1805 |
+
0xa7830000a784,
|
1806 |
+
0xa7850000a786,
|
1807 |
+
0xa7870000a789,
|
1808 |
+
0xa78c0000a78d,
|
1809 |
+
0xa78e0000a790,
|
1810 |
+
0xa7910000a792,
|
1811 |
+
0xa7930000a796,
|
1812 |
+
0xa7970000a798,
|
1813 |
+
0xa7990000a79a,
|
1814 |
+
0xa79b0000a79c,
|
1815 |
+
0xa79d0000a79e,
|
1816 |
+
0xa79f0000a7a0,
|
1817 |
+
0xa7a10000a7a2,
|
1818 |
+
0xa7a30000a7a4,
|
1819 |
+
0xa7a50000a7a6,
|
1820 |
+
0xa7a70000a7a8,
|
1821 |
+
0xa7a90000a7aa,
|
1822 |
+
0xa7af0000a7b0,
|
1823 |
+
0xa7b50000a7b6,
|
1824 |
+
0xa7b70000a7b8,
|
1825 |
+
0xa7b90000a7ba,
|
1826 |
+
0xa7bb0000a7bc,
|
1827 |
+
0xa7bd0000a7be,
|
1828 |
+
0xa7bf0000a7c0,
|
1829 |
+
0xa7c10000a7c2,
|
1830 |
+
0xa7c30000a7c4,
|
1831 |
+
0xa7c80000a7c9,
|
1832 |
+
0xa7ca0000a7cb,
|
1833 |
+
0xa7d10000a7d2,
|
1834 |
+
0xa7d30000a7d4,
|
1835 |
+
0xa7d50000a7d6,
|
1836 |
+
0xa7d70000a7d8,
|
1837 |
+
0xa7d90000a7da,
|
1838 |
+
0xa7f60000a7f8,
|
1839 |
+
0xa7fa0000a828,
|
1840 |
+
0xa82c0000a82d,
|
1841 |
+
0xa8400000a874,
|
1842 |
+
0xa8800000a8c6,
|
1843 |
+
0xa8d00000a8da,
|
1844 |
+
0xa8e00000a8f8,
|
1845 |
+
0xa8fb0000a8fc,
|
1846 |
+
0xa8fd0000a92e,
|
1847 |
+
0xa9300000a954,
|
1848 |
+
0xa9800000a9c1,
|
1849 |
+
0xa9cf0000a9da,
|
1850 |
+
0xa9e00000a9ff,
|
1851 |
+
0xaa000000aa37,
|
1852 |
+
0xaa400000aa4e,
|
1853 |
+
0xaa500000aa5a,
|
1854 |
+
0xaa600000aa77,
|
1855 |
+
0xaa7a0000aac3,
|
1856 |
+
0xaadb0000aade,
|
1857 |
+
0xaae00000aaf0,
|
1858 |
+
0xaaf20000aaf7,
|
1859 |
+
0xab010000ab07,
|
1860 |
+
0xab090000ab0f,
|
1861 |
+
0xab110000ab17,
|
1862 |
+
0xab200000ab27,
|
1863 |
+
0xab280000ab2f,
|
1864 |
+
0xab300000ab5b,
|
1865 |
+
0xab600000ab69,
|
1866 |
+
0xabc00000abeb,
|
1867 |
+
0xabec0000abee,
|
1868 |
+
0xabf00000abfa,
|
1869 |
+
0xac000000d7a4,
|
1870 |
+
0xfa0e0000fa10,
|
1871 |
+
0xfa110000fa12,
|
1872 |
+
0xfa130000fa15,
|
1873 |
+
0xfa1f0000fa20,
|
1874 |
+
0xfa210000fa22,
|
1875 |
+
0xfa230000fa25,
|
1876 |
+
0xfa270000fa2a,
|
1877 |
+
0xfb1e0000fb1f,
|
1878 |
+
0xfe200000fe30,
|
1879 |
+
0xfe730000fe74,
|
1880 |
+
0x100000001000c,
|
1881 |
+
0x1000d00010027,
|
1882 |
+
0x100280001003b,
|
1883 |
+
0x1003c0001003e,
|
1884 |
+
0x1003f0001004e,
|
1885 |
+
0x100500001005e,
|
1886 |
+
0x10080000100fb,
|
1887 |
+
0x101fd000101fe,
|
1888 |
+
0x102800001029d,
|
1889 |
+
0x102a0000102d1,
|
1890 |
+
0x102e0000102e1,
|
1891 |
+
0x1030000010320,
|
1892 |
+
0x1032d00010341,
|
1893 |
+
0x103420001034a,
|
1894 |
+
0x103500001037b,
|
1895 |
+
0x103800001039e,
|
1896 |
+
0x103a0000103c4,
|
1897 |
+
0x103c8000103d0,
|
1898 |
+
0x104280001049e,
|
1899 |
+
0x104a0000104aa,
|
1900 |
+
0x104d8000104fc,
|
1901 |
+
0x1050000010528,
|
1902 |
+
0x1053000010564,
|
1903 |
+
0x10597000105a2,
|
1904 |
+
0x105a3000105b2,
|
1905 |
+
0x105b3000105ba,
|
1906 |
+
0x105bb000105bd,
|
1907 |
+
0x1060000010737,
|
1908 |
+
0x1074000010756,
|
1909 |
+
0x1076000010768,
|
1910 |
+
0x1078000010781,
|
1911 |
+
0x1080000010806,
|
1912 |
+
0x1080800010809,
|
1913 |
+
0x1080a00010836,
|
1914 |
+
0x1083700010839,
|
1915 |
+
0x1083c0001083d,
|
1916 |
+
0x1083f00010856,
|
1917 |
+
0x1086000010877,
|
1918 |
+
0x108800001089f,
|
1919 |
+
0x108e0000108f3,
|
1920 |
+
0x108f4000108f6,
|
1921 |
+
0x1090000010916,
|
1922 |
+
0x109200001093a,
|
1923 |
+
0x10980000109b8,
|
1924 |
+
0x109be000109c0,
|
1925 |
+
0x10a0000010a04,
|
1926 |
+
0x10a0500010a07,
|
1927 |
+
0x10a0c00010a14,
|
1928 |
+
0x10a1500010a18,
|
1929 |
+
0x10a1900010a36,
|
1930 |
+
0x10a3800010a3b,
|
1931 |
+
0x10a3f00010a40,
|
1932 |
+
0x10a6000010a7d,
|
1933 |
+
0x10a8000010a9d,
|
1934 |
+
0x10ac000010ac8,
|
1935 |
+
0x10ac900010ae7,
|
1936 |
+
0x10b0000010b36,
|
1937 |
+
0x10b4000010b56,
|
1938 |
+
0x10b6000010b73,
|
1939 |
+
0x10b8000010b92,
|
1940 |
+
0x10c0000010c49,
|
1941 |
+
0x10cc000010cf3,
|
1942 |
+
0x10d0000010d28,
|
1943 |
+
0x10d3000010d3a,
|
1944 |
+
0x10e8000010eaa,
|
1945 |
+
0x10eab00010ead,
|
1946 |
+
0x10eb000010eb2,
|
1947 |
+
0x10efd00010f1d,
|
1948 |
+
0x10f2700010f28,
|
1949 |
+
0x10f3000010f51,
|
1950 |
+
0x10f7000010f86,
|
1951 |
+
0x10fb000010fc5,
|
1952 |
+
0x10fe000010ff7,
|
1953 |
+
0x1100000011047,
|
1954 |
+
0x1106600011076,
|
1955 |
+
0x1107f000110bb,
|
1956 |
+
0x110c2000110c3,
|
1957 |
+
0x110d0000110e9,
|
1958 |
+
0x110f0000110fa,
|
1959 |
+
0x1110000011135,
|
1960 |
+
0x1113600011140,
|
1961 |
+
0x1114400011148,
|
1962 |
+
0x1115000011174,
|
1963 |
+
0x1117600011177,
|
1964 |
+
0x11180000111c5,
|
1965 |
+
0x111c9000111cd,
|
1966 |
+
0x111ce000111db,
|
1967 |
+
0x111dc000111dd,
|
1968 |
+
0x1120000011212,
|
1969 |
+
0x1121300011238,
|
1970 |
+
0x1123e00011242,
|
1971 |
+
0x1128000011287,
|
1972 |
+
0x1128800011289,
|
1973 |
+
0x1128a0001128e,
|
1974 |
+
0x1128f0001129e,
|
1975 |
+
0x1129f000112a9,
|
1976 |
+
0x112b0000112eb,
|
1977 |
+
0x112f0000112fa,
|
1978 |
+
0x1130000011304,
|
1979 |
+
0x113050001130d,
|
1980 |
+
0x1130f00011311,
|
1981 |
+
0x1131300011329,
|
1982 |
+
0x1132a00011331,
|
1983 |
+
0x1133200011334,
|
1984 |
+
0x113350001133a,
|
1985 |
+
0x1133b00011345,
|
1986 |
+
0x1134700011349,
|
1987 |
+
0x1134b0001134e,
|
1988 |
+
0x1135000011351,
|
1989 |
+
0x1135700011358,
|
1990 |
+
0x1135d00011364,
|
1991 |
+
0x113660001136d,
|
1992 |
+
0x1137000011375,
|
1993 |
+
0x114000001144b,
|
1994 |
+
0x114500001145a,
|
1995 |
+
0x1145e00011462,
|
1996 |
+
0x11480000114c6,
|
1997 |
+
0x114c7000114c8,
|
1998 |
+
0x114d0000114da,
|
1999 |
+
0x11580000115b6,
|
2000 |
+
0x115b8000115c1,
|
2001 |
+
0x115d8000115de,
|
2002 |
+
0x1160000011641,
|
2003 |
+
0x1164400011645,
|
2004 |
+
0x116500001165a,
|
2005 |
+
0x11680000116b9,
|
2006 |
+
0x116c0000116ca,
|
2007 |
+
0x117000001171b,
|
2008 |
+
0x1171d0001172c,
|
2009 |
+
0x117300001173a,
|
2010 |
+
0x1174000011747,
|
2011 |
+
0x118000001183b,
|
2012 |
+
0x118c0000118ea,
|
2013 |
+
0x118ff00011907,
|
2014 |
+
0x119090001190a,
|
2015 |
+
0x1190c00011914,
|
2016 |
+
0x1191500011917,
|
2017 |
+
0x1191800011936,
|
2018 |
+
0x1193700011939,
|
2019 |
+
0x1193b00011944,
|
2020 |
+
0x119500001195a,
|
2021 |
+
0x119a0000119a8,
|
2022 |
+
0x119aa000119d8,
|
2023 |
+
0x119da000119e2,
|
2024 |
+
0x119e3000119e5,
|
2025 |
+
0x11a0000011a3f,
|
2026 |
+
0x11a4700011a48,
|
2027 |
+
0x11a5000011a9a,
|
2028 |
+
0x11a9d00011a9e,
|
2029 |
+
0x11ab000011af9,
|
2030 |
+
0x11c0000011c09,
|
2031 |
+
0x11c0a00011c37,
|
2032 |
+
0x11c3800011c41,
|
2033 |
+
0x11c5000011c5a,
|
2034 |
+
0x11c7200011c90,
|
2035 |
+
0x11c9200011ca8,
|
2036 |
+
0x11ca900011cb7,
|
2037 |
+
0x11d0000011d07,
|
2038 |
+
0x11d0800011d0a,
|
2039 |
+
0x11d0b00011d37,
|
2040 |
+
0x11d3a00011d3b,
|
2041 |
+
0x11d3c00011d3e,
|
2042 |
+
0x11d3f00011d48,
|
2043 |
+
0x11d5000011d5a,
|
2044 |
+
0x11d6000011d66,
|
2045 |
+
0x11d6700011d69,
|
2046 |
+
0x11d6a00011d8f,
|
2047 |
+
0x11d9000011d92,
|
2048 |
+
0x11d9300011d99,
|
2049 |
+
0x11da000011daa,
|
2050 |
+
0x11ee000011ef7,
|
2051 |
+
0x11f0000011f11,
|
2052 |
+
0x11f1200011f3b,
|
2053 |
+
0x11f3e00011f43,
|
2054 |
+
0x11f5000011f5a,
|
2055 |
+
0x11fb000011fb1,
|
2056 |
+
0x120000001239a,
|
2057 |
+
0x1248000012544,
|
2058 |
+
0x12f9000012ff1,
|
2059 |
+
0x1300000013430,
|
2060 |
+
0x1344000013456,
|
2061 |
+
0x1440000014647,
|
2062 |
+
0x1680000016a39,
|
2063 |
+
0x16a4000016a5f,
|
2064 |
+
0x16a6000016a6a,
|
2065 |
+
0x16a7000016abf,
|
2066 |
+
0x16ac000016aca,
|
2067 |
+
0x16ad000016aee,
|
2068 |
+
0x16af000016af5,
|
2069 |
+
0x16b0000016b37,
|
2070 |
+
0x16b4000016b44,
|
2071 |
+
0x16b5000016b5a,
|
2072 |
+
0x16b6300016b78,
|
2073 |
+
0x16b7d00016b90,
|
2074 |
+
0x16e6000016e80,
|
2075 |
+
0x16f0000016f4b,
|
2076 |
+
0x16f4f00016f88,
|
2077 |
+
0x16f8f00016fa0,
|
2078 |
+
0x16fe000016fe2,
|
2079 |
+
0x16fe300016fe5,
|
2080 |
+
0x16ff000016ff2,
|
2081 |
+
0x17000000187f8,
|
2082 |
+
0x1880000018cd6,
|
2083 |
+
0x18d0000018d09,
|
2084 |
+
0x1aff00001aff4,
|
2085 |
+
0x1aff50001affc,
|
2086 |
+
0x1affd0001afff,
|
2087 |
+
0x1b0000001b123,
|
2088 |
+
0x1b1320001b133,
|
2089 |
+
0x1b1500001b153,
|
2090 |
+
0x1b1550001b156,
|
2091 |
+
0x1b1640001b168,
|
2092 |
+
0x1b1700001b2fc,
|
2093 |
+
0x1bc000001bc6b,
|
2094 |
+
0x1bc700001bc7d,
|
2095 |
+
0x1bc800001bc89,
|
2096 |
+
0x1bc900001bc9a,
|
2097 |
+
0x1bc9d0001bc9f,
|
2098 |
+
0x1cf000001cf2e,
|
2099 |
+
0x1cf300001cf47,
|
2100 |
+
0x1da000001da37,
|
2101 |
+
0x1da3b0001da6d,
|
2102 |
+
0x1da750001da76,
|
2103 |
+
0x1da840001da85,
|
2104 |
+
0x1da9b0001daa0,
|
2105 |
+
0x1daa10001dab0,
|
2106 |
+
0x1df000001df1f,
|
2107 |
+
0x1df250001df2b,
|
2108 |
+
0x1e0000001e007,
|
2109 |
+
0x1e0080001e019,
|
2110 |
+
0x1e01b0001e022,
|
2111 |
+
0x1e0230001e025,
|
2112 |
+
0x1e0260001e02b,
|
2113 |
+
0x1e0300001e06e,
|
2114 |
+
0x1e08f0001e090,
|
2115 |
+
0x1e1000001e12d,
|
2116 |
+
0x1e1300001e13e,
|
2117 |
+
0x1e1400001e14a,
|
2118 |
+
0x1e14e0001e14f,
|
2119 |
+
0x1e2900001e2af,
|
2120 |
+
0x1e2c00001e2fa,
|
2121 |
+
0x1e4d00001e4fa,
|
2122 |
+
0x1e7e00001e7e7,
|
2123 |
+
0x1e7e80001e7ec,
|
2124 |
+
0x1e7ed0001e7ef,
|
2125 |
+
0x1e7f00001e7ff,
|
2126 |
+
0x1e8000001e8c5,
|
2127 |
+
0x1e8d00001e8d7,
|
2128 |
+
0x1e9220001e94c,
|
2129 |
+
0x1e9500001e95a,
|
2130 |
+
0x200000002a6e0,
|
2131 |
+
0x2a7000002b73a,
|
2132 |
+
0x2b7400002b81e,
|
2133 |
+
0x2b8200002cea2,
|
2134 |
+
0x2ceb00002ebe1,
|
2135 |
+
0x2ebf00002ee5e,
|
2136 |
+
0x300000003134b,
|
2137 |
+
0x31350000323b0,
|
2138 |
+
),
|
2139 |
+
'CONTEXTJ': (
|
2140 |
+
0x200c0000200e,
|
2141 |
+
),
|
2142 |
+
'CONTEXTO': (
|
2143 |
+
0xb7000000b8,
|
2144 |
+
0x37500000376,
|
2145 |
+
0x5f3000005f5,
|
2146 |
+
0x6600000066a,
|
2147 |
+
0x6f0000006fa,
|
2148 |
+
0x30fb000030fc,
|
2149 |
+
),
|
2150 |
+
}
|
lib/python3.11/site-packages/idna/intranges.py
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Given a list of integers, made up of (hopefully) a small number of long runs
|
3 |
+
of consecutive integers, compute a representation of the form
|
4 |
+
((start1, end1), (start2, end2) ...). Then answer the question "was x present
|
5 |
+
in the original list?" in time O(log(# runs)).
|
6 |
+
"""
|
7 |
+
|
8 |
+
import bisect
|
9 |
+
from typing import List, Tuple
|
10 |
+
|
11 |
+
def intranges_from_list(list_: List[int]) -> Tuple[int, ...]:
|
12 |
+
"""Represent a list of integers as a sequence of ranges:
|
13 |
+
((start_0, end_0), (start_1, end_1), ...), such that the original
|
14 |
+
integers are exactly those x such that start_i <= x < end_i for some i.
|
15 |
+
|
16 |
+
Ranges are encoded as single integers (start << 32 | end), not as tuples.
|
17 |
+
"""
|
18 |
+
|
19 |
+
sorted_list = sorted(list_)
|
20 |
+
ranges = []
|
21 |
+
last_write = -1
|
22 |
+
for i in range(len(sorted_list)):
|
23 |
+
if i+1 < len(sorted_list):
|
24 |
+
if sorted_list[i] == sorted_list[i+1]-1:
|
25 |
+
continue
|
26 |
+
current_range = sorted_list[last_write+1:i+1]
|
27 |
+
ranges.append(_encode_range(current_range[0], current_range[-1] + 1))
|
28 |
+
last_write = i
|
29 |
+
|
30 |
+
return tuple(ranges)
|
31 |
+
|
32 |
+
def _encode_range(start: int, end: int) -> int:
|
33 |
+
return (start << 32) | end
|
34 |
+
|
35 |
+
def _decode_range(r: int) -> Tuple[int, int]:
|
36 |
+
return (r >> 32), (r & ((1 << 32) - 1))
|
37 |
+
|
38 |
+
|
39 |
+
def intranges_contain(int_: int, ranges: Tuple[int, ...]) -> bool:
|
40 |
+
"""Determine if `int_` falls into one of the ranges in `ranges`."""
|
41 |
+
tuple_ = _encode_range(int_, 0)
|
42 |
+
pos = bisect.bisect_left(ranges, tuple_)
|
43 |
+
# we could be immediately ahead of a tuple (start, end)
|
44 |
+
# with start < int_ <= end
|
45 |
+
if pos > 0:
|
46 |
+
left, right = _decode_range(ranges[pos-1])
|
47 |
+
if left <= int_ < right:
|
48 |
+
return True
|
49 |
+
# or we could be immediately behind a tuple (int_, end)
|
50 |
+
if pos < len(ranges):
|
51 |
+
left, _ = _decode_range(ranges[pos])
|
52 |
+
if left == int_:
|
53 |
+
return True
|
54 |
+
return False
|
lib/python3.11/site-packages/idna/package_data.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
__version__ = '3.6'
|
2 |
+
|
lib/python3.11/site-packages/idna/py.typed
ADDED
File without changes
|
lib/python3.11/site-packages/idna/uts46data.py
ADDED
The diff for this file is too large to render.
See raw diff
|
|
lib/python3.11/site-packages/isympy.py
ADDED
@@ -0,0 +1,342 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""
|
2 |
+
Python shell for SymPy.
|
3 |
+
|
4 |
+
This is just a normal Python shell (IPython shell if you have the
|
5 |
+
IPython package installed), that executes the following commands for
|
6 |
+
the user:
|
7 |
+
|
8 |
+
>>> from __future__ import division
|
9 |
+
>>> from sympy import *
|
10 |
+
>>> x, y, z, t = symbols('x y z t')
|
11 |
+
>>> k, m, n = symbols('k m n', integer=True)
|
12 |
+
>>> f, g, h = symbols('f g h', cls=Function)
|
13 |
+
>>> init_printing()
|
14 |
+
|
15 |
+
So starting 'isympy' is equivalent to starting Python (or IPython) and
|
16 |
+
executing the above commands by hand. It is intended for easy and quick
|
17 |
+
experimentation with SymPy. isympy is a good way to use SymPy as an
|
18 |
+
interactive calculator. If you have IPython and Matplotlib installed, then
|
19 |
+
interactive plotting is enabled by default.
|
20 |
+
|
21 |
+
COMMAND LINE OPTIONS
|
22 |
+
--------------------
|
23 |
+
|
24 |
+
-c CONSOLE, --console=CONSOLE
|
25 |
+
|
26 |
+
Use the specified shell (Python or IPython) shell as the console
|
27 |
+
backend instead of the default one (IPython if present, Python
|
28 |
+
otherwise), e.g.:
|
29 |
+
|
30 |
+
$isympy -c python
|
31 |
+
|
32 |
+
CONSOLE must be one of 'ipython' or 'python'
|
33 |
+
|
34 |
+
-p PRETTY, --pretty PRETTY
|
35 |
+
|
36 |
+
Setup pretty-printing in SymPy. When pretty-printing is enabled,
|
37 |
+
expressions can be printed with Unicode or ASCII. The default is
|
38 |
+
to use pretty-printing (with Unicode if the terminal supports it).
|
39 |
+
When this option is 'no', expressions will not be pretty-printed
|
40 |
+
and ASCII will be used:
|
41 |
+
|
42 |
+
$isympy -p no
|
43 |
+
|
44 |
+
PRETTY must be one of 'unicode', 'ascii', or 'no'
|
45 |
+
|
46 |
+
-t TYPES, --types=TYPES
|
47 |
+
|
48 |
+
Setup the ground types for the polys. By default, gmpy ground types
|
49 |
+
are used if gmpy2 or gmpy is installed, otherwise it falls back to python
|
50 |
+
ground types, which are a little bit slower. You can manually
|
51 |
+
choose python ground types even if gmpy is installed (e.g., for
|
52 |
+
testing purposes):
|
53 |
+
|
54 |
+
$isympy -t python
|
55 |
+
|
56 |
+
TYPES must be one of 'gmpy', 'gmpy1' or 'python'
|
57 |
+
|
58 |
+
Note that the ground type gmpy1 is primarily intended for testing; it
|
59 |
+
forces the use of gmpy version 1 even if gmpy2 is available.
|
60 |
+
|
61 |
+
This is the same as setting the environment variable
|
62 |
+
SYMPY_GROUND_TYPES to the given ground type (e.g.,
|
63 |
+
SYMPY_GROUND_TYPES='gmpy')
|
64 |
+
|
65 |
+
The ground types can be determined interactively from the variable
|
66 |
+
sympy.polys.domains.GROUND_TYPES.
|
67 |
+
|
68 |
+
-o ORDER, --order ORDER
|
69 |
+
|
70 |
+
Setup the ordering of terms for printing. The default is lex, which
|
71 |
+
orders terms lexicographically (e.g., x**2 + x + 1). You can choose
|
72 |
+
other orderings, such as rev-lex, which will use reverse
|
73 |
+
lexicographic ordering (e.g., 1 + x + x**2):
|
74 |
+
|
75 |
+
$isympy -o rev-lex
|
76 |
+
|
77 |
+
ORDER must be one of 'lex', 'rev-lex', 'grlex', 'rev-grlex',
|
78 |
+
'grevlex', 'rev-grevlex', 'old', or 'none'.
|
79 |
+
|
80 |
+
Note that for very large expressions, ORDER='none' may speed up
|
81 |
+
printing considerably but the terms will have no canonical order.
|
82 |
+
|
83 |
+
-q, --quiet
|
84 |
+
|
85 |
+
Print only Python's and SymPy's versions to stdout at startup.
|
86 |
+
|
87 |
+
-d, --doctest
|
88 |
+
|
89 |
+
Use the same format that should be used for doctests. This is
|
90 |
+
equivalent to -c python -p no.
|
91 |
+
|
92 |
+
-C, --no-cache
|
93 |
+
|
94 |
+
Disable the caching mechanism. Disabling the cache may slow certain
|
95 |
+
operations down considerably. This is useful for testing the cache,
|
96 |
+
or for benchmarking, as the cache can result in deceptive timings.
|
97 |
+
|
98 |
+
This is equivalent to setting the environment variable
|
99 |
+
SYMPY_USE_CACHE to 'no'.
|
100 |
+
|
101 |
+
-a, --auto-symbols (requires at least IPython 0.11)
|
102 |
+
|
103 |
+
Automatically create missing symbols. Normally, typing a name of a
|
104 |
+
Symbol that has not been instantiated first would raise NameError,
|
105 |
+
but with this option enabled, any undefined name will be
|
106 |
+
automatically created as a Symbol.
|
107 |
+
|
108 |
+
Note that this is intended only for interactive, calculator style
|
109 |
+
usage. In a script that uses SymPy, Symbols should be instantiated
|
110 |
+
at the top, so that it's clear what they are.
|
111 |
+
|
112 |
+
This will not override any names that are already defined, which
|
113 |
+
includes the single character letters represented by the mnemonic
|
114 |
+
QCOSINE (see the "Gotchas and Pitfalls" document in the
|
115 |
+
documentation). You can delete existing names by executing "del
|
116 |
+
name". If a name is defined, typing "'name' in dir()" will return True.
|
117 |
+
|
118 |
+
The Symbols that are created using this have default assumptions.
|
119 |
+
If you want to place assumptions on symbols, you should create them
|
120 |
+
using symbols() or var().
|
121 |
+
|
122 |
+
Finally, this only works in the top level namespace. So, for
|
123 |
+
example, if you define a function in isympy with an undefined
|
124 |
+
Symbol, it will not work.
|
125 |
+
|
126 |
+
See also the -i and -I options.
|
127 |
+
|
128 |
+
-i, --int-to-Integer (requires at least IPython 0.11)
|
129 |
+
|
130 |
+
Automatically wrap int literals with Integer. This makes it so that
|
131 |
+
things like 1/2 will come out as Rational(1, 2), rather than 0.5. This
|
132 |
+
works by preprocessing the source and wrapping all int literals with
|
133 |
+
Integer. Note that this will not change the behavior of int literals
|
134 |
+
assigned to variables, and it also won't change the behavior of functions
|
135 |
+
that return int literals.
|
136 |
+
|
137 |
+
If you want an int, you can wrap the literal in int(), e.g. int(3)/int(2)
|
138 |
+
gives 1.5 (with division imported from __future__).
|
139 |
+
|
140 |
+
-I, --interactive (requires at least IPython 0.11)
|
141 |
+
|
142 |
+
This is equivalent to --auto-symbols --int-to-Integer. Future options
|
143 |
+
designed for ease of interactive use may be added to this.
|
144 |
+
|
145 |
+
-D, --debug
|
146 |
+
|
147 |
+
Enable debugging output. This is the same as setting the
|
148 |
+
environment variable SYMPY_DEBUG to 'True'. The debug status is set
|
149 |
+
in the variable SYMPY_DEBUG within isympy.
|
150 |
+
|
151 |
+
-- IPython options
|
152 |
+
|
153 |
+
Additionally you can pass command line options directly to the IPython
|
154 |
+
interpreter (the standard Python shell is not supported). However you
|
155 |
+
need to add the '--' separator between two types of options, e.g the
|
156 |
+
startup banner option and the colors option. You need to enter the
|
157 |
+
options as required by the version of IPython that you are using, too:
|
158 |
+
|
159 |
+
in IPython 0.11,
|
160 |
+
|
161 |
+
$isympy -q -- --colors=NoColor
|
162 |
+
|
163 |
+
or older versions of IPython,
|
164 |
+
|
165 |
+
$isympy -q -- -colors NoColor
|
166 |
+
|
167 |
+
See also isympy --help.
|
168 |
+
"""
|
169 |
+
|
170 |
+
import os
|
171 |
+
import sys
|
172 |
+
|
173 |
+
# DO NOT IMPORT SYMPY HERE! Or the setting of the sympy environment variables
|
174 |
+
# by the command line will break.
|
175 |
+
|
176 |
+
def main() -> None:
|
177 |
+
from argparse import ArgumentParser, RawDescriptionHelpFormatter
|
178 |
+
|
179 |
+
VERSION = None
|
180 |
+
if '--version' in sys.argv:
|
181 |
+
# We cannot import sympy before this is run, because flags like -C and
|
182 |
+
# -t set environment variables that must be set before SymPy is
|
183 |
+
# imported. The only thing we need to import it for is to get the
|
184 |
+
# version, which only matters with the --version flag.
|
185 |
+
import sympy
|
186 |
+
VERSION = sympy.__version__
|
187 |
+
|
188 |
+
usage = 'isympy [options] -- [ipython options]'
|
189 |
+
parser = ArgumentParser(
|
190 |
+
usage=usage,
|
191 |
+
description=__doc__,
|
192 |
+
formatter_class=RawDescriptionHelpFormatter,
|
193 |
+
)
|
194 |
+
|
195 |
+
parser.add_argument('--version', action='version', version=VERSION)
|
196 |
+
|
197 |
+
parser.add_argument(
|
198 |
+
'-c', '--console',
|
199 |
+
dest='console',
|
200 |
+
action='store',
|
201 |
+
default=None,
|
202 |
+
choices=['ipython', 'python'],
|
203 |
+
metavar='CONSOLE',
|
204 |
+
help='select type of interactive session: ipython | python; defaults '
|
205 |
+
'to ipython if IPython is installed, otherwise python')
|
206 |
+
|
207 |
+
parser.add_argument(
|
208 |
+
'-p', '--pretty',
|
209 |
+
dest='pretty',
|
210 |
+
action='store',
|
211 |
+
default=None,
|
212 |
+
metavar='PRETTY',
|
213 |
+
choices=['unicode', 'ascii', 'no'],
|
214 |
+
help='setup pretty printing: unicode | ascii | no; defaults to '
|
215 |
+
'unicode printing if the terminal supports it, otherwise ascii')
|
216 |
+
|
217 |
+
parser.add_argument(
|
218 |
+
'-t', '--types',
|
219 |
+
dest='types',
|
220 |
+
action='store',
|
221 |
+
default=None,
|
222 |
+
metavar='TYPES',
|
223 |
+
choices=['gmpy', 'gmpy1', 'python'],
|
224 |
+
help='setup ground types: gmpy | gmpy1 | python; defaults to gmpy if gmpy2 '
|
225 |
+
'or gmpy is installed, otherwise python')
|
226 |
+
|
227 |
+
parser.add_argument(
|
228 |
+
'-o', '--order',
|
229 |
+
dest='order',
|
230 |
+
action='store',
|
231 |
+
default=None,
|
232 |
+
metavar='ORDER',
|
233 |
+
choices=['lex', 'grlex', 'grevlex', 'rev-lex', 'rev-grlex', 'rev-grevlex', 'old', 'none'],
|
234 |
+
help='setup ordering of terms: [rev-]lex | [rev-]grlex | [rev-]grevlex | old | none; defaults to lex')
|
235 |
+
|
236 |
+
parser.add_argument(
|
237 |
+
'-q', '--quiet',
|
238 |
+
dest='quiet',
|
239 |
+
action='store_true',
|
240 |
+
default=False,
|
241 |
+
help='print only version information at startup')
|
242 |
+
|
243 |
+
parser.add_argument(
|
244 |
+
'-d', '--doctest',
|
245 |
+
dest='doctest',
|
246 |
+
action='store_true',
|
247 |
+
default=False,
|
248 |
+
help='use the doctest format for output (you can just copy and paste it)')
|
249 |
+
|
250 |
+
parser.add_argument(
|
251 |
+
'-C', '--no-cache',
|
252 |
+
dest='cache',
|
253 |
+
action='store_false',
|
254 |
+
default=True,
|
255 |
+
help='disable caching mechanism')
|
256 |
+
|
257 |
+
parser.add_argument(
|
258 |
+
'-a', '--auto-symbols',
|
259 |
+
dest='auto_symbols',
|
260 |
+
action='store_true',
|
261 |
+
default=False,
|
262 |
+
help='automatically construct missing symbols')
|
263 |
+
|
264 |
+
parser.add_argument(
|
265 |
+
'-i', '--int-to-Integer',
|
266 |
+
dest='auto_int_to_Integer',
|
267 |
+
action='store_true',
|
268 |
+
default=False,
|
269 |
+
help="automatically wrap int literals with Integer")
|
270 |
+
|
271 |
+
parser.add_argument(
|
272 |
+
'-I', '--interactive',
|
273 |
+
dest='interactive',
|
274 |
+
action='store_true',
|
275 |
+
default=False,
|
276 |
+
help="equivalent to -a -i")
|
277 |
+
|
278 |
+
parser.add_argument(
|
279 |
+
'-D', '--debug',
|
280 |
+
dest='debug',
|
281 |
+
action='store_true',
|
282 |
+
default=False,
|
283 |
+
help='enable debugging output')
|
284 |
+
|
285 |
+
(options, ipy_args) = parser.parse_known_args()
|
286 |
+
if '--' in ipy_args:
|
287 |
+
ipy_args.remove('--')
|
288 |
+
|
289 |
+
if not options.cache:
|
290 |
+
os.environ['SYMPY_USE_CACHE'] = 'no'
|
291 |
+
|
292 |
+
if options.types:
|
293 |
+
os.environ['SYMPY_GROUND_TYPES'] = options.types
|
294 |
+
|
295 |
+
if options.debug:
|
296 |
+
os.environ['SYMPY_DEBUG'] = str(options.debug)
|
297 |
+
|
298 |
+
if options.doctest:
|
299 |
+
options.pretty = 'no'
|
300 |
+
options.console = 'python'
|
301 |
+
|
302 |
+
session = options.console
|
303 |
+
|
304 |
+
if session is not None:
|
305 |
+
ipython = session == 'ipython'
|
306 |
+
else:
|
307 |
+
try:
|
308 |
+
import IPython
|
309 |
+
ipython = True
|
310 |
+
except ImportError:
|
311 |
+
if not options.quiet:
|
312 |
+
from sympy.interactive.session import no_ipython
|
313 |
+
print(no_ipython)
|
314 |
+
ipython = False
|
315 |
+
|
316 |
+
args = {
|
317 |
+
'pretty_print': True,
|
318 |
+
'use_unicode': None,
|
319 |
+
'use_latex': None,
|
320 |
+
'order': None,
|
321 |
+
'argv': ipy_args,
|
322 |
+
}
|
323 |
+
|
324 |
+
if options.pretty == 'unicode':
|
325 |
+
args['use_unicode'] = True
|
326 |
+
elif options.pretty == 'ascii':
|
327 |
+
args['use_unicode'] = False
|
328 |
+
elif options.pretty == 'no':
|
329 |
+
args['pretty_print'] = False
|
330 |
+
|
331 |
+
if options.order is not None:
|
332 |
+
args['order'] = options.order
|
333 |
+
|
334 |
+
args['quiet'] = options.quiet
|
335 |
+
args['auto_symbols'] = options.auto_symbols or options.interactive
|
336 |
+
args['auto_int_to_Integer'] = options.auto_int_to_Integer or options.interactive
|
337 |
+
|
338 |
+
from sympy.interactive import init_session
|
339 |
+
init_session(ipython, **args)
|
340 |
+
|
341 |
+
if __name__ == "__main__":
|
342 |
+
main()
|
lib/python3.11/site-packages/jinja2/__init__.py
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Jinja is a template engine written in pure Python. It provides a
|
2 |
+
non-XML syntax that supports inline expressions and an optional
|
3 |
+
sandboxed environment.
|
4 |
+
"""
|
5 |
+
from .bccache import BytecodeCache as BytecodeCache
|
6 |
+
from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache
|
7 |
+
from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache
|
8 |
+
from .environment import Environment as Environment
|
9 |
+
from .environment import Template as Template
|
10 |
+
from .exceptions import TemplateAssertionError as TemplateAssertionError
|
11 |
+
from .exceptions import TemplateError as TemplateError
|
12 |
+
from .exceptions import TemplateNotFound as TemplateNotFound
|
13 |
+
from .exceptions import TemplateRuntimeError as TemplateRuntimeError
|
14 |
+
from .exceptions import TemplatesNotFound as TemplatesNotFound
|
15 |
+
from .exceptions import TemplateSyntaxError as TemplateSyntaxError
|
16 |
+
from .exceptions import UndefinedError as UndefinedError
|
17 |
+
from .loaders import BaseLoader as BaseLoader
|
18 |
+
from .loaders import ChoiceLoader as ChoiceLoader
|
19 |
+
from .loaders import DictLoader as DictLoader
|
20 |
+
from .loaders import FileSystemLoader as FileSystemLoader
|
21 |
+
from .loaders import FunctionLoader as FunctionLoader
|
22 |
+
from .loaders import ModuleLoader as ModuleLoader
|
23 |
+
from .loaders import PackageLoader as PackageLoader
|
24 |
+
from .loaders import PrefixLoader as PrefixLoader
|
25 |
+
from .runtime import ChainableUndefined as ChainableUndefined
|
26 |
+
from .runtime import DebugUndefined as DebugUndefined
|
27 |
+
from .runtime import make_logging_undefined as make_logging_undefined
|
28 |
+
from .runtime import StrictUndefined as StrictUndefined
|
29 |
+
from .runtime import Undefined as Undefined
|
30 |
+
from .utils import clear_caches as clear_caches
|
31 |
+
from .utils import is_undefined as is_undefined
|
32 |
+
from .utils import pass_context as pass_context
|
33 |
+
from .utils import pass_environment as pass_environment
|
34 |
+
from .utils import pass_eval_context as pass_eval_context
|
35 |
+
from .utils import select_autoescape as select_autoescape
|
36 |
+
|
37 |
+
__version__ = "3.1.2"
|
lib/python3.11/site-packages/jinja2/__pycache__/__init__.cpython-311.pyc
ADDED
Binary file (2.15 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/_identifier.cpython-311.pyc
ADDED
Binary file (2.17 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/async_utils.cpython-311.pyc
ADDED
Binary file (4.67 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/bccache.cpython-311.pyc
ADDED
Binary file (21 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/compiler.cpython-311.pyc
ADDED
Binary file (111 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/constants.cpython-311.pyc
ADDED
Binary file (1.59 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/debug.cpython-311.pyc
ADDED
Binary file (6.75 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/defaults.cpython-311.pyc
ADDED
Binary file (1.76 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/environment.cpython-311.pyc
ADDED
Binary file (80.6 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/exceptions.cpython-311.pyc
ADDED
Binary file (8.64 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/ext.cpython-311.pyc
ADDED
Binary file (43.2 kB). View file
|
|
lib/python3.11/site-packages/jinja2/__pycache__/filters.cpython-311.pyc
ADDED
Binary file (75.9 kB). View file
|
|