Kasamuday commited on
Commit
16a8ff1
1 Parent(s): 493a90e

Upload 4487 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +11 -0
  2. Lib/site-packages/.DS_Store +0 -0
  3. Lib/site-packages/Babel-2.14.0.dist-info/INSTALLER +1 -0
  4. Lib/site-packages/Babel-2.14.0.dist-info/LICENSE +27 -0
  5. Lib/site-packages/Babel-2.14.0.dist-info/METADATA +37 -0
  6. Lib/site-packages/Babel-2.14.0.dist-info/RECORD +1075 -0
  7. Lib/site-packages/Babel-2.14.0.dist-info/WHEEL +5 -0
  8. Lib/site-packages/Babel-2.14.0.dist-info/entry_points.txt +20 -0
  9. Lib/site-packages/Babel-2.14.0.dist-info/top_level.txt +1 -0
  10. Lib/site-packages/Cython-3.0.10.dist-info/COPYING.txt +19 -0
  11. Lib/site-packages/Cython-3.0.10.dist-info/INSTALLER +1 -0
  12. Lib/site-packages/Cython-3.0.10.dist-info/LICENSE.txt +176 -0
  13. Lib/site-packages/Cython-3.0.10.dist-info/METADATA +63 -0
  14. Lib/site-packages/Cython-3.0.10.dist-info/RECORD +447 -0
  15. Lib/site-packages/Cython-3.0.10.dist-info/WHEEL +5 -0
  16. Lib/site-packages/Cython-3.0.10.dist-info/entry_points.txt +4 -0
  17. Lib/site-packages/Cython-3.0.10.dist-info/top_level.txt +3 -0
  18. Lib/site-packages/Cython/Build/BuildExecutable.py +170 -0
  19. Lib/site-packages/Cython/Build/Cythonize.py +255 -0
  20. Lib/site-packages/Cython/Build/Dependencies.py +1380 -0
  21. Lib/site-packages/Cython/Build/Distutils.py +1 -0
  22. Lib/site-packages/Cython/Build/Inline.py +367 -0
  23. Lib/site-packages/Cython/Build/IpythonMagic.py +572 -0
  24. Lib/site-packages/Cython/Build/Tests/TestCyCache.py +119 -0
  25. Lib/site-packages/Cython/Build/Tests/TestCythonizeArgsParser.py +482 -0
  26. Lib/site-packages/Cython/Build/Tests/TestDependencies.py +142 -0
  27. Lib/site-packages/Cython/Build/Tests/TestInline.py +112 -0
  28. Lib/site-packages/Cython/Build/Tests/TestIpythonMagic.py +295 -0
  29. Lib/site-packages/Cython/Build/Tests/TestRecythonize.py +212 -0
  30. Lib/site-packages/Cython/Build/Tests/TestStripLiterals.py +56 -0
  31. Lib/site-packages/Cython/Build/Tests/__init__.py +1 -0
  32. Lib/site-packages/Cython/Build/Tests/__pycache__/TestCyCache.cpython-38.pyc +0 -0
  33. Lib/site-packages/Cython/Build/Tests/__pycache__/TestCythonizeArgsParser.cpython-38.pyc +0 -0
  34. Lib/site-packages/Cython/Build/Tests/__pycache__/TestDependencies.cpython-38.pyc +0 -0
  35. Lib/site-packages/Cython/Build/Tests/__pycache__/TestInline.cpython-38.pyc +0 -0
  36. Lib/site-packages/Cython/Build/Tests/__pycache__/TestIpythonMagic.cpython-38.pyc +0 -0
  37. Lib/site-packages/Cython/Build/Tests/__pycache__/TestRecythonize.cpython-38.pyc +0 -0
  38. Lib/site-packages/Cython/Build/Tests/__pycache__/TestStripLiterals.cpython-38.pyc +0 -0
  39. Lib/site-packages/Cython/Build/Tests/__pycache__/__init__.cpython-38.pyc +0 -0
  40. Lib/site-packages/Cython/Build/__init__.py +14 -0
  41. Lib/site-packages/Cython/Build/__pycache__/BuildExecutable.cpython-38.pyc +0 -0
  42. Lib/site-packages/Cython/Build/__pycache__/Cythonize.cpython-38.pyc +0 -0
  43. Lib/site-packages/Cython/Build/__pycache__/Dependencies.cpython-38.pyc +0 -0
  44. Lib/site-packages/Cython/Build/__pycache__/Distutils.cpython-38.pyc +0 -0
  45. Lib/site-packages/Cython/Build/__pycache__/Inline.cpython-38.pyc +0 -0
  46. Lib/site-packages/Cython/Build/__pycache__/IpythonMagic.cpython-38.pyc +0 -0
  47. Lib/site-packages/Cython/Build/__pycache__/__init__.cpython-38.pyc +0 -0
  48. Lib/site-packages/Cython/CodeWriter.py +820 -0
  49. Lib/site-packages/Cython/Compiler/AnalysedTreeTransforms.py +99 -0
  50. Lib/site-packages/Cython/Compiler/Annotate.py +341 -0
.gitattributes CHANGED
@@ -65,3 +65,14 @@ models/research/lfads/synth_data/trained_itb/model-65000.meta filter=lfs diff=lf
65
  models/research/object_detection/dataset_tools/densepose/UV_symmetry_transforms.mat filter=lfs diff=lfs merge=lfs -text
66
  models/research/object_detection/g3doc/img/kites_with_segment_overlay.png filter=lfs diff=lfs merge=lfs -text
67
  models/research/object_detection/test_images/image2.jpg filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
65
  models/research/object_detection/dataset_tools/densepose/UV_symmetry_transforms.mat filter=lfs diff=lfs merge=lfs -text
66
  models/research/object_detection/g3doc/img/kites_with_segment_overlay.png filter=lfs diff=lfs merge=lfs -text
67
  models/research/object_detection/test_images/image2.jpg filter=lfs diff=lfs merge=lfs -text
68
+ Lib/site-packages/altair/vegalite/v5/schema/__pycache__/channels.cpython-38.pyc filter=lfs diff=lfs merge=lfs -text
69
+ Lib/site-packages/altair/vegalite/v5/schema/__pycache__/core.cpython-38.pyc filter=lfs diff=lfs merge=lfs -text
70
+ Lib/site-packages/array_record/python/array_record_module.so filter=lfs diff=lfs merge=lfs -text
71
+ Lib/site-packages/clang/native/libclang.dll filter=lfs diff=lfs merge=lfs -text
72
+ Lib/site-packages/cv2/cv2.pyd filter=lfs diff=lfs merge=lfs -text
73
+ Lib/site-packages/cv2/opencv_videoio_ffmpeg490_64.dll filter=lfs diff=lfs merge=lfs -text
74
+ Lib/site-packages/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb filter=lfs diff=lfs merge=lfs -text
75
+ Lib/site-packages/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb filter=lfs diff=lfs merge=lfs -text
76
+ Lib/site-packages/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb filter=lfs diff=lfs merge=lfs -text
77
+ Lib/site-packages/google/protobuf/pyext/_message.cp38-win_amd64.pyd filter=lfs diff=lfs merge=lfs -text
78
+ share/jupyter/nbextensions/pydeck/index.js.map filter=lfs diff=lfs merge=lfs -text
Lib/site-packages/.DS_Store ADDED
Binary file (6.15 kB). View file
 
Lib/site-packages/Babel-2.14.0.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
Lib/site-packages/Babel-2.14.0.dist-info/LICENSE ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2013-2023 by the Babel Team, see AUTHORS for more information.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions
5
+ are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright
10
+ notice, this list of conditions and the following disclaimer in
11
+ the documentation and/or other materials provided with the
12
+ distribution.
13
+ 3. Neither the name of the copyright holder nor the names of its
14
+ contributors may be used to endorse or promote products derived
15
+ from this software without specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Lib/site-packages/Babel-2.14.0.dist-info/METADATA ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Babel
3
+ Version: 2.14.0
4
+ Summary: Internationalization utilities
5
+ Home-page: https://babel.pocoo.org/
6
+ Author: Armin Ronacher
7
+ Author-email: armin.ronacher@active-4.com
8
+ Maintainer: Aarni Koskela
9
+ Maintainer-email: akx@iki.fi
10
+ License: BSD-3-Clause
11
+ Project-URL: Source, https://github.com/python-babel/babel
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Web Environment
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.7
21
+ Classifier: Programming Language :: Python :: 3.8
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: Implementation :: CPython
27
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
28
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
+ Requires-Python: >=3.7
30
+ License-File: LICENSE
31
+ Requires-Dist: pytz >=2015.7 ; python_version < "3.9"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest >=6.0 ; extra == 'dev'
34
+ Requires-Dist: pytest-cov ; extra == 'dev'
35
+ Requires-Dist: freezegun ~=1.0 ; extra == 'dev'
36
+
37
+ A collection of tools for internationalizing Python applications.
Lib/site-packages/Babel-2.14.0.dist-info/RECORD ADDED
@@ -0,0 +1,1075 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../Scripts/pybabel.exe,sha256=CkcN46NI_9HXO2c0UwaootxNdZLVa7j562d0qNDWK3M,108454
2
+ Babel-2.14.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
3
+ Babel-2.14.0.dist-info/LICENSE,sha256=kI4K1yBTrifB0X4zQL0Uz_m_k1mS7VZSbRfJg6tuevc,1531
4
+ Babel-2.14.0.dist-info/METADATA,sha256=m-cHPqie3eq-LWf0Gq-T6iCSsLY_nP1vG3mG8mIw3Fw,1554
5
+ Babel-2.14.0.dist-info/RECORD,,
6
+ Babel-2.14.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
7
+ Babel-2.14.0.dist-info/entry_points.txt,sha256=Y2Cr1P3E8Yt7kqzvVz4wnTvD1H3-BVD4FOkVqHIGBfc,750
8
+ Babel-2.14.0.dist-info/top_level.txt,sha256=mQO3vNkqlcYs_xRaL5EpRIy1IRjMp4N9_vdwmiemPXo,6
9
+ babel/__init__.py,sha256=vTAkGRCz3lOycJZLSi0eJsvLeEjbFdGmJhQhD4Xbz3M,863
10
+ babel/__pycache__/__init__.cpython-38.pyc,,
11
+ babel/__pycache__/core.cpython-38.pyc,,
12
+ babel/__pycache__/dates.cpython-38.pyc,,
13
+ babel/__pycache__/languages.cpython-38.pyc,,
14
+ babel/__pycache__/lists.cpython-38.pyc,,
15
+ babel/__pycache__/localedata.cpython-38.pyc,,
16
+ babel/__pycache__/numbers.cpython-38.pyc,,
17
+ babel/__pycache__/plural.cpython-38.pyc,,
18
+ babel/__pycache__/support.cpython-38.pyc,,
19
+ babel/__pycache__/units.cpython-38.pyc,,
20
+ babel/__pycache__/util.cpython-38.pyc,,
21
+ babel/core.py,sha256=7TlC6iSaRXrJ-77svYbeD1pvA2RpWeHQDxRuETjxrrc,44006
22
+ babel/dates.py,sha256=AW9mkeuQ6gF-tlc-VjwZvuZpczqtcRqcVf_0GRRlLDQ,72721
23
+ babel/global.dat,sha256=X27frk-HBruc0b2Xd5AmxrnjoDqbVazONtaRehqJl7Y,471487
24
+ babel/languages.py,sha256=2LDTV9WizAuZVam0vfw-Q-QKYCQpF5DxLbmVoat7TKI,2844
25
+ babel/lists.py,sha256=YWUu2YU7AyIwAfTyHBd2bGYKEaImKzRpdmahMeDXuEY,3016
26
+ babel/locale-data/aa.dat,sha256=t4qij3sHObXpx5s1-y_J3gLmDCjn9XZxjGhFSDVtViA,2854
27
+ babel/locale-data/aa_DJ.dat,sha256=VKjSgKVsftG91nj0-AQMYFuF_p4YAGfRkgAvycB2EYU,1112
28
+ babel/locale-data/aa_ER.dat,sha256=6b6qROwoeOq0-batM1Z7Ji2gvGDogl3ODcftt1Jkm9g,637
29
+ babel/locale-data/aa_ET.dat,sha256=piwFu94H7e-jPwd4ZaWiDc-j2nAH_GiC5UZ2IxMx7bs,635
30
+ babel/locale-data/ab.dat,sha256=plWe5eNsmJvVplgNAo5xusXgAJvI025o5i0u73HS7wY,100416
31
+ babel/locale-data/ab_GE.dat,sha256=b5be2Uv1YtP-bkMasJMzoQPxJPNLFqifXnCiK8rCyLE,635
32
+ babel/locale-data/af.dat,sha256=VHwHPH3IrJj39r-Fx8gbUJPGjFUulN-wLx8mN_zQBjA,203730
33
+ babel/locale-data/af_NA.dat,sha256=zif__TyNY44mSCYOCrrglsyr_H31JhBNPwSJftg8200,1450
34
+ babel/locale-data/af_ZA.dat,sha256=6lT-mLg7LRtyAEhWhiF2xVtiPyzEa28U6hsFw_BMrZE,635
35
+ babel/locale-data/agq.dat,sha256=ntz-h-vOsJcVCBrEBQpC-ow4zsUTShPhvDgrlv79wvQ,17302
36
+ babel/locale-data/agq_CM.dat,sha256=hYtg7pRw7J6TsYHvhlEEv7DqpyXoK3KS9DAqtYtgBX0,636
37
+ babel/locale-data/ak.dat,sha256=bgWHrtHvkP_LumU5T6eGbVEkvah06-7JDrk4uO3eQN8,15782
38
+ babel/locale-data/ak_GH.dat,sha256=tM-OSpXWyBwZFfKPVStWBbFv3dwNj_7AqcBz4ONrOQs,616
39
+ babel/locale-data/am.dat,sha256=BiOJmrhvFpI9897xPOO-ZUjci_f8keIj4buqlOCFsEY,239348
40
+ babel/locale-data/am_ET.dat,sha256=2VZDSh5bY9vLLuTqcKYG66p5OYlvPRPX58rpNTFWPok,635
41
+ babel/locale-data/an.dat,sha256=y3xHxp7sm5uD3tAqKreiYFTxFvqbUS-rDVoX9Yd0xyE,34079
42
+ babel/locale-data/an_ES.dat,sha256=rQuq-zKj7-fCjY-5fGGoGJT1x60pAyCEAVEswXPnHrI,653
43
+ babel/locale-data/ann.dat,sha256=fUenvOdPjqayLEiVDRNncK8SOBi9gAGAdxMuOATlsI0,737
44
+ babel/locale-data/ann_NG.dat,sha256=0i2K6cv6eCurgFgwtiCr09hYwZCA1kHkQaKnDyCD86M,617
45
+ babel/locale-data/apc.dat,sha256=G96W-ebLqQlTuPN3-VqSfAY-GF0K99c6uXHza5f4e2g,1564
46
+ babel/locale-data/apc_SY.dat,sha256=tagFeQz8BA9Pc7RMqkce1ZalfKIBjqg0SR4NlpGQaaM,679
47
+ babel/locale-data/ar.dat,sha256=V0ewHhDy2-X75q5nmmtXbQ60lrw6SgXMPDjV8qYhGCI,423869
48
+ babel/locale-data/ar_001.dat,sha256=hRKDI3wzxO5T191MfSdCn_MZ6ckM2Rz_r__0JZqS00s,1707
49
+ babel/locale-data/ar_AE.dat,sha256=cr2KVgBOkQEtxEbJZpZhx3bwfkwr4dc8_PgBPH1bWhw,1106
50
+ babel/locale-data/ar_BH.dat,sha256=FoQ2c3E3TDqKcioarWBvLi_MllJmSd_56r0U45_gHWw,720
51
+ babel/locale-data/ar_DJ.dat,sha256=qbNam_QAmhobsIUfJLCL9pe146SvcmNIE_L3cWpmkBs,698
52
+ babel/locale-data/ar_DZ.dat,sha256=lZQf-qemJ0lxA2VcP8aAke11fvcTXzRCglJGu9gtO_g,1797
53
+ babel/locale-data/ar_EG.dat,sha256=1zcHJKoldryovzBak9GDH2EcPxniQfg-5dlQzPYO2qc,757
54
+ babel/locale-data/ar_EH.dat,sha256=a0xJdGJYzGFzfvwxZVDP7yURlTm93FQSTQ5qp3XDMYo,658
55
+ babel/locale-data/ar_ER.dat,sha256=l-WjJfxm7kP05-Hnr5PingHaKWJ46ScfW4KEBcwD5HM,679
56
+ babel/locale-data/ar_IL.dat,sha256=O3UYAjf4BB3NdcSQTn-RzNjyj4kzTBhX3q7E8-9Aihw,1264
57
+ babel/locale-data/ar_IQ.dat,sha256=2I8H20sPMZSnnFFW5AbesphnQndm_HvHXSk3mccQDag,2405
58
+ babel/locale-data/ar_JO.dat,sha256=0CfGCDngdKxbK8jkD58lAqFRKtqUsstSx1Wep-C1RRU,2404
59
+ babel/locale-data/ar_KM.dat,sha256=Zx5XtfTuRPiW6iViOjeal_Fq-18EA7GuERViMP1_mc4,1230
60
+ babel/locale-data/ar_KW.dat,sha256=1wSXHTcgFKwhNciVS8IvGKvkzzqOIMBFykEJEQXdhEE,720
61
+ babel/locale-data/ar_LB.dat,sha256=1wcUmhH0b3PZc4UvaDy-t6MliQI8kFXMMe_slqEK-u8,2420
62
+ babel/locale-data/ar_LY.dat,sha256=5vCCedkZ19UrYoHmN-rgcUSOMSPXog16mdKX6oAsiAI,1732
63
+ babel/locale-data/ar_MA.dat,sha256=cQr24gcr-GMC40H5uzIavP2lZjPg8_hJJ1RCPC43ZRY,2091
64
+ babel/locale-data/ar_MR.dat,sha256=MUFqWwU1G9xUQxDNlpatch_XyqMYRWVsyHusSjdc-P4,2257
65
+ babel/locale-data/ar_OM.dat,sha256=HVOqTfoH3JVTHJL-yDBiIafNfckU7CIcO_sIzXBffKw,720
66
+ babel/locale-data/ar_PS.dat,sha256=xrrCSXKv7kJ-U8bKc0rRn-s81iLned6i4c8HjvU4RVU,2342
67
+ babel/locale-data/ar_QA.dat,sha256=UKfLpyX856fNgeifdr22wXpDncirWJi9NxqfSnS-7fw,720
68
+ babel/locale-data/ar_SA.dat,sha256=5QID1Wsy7BxL8SdexAyuRd9YAkHOQBTzSzpzH83_sr0,32727
69
+ babel/locale-data/ar_SD.dat,sha256=f7aUKlrKmmC7ijTjVwn5r9m3mfZfEob1a7GHVCj4Qxk,720
70
+ babel/locale-data/ar_SO.dat,sha256=4LD_gds2VsvxdFHpFo56CxTFenzNdvEkMofc4oTGBTU,677
71
+ babel/locale-data/ar_SS.dat,sha256=T6eeWPeFejmBC7InKqg-6qmWoer1vjl6srHe_5ybkDU,700
72
+ babel/locale-data/ar_SY.dat,sha256=09SrzmsmYwn_ODe3jtwmhDCIo1l6cFkoaiGuvNs9yjo,2404
73
+ babel/locale-data/ar_TD.dat,sha256=OG7NYtRrJiDeRt7HP-B4ta5ri-6fdSnYomppfy2A4ec,658
74
+ babel/locale-data/ar_TN.dat,sha256=WkxFT-thyffXMwpqEBYAofwPZcYTUxRXWU6tB5X-fGc,1735
75
+ babel/locale-data/ar_YE.dat,sha256=vu8wYJgzcJ1douKfKLx3-hAg1sjndD5_PTHWG_bzRL0,720
76
+ babel/locale-data/arn.dat,sha256=JcfndkQuEeAnP6aN1ZEJOfljh8DaddCgLjBUXgK_u8I,763
77
+ babel/locale-data/arn_CL.dat,sha256=cf_JrdIAxFwbltVwtloNC9527Du7zaoBDM-_KmctSvE,636
78
+ babel/locale-data/as.dat,sha256=V2PqkKyvcTkkXvFlVUqsE5WxC3kITqkyyBGLvN2cXRY,278346
79
+ babel/locale-data/as_IN.dat,sha256=bE-OZ0Y3d2-QtD23ztjluSsFk1_RFNYMFzKgBC3waw4,658
80
+ babel/locale-data/asa.dat,sha256=dWIi65F3gH0ylkp9-wESGLu5NHMg1qd9cjPvN_YF-Nw,16079
81
+ babel/locale-data/asa_TZ.dat,sha256=U0GU10aP58LxCeqyjl69RQCZi_6tTQxm2vni6XVkoqY,617
82
+ babel/locale-data/ast.dat,sha256=GrbugTFqjqJJXkZDlpaEVhg8Hxr11egrpXbmUC27ZNo,215973
83
+ babel/locale-data/ast_ES.dat,sha256=51kFxigV5COuiPiNisp-OBFYMith5rUgBmU48rGk7Hc,654
84
+ babel/locale-data/az.dat,sha256=prQmgF-qUjo3vVNzaV8g9xobBoV48Xqoy76Wdc4TZ7E,227598
85
+ babel/locale-data/az_Arab.dat,sha256=IGBla73oKavlLHhtIW37idHxTkmQWZ-S8NE54b65d4k,7499
86
+ babel/locale-data/az_Arab_IQ.dat,sha256=VsM0-KQPCP4MUw-2wMsBv-F467cr2Bup3jfxx8Fc3ZE,678
87
+ babel/locale-data/az_Arab_IR.dat,sha256=ROb0gFTPwK5CcjpQMB7CJ662eld9sZj7IA6QMrvxgto,678
88
+ babel/locale-data/az_Arab_TR.dat,sha256=EV6cNf3keBNREHkfF98GGZGOZz4L5dxf8pFbujInaQY,635
89
+ babel/locale-data/az_Cyrl.dat,sha256=d_IEARmo3OXqnEw0PCEZxreYCDj8fyQgHWs-MlsxhmA,38832
90
+ babel/locale-data/az_Cyrl_AZ.dat,sha256=GRZjR-gp6JYeLNxoiAKNdv9bkTmS1bpYnRJ0c9YIGws,635
91
+ babel/locale-data/az_Latn.dat,sha256=aK2ziytg5Ig6GYk9tVCq4BEyV6UYy9Ip7F1_i4Pq1jw,2258
92
+ babel/locale-data/az_Latn_AZ.dat,sha256=GRZjR-gp6JYeLNxoiAKNdv9bkTmS1bpYnRJ0c9YIGws,635
93
+ babel/locale-data/ba.dat,sha256=mXaN5z_Oq1e82Uod4YQ5_EvYHlNKVzF2xb_b0w9Y1VQ,774
94
+ babel/locale-data/ba_RU.dat,sha256=8YcwUOx3h4BcSfUIumKJ4wcFyiSgBM74SqenVIQUKi8,653
95
+ babel/locale-data/bal.dat,sha256=Py4zYyjzbtRaLWKR6kNhivhdDvQPbqb4VcMk4KWLXAo,14015
96
+ babel/locale-data/bal_Arab.dat,sha256=25CVl5rF7FqKEeHzAmt0BccVI_ODqmMP86KqQ4i6PL8,934
97
+ babel/locale-data/bal_Arab_PK.dat,sha256=sy4tpUtN1St5yFoTp8C6-vi2bFGPjSaG_zDbY16Q988,636
98
+ babel/locale-data/bal_Latn.dat,sha256=e0iERNCLdOkEPNe7n9gWIuKKKo_t-3B4SsD8N1afWQA,11564
99
+ babel/locale-data/bal_Latn_PK.dat,sha256=sy4tpUtN1St5yFoTp8C6-vi2bFGPjSaG_zDbY16Q988,636
100
+ babel/locale-data/bas.dat,sha256=JtHPHmGZUAt6-_MSR_0mDeGCp1dOMTkJf9J4BavofG8,17091
101
+ babel/locale-data/bas_CM.dat,sha256=WBq-_rOvkBnT5pBaCyq844LLSRReQzg2HM0u7GmhKKM,636
102
+ babel/locale-data/be.dat,sha256=EYc84d14iU5I3Hdd3QrwDwwJCLCy00nT4Ws1YH3smxY,330917
103
+ babel/locale-data/be_BY.dat,sha256=yN4Rf2-HqinMscTfe4jKEYpsCEaddHce6K25ol595Ag,635
104
+ babel/locale-data/be_TARASK.dat,sha256=c2vboxToOLCMwzVmELk-QMj39GRY5UDJM2C2AYC8q2o,102753
105
+ babel/locale-data/bem.dat,sha256=Tk0RU_oM4nwvV6eHUaxsefqYyz1NNeNiV86JV01ekfo,6463
106
+ babel/locale-data/bem_ZM.dat,sha256=nQvsLK0FOSlgf6wspQdbj00IveO62c2Mvxjzn4eHGSs,617
107
+ babel/locale-data/bez.dat,sha256=2McG-mSD2Xg7WLHHkdx3TSSQ85tmG7ReHgSrTBLYX-M,16873
108
+ babel/locale-data/bez_TZ.dat,sha256=OwcKelhUxQWu-8Jm9nf2vCay6-8LQvg-ueZSN_mrGz0,617
109
+ babel/locale-data/bg.dat,sha256=8DGk_DqF3YU9Tc4s9vbjf-h0BLCN-nmQeDrbqOnvcHw,267293
110
+ babel/locale-data/bg_BG.dat,sha256=CERFyuC4Dw9BfAZapqaq69iKAp7rBXWNCkLWAL5tAhQ,653
111
+ babel/locale-data/bgc.dat,sha256=yWm7s3ZFP3IQb8o1G_mOEaghtRqXXE-MSDQ3eEknlXw,2873
112
+ babel/locale-data/bgc_IN.dat,sha256=hO39nPiyUx1kfCdagpCQ8lzPLycjdfk59jFQgsd3Qec,659
113
+ babel/locale-data/bgn.dat,sha256=Oyx3Ry1G_Naq1C_L4LAcZavSt6vclQT39hszXYgfzjE,31595
114
+ babel/locale-data/bgn_AE.dat,sha256=CXSv6o2WHpjlucCiCXv7vEAY6mF5Dc-ibNwQM8Jnywg,636
115
+ babel/locale-data/bgn_AF.dat,sha256=UXCb78n57adZBdKHEGnhbmeVYppzlSscVOWnQNxfJOQ,679
116
+ babel/locale-data/bgn_IR.dat,sha256=iXxyPD5Z-ouDWFpOE2atoi6-HHGoD6PNaT9c-TH6x7o,679
117
+ babel/locale-data/bgn_OM.dat,sha256=3O0CzFrjWxOQFdN6-lDhCxRngoXfadd_dwYoVyjK9jA,679
118
+ babel/locale-data/bgn_PK.dat,sha256=gdVUcc-isHd9lf0S-AmFoPIMwDZ8ay6NY4o1udWI6Yo,636
119
+ babel/locale-data/bho.dat,sha256=Pt4CtmGkzDTPGO1culdbjJqgwZhiTLOTzrxSMKJxzog,3551
120
+ babel/locale-data/bho_IN.dat,sha256=UcL_aZq35dOHME0Fux9zyt9B6BOTxyR5UvaGWKLs1jE,659
121
+ babel/locale-data/blt.dat,sha256=6G2E9osBy9OrG1iUKLD9cwcRk3IV7fT11iI8zFkLaeo,723
122
+ babel/locale-data/blt_VN.dat,sha256=vpTQEJYssmuBUn_pYqx7ZtYONNNz02_oBYlDMdWqKAc,636
123
+ babel/locale-data/bm.dat,sha256=VhInWEo8x3U5asJ4iTZMMg5i6p4JbtvS-gLHDpmhizU,15802
124
+ babel/locale-data/bm_ML.dat,sha256=PAGrUwc1S6q32DDHTu5LkePFXe_M_i_WxIY4oLuUnzw,616
125
+ babel/locale-data/bm_Nkoo.dat,sha256=jf8Gv-tmQixgSrs_JpNqwpyqH_Otrzx0fFhiemvUMe0,2885
126
+ babel/locale-data/bm_Nkoo_ML.dat,sha256=PAGrUwc1S6q32DDHTu5LkePFXe_M_i_WxIY4oLuUnzw,616
127
+ babel/locale-data/bn.dat,sha256=hx6jxrr9f2nItfwGo27uj9Tw4abkaTuHxSSwGjr4vRo,296914
128
+ babel/locale-data/bn_BD.dat,sha256=mVW90kQmhDcwzKmkmgNAt5iMq1pLWmNndNID9fspVjY,635
129
+ babel/locale-data/bn_IN.dat,sha256=YFSk2NHHq3VtaS9p2B12Kzst8rv4B8-JO99A_KI4ucs,5662
130
+ babel/locale-data/bo.dat,sha256=R6a5-THNIu1o1eKV4S4N26poBCJmVjoAy-TNUwMndAc,22353
131
+ babel/locale-data/bo_CN.dat,sha256=xOnyre81Z1IHnWV5mJH0x313h-ZWu84hIXcMuB50IT0,635
132
+ babel/locale-data/bo_IN.dat,sha256=GvYCgtrOD5zYYsfMtVmkCv8-y6His8Lg7iuytEGjnMI,1307
133
+ babel/locale-data/br.dat,sha256=7CrF-_Rud8dcFRltHX9YGPD3u16wLm_67SwZ73lBOyM,328164
134
+ babel/locale-data/br_FR.dat,sha256=3oVDdZd7Xf4Q-hwmYraF42SM_3NtvSoiZlmlh6gSNOs,653
135
+ babel/locale-data/brx.dat,sha256=eHRkmtgQoeaYzHuudYrFBJszIEMBhW1Qwx6cozlruKQ,195439
136
+ babel/locale-data/brx_IN.dat,sha256=NKuJh0cEhRQasy6JAGUi5HbqdnhhEFTQ_7osgtdG5Iw,659
137
+ babel/locale-data/bs.dat,sha256=RAAcbqRG8DkEs7vQk5xIp7bmsqbgaRjLqWrPwVvD5wM,290130
138
+ babel/locale-data/bs_Cyrl.dat,sha256=i2aa9r1CLt05nRbb2w1fIsP_XCYTUmCI9t6kieq4kgY,249581
139
+ babel/locale-data/bs_Cyrl_BA.dat,sha256=oA7rsQckE_IxCpXXB3F3KWQwM3WZTR7WAdYxJN98oeM,635
140
+ babel/locale-data/bs_Latn.dat,sha256=6L9SY85hONRHO4Jz389C2Ziy7llKcDoyVNiE96ozCJ8,1990
141
+ babel/locale-data/bs_Latn_BA.dat,sha256=oA7rsQckE_IxCpXXB3F3KWQwM3WZTR7WAdYxJN98oeM,635
142
+ babel/locale-data/bss.dat,sha256=7nu6tpedFRw3kGRtrwt8M0CResWl2ZAyD-KKHgfpr40,1828
143
+ babel/locale-data/bss_CM.dat,sha256=TD7ixCHREfOLDsDJn8FY5YqGYH9czdEzdULCIl_0GhM,636
144
+ babel/locale-data/byn.dat,sha256=_Ql6YRd-UhR78KBm8mQFNH8q-H0A-pqcLOEI7RF3Auw,13482
145
+ babel/locale-data/byn_ER.dat,sha256=oAaZEqMJuTbMITO-ZO6gg8qjwROukzh5VgjtLp6rqD4,617
146
+ babel/locale-data/ca.dat,sha256=EHEK_ZUtXWq_ruKn4OUy7ki9vhfn9knoFyvO1d0eQ6o,241287
147
+ babel/locale-data/ca_AD.dat,sha256=tsLumbhbbeXw627WKi-sQdSTFwNpcSRvJIEYcrOMqOM,653
148
+ babel/locale-data/ca_ES.dat,sha256=T-zv3FfnCJA2WUQTeBADKV82ghY-r60wk8mXtD9wbnI,653
149
+ babel/locale-data/ca_ES_VALENCIA.dat,sha256=VDfhBCSYDowm-bMKYOFkd2o5ha3OApQ4ntHb5KPaWIg,3703
150
+ babel/locale-data/ca_FR.dat,sha256=5HUFYUl5QRaUMwJxGLIqUhDO4_wF_crrr346wJmEOZo,672
151
+ babel/locale-data/ca_IT.dat,sha256=Zh2rtOq8MIDC2CQXWnhp5HOvPfXNxhRGnnZViOgc1Mg,653
152
+ babel/locale-data/cad.dat,sha256=_g8YTnbYWFt4gYUVhgk6jrzcagE8qRXOPaG2rNPb2bk,2495
153
+ babel/locale-data/cad_US.dat,sha256=FWV1sofgr9no5P9yBxNDLeKWoQd80XEYEilmLwamkSc,654
154
+ babel/locale-data/cch.dat,sha256=J4S73psT7C_cXs1VNNYow47plBodQ4PKINC59kzvfAw,2430
155
+ babel/locale-data/cch_NG.dat,sha256=0adhw9xNMlVEqDVKvHe4HCPtbjcw5NSo4ny_pOjl0-4,617
156
+ babel/locale-data/ccp.dat,sha256=7AxDu2KPudgZ1BbZTDvRjZvKh7jXhFHs8zs24m8Y4Y8,276511
157
+ babel/locale-data/ccp_BD.dat,sha256=f00776fnI484B-mzW0rY22KNkzV6wtmk7uxrSK_x9bU,636
158
+ babel/locale-data/ccp_IN.dat,sha256=jMJimrQrx-b96hBSLi8sOyHtYRwNZryt-he0rhwEZ2s,659
159
+ babel/locale-data/ce.dat,sha256=XcDsH5WZg0yl-T9upBG7NRaVPBKZbECgVRnvHqVQFTI,144929
160
+ babel/locale-data/ce_RU.dat,sha256=NgNmp1uFnm2MT-s_yx_V8KuW1dSR6_SEWf4NcqrAL9o,653
161
+ babel/locale-data/ceb.dat,sha256=i4uLNz1eciW-yumBFWwca4SYlYt_kdHzO_haWWYRn40,118889
162
+ babel/locale-data/ceb_PH.dat,sha256=Z2zXPyNI3Yu3QcGL6lT1nIsl04vDDLFvyd9GeucDtqA,636
163
+ babel/locale-data/cgg.dat,sha256=Z1baC5RbMwiJLSh0YyQhlspOOiaqEaxNe5MuQQ-jZcs,16124
164
+ babel/locale-data/cgg_UG.dat,sha256=HZBma4MFuX2Q7sk-SOYk5OUkbMXWWr_tEInOqPboNYs,640
165
+ babel/locale-data/cho.dat,sha256=xWGBvUZv6DGSS_tUPXOrwtkOxxB-bF6ciK49Kqo7uf0,771
166
+ babel/locale-data/cho_US.dat,sha256=T3CacgkE-uKPi0CV7fbcCLTNfdjEco_A50vYciuXGGI,654
167
+ babel/locale-data/chr.dat,sha256=JB8MIrwz5u2lw0e7Y9Bel5wDgQVB_pi0MtywjedprGA,233233
168
+ babel/locale-data/chr_US.dat,sha256=wZE2RrJ-5jjUQa1RCJgL7hkXdsU3t91orD-ULDYMXSM,654
169
+ babel/locale-data/cic.dat,sha256=eaHu3naKHQZXra4cPkLtNTA9ifzBGG2RwOq_SIq9OaU,2751
170
+ babel/locale-data/cic_US.dat,sha256=DvW1XJS1hEp_W_5ol0pIECeUb3RqXsyieKVS8J6caJ4,654
171
+ babel/locale-data/ckb.dat,sha256=AZVeUEXTNP24sqYx-yTWm6HurKdGLGgIVRNGBazKaeY,42245
172
+ babel/locale-data/ckb_IQ.dat,sha256=Osgu1RAUf2yQpZ-nNBKMxTFJnH32ItLg0kVVzjNfmeo,679
173
+ babel/locale-data/ckb_IR.dat,sha256=6wWzlZWn7oDmGIdnF7UtCfIcUgQ1zvMxtAcEw4bbM-g,1231
174
+ babel/locale-data/co.dat,sha256=gaYPBHZWXANvwbLrSS2-XPh_BT-a94XTzdlFCCFhK2g,15725
175
+ babel/locale-data/co_FR.dat,sha256=DAmwXn4n1mRSsT17-DcU0vdVSI_JfVR8oGOnj7hTFHk,653
176
+ babel/locale-data/cs.dat,sha256=nADdcIBj8sszhkqnC4gfTSQqB2zjKND1rHLOmNwTs4o,334644
177
+ babel/locale-data/cs_CZ.dat,sha256=keaiqSsGtB_axj8FvdYDOCDmlg2PbQMI6qnW-2mFUTY,653
178
+ babel/locale-data/cu.dat,sha256=AVajYXlHvt5g1cMq-eC69rr-xSko12J8JD-6Ywej59U,20277
179
+ babel/locale-data/cu_RU.dat,sha256=GcbqgE8Mlglk5EGGSVcCR-Zb8AmCqHGE8cbmAUSbpdY,653
180
+ babel/locale-data/cv.dat,sha256=kHbrL_nzQrIKdGXBGrCqYg4Qh1pBILVsH7nMocJ9UZ4,97815
181
+ babel/locale-data/cv_RU.dat,sha256=oVPRtcHzmRmkAy26Bv1jLiWmm0P18ruvHlCQ5F3IFY4,653
182
+ babel/locale-data/cy.dat,sha256=_3et0sgz0QFi8FlAKvN-Od02OjL7-_RW-_GNdDI1h3k,373601
183
+ babel/locale-data/cy_GB.dat,sha256=dyPULIteKk9gP7lGQiDtsiH5QDqNdlxMdK__2dq90dg,653
184
+ babel/locale-data/da.dat,sha256=K1BXQdwR-ahbFdDAlUfvjyx3u-VK0uU0Q3GVapWfSh0,230205
185
+ babel/locale-data/da_DK.dat,sha256=qNTw1H8WXsV8qGBHxu6noCUOV3BcoR63ERJF8Xc86Ls,653
186
+ babel/locale-data/da_GL.dat,sha256=9BNeKX1-U4NDr3pBU1ZnCGAasdYZjBMsvpdS5uTf9qs,616
187
+ babel/locale-data/dav.dat,sha256=6nbRBkxNimZwwDoVsofPh0disJDKsu3eQL3k7O3F3u8,16193
188
+ babel/locale-data/dav_KE.dat,sha256=MfFFEDT6fib5be-EmziiEF0NAnEV6lXD7svYtHUtmn0,636
189
+ babel/locale-data/de.dat,sha256=gHAv7h6C3WGZ-h7TvnUaakK49fKUJLKaIL6ufFW12ws,237243
190
+ babel/locale-data/de_AT.dat,sha256=BUbZOt5qYE0tKfJeqmPlxFgAF3xp9wGFLNtB6C35Ctw,2641
191
+ babel/locale-data/de_BE.dat,sha256=wvdWykhix9Slofcjm2tx2aEhMjffmMLsNrd8709NIR0,653
192
+ babel/locale-data/de_CH.dat,sha256=795GEXg--aobz28qnS_CYO7_TlcSM6gVymZomESGr7U,4311
193
+ babel/locale-data/de_DE.dat,sha256=SM44YjGlqgh7bKlXvUdt53t9hnCX5o46ujI4IrGPpeI,653
194
+ babel/locale-data/de_IT.dat,sha256=_ccaB__UQEMDjx88_tQ4svpXNQhhfypilclNnna1UgQ,1646
195
+ babel/locale-data/de_LI.dat,sha256=FnGRiippDTTFRFswU_4PblQruAuWuPEpa8cGbXPJpbE,1413
196
+ babel/locale-data/de_LU.dat,sha256=QAkvLfyKmZdQVfkk2BbE2AMisK1i7yhRetcApqn4dxA,1067
197
+ babel/locale-data/dje.dat,sha256=qKWXMFDxJ6i4Gaiox33mTyi9gHEUJI3P5DwZ-PaoiAg,16157
198
+ babel/locale-data/dje_NE.dat,sha256=lU1vag_HJ4OrbYNYWFXuSdtqLwSlwBbvD6Tg-hl36e4,617
199
+ babel/locale-data/doi.dat,sha256=Z5-0N1pcReHx1QP8V_XO4QnwwYUowUoW0X3IoyjLHVM,24727
200
+ babel/locale-data/doi_IN.dat,sha256=-q_oAqvdTizFG1DB_1p8sZVyjbaFFQ_FFPtNCyVn9ZA,659
201
+ babel/locale-data/dsb.dat,sha256=WZ4WRm5rxxTbxN44QFfr7tlCn2GKIa1RiqSDw965slE,258955
202
+ babel/locale-data/dsb_DE.dat,sha256=Z2Dzjx7eXscEBEAb-ymvb1GKP4GVNCt5L4i-BYC_vrE,654
203
+ babel/locale-data/dua.dat,sha256=yVkm_JzYn9zK1ct4ORyc00IhvhNXHS_TBcbM5J2zDuU,5317
204
+ babel/locale-data/dua_CM.dat,sha256=Z3vD8WEr2Wlqqt39anvKXVhz4_yBSm4t5BoAaEz9PgE,636
205
+ babel/locale-data/dv.dat,sha256=-1zCv4GXiRHdWjQk0qXWNPSf4FX4Zp-Ij2jwgz5BsGk,2225
206
+ babel/locale-data/dv_MV.dat,sha256=lvuU5gj3vDykU2ftU1_4Lza-130DB6_ZwylDrdb_GlY,635
207
+ babel/locale-data/dyo.dat,sha256=9vdi_yL7p7skDqWnbG29rKYMm9DauMzy9aXEi3wreO8,10500
208
+ babel/locale-data/dyo_SN.dat,sha256=Z6N-NIVcKkx6sFUm8LfN74usyZfgeI6swJL_A_XbBcc,617
209
+ babel/locale-data/dz.dat,sha256=ff_TDWsCb2rKPMJP6XOAHRxXoRRsEYoOcvDiWoB18TY,90284
210
+ babel/locale-data/dz_BT.dat,sha256=KWd6cypWse4XfXbY4BmTlxGjlnRksYNcQYi_iyXluKw,635
211
+ babel/locale-data/ebu.dat,sha256=ZK20F26CyLC-axvixTbESEfn1V2Cye3WrQinYulap_I,16157
212
+ babel/locale-data/ebu_KE.dat,sha256=GEcGqVmH0WwgP1BCsd9vnSGxGXl8ON4UPTRbyeaNDfw,636
213
+ babel/locale-data/ee.dat,sha256=u1vtOZMmRs8yxGQM1gbllFk_0fQHOorqSXRyJ0m2uR8,148049
214
+ babel/locale-data/ee_GH.dat,sha256=SkQi-aVmtqi3S99DUTLQzZqUE4LrAIWuy25QuZqYAfI,616
215
+ babel/locale-data/ee_TG.dat,sha256=7y8-rDvag7_EQtEObq3fpHaRedVmuEREnQwjktmLwgk,1168
216
+ babel/locale-data/el.dat,sha256=f7m9ojEW_s1vGPAsd94D6rpNQgGRh3BYHUZ4JQyD2tE,279619
217
+ babel/locale-data/el_CY.dat,sha256=POPjzTYMuP7Ijf1S88cAFR0ge9Id_sSRNembKdhk2aE,635
218
+ babel/locale-data/el_GR.dat,sha256=S32Cm-1ENgLL_lDecCDI4qDfyd3wlQ1JbUwOnW1whm8,653
219
+ babel/locale-data/el_POLYTON.dat,sha256=lkcs2uXW6mWXztmsAXnapnSuQ6gkns1WwsVgrg-24Uo,14964
220
+ babel/locale-data/en.dat,sha256=Wlq59NM-KcRgvw-FwnUU0K7jW2KNW-kr19V3YY9Mieo,209482
221
+ babel/locale-data/en_001.dat,sha256=OkPYuVpqowcVX0Z64u-6wxw8my-e5JZbj4KWrCVsULc,32030
222
+ babel/locale-data/en_150.dat,sha256=cjKCV1ZLhNY4TvqJF8BXvQR1jVUBFrdjL1RKSnBa0vc,1851
223
+ babel/locale-data/en_AE.dat,sha256=wqlLhrbYmQxkJFUGjLTHRlydDCYhsotTUFWmVDLYj14,4191
224
+ babel/locale-data/en_AG.dat,sha256=POWSM98pRq9k7lqCsxr-MS9PA-zLoOVUKUcI9iXtKq4,654
225
+ babel/locale-data/en_AI.dat,sha256=7iwWKftqPdOdWJ7v94jsre2ZIq2cDpbVGAs_ScBztbs,1206
226
+ babel/locale-data/en_AS.dat,sha256=M-N7v6BuP47wkTFmv5by1w42IQCUiSqKbaVTXtnwF8Q,635
227
+ babel/locale-data/en_AT.dat,sha256=05-bVy1aMFWZlHMBC86A7OVy1zlhJw7hsjyvIOjxE70,1309
228
+ babel/locale-data/en_AU.dat,sha256=a1xjc5DjzNe-LEYVjlvtmEuiwpYhpeJN1-r9Gel3s1g,27440
229
+ babel/locale-data/en_BB.dat,sha256=J8vppKlBp03jJvVuVp6Z4GMc_N0BukeQ8f8q14y8fwU,635
230
+ babel/locale-data/en_BE.dat,sha256=0JXHgqUIWZYe88FYC97spm2TqyIaNOwDJBt3LBmUF7A,1547
231
+ babel/locale-data/en_BI.dat,sha256=AbdI5FjEqQLOMbBtD3wLW_7AccuOwY9MZUFpMF1uEco,1189
232
+ babel/locale-data/en_BM.dat,sha256=cZE8sxf44ETY6nCxOgbvJN2RhABZrRaP8SjwsbSepuE,654
233
+ babel/locale-data/en_BS.dat,sha256=r-oQxdqP68-0nui6I4vSSfLkPXUKS6PMKAWdxxZBSjc,838
234
+ babel/locale-data/en_BW.dat,sha256=k5bc9gYBdl_8ZyCelrlS9ZenMzs8cdfl2MxeCnOAr88,2850
235
+ babel/locale-data/en_BZ.dat,sha256=ea8sr4wyGm4oIuNmp9ZF0_Vk6kKblTAlu60Sl4GMucQ,3065
236
+ babel/locale-data/en_CA.dat,sha256=Ux60R-ZESNBNm9G8t6kv6r6rqA1jP4floCz6neF65Iw,43388
237
+ babel/locale-data/en_CC.dat,sha256=34a3Vb57hT2reRvwn0Ud1nXkoYQJoPmaqh1n5qflFdI,1187
238
+ babel/locale-data/en_CH.dat,sha256=Nfkwk2HNOccSH8Co5SWYnFdHWEDEpKNPQ2o9a67vt_k,1866
239
+ babel/locale-data/en_CK.dat,sha256=gvU21BSAugpjE7CT3xnpHML6oRgHPaBoq7W11YbG-1U,1187
240
+ babel/locale-data/en_CM.dat,sha256=r_7Yzep6S0ZOFvk_TORm5Qhi55yjehVQAotaLnn7igQ,1437
241
+ babel/locale-data/en_CX.dat,sha256=lKYbIRS6r-WMUd1ewX7Q4TpX0PBVcsYN7Cs263_xosM,1187
242
+ babel/locale-data/en_CY.dat,sha256=kQZfhQdPfdBeePOngn-4CpA3ZJ7Th-lmZ-jOrBe115o,635
243
+ babel/locale-data/en_DE.dat,sha256=oI3TmMDoQZsGddvDb0fbbwd_LdTeFbFPdFkZhst2q7Y,1027
244
+ babel/locale-data/en_DG.dat,sha256=xtjjxkuFB7I4p3n0f4Evz631RtMQhIzpoYwUzOzICqA,1168
245
+ babel/locale-data/en_DK.dat,sha256=ygI8iTEmh7BSSNxP5al7Lc-WUAXc4jSM0E3H8rWW338,2449
246
+ babel/locale-data/en_DM.dat,sha256=gbriVhXcdXi5GWmpgWdGB1LUwI2yquuLk1khkzpo1UU,654
247
+ babel/locale-data/en_Dsrt.dat,sha256=HBK4MuF_tSCruRXJ5Bo6pkyQd5IXaDVSLWqR2is-xdc,39791
248
+ babel/locale-data/en_Dsrt_US.dat,sha256=p8c_L5tEvzYmacz0tmq58Wsbfp9wMV_PBgz5R_v7I-k,653
249
+ babel/locale-data/en_ER.dat,sha256=U1vYaQVwnVgfmO9l2_GjBnAhHrShbiHU_E-hAclDvck,887
250
+ babel/locale-data/en_FI.dat,sha256=ZcMBUya_z9GKHdqfeLBpe3kH-3XuKP05mbagahXitYw,2381
251
+ babel/locale-data/en_FJ.dat,sha256=k-hXekogcQzt00qXdcWODsHbg7Vh9U8Vx84bERd8CHM,672
252
+ babel/locale-data/en_FK.dat,sha256=r6OGl7mX4ep5aeFMlhog6Xr--kDKFEVhDcepSJBYZWw,1210
253
+ babel/locale-data/en_FM.dat,sha256=88mCYM5_VDSYpJ_mV4AStjiDpKAo_1W7GbmKcI9f_sk,616
254
+ babel/locale-data/en_GB.dat,sha256=oy9983B04MskGy18XJaeUCxXdh9LnV-X73rjCn-AwTA,23749
255
+ babel/locale-data/en_GD.dat,sha256=c2ap41e5x-OY5dEYZ5wD4ByRbEzlx0845R1lPBLnJus,635
256
+ babel/locale-data/en_GG.dat,sha256=qhfvbRdldEA4467X0_8N09HwT1ZRPJJtb7Evpvbbarg,1273
257
+ babel/locale-data/en_GH.dat,sha256=bBpzsHl9QhNAQ7hrUtKb6TwGvZYibXQwXfuJVgLMlZ0,889
258
+ babel/locale-data/en_GI.dat,sha256=veSOVDagnkTwyqxP4u5mOkRG8_W4MCZ5ptMBoGOg9SE,1228
259
+ babel/locale-data/en_GM.dat,sha256=jfHQeiMTDNgnIpx3WZ9hOpCR_LXCYLLrVN4SUakudi8,885
260
+ babel/locale-data/en_GU.dat,sha256=WDR_uybAkUii6RHT2x62pzCLvX4bMstibEztBvLSuxI,715
261
+ babel/locale-data/en_GY.dat,sha256=TDiVa4YSapsK9rjQN3ATnrj3m267l35pqRLI7r5bLFc,694
262
+ babel/locale-data/en_HK.dat,sha256=vI1hLxrvwa6TaBp2BrDjGTdNANjSLN_1KqkFMOSWv4s,2091
263
+ babel/locale-data/en_IE.dat,sha256=ZNe5XFbdM4UnYu6KaGYHggQqzIVCWwWof5C5ktTsHn4,2094
264
+ babel/locale-data/en_IL.dat,sha256=O4-JPTBiiLezF-iUSDu73id-0VWlSiE0ie8z9qRaxq8,1424
265
+ babel/locale-data/en_IM.dat,sha256=u3JX9jrrsW_G5RQXHsQIGl6ikVduckeldeS_FjKG5Y0,1273
266
+ babel/locale-data/en_IN.dat,sha256=G0LRfr9_xs5siqLd8sWFpC_lUTKtQfGr0dOnTVicM7c,11600
267
+ babel/locale-data/en_IO.dat,sha256=TOM0TxdcWcu1wyBXJxsrE-uCIZsbYTCmUkTdfCaOO-E,1168
268
+ babel/locale-data/en_JE.dat,sha256=IxL3Ry70pMOXDbCwU6LZllHXZmg8XHbjocavEWvb9jY,1273
269
+ babel/locale-data/en_JM.dat,sha256=Z9GFZ6aFGEvIEzlbOlA5bBBvxgcxXx6s_7AxPMp2Yg4,1666
270
+ babel/locale-data/en_KE.dat,sha256=oJa3lUdjavkdhkMK_bcnJ08waK9lfIRs8mFkG0JYf-4,1458
271
+ babel/locale-data/en_KI.dat,sha256=3yfkrwv7Yd9yxDNnXz9Sv8ghbDvqczZTAELr3uGNYn0,635
272
+ babel/locale-data/en_KN.dat,sha256=cFebccXOrQo2X1zmHoHYB2vzXynoroYImJTMnK9j3h0,635
273
+ babel/locale-data/en_KY.dat,sha256=uQV4Jf38XQ3ycqYb2HhyOYdNMIbuHyxyy9HNsb26Q2Y,819
274
+ babel/locale-data/en_LC.dat,sha256=jUYdKd248Jkj5XVxXXbvXnfxu4BH_3s4Ld-O67qbPkE,635
275
+ babel/locale-data/en_LR.dat,sha256=ribT8_azFjDC8uzIsOwkGTjfgEiFlSG_wAb_wG1Fmnw,885
276
+ babel/locale-data/en_LS.dat,sha256=2HtV3gUrynDl2mVvqywMfff8VnVjz2ryoNS7D2n5T9c,885
277
+ babel/locale-data/en_MG.dat,sha256=dtMrsBqOpwQExs7dVukbUzWojz_6swx5Ng6OXdKxsSs,1438
278
+ babel/locale-data/en_MH.dat,sha256=NZjQknLyokLgJRNPicAZ55_VoRCATz_WvAxMo_I-HOg,1368
279
+ babel/locale-data/en_MO.dat,sha256=UJVR7td-vlRY_a36ZWbxr_PcK6egIUQSKoky3DeAmEA,830
280
+ babel/locale-data/en_MP.dat,sha256=Sd2vA3CdR_GBw1vQQQBfKIY0asJGsVUwZ6gD-h7Or8o,1349
281
+ babel/locale-data/en_MS.dat,sha256=BXrA3odGnWSeR6404L85ErqMKxTnRCZ16UWL2RpD7TY,1187
282
+ babel/locale-data/en_MT.dat,sha256=sODJaESHndxdT9SYZcnESDA6G6oln6n9NCojeHhKvJg,1990
283
+ babel/locale-data/en_MU.dat,sha256=SefoZho0XzSzzU_Y_-udWPCuRgz8ujdUVkL7hhzZO8Q,1438
284
+ babel/locale-data/en_MV.dat,sha256=Spp5zsOCHzCeZOyUdYqXoqmSoIJ0pxRR3b3nI27jvTs,2034
285
+ babel/locale-data/en_MW.dat,sha256=5d20Ih8j6iwBY545I4nObBWdv9FL37nE-ggfpGeXSVs,886
286
+ babel/locale-data/en_MY.dat,sha256=nUwwM17W9W78nnbXGmrx2zComZQ9Fg_pu3va9wPZzvY,716
287
+ babel/locale-data/en_NA.dat,sha256=-yNAAmx38RoVJt3YRH7Tp1xO9o3GsSVDU6uF_GKhGb0,885
288
+ babel/locale-data/en_NF.dat,sha256=6LqhwHyOnkQA4TNvseuiE1a5Ov7DV3y46CZ0ENcibXE,1187
289
+ babel/locale-data/en_NG.dat,sha256=dvbDZYdlkmhF-IU8M6s2p_kHswy8HhdmR3LLc4EhePI,1439
290
+ babel/locale-data/en_NL.dat,sha256=dDCtXReh9uMfUOVqGWaWjfV1-dLe5_yj-o_HrKZGMeM,1192
291
+ babel/locale-data/en_NR.dat,sha256=ZiUNBY0c1T3LQP-qGmtuxLW2Jfc-lcVTuWpB2jxfAGI,1187
292
+ babel/locale-data/en_NU.dat,sha256=jU4HXz_3l5k-luPPsjZmZBsdOVB5ZfkN1Xuk5i2pduc,1187
293
+ babel/locale-data/en_NZ.dat,sha256=Hs8XKn1k7mben0jCQQnWTKcK0SMwXeD6zjRgBErPTK4,2286
294
+ babel/locale-data/en_PG.dat,sha256=WV6D2yT-4GX6ftbnUkK-ihfNg8Y-ImX1Af56okx8LTA,635
295
+ babel/locale-data/en_PH.dat,sha256=CJtGtvEQRqL4MDHUuywaCcuhYp3bVv7KUYMK3OH5OeU,656
296
+ babel/locale-data/en_PK.dat,sha256=KS_KXItkhkUULbKd9mHdWD9ok4WjZbVSXhU8e5u8blo,2074
297
+ babel/locale-data/en_PN.dat,sha256=qpEWWX0fvhzV6gcX_SHNbJW7E-5FikKwXrQAP9BWmXc,1187
298
+ babel/locale-data/en_PR.dat,sha256=bpAu9yoeKxzQTF5Be7AfXtyE3wax0eP0m-Eu-Cr0jKE,635
299
+ babel/locale-data/en_PW.dat,sha256=tpiNQH7vUuPfoLqFZ3_R8qBhExAhjG3nlp7zTydqE1k,800
300
+ babel/locale-data/en_RW.dat,sha256=Et3hOZwaSDECrCzypgYq1QxKxxnB3XYziIeEe_WiY7c,1438
301
+ babel/locale-data/en_SB.dat,sha256=h9TJ69YThzzLGTh49BBEmRBxSiZhZpQrVJif0QglLVs,635
302
+ babel/locale-data/en_SC.dat,sha256=omYtCZBrLl8fHuT6XInezdetV7WqWZVYriJRnlWKbTg,1188
303
+ babel/locale-data/en_SD.dat,sha256=ozd3rV_icr8p2H9V6StOSMkoHBPNBsXsay1GMRWZ1zs,928
304
+ babel/locale-data/en_SE.dat,sha256=96guhEOzGr2Lcbd3xZ4j7HTj-0H0oaGMQIbI9a_5g48,1502
305
+ babel/locale-data/en_SG.dat,sha256=u9U5CLnqs0iJmSnMsPBHF71HQLpFM3siADzZeC7iaJ0,2096
306
+ babel/locale-data/en_SH.dat,sha256=rBm_0zxjHnEVzs_CPCyuz5LpI9isA2S6copUuNbxCcM,1210
307
+ babel/locale-data/en_SI.dat,sha256=kkeEkPnW48iNoiwNZb0KV29DPU0oVNuENTi_Wmp2ALc,1046
308
+ babel/locale-data/en_SL.dat,sha256=4hJLAAnyuEVVQZ13NC7wZ0JYJQ3rvX0SsOAp0OoW7_U,886
309
+ babel/locale-data/en_SS.dat,sha256=C4kpyEFjyKT9-6wt2pGl4125aN0Bp0wpcYBrr62nPOc,908
310
+ babel/locale-data/en_SX.dat,sha256=7vESruRIiaBqWxuSRpIE2U6PgWwJ9mxgbjjH_XAraa0,1190
311
+ babel/locale-data/en_SZ.dat,sha256=A9wkzZ5cFffcEf1FobYRPxR1EAFwqQvqELsqRpNleOg,885
312
+ babel/locale-data/en_Shaw.dat,sha256=2a2Nq7ax60C_ojL8QeWNCWF9d8Vb5e6LTUPHwUySfMY,4857
313
+ babel/locale-data/en_Shaw_GB.dat,sha256=uAIWlJ5gr_NR6lncmMaBrjXUPhZ33rGsXoHz8hrd_E0,653
314
+ babel/locale-data/en_TC.dat,sha256=UWqEc9zpN3NdS1dymbUv2iGKhLkH65Kk9uNFxdXGnOw,616
315
+ babel/locale-data/en_TK.dat,sha256=qz4RHtHQ6cNjB8xW8_BIHdzW1cEcQuyJfdqFIybXAs0,1187
316
+ babel/locale-data/en_TO.dat,sha256=OehJQf8kvWi7A-Rwo2hPjs1Z9pTdg7_Hyx_ewWxbLQ8,636
317
+ babel/locale-data/en_TT.dat,sha256=L23iDn_zvh16iPE5uBlLCRvECSozqyzU9W2OcSjYogE,654
318
+ babel/locale-data/en_TV.dat,sha256=3sj3NCjQg-9UOdTz7wDJRpjx57bI0bntpmx0T50OK9E,1187
319
+ babel/locale-data/en_TZ.dat,sha256=5Q87mjSEaCMmWeWwtesb9lJw2tIWOsvyScG1CqSpWvs,1439
320
+ babel/locale-data/en_UG.dat,sha256=aQLfdbfozsYhK3EG9JXVxsmT4B7UvfSzNBo7kO2WSsc,1462
321
+ babel/locale-data/en_UM.dat,sha256=qd26Sl5bJTEgHU25hvskp4LMxvRJByLOSvUikqz0J4I,653
322
+ babel/locale-data/en_US.dat,sha256=p8c_L5tEvzYmacz0tmq58Wsbfp9wMV_PBgz5R_v7I-k,653
323
+ babel/locale-data/en_US_POSIX.dat,sha256=U8r77o6qQID3Sd5FiZqukSpQnq4LV1BDwHUeuNZjW10,1321
324
+ babel/locale-data/en_VC.dat,sha256=ES4c4Xt6OvJDhxoAZpWR2HFbtyENOl9CrV7XFCBs-MY,635
325
+ babel/locale-data/en_VG.dat,sha256=sqiVUOEtDV2pAc5DzGl76qV1mL5K-UWhMRzG-Ff6r30,616
326
+ babel/locale-data/en_VI.dat,sha256=AGffygfBAafQMxKAAoxt6kwmbES4R_ybbXRV2tHpy04,653
327
+ babel/locale-data/en_VU.dat,sha256=ji2cRB8B-c8uJR7L56HzbkiTR8eJZziVTMcEzuiK2g0,636
328
+ babel/locale-data/en_WS.dat,sha256=gowKsveED3UIWyLgnSWxyE6qq87lH2dMgOVLDGCEcBk,656
329
+ babel/locale-data/en_ZA.dat,sha256=uoSLsVWiMu6x-DYwISGhEwveg0kVsDwgnIhq2Jn0hXo,3411
330
+ babel/locale-data/en_ZM.dat,sha256=8y814a5GtYcC5gvh3YBlcYf5Imr0yNEIV_v8jH3SXqk,885
331
+ babel/locale-data/en_ZW.dat,sha256=GUDDEesQRkUuLyyDlnJ3MGlGzG-kDPxt8OTIqVRKDyw,3320
332
+ babel/locale-data/eo.dat,sha256=i6qYU1TiS0gJlaDujDhrni1-lGWa8FqGq8zKuxU4a9w,83033
333
+ babel/locale-data/eo_001.dat,sha256=3-tP9zaTDfbBBjpd2qKVIhS7WWbmtVKGGW_BmGIhrHQ,850
334
+ babel/locale-data/es.dat,sha256=gi1EY1ecGIrSicmPdPBYBLm2eepI8KfdZrWZYAeLeHU,229309
335
+ babel/locale-data/es_419.dat,sha256=7THYHrZzytkn8bemPNyqFg-8D12E7qSRVjRRIWhYLDo,29689
336
+ babel/locale-data/es_AR.dat,sha256=1GMeTw_tadnNXiSu2Fet6K0J-lSFdMLd5qwzQPMzAEs,7888
337
+ babel/locale-data/es_BO.dat,sha256=YWIOkvEMiIKnCUdDcoQT3xkQKOnYCEN3Da1DmIFOIjQ,1633
338
+ babel/locale-data/es_BR.dat,sha256=Wl-H9uBjeuKESxR7bD9c1IGRgvdXWt0u7OkDCOYyg-g,655
339
+ babel/locale-data/es_BZ.dat,sha256=gDSknig_8SiqrzIfM1se8YFXs1VNxLhKEXjIbLU1Bmk,654
340
+ babel/locale-data/es_CL.dat,sha256=7O3xjsrQxIR6HZDJcYfHBT00ClnvKYr3X4YdElO6N80,5131
341
+ babel/locale-data/es_CO.dat,sha256=500xh1FisUJ384tSqiB_Wf3v3GVLX3cdgryRS1s-MMg,8081
342
+ babel/locale-data/es_CR.dat,sha256=U_XwxsksgJWZ8wMdjKdnRAHyp9DvNwwKCBLbVWpIlIc,1257
343
+ babel/locale-data/es_CU.dat,sha256=N-TqpCs34sjlEMeJgvrfOSpmnnlGxuuGtSBSaUKDbvg,656
344
+ babel/locale-data/es_DO.dat,sha256=Tn2WgAGuAxE1rj7C4c4fLRVm-pQxxWMGrlq283zw5-Y,3442
345
+ babel/locale-data/es_EA.dat,sha256=V4UU6BM3pjbuEleLA_MaJtWl8IejNcHzUM660pfKa80,616
346
+ babel/locale-data/es_EC.dat,sha256=xlX1tLT2EBNtogfv2baOygf_dWY2j6K4pcAENeIoXtY,3097
347
+ babel/locale-data/es_ES.dat,sha256=fd1TSjdlf2lSMxwi0NhYGR2eyiABBaSJvhLlwLO46j0,653
348
+ babel/locale-data/es_GQ.dat,sha256=a7A-hqM9wNt51_CdpjzU8aT9KEeMz165-MyhkWyqJOM,638
349
+ babel/locale-data/es_GT.dat,sha256=htP3hiMywjg6OTsHzwxe8qHtYxIgmZiRkrtWvoNqgiM,4466
350
+ babel/locale-data/es_HN.dat,sha256=zi8_eSDk9_RiKomcF9dCdEeROmQVyfauwRWaf1OYmYk,3207
351
+ babel/locale-data/es_IC.dat,sha256=hwey8h4GM8i25i-YZR_K-jvCij95wZqr0zdTIKauP58,616
352
+ babel/locale-data/es_MX.dat,sha256=iVZEE8v-9i-3r-GB-tZ2lFqeoT-UjDgGQ1j0oD1Wy60,27854
353
+ babel/locale-data/es_NI.dat,sha256=v-bflaBIB2T6RUdrf7eZLswfXx20xcCxgXGsbxIf7Mg,1176
354
+ babel/locale-data/es_PA.dat,sha256=8b00L8M61k2vgOOR4tw747goZhjpIavnyu2S1vRM3kk,3485
355
+ babel/locale-data/es_PE.dat,sha256=fWsvGn-qH_jUM14BnijdgZYoS53D8qESgRnAR14coUQ,7406
356
+ babel/locale-data/es_PH.dat,sha256=fEMZmVPQb97bBjEtCVMLn9JUtosTePmRuQqhpfNYkZQ,1248
357
+ babel/locale-data/es_PR.dat,sha256=giHS4bzl9lLM7QW-AVsdouyZliusBvEFGJ5dZOJ-oSc,3518
358
+ babel/locale-data/es_PY.dat,sha256=O44WVQyiDEUz6UhoXdgc6hz8AJJGOTKiEsQoXk3ewkY,5289
359
+ babel/locale-data/es_SV.dat,sha256=phKpy149vgFM_Mt89rIt6zfE1_F5dJBbeIhvOlWfUuM,925
360
+ babel/locale-data/es_US.dat,sha256=B9TmgQ3afX11PA3Pb_C3xhzTNamup1l34VtPJQ4L11I,23055
361
+ babel/locale-data/es_UY.dat,sha256=UfxeB0PVAg0DWV64Goe_8X2aKYuFtc1EpkrSZ_ZJXS0,2338
362
+ babel/locale-data/es_VE.dat,sha256=bMPt02AOJTEUwGkUEJ7LqggAVg9gTB5SHOeaGfYMvTE,3428
363
+ babel/locale-data/et.dat,sha256=50hnZJthmv8dAZc8xvJi4AMP7p_0sUVAnX7aJJnlCTs,231692
364
+ babel/locale-data/et_EE.dat,sha256=JpcyzIDpGwHlLSiInuYO3HfxkMEFsDPBeMc-B8Rj3MM,653
365
+ babel/locale-data/eu.dat,sha256=xXEtbvTYQYVgz7kP4Fqb-cQyX4fyHLOHwuUZhHSbU60,246276
366
+ babel/locale-data/eu_ES.dat,sha256=ABS9lrwjRkWenVB4fNrwKpr0mOuMF_eOlOrSrobcDl4,653
367
+ babel/locale-data/ewo.dat,sha256=RF4j1h65LFuyYvrmmd9ND7ha8wtR4S2Toe7XcdI2k1Y,17554
368
+ babel/locale-data/ewo_CM.dat,sha256=likxlZJqzYOVxcG4oSUQLTiH5DjGjdAFsJPIjnnj2Iw,636
369
+ babel/locale-data/fa.dat,sha256=vFoCBC8KOyce2lEHamZ8wWxULqh89IVYABQX2T5OmfU,249371
370
+ babel/locale-data/fa_AF.dat,sha256=l8reEqmsxV2Y-jGu1NT4gp26VOcGb9L6xRlX6WUfImQ,10703
371
+ babel/locale-data/fa_IR.dat,sha256=nPuexwzRHDb9TFMjILK_V43sVIzbcn_fgp0msY3eFQ8,678
372
+ babel/locale-data/ff.dat,sha256=LXkMNz3LdS4PN5ZiaMev8W58-ce0tgacyhEKvvDKU8Y,15993
373
+ babel/locale-data/ff_Adlm.dat,sha256=cD4vur6RTqnV5rVgMqgDH2SHG0mQXmzb-ZC27WllJBI,350107
374
+ babel/locale-data/ff_Adlm_BF.dat,sha256=eYQLbHvxtEqcJCMbXSkqN2dRSuYHVc6Tg9kOUKayJQs,637
375
+ babel/locale-data/ff_Adlm_CM.dat,sha256=b3VqkcWqXc7s1hCxN60dd-yBRXkcXfMMQ0uAJKmSsg8,656
376
+ babel/locale-data/ff_Adlm_GH.dat,sha256=r1CRe9Z8kZ3B3PDxmZQbvgpsEcY3OjJek9Z_S8FBb5Y,1236
377
+ babel/locale-data/ff_Adlm_GM.dat,sha256=ZM17aBc8xznEjoP4f7HRCHaKn-DIxCSDGkL6GvDYvDw,1232
378
+ babel/locale-data/ff_Adlm_GN.dat,sha256=HWkLsTj8Sd0fWYuYysHhShl08hg0iAvSXhPjy-rUjB0,616
379
+ babel/locale-data/ff_Adlm_GW.dat,sha256=vIUl_C4PZSWmypeEmnsAUbGN2dSquM3nEOdBs22_qNE,637
380
+ babel/locale-data/ff_Adlm_LR.dat,sha256=277rY6zAWlxetFe0D0JpVEY9MNcQiJU9kt1jRoiXE7g,1232
381
+ babel/locale-data/ff_Adlm_MR.dat,sha256=qz618w1XY_zwZ27nB6LBgbzsjsh4UinfnuOVx2bqLgk,1233
382
+ babel/locale-data/ff_Adlm_NE.dat,sha256=waY1EIQKuOkVzrtJ-t-5VY7cK2uKL0SIBO0PQbx4x9Y,637
383
+ babel/locale-data/ff_Adlm_NG.dat,sha256=9UdHELj5G90YopBKktxDyWVQyLxl5f7P3ToBElwlvCo,658
384
+ babel/locale-data/ff_Adlm_SL.dat,sha256=7jLKofwQBRggP61keprrbfFGXvrcJPIOvwEVmUNjcTI,1233
385
+ babel/locale-data/ff_Adlm_SN.dat,sha256=nGazz6Tun3D-XsO6SljxQeeBuzvAb1sBQw21IbkDQKo,637
386
+ babel/locale-data/ff_Latn.dat,sha256=APyNmlFYRwCQOlboY58qsqiF57rrI3F4fHu-uQTdt4g,866
387
+ babel/locale-data/ff_Latn_BF.dat,sha256=Nym5keR3dDPMJBFr7ZyW2cuuY-qTMkdHzXnIHSmfD4Y,616
388
+ babel/locale-data/ff_Latn_CM.dat,sha256=rWaVAF6D5gv_hDhNmSGbcWGpPV7X4gp53FBMXyMjT-8,635
389
+ babel/locale-data/ff_Latn_GH.dat,sha256=-kMvFNIQyikTD2dFakV81ghSR2H584AigLgtmrzlhN8,1231
390
+ babel/locale-data/ff_Latn_GM.dat,sha256=1Air8sk0wb0McqLZXDWIYQeiKgPusBaVjr4zk54IaoU,1227
391
+ babel/locale-data/ff_Latn_GN.dat,sha256=7R-6dXYMBdveo2-9Vc7CjIA2H6y_hGJVbfVGIaJUgbI,636
392
+ babel/locale-data/ff_Latn_GW.dat,sha256=2kbqhzcDeSPQxefHxynmrv2tmFVnWdRNjO7I3AZ6lxk,616
393
+ babel/locale-data/ff_Latn_LR.dat,sha256=MQxcDQnMZC5hN52abzqCjVIL9Z5mA9wOyTqGPP4Oj0g,1227
394
+ babel/locale-data/ff_Latn_MR.dat,sha256=CDUb5owq0Ntsd2lIZJejvYxOjl-NOUPP-v3tgVj1_qU,1228
395
+ babel/locale-data/ff_Latn_NE.dat,sha256=R8C0fI8ql5XpnT29CrwBG8rgdHB1AASDBSdvqIqIQ1o,616
396
+ babel/locale-data/ff_Latn_NG.dat,sha256=00rtiYbJD_ci8-0M4ye95rzGpbyX8qQ-dmFFIajAtRQ,637
397
+ babel/locale-data/ff_Latn_SL.dat,sha256=UaWOeokdbSoxG0JUyyGWkDyz70sXy-cZbc3lXZxmQK0,1228
398
+ babel/locale-data/ff_Latn_SN.dat,sha256=mPVac9iCnwNay8c7Ko3uUvg48lfyfEZrvhpyEFFGmFk,616
399
+ babel/locale-data/fi.dat,sha256=FQfukeFXlRpAwrH5FJEMfkVEXfOP7SqWMyqxyUDlMME,250592
400
+ babel/locale-data/fi_FI.dat,sha256=cpbJU4KKG8OWbmLnc9TKTdzmpoi2AJh_Pu1cHhDwVSM,653
401
+ babel/locale-data/fil.dat,sha256=97-wJKIhPS4_hQxYNIa0uxqxUKznBUzyisdBO9GODgQ,208827
402
+ babel/locale-data/fil_PH.dat,sha256=JjoZt3zNxy1X6RnHoxUKOMzT-xMh3tGZBRq8cvrBwqA,636
403
+ babel/locale-data/fo.dat,sha256=c_xYyN2YpWzYkR2S9Vx7aayZXaUstjJifEc_Pa11AGs,182408
404
+ babel/locale-data/fo_DK.dat,sha256=HUuarLNFSsV_gN2fg-OqrPr-6Ry6KFgitCp173jxAOM,674
405
+ babel/locale-data/fo_FO.dat,sha256=SLeNQ33QTZ92kXCzQcFfo-OgwZVFPJKIeRivuvz0zo8,653
406
+ babel/locale-data/fr.dat,sha256=yxGnVtY_x6Jzd7QafStfUH_OLwXADmGZx04vVGNIuzE,246019
407
+ babel/locale-data/fr_BE.dat,sha256=Rm-b3ihAcJ_ujF2UgsHruHaEuDOLiaVvWl4Zsuh9uxA,1258
408
+ babel/locale-data/fr_BF.dat,sha256=7piWVeMMrZ-YbO9MNqJAu7ZeIdueVnhg07eeMwJHy94,616
409
+ babel/locale-data/fr_BI.dat,sha256=R4kaU1OtMcNIcibkw8OFGP6FaYMxt2uKMRyidkEqbiA,637
410
+ babel/locale-data/fr_BJ.dat,sha256=sel3fdwegY5W4NRg32t4MuXoqpGqTAGO_ffCF2NPggE,616
411
+ babel/locale-data/fr_BL.dat,sha256=n-MRZjeHNkRMwCtGgPZq52Lj0ijntBsxfskC324i2k4,616
412
+ babel/locale-data/fr_CA.dat,sha256=zHXbGxyyPwIsc07LMe0A2Two44tniWEb1ULgorySKig,73908
413
+ babel/locale-data/fr_CD.dat,sha256=W_SAIFUt4o1YDKLq98x6eBUA8ThPko4A37YtyOpwo0E,1137
414
+ babel/locale-data/fr_CF.dat,sha256=wxzk0Nf6_pKO2VDivQprUY9WvaxRSkrfQBoUE1UVrAA,616
415
+ babel/locale-data/fr_CG.dat,sha256=zP3HTP-nqZjG-OD_DLrDEPPbB3t9g4T2kHVzI-HxhaU,616
416
+ babel/locale-data/fr_CH.dat,sha256=jXw4xX_rw5bg1UFxrkzz6KHq6bXmJyV_DlWt1YdYvGY,3093
417
+ babel/locale-data/fr_CI.dat,sha256=TrHL8hQRuJI3Auxe3aTHYa_rljyUvT_s0q-jdSJflJM,616
418
+ babel/locale-data/fr_CM.dat,sha256=2uuuxIhXy1qUg6JrzvxdmDCwRxTi4LVL75vwIJ1GCt4,2150
419
+ babel/locale-data/fr_DJ.dat,sha256=Jqu2FOJQD41B6fLSBEc_Wf-dIQ-B6MWlT0m1buQnmxo,1248
420
+ babel/locale-data/fr_DZ.dat,sha256=uOe9lbjO51q30G0UMs5nKrMLta5CtLW2Fg4dvsfRX3M,1290
421
+ babel/locale-data/fr_FR.dat,sha256=bwtjtv0NG-lxlXO7fJd6r--l38WKaQmqlmn7PpXJdJs,653
422
+ babel/locale-data/fr_GA.dat,sha256=rMwS-msXjMO5T5k1BP2B2S9B_dYvDHlP8HMS-Lq8XU0,616
423
+ babel/locale-data/fr_GF.dat,sha256=x97-H7H0h4_MUTpjMdrkYB790vBvPKKxmnUTu-FOwLg,719
424
+ babel/locale-data/fr_GN.dat,sha256=6KVlBWrF76ZhgyYg47F1TcR8_fbE5Ii2pJzPhmbr3Pk,636
425
+ babel/locale-data/fr_GP.dat,sha256=W99xHjqPQj_NJ1X34ismj8A4xeZcHu_vyqH8tIwXgeI,653
426
+ babel/locale-data/fr_GQ.dat,sha256=Ogf5NI4zMvbVROeIb8F6h1NxJNKOqY4fKU6G2SPJXDk,616
427
+ babel/locale-data/fr_HT.dat,sha256=IVtsK0pIelVfK4eLEgUzfxBPV448daJSGdDLKVtPDhc,1900
428
+ babel/locale-data/fr_KM.dat,sha256=ChLpzCyulxYg8Qmm5HK8YkK203GRSUEBNPSl8war7lA,636
429
+ babel/locale-data/fr_LU.dat,sha256=0sYBhn8-9lvfOrU-ZEIbnO5v03qQOQq4wXCKp70b2sw,729
430
+ babel/locale-data/fr_MA.dat,sha256=CAuI2aOkC9TrnUNmMNd9CRApt5Gc8lGnnP9OMmrfseA,1304
431
+ babel/locale-data/fr_MC.dat,sha256=IfTCZ89rqHzUxdKyIz86Zs_VUH2zc5JAvntdhyKsNR0,653
432
+ babel/locale-data/fr_MF.dat,sha256=xU0grNJKWgpfArwpLt7vuOpSTSkyPx3o6gFkmZLCxd4,616
433
+ babel/locale-data/fr_MG.dat,sha256=A9zYBbE6gIWuGDPxv92ReIcR49gtIEYaEkCj9ZONHHI,636
434
+ babel/locale-data/fr_ML.dat,sha256=-PoWsHBtnaZisIOqZyaEFmwooRXb2R2xEMe6DYad_sk,1153
435
+ babel/locale-data/fr_MQ.dat,sha256=45qWAev4p2ZaFVky1Qlrw5q907PDfbRJq9q2UACahm8,653
436
+ babel/locale-data/fr_MR.dat,sha256=mVSOABz3cRa1-HEeUKW13sLw1ZR6PmB9h_DPfZsK4Uc,1228
437
+ babel/locale-data/fr_MU.dat,sha256=c4ERuS1GI8h7waxcW6BRtloW7BThLlgqdYTf31Ioh_U,636
438
+ babel/locale-data/fr_NC.dat,sha256=Su2DaGZPnLCaONmgosMYke9kH6dP8xJ8wJF6P5xrJq4,616
439
+ babel/locale-data/fr_NE.dat,sha256=D6ghYGdDXlhaVQ5gAr8wWHxEHYR7mBs0QaiNL5nfxWM,616
440
+ babel/locale-data/fr_PF.dat,sha256=oPN2EBo1hpLjlpDYPB51qEAx_4HNMWG5-Bh9JN6Kal0,616
441
+ babel/locale-data/fr_PM.dat,sha256=gEP6Ay7r-p7uIjOGXP8eCa62yujlTBntENdeNd9KKes,616
442
+ babel/locale-data/fr_RE.dat,sha256=ClPJyEDdRdqIJOtHIkeb-r3WyCoIDS476Q5olb7hVxE,1169
443
+ babel/locale-data/fr_RW.dat,sha256=gP8mpM7gx_X_9NKDm8B9PuTg83jwT5Nn3NOKPpVhi3w,636
444
+ babel/locale-data/fr_SC.dat,sha256=qvz0N08LKCsPCPDZK1NmAhhzmaszBQ8mSlDbAsEwAoI,636
445
+ babel/locale-data/fr_SN.dat,sha256=bxJU4g_LmR-JDMhaP4OVB2KXsu03lD4TVqYIRQnnNro,1304
446
+ babel/locale-data/fr_SY.dat,sha256=tpDovgZ3aK7OumRwbntHTknV-tRL_HjcPK1aQINC-x8,1290
447
+ babel/locale-data/fr_TD.dat,sha256=1H47veWKRj_iV9CxHMz7x7tfrL8IYdQaRWhTV455efw,1208
448
+ babel/locale-data/fr_TG.dat,sha256=r_E5Vnj0Kb5CG16ApHFls4UreDeO7-o3uzpQdJjpbRM,616
449
+ babel/locale-data/fr_TN.dat,sha256=hcGRJ2UjuFEFJqb1BDglGsXY8jCEIdM8--OrU3OqRhc,1228
450
+ babel/locale-data/fr_VU.dat,sha256=FYYsiaoM8QZeClMnQzLiLZNXW9hULz-rCgRTYWvrIvs,1228
451
+ babel/locale-data/fr_WF.dat,sha256=jn6VFRw_qpJFxpO-I6C9nhz_wRZ8cV2b2XRBgSzi710,616
452
+ babel/locale-data/fr_YT.dat,sha256=x0WpQCLoqrLY3_nCF7JlcuekkoUtcpE4llC8kRmeRmY,616
453
+ babel/locale-data/frr.dat,sha256=Qg0cT2ii-2mm9Y63crSbI2t08vdqFUm3sbW-07CC6FM,55262
454
+ babel/locale-data/frr_DE.dat,sha256=2ohnodzECbJBUTEta36Ts4amZKl2_LDhuD0-Hu5JBo0,654
455
+ babel/locale-data/fur.dat,sha256=j24ABSy8omhILPSWjZZSN1wTGfKGBbKnnWALmPVb5s8,34894
456
+ babel/locale-data/fur_IT.dat,sha256=PpDH1opUDjndOtvpPadiOtITGyGxKZY0ziEhb-4HKbE,654
457
+ babel/locale-data/fy.dat,sha256=FQXAFW8El4S7hvKngwn6VKyPBmFRIKaZ1T89OMD08cU,111417
458
+ babel/locale-data/fy_NL.dat,sha256=I_M2hFVCAaVAL90yVMloW2eYmzO5C3NZztfEDAes3_I,653
459
+ babel/locale-data/ga.dat,sha256=o3ZlOPQdnLC_m2iPs-vAYuDUgfU5im9jPPGPwEpQoRU,356553
460
+ babel/locale-data/ga_GB.dat,sha256=NKphVJhmH8egga1dgfO-hSRVFhbxms2JvGMU3ybgj_Q,653
461
+ babel/locale-data/ga_IE.dat,sha256=P948T1Tl4B7kL1T-uxii27q4IWO3yQQ5emTLv7iHvW8,653
462
+ babel/locale-data/gaa.dat,sha256=On4fYcu6Xq9AcqCtmb4tOW0om1dRlnskyUgfIrPzrgE,36861
463
+ babel/locale-data/gaa_GH.dat,sha256=FF7vo24vzA2ru3t8py246uanyOqyoSkpD65F7KFTXlA,617
464
+ babel/locale-data/gd.dat,sha256=BivX9BNOgOxhSi6NR7iIRtpldaD-9gAPRzZs_xp3QiA,338371
465
+ babel/locale-data/gd_GB.dat,sha256=weaRul21diYZoqLk7SXacBy8GD1bH30cQO6AHejilPM,653
466
+ babel/locale-data/gez.dat,sha256=An75Oy1DC5mOgIhlZ7smaHuEd3f9HSCqAvGtAIXe_Jk,12828
467
+ babel/locale-data/gez_ER.dat,sha256=MKpSW7Upkpe42Q2mbJStbjtnrW6Kyo8Tg0zXAxnHWqM,638
468
+ babel/locale-data/gez_ET.dat,sha256=93QTSMihpcfFyRhttFplgAcsAhzrPjlbrz5HI4feRSc,636
469
+ babel/locale-data/gl.dat,sha256=flLy2D9LdcwAjmy4B2-YVTuvtgkFkXuBYDedCXc5a9M,210091
470
+ babel/locale-data/gl_ES.dat,sha256=us8xWRQnNTO_KC42-FOU2cnLCNl96591qnxZ4exq5Fc,653
471
+ babel/locale-data/gn.dat,sha256=xGWKm7rf-ZNIM3gTs1BmDh07tJxFYi11QGjioull6TY,2539
472
+ babel/locale-data/gn_PY.dat,sha256=tArgCo85T_BUNmPc4sXVRz8X5wcHJmBS6XP0r8dPgA0,635
473
+ babel/locale-data/gsw.dat,sha256=Uq082ggeRAuwQoLpQfiPsmn723X-tRB6LXlPZGJqu1o,114282
474
+ babel/locale-data/gsw_CH.dat,sha256=fQlRCd1MJ_gI6rcnkrU-lUE7ZM4syRLh-suMRT0DCOk,654
475
+ babel/locale-data/gsw_FR.dat,sha256=vHNQ1q9Zyf6xLfsJpmqpaX1iHerMRt1dsJSPQdQDoTE,654
476
+ babel/locale-data/gsw_LI.dat,sha256=dsg7TA7MECMrbTXC7i7zXIjrEoqrF2jZ_ckGiTMholo,654
477
+ babel/locale-data/gu.dat,sha256=dmuygLhOARE2AQzqC8A6zMYMHSjQIAkLOIxqnCD48Oo,284035
478
+ babel/locale-data/gu_IN.dat,sha256=shXUMyk4ogB8uJPazALoReGyLqRXSYOeVBVMn313_Y4,658
479
+ babel/locale-data/guz.dat,sha256=D0umWg1J7fgM8kq625vdEHk6ZkwYXzm8cI1MZnEYxLU,15930
480
+ babel/locale-data/guz_KE.dat,sha256=Uz_x0_YFKJHDkSd46SvuIfO7W0c-uqYnasmmLNib3WU,636
481
+ babel/locale-data/gv.dat,sha256=-9c_0ZzoIitROCjXzyRHMVIXefwpaMN_MWMqwhcxOO0,4035
482
+ babel/locale-data/gv_IM.dat,sha256=bXOsSoV303kSUECHz2xd5HhASRI-XCjqjxnxpk0Bt10,634
483
+ babel/locale-data/ha.dat,sha256=2XcUNBC18NQuWrPYb8qmilVBa_YFdJuP-SflIl7eV5E,170161
484
+ babel/locale-data/ha_Arab.dat,sha256=pI5aVwTmf5n7laKX4KR_Yh_U2PY_HGa2aZieS9hZw7M,2330
485
+ babel/locale-data/ha_Arab_NG.dat,sha256=oYJYqTkaDX2p4IJ9j3sEJT49dcVn_f9JyjO0rUJTmAc,616
486
+ babel/locale-data/ha_Arab_SD.dat,sha256=7DD6pzCmpEdjwbTMAbAb_vJey6Qh0tIeSs8LjEpJxBo,678
487
+ babel/locale-data/ha_GH.dat,sha256=Cwfuh0nEMJu4LGZmdOXJHp_5fZRdpTIODJ_Tpd83uPM,1231
488
+ babel/locale-data/ha_NE.dat,sha256=udCyUBXGb43G6FYfwxQQKecmQVZxLfcssIa6OR1Dlgg,677
489
+ babel/locale-data/ha_NG.dat,sha256=oYJYqTkaDX2p4IJ9j3sEJT49dcVn_f9JyjO0rUJTmAc,616
490
+ babel/locale-data/haw.dat,sha256=HFKk9XZ8syPFA1BXRsNuZ2Qjtx_QHy3u-bANj-G8jcw,16286
491
+ babel/locale-data/haw_US.dat,sha256=W2qJBTNdETpoN-Ue0UYbqyblj-gIbQNOUMr01RwJ2fw,654
492
+ babel/locale-data/he.dat,sha256=Pr4OdWj7Bzl1hZXHsE-T1lZdN6LVHiQ96ngnObL9kTc,326835
493
+ babel/locale-data/he_IL.dat,sha256=KpQ8sod_QOZ94Tr0tfhlATzVVsrqXck6eq7txoQgCbc,678
494
+ babel/locale-data/hi.dat,sha256=cZoY0NkPdO0T4RUfvVoMPOFzmQoRh3TpaFTnXuC3fSc,285510
495
+ babel/locale-data/hi_IN.dat,sha256=UMkxSHgYSdX-hPgYa7rOOzft7xtJwcM0m5nTphUe9xM,658
496
+ babel/locale-data/hi_Latn.dat,sha256=kaFxV3l4dSvCSrFZnjDFGkE4LrtGivPwEaI2RJ_FNoI,51640
497
+ babel/locale-data/hi_Latn_IN.dat,sha256=UMkxSHgYSdX-hPgYa7rOOzft7xtJwcM0m5nTphUe9xM,658
498
+ babel/locale-data/hnj.dat,sha256=gRR-f4HZS4ZZ5-ocjXis10q7ojD6DDYJzVyKCckhrk8,3658
499
+ babel/locale-data/hnj_Hmnp.dat,sha256=6GekZXtZVXtGcI_zk6NqXq3WxMnOx83IpRlJOyUws6s,746
500
+ babel/locale-data/hnj_Hmnp_US.dat,sha256=OydEowg2bNVks5nd5ij7ZJqqQT0ztYv4HL1ZZ4gNajw,654
501
+ babel/locale-data/hr.dat,sha256=rAEOu8FXEh4hjatKgyrq6Y-iIfghNtlRNkMaho5vD8c,280042
502
+ babel/locale-data/hr_BA.dat,sha256=E_S8FRdn0yszTWFg9RlqTV5zEwCc7-qtod45Ud8LHyI,1188
503
+ babel/locale-data/hr_HR.dat,sha256=PqaNYKNdTFgfgmeiINdYp2d3q8qpfkCUs1y4ZHmsphA,635
504
+ babel/locale-data/hsb.dat,sha256=WF1CY7Aj5UzGGJq6rF0rLsfpVs8djCWlbzcfhx_sf5c,258390
505
+ babel/locale-data/hsb_DE.dat,sha256=_ELT9KBswSqeyiwbcsP9nFY793FE8PQzEu_2w78Amro,654
506
+ babel/locale-data/hu.dat,sha256=ttkx4LP7bttS07ejxX-sDXMEBmpo8XWy3wp9FOyrYQs,224668
507
+ babel/locale-data/hu_HU.dat,sha256=r3RZskHfUdk1Ba226wqBHAoRMXorlh-IkWLlnY_mBTs,653
508
+ babel/locale-data/hy.dat,sha256=FPjMAeHw-1BjlQcr9gYrh0MOtm6CJgINuGHGo6ubpHQ,250022
509
+ babel/locale-data/hy_AM.dat,sha256=r1Bb6WWX2QxVlLP5vRVgox0HgoDOosA-h3oYKLeZMIY,635
510
+ babel/locale-data/ia.dat,sha256=eiarwn6xgBCoGh1tMxduBVzWzCkTf0sIwSZyuoCg5gs,150666
511
+ babel/locale-data/ia_001.dat,sha256=fzAkHPu7PNj2TOl-kQcJLIdlEK6z-KfVFUVcy-YF5Zg,941
512
+ babel/locale-data/id.dat,sha256=q4CIHLhOmaXdrOHtKhMne13fo1VJLPOhzY97H-qE2MM,188243
513
+ babel/locale-data/id_ID.dat,sha256=GvwO35RP_Y8vswE60ItYMQa7XUOBXGLk8tvL8kSJkY4,635
514
+ babel/locale-data/ig.dat,sha256=jcP65j1rPBE6AEPFI0kKEFbOVjt97dcQA_KmkXBVuec,118121
515
+ babel/locale-data/ig_NG.dat,sha256=2MR603ed1L8Y_aZhXPk7K7J8bgQPE4xvvpn8R9Jodiw,616
516
+ babel/locale-data/ii.dat,sha256=Xj_vdySwq9TkfM23teBtVgLYy1hMhyJngE0suii_pmU,12414
517
+ babel/locale-data/ii_CN.dat,sha256=Vr_Oe23kFnz-EDfl7XeDv6GeTY0LSK-VV6UJpzU8yJE,635
518
+ babel/locale-data/io.dat,sha256=laqBHV7QB933VjLibEOmRezXV9StwhKVzKvWp8e62YA,932
519
+ babel/locale-data/io_001.dat,sha256=T6zZvvSVOcdpy3fhXbdPAWmHCvDTluick2U8_hUDu2E,912
520
+ babel/locale-data/is.dat,sha256=TZ7NYQ-Q29gaLQlg2H9Lk_vsOKTdXLdiw4GJRWR5Ks0,217697
521
+ babel/locale-data/is_IS.dat,sha256=f3tUj_oYhQ6_tGnn8yda4PZfqChiHmcZXo_nMDCtzSQ,653
522
+ babel/locale-data/it.dat,sha256=LOEVop9C-GT5fmqr5xaJDzJTPWQt2rdPnIEw_yev4Vo,220387
523
+ babel/locale-data/it_CH.dat,sha256=Tvtge1s4BcbCeKJmPBiSbtbf_qv8wrw3Eb4Dc1sF3dE,2942
524
+ babel/locale-data/it_IT.dat,sha256=-e6EK0A6gEd_G4_BHlmd8_caQ-k_JrEemNgdA0czhsQ,653
525
+ babel/locale-data/it_SM.dat,sha256=xjE63TohE8bjkNiOh-BhOkuB9YWpQ0n2rrBMJoAql5E,653
526
+ babel/locale-data/it_VA.dat,sha256=wwsl_eAmNu9m2JPZnpBwFVh4gsk5AM9lSx8UAXhrMlE,653
527
+ babel/locale-data/iu.dat,sha256=53RtGr8AweFKBrGjz7UdyAcz38J2XsojcKxIeQg1NOk,3873
528
+ babel/locale-data/iu_CA.dat,sha256=C449KxuskTW8w7z56Vv602QRYsQ90O0WbazR7VqlDa8,635
529
+ babel/locale-data/iu_Latn.dat,sha256=3YkIAxkY1-gh5mpslT_pfhBfy7O-hlJB0R9G1usaRDM,946
530
+ babel/locale-data/iu_Latn_CA.dat,sha256=C449KxuskTW8w7z56Vv602QRYsQ90O0WbazR7VqlDa8,635
531
+ babel/locale-data/ja.dat,sha256=RuGLGmPiXVohZ_BjwfnXSa5xqZHaDQX198Lne6R0V-Q,222257
532
+ babel/locale-data/ja_JP.dat,sha256=o2pbFmlkEZjV7CHE9cYENYVv2kQA8texhNDhEecgQ9w,635
533
+ babel/locale-data/jbo.dat,sha256=2eB9ymOoFb8abB-v7ISAGcAg4HEEMmpuseHIXFgtqkU,1008
534
+ babel/locale-data/jbo_001.dat,sha256=wwLKEXJOwULYD-q92kQdvpiwW2fgis5YcsP2mT4tnT0,746
535
+ babel/locale-data/jgo.dat,sha256=_761luGFV86HXtwm9XpenLgaehrfIfhzKW7HwodRuG4,12680
536
+ babel/locale-data/jgo_CM.dat,sha256=1lDyjZLpK6fS6oSpfnVLdYd2IUgGlUQfF53BDdK7TLY,636
537
+ babel/locale-data/jmc.dat,sha256=RNnPpcHNebyd2M1occ5GM2zSdGgZ6sDNx1cTK8hh82k,15958
538
+ babel/locale-data/jmc_TZ.dat,sha256=fODp_OsVygbH0UoRsx4HHcXrde02bRKc-hy80sDkcK4,617
539
+ babel/locale-data/jv.dat,sha256=XI-l4qwfKfza5yuz5n60I0qjbhMXMLK_Z6ZI3aHjNs0,158607
540
+ babel/locale-data/jv_ID.dat,sha256=G3zTSeqWMngemp5lAcghudTcv-i8egZS12P0-T1DNXw,635
541
+ babel/locale-data/ka.dat,sha256=XwQR8_em-AVhIKbPVDozHYSPLxYc-P8N7jagfgBkKS4,285735
542
+ babel/locale-data/ka_GE.dat,sha256=zzw4NZBk8dsHIBeEzB3Vtf2_1nC4DhqblLoBUXfNHN8,635
543
+ babel/locale-data/kab.dat,sha256=lTVrc1W7MDoXagvUCYTVqS5ZzBR2Ln9SbXKNnAW3Whw,151483
544
+ babel/locale-data/kab_DZ.dat,sha256=v6fd0kyletm1kfN2ibSUh6oddckpLHjPd_qrq6FQpd8,679
545
+ babel/locale-data/kaj.dat,sha256=5Bmv7LPJ6mRkZShPRasiiUs5vvQUprGcz_4dRU6XLDw,2753
546
+ babel/locale-data/kaj_NG.dat,sha256=1RODrBAPxCrrlTgfhpdz-VxQkTdjJEJYHaJEsOgQsNk,617
547
+ babel/locale-data/kam.dat,sha256=Hpnb35vRgAxfiKnuLXDSC9PzJcShTiOVPCA8_jmi-D0,16095
548
+ babel/locale-data/kam_KE.dat,sha256=8AQQhHQdaI4rBKXfTivg884XIDfZlbDEQM28KwvB2Og,636
549
+ babel/locale-data/kcg.dat,sha256=dOZR1bP8sPbhD2Mk496Twz8MOivgGQoliuDMAWSO9fY,2549
550
+ babel/locale-data/kcg_NG.dat,sha256=jCObRZa-t9Khgx_M8ps0PLbeit7rPCFtHeCOhtfCnOY,617
551
+ babel/locale-data/kde.dat,sha256=GxEqL4RE573LuQAtVcwgk27YBRd9MqMHyyddSetrScY,16389
552
+ babel/locale-data/kde_TZ.dat,sha256=2sfb3gejYM15YtZeRrc0AJgdaJhqgbVJ9c9yF9SlJmg,617
553
+ babel/locale-data/kea.dat,sha256=8xapxF7U_7OqKJT6xNU6CMiPEvKPM38WQ8Y2fEL323w,95879
554
+ babel/locale-data/kea_CV.dat,sha256=LyzxPE6yP0f9hdD4uvu8CvEp8nmcmRDVuRI8YxBQ5wM,617
555
+ babel/locale-data/ken.dat,sha256=PMrEuqYRQIhbpP2dPowHOL_NKKFpEBd8qNUV_NpZnDw,719
556
+ babel/locale-data/ken_CM.dat,sha256=jNEojAAtQqJMkEq84kxHU5hGOVQCOW_hnGQScxycYMo,636
557
+ babel/locale-data/kgp.dat,sha256=vMgCopXVOUrUUVn5Nvjj8ynCdJitmX7vkkx24wXGW_w,210828
558
+ babel/locale-data/kgp_BR.dat,sha256=FNSYAqPhkzoZzholxTydgasgkuw7jgxCfyKDbeRiLt4,636
559
+ babel/locale-data/khq.dat,sha256=27tQDio-rRfhyBJj9uoL__hYEuWLDg3j19mDND2UohU,15852
560
+ babel/locale-data/khq_ML.dat,sha256=ViqThOcZTHZBtebV8LJY-DXdWVX5jAR5pdlBrTKws2Q,617
561
+ babel/locale-data/ki.dat,sha256=RQuBrvBn59856mBdBQOQyV_VwQH6VdQyQtIElMIuyaw,16037
562
+ babel/locale-data/ki_KE.dat,sha256=PNoxhP-WLxW2vH3fS8N9Nuy0tVimMP-ZAaCfLfnfDN0,635
563
+ babel/locale-data/kk.dat,sha256=XwwTZQPh7uFOewYlGBYVKctOeECt7RiWsinsY165BPE,256332
564
+ babel/locale-data/kk_KZ.dat,sha256=eaQW7Va1z2L34hs-D9QgrmyvOo4Lpy2uxxvxms6kL4s,635
565
+ babel/locale-data/kkj.dat,sha256=crvX9EE44zPX_yiSgE0cMUccp9jiag8asdIzDAnd8SE,4695
566
+ babel/locale-data/kkj_CM.dat,sha256=gqHwzVPG_Lo3svaIVe0Kfhj4DaKtstOxJJhUGvvpSbI,636
567
+ babel/locale-data/kl.dat,sha256=qh2frWDdC8LhcNBCV0Yds7nyQKZtcpp0V3C-_2Sjla8,59424
568
+ babel/locale-data/kl_GL.dat,sha256=c49k11GtBG8-vExsQNo_d1pFaQm0LYmXl7QcMSTEApA,616
569
+ babel/locale-data/kln.dat,sha256=MUyFLtLrWaxHjqxvhp-9QeuBn2ny5DEI4_hhFzx2uog,17923
570
+ babel/locale-data/kln_KE.dat,sha256=ZhkKgZ2lTdWAvWVOJEFlp4ASvjk2hcyTc2_P9s3mykQ,636
571
+ babel/locale-data/km.dat,sha256=Zr4gWySMRpRbjtFYPxjgWsz30Za-PuW1gVFCuTvlqpI,231560
572
+ babel/locale-data/km_KH.dat,sha256=bnykdq-RYJ0ZwajV5dFBVtM4anVkLjXutFdUxKByQ2o,635
573
+ babel/locale-data/kn.dat,sha256=iLwAlelmus4bDc8gYWq-77ykBMfnD4lSBbpslNh6emk,301406
574
+ babel/locale-data/kn_IN.dat,sha256=rx1LJYeAP8xU6MIU3yhHLuije5OQWL_wzz5glztIdi0,658
575
+ babel/locale-data/ko.dat,sha256=2GkYKzQAnSMlCu2FrR8FXIeREGaeBopeOnfaJkD7K-E,195920
576
+ babel/locale-data/ko_KP.dat,sha256=BCMOKQSzXNnjAUWfZZ8pbFoSDBed9tnnatyqIePNWio,816
577
+ babel/locale-data/ko_KR.dat,sha256=CJqKij0oULIeCIG8McohdnhEsfJxUwmJHOpJY1bLrNY,635
578
+ babel/locale-data/kok.dat,sha256=6nwMKp53pdA_w4rLynowHcK1zzFQUL5E_hmGWx9430o,213540
579
+ babel/locale-data/kok_IN.dat,sha256=GiRy8Q6VCULzgIxNPFEZzABKOg13Un-DblBwXnBSeEk,659
580
+ babel/locale-data/kpe.dat,sha256=AHR_ZG1p518D4yulM_cs5E58iMsVXKk4Hi6k0V0IDhQ,1331
581
+ babel/locale-data/kpe_GN.dat,sha256=7eabSFmszupn0IlzP6TRg1-7FZS9AB3JdBkDgJtIs64,1210
582
+ babel/locale-data/kpe_LR.dat,sha256=4O2gzHn_orogC0qOiIyIox-JjyA73hEAe_fZ3Fj5tYc,617
583
+ babel/locale-data/ks.dat,sha256=j26yE-FMnGmu7lhY-71ZEm-xvtTfIdUrgO4x0swzK2k,116505
584
+ babel/locale-data/ks_Arab.dat,sha256=fzDL_rCiC-BqymPhF6GBX-d5uVkvZCE4e8JS2L8cjRU,850
585
+ babel/locale-data/ks_Arab_IN.dat,sha256=-OE8PBigMDH8zQrxiaffmabm91Mi8-OVdDR2JEK8xPA,658
586
+ babel/locale-data/ks_Deva.dat,sha256=qco94Hg-V3CSx4efEtFGlFW1sz5W8WZ1a82WeGkREhk,15457
587
+ babel/locale-data/ks_Deva_IN.dat,sha256=-OE8PBigMDH8zQrxiaffmabm91Mi8-OVdDR2JEK8xPA,658
588
+ babel/locale-data/ksb.dat,sha256=GtwdEsb7QiUhqfSh2cx3c1OQzjsp849VFl421oLMU3A,15939
589
+ babel/locale-data/ksb_TZ.dat,sha256=PvWBMUhpMhV27zE9BCEJW8oMqRXWK-6VwmSsXZDMTPY,617
590
+ babel/locale-data/ksf.dat,sha256=q6dMPvU7sPvvrz1vCZnxWBm45B8SIZgJwtuR6ZIhvM4,16448
591
+ babel/locale-data/ksf_CM.dat,sha256=0OOsuUS0S_AUxUPySFQOZVbPcB3F2I4yzHZm63YypDU,636
592
+ babel/locale-data/ksh.dat,sha256=bmwVCtsEvkCDKD-Y65v1ke2YPdDl2ovpvX3cubOY_jI,90334
593
+ babel/locale-data/ksh_DE.dat,sha256=EhgYIJQaC3LGiWrcE2sdfUC8LOWJnciWORi_yoRkOvw,654
594
+ babel/locale-data/ku.dat,sha256=wsHL6HO7NlbjcwMMZm8qhGu-a7mnQTWp43MKuv6Vx-k,30803
595
+ babel/locale-data/ku_TR.dat,sha256=LoNyoL-poYXgqejDzB9-zI_0TIJF3amwyzcs6UnHUII,635
596
+ babel/locale-data/kw.dat,sha256=cn4YhRhAi8s6-1gaSo-f6vJ7IOuDlBh8yYdMPDU3kXM,7317
597
+ babel/locale-data/kw_GB.dat,sha256=ol7LWhJJFNoNkFEjtk4x1PpLkML9UbuVmZAuG47LokY,653
598
+ babel/locale-data/ky.dat,sha256=Nf8DN9KcYuzzBDmExRTACbN5YCZi4faL550H2m-duuI,236385
599
+ babel/locale-data/ky_KG.dat,sha256=CdtjRR2iZgfG5pdz13MX-EHTDtN6BdLeZwGCmrZnrkU,635
600
+ babel/locale-data/la.dat,sha256=DDW-oS3Lp1q3n1J6787FxfrG6B7s7ud8DnZuZb7QfLw,35701
601
+ babel/locale-data/la_VA.dat,sha256=dhULocaXyJGitrljd1w688DTmezcmmY8YcoKsT30n34,653
602
+ babel/locale-data/lag.dat,sha256=rME76vdHS3s5EKyGtnVWSvW-_F8CJmRid4F0d97JFLo,16855
603
+ babel/locale-data/lag_TZ.dat,sha256=LlfEls8DDvoVp07MYnFdLBPUhkJs2kzwUDk45BZIO-g,617
604
+ babel/locale-data/lb.dat,sha256=pHw62uemLovgiVlep0pCtW_dToq36Kv1O0rEGv2Hxzk,165821
605
+ babel/locale-data/lb_LU.dat,sha256=s0AY2-F7BqA4tMcRPjCfbzbXRbHsKnD6uIQGSkulCT8,653
606
+ babel/locale-data/lg.dat,sha256=2OuuUUKOOAuMMprPQo_nAJJ58OREAn1OzGISkXWsF10,16330
607
+ babel/locale-data/lg_UG.dat,sha256=nyn_HKdBHGkHlbjlDX28L5Z9k59MKFqvmVL3vg222s0,639
608
+ babel/locale-data/lij.dat,sha256=BoCWfNladj1i2Iz-zTdDgR1qugvTSWEOtcMw73UNWyE,154215
609
+ babel/locale-data/lij_IT.dat,sha256=rtPerU7ltwkHHc7HErfwJfX8TDSCpTHvBzwKBdSt4x4,654
610
+ babel/locale-data/lkt.dat,sha256=y_oObtwK66QVFI0voX4zQlpkbH8Nob9LqKqYtVzQxt4,12492
611
+ babel/locale-data/lkt_US.dat,sha256=ywWg9m80tNjumAxGNrBwYhXhc28rC4OSdyvkdXAKs5Y,654
612
+ babel/locale-data/lmo.dat,sha256=GYoR98Ap5hosG9bfENEA3sCkR-msF_KvxV2nLydjs9s,1659
613
+ babel/locale-data/lmo_IT.dat,sha256=Xg4Qvye_hPNJLCTwoBuRMAvhtjQb8VlD9SaH_5hVG9s,654
614
+ babel/locale-data/ln.dat,sha256=NVsdj_LgEQEmpiTN1jc9xRl8s6u2K9xJysJokThkkJ8,25824
615
+ babel/locale-data/ln_AO.dat,sha256=VNcFViSaGw3f92D60Uk7vxQ8i6Q9H1FD6paDpJh-r4M,636
616
+ babel/locale-data/ln_CD.dat,sha256=Ao_lUWuswJgGHhVJYs2_Z8LyN4iqgYsAda8f9UarT6s,616
617
+ babel/locale-data/ln_CF.dat,sha256=g5Jy7ovUkwcn0W5Ov5bu5SBc2iM4SWwUFwtzWzAAb34,616
618
+ babel/locale-data/ln_CG.dat,sha256=jQld0yw63ufWbhlOt81wjf731zZluc2zWc1A65kBlAM,616
619
+ babel/locale-data/lo.dat,sha256=-2yOGrzLzZwzcjtIpmBCUMERnScEm9OuO3vLLj6lGik,242881
620
+ babel/locale-data/lo_LA.dat,sha256=gNa7KRGYWI0h0PcHJ35bwnPskILOH-1jLjHCXP85jaU,635
621
+ babel/locale-data/lrc.dat,sha256=LLyO2gxi4MNG0JEFZ7BKYa6g1nvRTMQWWxSkNLmv96g,19325
622
+ babel/locale-data/lrc_IQ.dat,sha256=cy9DO9oAKI51NMitAb2MTbZoxtaAPzaYVGV0-xd0mGA,1255
623
+ babel/locale-data/lrc_IR.dat,sha256=-ca4EmTX5VAi_5tDfimpevJFb-g8vAjgpe_jkDTDZWQ,679
624
+ babel/locale-data/lt.dat,sha256=ayZByNT5skVArE87dP2f-tcj1h7D4ZOKRgq5cm5EdR0,332515
625
+ babel/locale-data/lt_LT.dat,sha256=j8dIQrFc0s77xJ4P-UGiDcaNqZW6CXOEiOh30FemNiY,653
626
+ babel/locale-data/lu.dat,sha256=vXjd-K_YhUylyGo_hqNWzsGmjGd9KggrmjUEMXITAKY,15825
627
+ babel/locale-data/lu_CD.dat,sha256=K3k0wMpIbjusgPC2W1q2sxyxynx2M78zOLjt4ikcoZA,616
628
+ babel/locale-data/luo.dat,sha256=mlvd9-4xl7PcHqaDMyna_Eu3UWtZOb73hlxlxqgvXdo,15781
629
+ babel/locale-data/luo_KE.dat,sha256=jVUd3oO_U7IP6KmvSkVHYNmlCc8_-m2mpJMBaqArSFI,636
630
+ babel/locale-data/luy.dat,sha256=70evj0tg0OheZ5vwOVzq4YVyz9oMIyNZZ5-6xQQgPcU,15755
631
+ babel/locale-data/luy_KE.dat,sha256=NVkQAtmDBXUws3KybnM706J3lwUc5fJo-YEjKd1zhiw,636
632
+ babel/locale-data/lv.dat,sha256=QTnBtKAoRW2D1FzgP3yMSEnVmkUMtMzt_0zLxWiTa-8,255908
633
+ babel/locale-data/lv_LV.dat,sha256=oS9W0pdiTNtMTeGOsef2K7Va2O6k-dQEtN02qCaAoFw,635
634
+ babel/locale-data/mai.dat,sha256=gd7TmTtbREsB7R7rUtkMt_ajz3kIfIfgHiWJPkA5EA8,104503
635
+ babel/locale-data/mai_IN.dat,sha256=DoclpHa5nlHcAflg286ycOjQ6trZP8uHThzcp37Y91E,659
636
+ babel/locale-data/mas.dat,sha256=PhzhoV8zn93he2AS8EJ-aft1AerbudSZhbGCA3G4PtU,17211
637
+ babel/locale-data/mas_KE.dat,sha256=zH3Le4j03YNsPjt_-GL5RvPG0znnJKQ3ifbLhMZsoYQ,636
638
+ babel/locale-data/mas_TZ.dat,sha256=VyRJlBqV_fukTqSR9Jxr-PujSA7u-MP9aXrJBVJCKiA,638
639
+ babel/locale-data/mdf.dat,sha256=KLWsB8nHbvJQCML8zcqIYUk1ZDIelckeBlZAlfPYWqg,2136
640
+ babel/locale-data/mdf_RU.dat,sha256=sVnTxgzU2rEwl7P4d5UY6XOKv1XUCbtkEQO0cu2OlOk,654
641
+ babel/locale-data/mer.dat,sha256=1IhN4YFj9zmZAlrOzfcJg99NlD8Gplaad6KCvIFS6jo,16002
642
+ babel/locale-data/mer_KE.dat,sha256=WqDQTsO6BtbROdcj3p3omUZk8XB6HiJrIlCCj_wLPxo,636
643
+ babel/locale-data/mfe.dat,sha256=emRd-yzbPo_ATc4KG2yYsuo0PPpdppTOJ4Yy3pKicGc,14842
644
+ babel/locale-data/mfe_MU.dat,sha256=MHUOKiQPHuUbhT6hQXJEkpGDvTUyMV4btJTuiLhJQ4k,617
645
+ babel/locale-data/mg.dat,sha256=kwsUKMdiqF-Kt3pVWIO5K3O8p0_ZtzfIRLL1s62cC_M,23722
646
+ babel/locale-data/mg_MG.dat,sha256=uJbGeEzIn4Rh5Bh4hyV-Hs0_qez9KBeOi4hvfC3zkIw,616
647
+ babel/locale-data/mgh.dat,sha256=RbrZzWNTriTwiGpvPV-26217sk_8nMgW9g6wDtCDRFE,10218
648
+ babel/locale-data/mgh_MZ.dat,sha256=aFZZ41qtARE6CeecCEx99tzW_fp-XfkAc10wpQ5YeGM,636
649
+ babel/locale-data/mgo.dat,sha256=6gETqFSIyq7W6-XtpYMXwgMaKFwNh2bodKlkVOCf0U8,8257
650
+ babel/locale-data/mgo_CM.dat,sha256=Nsp33t4abZsKdDmIgB8tb08OsEh-7JXMY_JKCsd61zY,636
651
+ babel/locale-data/mi.dat,sha256=GGB55X75ngxlnbBqYDokM2IfP8J6XR8q2YNQn7k4x9c,50301
652
+ babel/locale-data/mi_NZ.dat,sha256=RElP_P4F1HDHjSHsdt54vriFcz0TcIeT26pm-_dy-Mk,635
653
+ babel/locale-data/mk.dat,sha256=ReFBouBnKwy3ySqiVMOQEr0U5tuzY659mSfB1cx34ZQ,260709
654
+ babel/locale-data/mk_MK.dat,sha256=qlI1ZtLgyX2fcYS9pnTa8illdSnPmfNXORjws-H93lc,635
655
+ babel/locale-data/ml.dat,sha256=H5MEpV6hC-ITLTwAvT128eTAb6-t6scsbaZzoZd5-Uw,319609
656
+ babel/locale-data/ml_IN.dat,sha256=VwCnSFs3oh7xo4-nS1HzWj_xICDzG6E-AW0Oxi6Lu08,658
657
+ babel/locale-data/mn.dat,sha256=FjtScSmoJ_9TPyMBMczjmFuiJMuFrH0K8RmJjyjEdL4,241487
658
+ babel/locale-data/mn_MN.dat,sha256=qhJGIDXSglsa3BYCalsusoyiKgOj7PJ90Yi4ET2-nxc,635
659
+ babel/locale-data/mn_Mong.dat,sha256=DhbpwA41sPBzDr_gadoIfAFfiXPvp3C_c-7o18BGFzI,2310
660
+ babel/locale-data/mn_Mong_CN.dat,sha256=WTF89EShdtBd0Vz62erFwl9KTG-GgEyzjjmKWuJCFH0,635
661
+ babel/locale-data/mn_Mong_MN.dat,sha256=mcXWuP7AhWm5YDzteeRNMVDCx8l732MhYQwspy4m7s0,14024
662
+ babel/locale-data/mni.dat,sha256=ZRY33HsSwuJDHN7vgQK2a8PGkIfdTO5ILZqjUrawzno,16463
663
+ babel/locale-data/mni_Beng.dat,sha256=7PTKZT_UE3WNiipyGHnn2SDNFNhAcqHhEJ8T0Y3O7gI,693
664
+ babel/locale-data/mni_Beng_IN.dat,sha256=nAW_LfRtJqC6-ehdC8yyszjhibXqMAXPkuaz8POQav8,659
665
+ babel/locale-data/mni_Mtei.dat,sha256=zdzwNyaRIil7lkjEf6ProQX0nwYlc5VF4r4gHNTUVTY,1720
666
+ babel/locale-data/mni_Mtei_IN.dat,sha256=nAW_LfRtJqC6-ehdC8yyszjhibXqMAXPkuaz8POQav8,659
667
+ babel/locale-data/moh.dat,sha256=4ew78Uxue7R-Rm4jJeZ-UA3Ors6UNqnX5FUNFgcuu4s,1358
668
+ babel/locale-data/moh_CA.dat,sha256=AXdrS_As8DrrTGs5IHmQwXoEXndFuoWoTGXPXcL4Pk4,636
669
+ babel/locale-data/mr.dat,sha256=7ZPGySE1iaXP4as5IjWMoTrAz7StlcQeDUkmYT1A2_U,281124
670
+ babel/locale-data/mr_IN.dat,sha256=HOu9QR1BLbciqF6BeTfWvD0L5Igwv5HrCWu9y_vNns0,658
671
+ babel/locale-data/ms.dat,sha256=olOwb4asrHoVg1aq1WD4rLDTW9DnLeXfQ9YrWips3pI,172528
672
+ babel/locale-data/ms_Arab.dat,sha256=S1UK611gCf7hJ6NhS2MVPebOi5gql5cbeKZOMa-hlns,17516
673
+ babel/locale-data/ms_Arab_BN.dat,sha256=vTEKSh0hjyiWJhf503-fwjADvTCN0AqRSzF6muL52JE,1335
674
+ babel/locale-data/ms_Arab_MY.dat,sha256=w6ZZrz3qEmnsLsWtJA8rTohqF1cxctkzSj4WN0XHuHE,635
675
+ babel/locale-data/ms_BN.dat,sha256=EDfyP39y0loC9OYv8o_KBHiSMRX4AyO3WKSrJw59-wg,1355
676
+ babel/locale-data/ms_ID.dat,sha256=Bu0vs6QgGGSjRV8w_79uSKRyDOTzEJoY0zkaDmifZeM,3591
677
+ babel/locale-data/ms_MY.dat,sha256=w6ZZrz3qEmnsLsWtJA8rTohqF1cxctkzSj4WN0XHuHE,635
678
+ babel/locale-data/ms_SG.dat,sha256=jsfNag5WQWdejzh5hayA7_-IbY03MUVPAPDHUJyCZRg,654
679
+ babel/locale-data/mt.dat,sha256=Y1FOafPkLPfdxbpnRWeg_bn4j7Y3UhXGZQhEnOtVAZU,81584
680
+ babel/locale-data/mt_MT.dat,sha256=L5q5LizZQL0-FLj2U-wn2YhkpL3p7ZvjdyAvH1wwUG0,635
681
+ babel/locale-data/mua.dat,sha256=r6Z52nAqw-NTHFh5oS8e6Ka4eumfO-zgvh_cnYXOwhs,16522
682
+ babel/locale-data/mua_CM.dat,sha256=Ib4K67KfndwGsoZDH0ehHA-F7V_SUj7q9VsK2juzaIQ,636
683
+ babel/locale-data/mus.dat,sha256=6HDGlgPkgIs0969LeNwy3PlDUu39-Kb7VphEdGRRC0U,2815
684
+ babel/locale-data/mus_US.dat,sha256=xcd4KKUIqBwSefSC0GGSDkvXL46eDWgWolJsGuSf654,654
685
+ babel/locale-data/my.dat,sha256=xtHbCYyOQxLWAK_tbnWf98GzJKa9cCkORtoOjDX373g,237294
686
+ babel/locale-data/my_MM.dat,sha256=l53-D5YL-BbmLZYveFV2ISa4NcrSwTfKsRRc41Jd42U,635
687
+ babel/locale-data/myv.dat,sha256=IrUiviXedgwt8UpDFgAh2dGcsMMhL6Q8IEPefcG_s68,17716
688
+ babel/locale-data/myv_RU.dat,sha256=sncxwOpjfFkRASKHMP1ytKcjpF4w4GjU_JEVqXv84Tg,654
689
+ babel/locale-data/mzn.dat,sha256=nBwkbxjQxQvO5evMrWb9rAUV2LYq52-lXw0ZgU6QQhU,65671
690
+ babel/locale-data/mzn_IR.dat,sha256=fjN1ek2fAzZyzFJpjX_MIc5oFOEqj7LS_SNdBOQS9ZY,679
691
+ babel/locale-data/naq.dat,sha256=_a4WOpBhdnn0fdmjjQw2cCoPvBDw0caDDg45VxxBmBk,16519
692
+ babel/locale-data/naq_NA.dat,sha256=e5gAIOo7le-dVOAX_k2OW6gEyVfEUxcYDUJu_MBDY5M,617
693
+ babel/locale-data/nb.dat,sha256=-bGHDSonSEdqfb2PxNC1_3jOHELm3CwV7xzEtpmWZUE,1330
694
+ babel/locale-data/nb_NO.dat,sha256=J1UiN-AG900acMz4p0fBHtXDpS0HD6uGAi7gg9gOrsY,653
695
+ babel/locale-data/nb_SJ.dat,sha256=XcK9_nKriUY_4k09kmgJalGTls-e5-YS-MCPEKLP8vA,634
696
+ babel/locale-data/nd.dat,sha256=3Kq2nRkxqxjSBKbrnxergjiyQ1mcOT20xkhdNA8kUcw,16226
697
+ babel/locale-data/nd_ZW.dat,sha256=KpZHrPr_0Ru0t9ojSK9ZiqGZ6-rSpvA7cX9C483ocRk,635
698
+ babel/locale-data/nds.dat,sha256=sqomo8seDm1VS2hqw2GeyzPt3YjmRkuOGM1sbtRV-cM,50795
699
+ babel/locale-data/nds_DE.dat,sha256=Qmh5DjX65W58jXXXX3pxfxS_HVTJVavMspBPdph9sfc,654
700
+ babel/locale-data/nds_NL.dat,sha256=E_EO3ylaBjJNThr211Yzefh5DRbkEFFVpbBMXIQ4U1U,654
701
+ babel/locale-data/ne.dat,sha256=A1QCwmbxXBqeDzICTbjG3q5foUJGH4HgfSi2ZWw-498,274134
702
+ babel/locale-data/ne_IN.dat,sha256=SFloADZtyb42wygQmrMy7yx-aADGQECZJUey796oqnw,1292
703
+ babel/locale-data/ne_NP.dat,sha256=LGc7Z5TRi0HRNQdY4bqPitV73gzTPWLd_g-6aPyvryc,635
704
+ babel/locale-data/nl.dat,sha256=Y2MSK7SKYCNriwQrNxioqepkfIXObt3tcjaYGcDvJaM,237923
705
+ babel/locale-data/nl_AW.dat,sha256=HYycPPe5HDhuP_zN89ysXR2AqjIbx_-XB2n0-TUPhxw,638
706
+ babel/locale-data/nl_BE.dat,sha256=Yl6u2wQU62h3hvXobO9r3sXdrq2d9pans2N_wImwRDs,1910
707
+ babel/locale-data/nl_BQ.dat,sha256=lZQzrmWsFTpiWwT9l6FakrNoll3QNP3drIMcxFkAy6Y,635
708
+ babel/locale-data/nl_CW.dat,sha256=doEeLSsQVaSocP4jr5LxNrT5luSiG4hkgsMvoYjJBtY,638
709
+ babel/locale-data/nl_NL.dat,sha256=bGo4nyjhqe1VtDHlP5EUmNkBKsViUSiH3h_ikXcPuRo,653
710
+ babel/locale-data/nl_SR.dat,sha256=d-YXA5QA5b2Bh-WhxNTkyKQ4ROhuEg1CeGN5XmzWcZM,696
711
+ babel/locale-data/nl_SX.dat,sha256=ciTQIntv0njAJGIUENzo6stN8yarfh-eBpmEzxmpJbs,638
712
+ babel/locale-data/nmg.dat,sha256=z-vVhNGtHFAW9D6NBmqzxDbj7G0g8L4n-l3v_E3UlyU,16148
713
+ babel/locale-data/nmg_CM.dat,sha256=0A-cVUgt1l1ITnPRdcgWiQ68ZGqHDYd-k2wSc_nXnMQ,636
714
+ babel/locale-data/nn.dat,sha256=n_PmkSBfFrxqtO7GJhiZTr8QEMdgc3MfPQnKboH7x-c,68872
715
+ babel/locale-data/nn_NO.dat,sha256=98eWK3CBq5T_dI4a6dQH2TktRygMH0EnpO1EO7w8lVY,653
716
+ babel/locale-data/nnh.dat,sha256=6DL18mnBvO-sh9vGPjLSWi6qgIQmp_msS58XsYLm9eE,6673
717
+ babel/locale-data/nnh_CM.dat,sha256=dt9ZNHX5ZQo-kcyT4-mVRCUiuzL-H2A9e0s0JrHwZts,636
718
+ babel/locale-data/no.dat,sha256=w8PeOU8qfV0seaM005KYEJ7Yh0XQYM1OrjqoJqUaEHg,238457
719
+ babel/locale-data/nqo.dat,sha256=oA-5QvYHoJE5ebe0YRBb6mfPWCK7OZPDvlODJH1F39M,56658
720
+ babel/locale-data/nqo_GN.dat,sha256=3eOSTBaZM0RNLUDZFr__KTR_9iZoGUFq9M6bhtmHjcU,617
721
+ babel/locale-data/nr.dat,sha256=UihZdFPq2Dl8TZ0SYLb7UGKgnqBuVdVIljmNBSY-gKw,2479
722
+ babel/locale-data/nr_ZA.dat,sha256=e4_czqcyMye0qthJd2hzn_9inTS8WjjbFOzRJ3wAS24,635
723
+ babel/locale-data/nso.dat,sha256=0v5HeipvUI_2TeT_TsgkBwj0WilGl3bnwxakwGhJ0js,12632
724
+ babel/locale-data/nso_ZA.dat,sha256=TdOqVTzKNigLD6zOPR7W7QHT-Aw40ylsUE7bmMwgaKY,636
725
+ babel/locale-data/nus.dat,sha256=hgxjaDWCEyVcGI79vpmpF0aM8bcM_pPyFrz5TqLM0Ho,9148
726
+ babel/locale-data/nus_SS.dat,sha256=Is_mWvnSS7j05Vk9RHcCfyLOdhOeOWRqgXDf8FGNEJQ,617
727
+ babel/locale-data/nv.dat,sha256=6KleoDsaTjhXti0fFXfR8hwOUnjmVx_lLgI6Y9MIP8w,763
728
+ babel/locale-data/nv_US.dat,sha256=ak7j2GDaOMbAAmXQhfC9PRM8E9h_hJZL3UDqxqjCtoI,653
729
+ babel/locale-data/ny.dat,sha256=XXvyFcRnNcH9KcAH1K7jzS5xLFsXMlXVW3yowhXPIO0,2152
730
+ babel/locale-data/ny_MW.dat,sha256=kyhkcpqgIwSrUcfxve2OS2P9S1AfXItRHmy94K7cQ48,616
731
+ babel/locale-data/nyn.dat,sha256=s-r3dAJZdZd90y363lu3h75xm4kE8i5V9jUu6Wwwl2g,16171
732
+ babel/locale-data/nyn_UG.dat,sha256=fEm-RMI6-PvIjbMUoZK68dTaiAmOqH1iDQBn23a6r2w,640
733
+ babel/locale-data/oc.dat,sha256=3hoLz_ob_rlkYOi9YmwU2O7M4vpKsmFpLytl4vvPdnE,69557
734
+ babel/locale-data/oc_ES.dat,sha256=XLBR4MaYZHXQwSW_BAWrwO8-an84qeuxT_y8LZfor2U,53139
735
+ babel/locale-data/oc_FR.dat,sha256=L80Ivl6dUpQJF4fAY1xaAeCRO9BkN0l6oCr8nRwogsM,653
736
+ babel/locale-data/om.dat,sha256=t9tYtK7T7OxJ9GlX2op8x97NSpY9hynKctK2FJB9Esc,16883
737
+ babel/locale-data/om_ET.dat,sha256=v0wHN7iwcuJN-iFgWFPrGdplH6P-0c8B2OEqYOEeb40,635
738
+ babel/locale-data/om_KE.dat,sha256=h8jCIllRrl8-c9jorHeFxZrbDZ2Ncj-L5iSbTFnB_XM,1593
739
+ babel/locale-data/or.dat,sha256=GAMdIa-3woF-LrVd7XoDCeF1odh4_5SmSfC2qIF5Z-o,272016
740
+ babel/locale-data/or_IN.dat,sha256=ur6a2cCdapMoKd-6KLXR2xAF2YU8xaueeW7UTPL2yLU,658
741
+ babel/locale-data/os.dat,sha256=22JgCp7PlYngzY6Rf6dC3Z6KgRriV3XWyUWCz0oxgEs,17450
742
+ babel/locale-data/os_GE.dat,sha256=8NgIdMuGlNow1dXmjW6y4xOis1_3raiXcj_jLBPirpI,635
743
+ babel/locale-data/os_RU.dat,sha256=76MsfCZxiy_RXfhW7Do3Z8q4-jhp1hOXTBIsA6SlA-Q,695
744
+ babel/locale-data/osa.dat,sha256=HBDT8EMk5cd05q10hoLjEGh7revrpG6P171zyhjG3sE,5342
745
+ babel/locale-data/osa_US.dat,sha256=qFfjNw8tVOdprzqK2wBlGH4eNMxDxDQqDDReucJZR-E,654
746
+ babel/locale-data/pa.dat,sha256=uFEQPuvdFRt6GA6MY9-PNZ1wRbwl8MfIClyhopgohks,276394
747
+ babel/locale-data/pa_Arab.dat,sha256=TgKzLQj1KONLtB3XehaNU2OVQB4o-FW_tmu7_-9VtDc,3859
748
+ babel/locale-data/pa_Arab_PK.dat,sha256=1Si67Mz8DZfo2D8Ld0b5IlZpvnSMgg4W8_zZLrHrWQ0,635
749
+ babel/locale-data/pa_Guru.dat,sha256=fs7wqdmuGaKQCCwGkT3lRQSKmf1dxG3jyLboZeVtPmE,1276
750
+ babel/locale-data/pa_Guru_IN.dat,sha256=kpz873B1I65nfS3Z5vDLmmGliFVPlPM58sB6jW9nkBY,658
751
+ babel/locale-data/pap.dat,sha256=JDZLD-YVW6iQlqyeCDtVM4lsmtXnidOt-dwN-u8lRu4,2099
752
+ babel/locale-data/pap_AW.dat,sha256=XZSGzQPijHNf5GjxUjDJQt88iD0ETRdZSTF8gn-1U4M,617
753
+ babel/locale-data/pap_CW.dat,sha256=Mu-gCfh3bv9pzz9RrylMffuphhqgiRaODEZm6TtCpaI,617
754
+ babel/locale-data/pcm.dat,sha256=rokktGzg-etVOw21TmIJaE9wa-1nb-BG7LkKlkUMpSc,211372
755
+ babel/locale-data/pcm_NG.dat,sha256=3gBp38NIuVEbHlKAtQPQXJjT3DKvy7zvUqMAZS6pGzk,617
756
+ babel/locale-data/pis.dat,sha256=yQDFCHO03lZB3LsXLP9mJQ6FdiFcmHz5LtYdyLf6Q-U,2135
757
+ babel/locale-data/pis_SB.dat,sha256=-CDkXv_877c__o56bBeYHAAq2X9CcnKdI65DiE61_M0,617
758
+ babel/locale-data/pl.dat,sha256=SS79Wa03ABQ_sOKashUvUN5oqbZmOylvFuNsfdbtZJQ,304460
759
+ babel/locale-data/pl_PL.dat,sha256=3s2XpVyaKha_K9MesXKD6sZNGSn1PVRtuz9XYp1xrsg,653
760
+ babel/locale-data/prg.dat,sha256=LcP5e3z7f9d8Y2JXu1DXyjNTENVMBuBlRsP4j1GF7bA,20302
761
+ babel/locale-data/prg_001.dat,sha256=6LHF5Z1NaPiOsaIvXpkBZxwHGwZ872NhTmNGqChOiwo,1594
762
+ babel/locale-data/ps.dat,sha256=js5Ulvl1E87VQIDRr-sVGfhYQpft9MBbg_PoI3DX_Jk,202956
763
+ babel/locale-data/ps_AF.dat,sha256=sNE6bgx_nV0VWKa8InelUaFYSa3Fpx6byJw0KT4B1o4,678
764
+ babel/locale-data/ps_PK.dat,sha256=O-ZkUudOlKrlurTpN76tsPXzlVHOLGjFoO_ngnIWGTU,8032
765
+ babel/locale-data/pt.dat,sha256=Pw81Gan92r5gaZzsLZgcFuhfxJmkrOTg-Xc9TkQIq-M,236660
766
+ babel/locale-data/pt_AO.dat,sha256=49hMN9AJBDNjcsQw-nl-jY_VKHanO0PGfvd--OxqOxI,1022
767
+ babel/locale-data/pt_BR.dat,sha256=dVKYp9IwRMbjZ_ee-eXFPudSuTRrROvbFzY3dYTYmn0,635
768
+ babel/locale-data/pt_CH.dat,sha256=zAvD0sYytEquwzY8ZRbVCcy7DS2ZzUXofl5qXOixZH4,653
769
+ babel/locale-data/pt_CV.dat,sha256=zOQn8d7--PKrhRUhQ5mPKW1Km6Tyh5JF8hstfxpITzM,1039
770
+ babel/locale-data/pt_GQ.dat,sha256=qI1hvtuSHOev12ips9o3Vy78NJpOMjhkW625M60lqZU,616
771
+ babel/locale-data/pt_GW.dat,sha256=SRxbFDIg9FwEjGjutRI9P1SeLiZBqStwSqPuHBFZwLQ,1002
772
+ babel/locale-data/pt_LU.dat,sha256=z9aq0BTWEnk4lXveNpmi89TKcXN_t6Ud4A_C97uyOuw,672
773
+ babel/locale-data/pt_MO.dat,sha256=shItJIIDrxwlcQhWLhlZG0uhyTlSBDcTag5ivxmb9TA,1635
774
+ babel/locale-data/pt_MZ.dat,sha256=UZ1nkXS9CpiCM1IpOG5XpGK2QqM5mE5lAgRLTGAWl-4,1042
775
+ babel/locale-data/pt_PT.dat,sha256=Ix5iaB2EUBK6SoqBJoxCXo17OXYNvQ_Vijngq2MjnQc,107608
776
+ babel/locale-data/pt_ST.dat,sha256=Cm2HUxlGtZaz8IXX5Ohms-HYuKgazuBcOZBz5rWOzEU,1022
777
+ babel/locale-data/pt_TL.dat,sha256=CIIDM_Zo0xiu4gXngxYtkYK6ldTNZMRaikSD_sAokMw,1002
778
+ babel/locale-data/qu.dat,sha256=kUrGQ4L0tVxwG_b1-9VjN6_N-s5Ox91LzpWgs8H82cM,138806
779
+ babel/locale-data/qu_BO.dat,sha256=7RUvNrmuLtwqP-qab667GocH_c4gIvpas3dbN1uaGxU,878
780
+ babel/locale-data/qu_EC.dat,sha256=_5V4RYoPb3eCAA7jOCNfB7WZqd9sWP1E0tlF8mGeqFc,837
781
+ babel/locale-data/qu_PE.dat,sha256=Vdd0fcK2dtFgyui3Q9NElHuJ841RI-T5l2UHeBq8MQ8,635
782
+ babel/locale-data/quc.dat,sha256=_Admf-sJxEnpo6MgV3-3kuNF2nk1_RjkW8LIhxCwdlw,817
783
+ babel/locale-data/quc_GT.dat,sha256=8M8KtmnsJiTCaf-Nl5X174Omtyc6a0ri07kysDC3-5Y,636
784
+ babel/locale-data/raj.dat,sha256=tjUg3ThgXtza6gABimig-EPb7Up5jKbnM7VanUUi7F0,2491
785
+ babel/locale-data/raj_IN.dat,sha256=SS8GPzJu5j6nfXlDoX4NFPN2QScl4M0YNsrFmWklymM,659
786
+ babel/locale-data/rhg.dat,sha256=kKSwVoO_uNQO12F4YP4f8_axq3hThAc2XCwAVZMFHVA,12292
787
+ babel/locale-data/rhg_Rohg.dat,sha256=DAOuwC-7uaIuZtrIXvUkYt6YkxqaKpHOma1m0-XTtrI,693
788
+ babel/locale-data/rhg_Rohg_BD.dat,sha256=DcLSBtf_k_f6B102-vbhBOjfzNZjiTDvEUdIOQfVc8M,1212
789
+ babel/locale-data/rhg_Rohg_MM.dat,sha256=HspZzbytcZQ853Jstp-eFEdqSMAD3-shgjrdxY_KQrE,636
790
+ babel/locale-data/rif.dat,sha256=eyKDJ1c94TMjWmwGz3xAMgDh2DcLC2kZQsX8CPKvYvQ,1878
791
+ babel/locale-data/rif_MA.dat,sha256=Qq7ZdymuPdjHeYDUDGCjMuQBRU7w5qGdgzzZ6wPfN2o,617
792
+ babel/locale-data/rm.dat,sha256=ETvEMTKhZEIQZkxizgoBhv6q7d__PO1AKtrBepjqlR0,103308
793
+ babel/locale-data/rm_CH.dat,sha256=JHAlYXMD9Vks43cU_gcSEQmqo6pogWPl_R4VMUK2iHI,653
794
+ babel/locale-data/rn.dat,sha256=6DKqK6D6GMFf8rntv29SEmrq9lsfVTItI7uZHt2HAKg,16744
795
+ babel/locale-data/rn_BI.dat,sha256=r5Cweh7L4EAZK-qTmJuloWc33iXeR4IJUbknrl0XC3g,616
796
+ babel/locale-data/ro.dat,sha256=rseUyqgVhgtYT-kbRBh32vn6WsqwGSoiO8ScpySi4fo,269287
797
+ babel/locale-data/ro_MD.dat,sha256=MICjowyyNQja6u9jytd3Dxi3WI5vSgAcwb43cX_J-eo,3248
798
+ babel/locale-data/ro_RO.dat,sha256=lLYIYWhDUmq1EZ9oV5SETauVa_5uNN5p52dW7XeemRk,635
799
+ babel/locale-data/rof.dat,sha256=9MuPz_hPIFVTX4xjou2d6KaH9a5t7AvYlXcPK2jjdsA,16066
800
+ babel/locale-data/rof_TZ.dat,sha256=I_qwGjqqrcwUR_3UNydHOm_EiiLZYyRV0q-s1qfSSi0,617
801
+ babel/locale-data/root.dat,sha256=9Vm72r242O-I1COr-r9kDKYpGCUv5oOkVlggG1XdpVY,50707
802
+ babel/locale-data/ru.dat,sha256=ZgoOvEMNv9bdRiutXP8zUfTjun7Bz3I9GOiytQ_NjQA,353323
803
+ babel/locale-data/ru_BY.dat,sha256=99UlyhoMWnfyhI5ltXGaJkycWLVfJ3FwdxyRm-yr6kM,676
804
+ babel/locale-data/ru_KG.dat,sha256=X-iAT1QuQGhk1mIetpGyWqDlwiBskLfwqrK6ant1XS8,659
805
+ babel/locale-data/ru_KZ.dat,sha256=P1_Gn3esOwDLL8sd8vVYbFA8J7QEsaDAWfZvDsn-WwA,656
806
+ babel/locale-data/ru_MD.dat,sha256=LU12oBwr7MfPTzfs8Dx7uUZVgHin8ybX_oPHrPIJTkw,654
807
+ babel/locale-data/ru_RU.dat,sha256=IVG440mXjphW6iCsKysZCW1Gem_z5_O0lZI6-R3oG_E,653
808
+ babel/locale-data/ru_UA.dat,sha256=aptMDcNM1sBQO4L6D1RYCa0dn76KC793HlTTqKBhyxc,1695
809
+ babel/locale-data/rw.dat,sha256=8uzBUtHj9ty0o4Vs-UaMa5J87t0y9hGU2w7zgF29CzY,16372
810
+ babel/locale-data/rw_RW.dat,sha256=tw-gtzH64PeIAmNGeobgUypw7RAyKITeFAcQPGY0MG8,616
811
+ babel/locale-data/rwk.dat,sha256=7lg1nf_wtYUNHGip2e3MXWnf8ovUeQXVoaYJarV01Eo,15953
812
+ babel/locale-data/rwk_TZ.dat,sha256=s9duai8NRoHwn8YpQrlMd3VDf6jtQxxcUmu9CIIMzC0,617
813
+ babel/locale-data/sa.dat,sha256=H5HEaqVC_nVofSqAtVbgDxxSlLCp5SzqqzgoWRfZYuA,24408
814
+ babel/locale-data/sa_IN.dat,sha256=ABNamoPpYRbO7bK6BGm0tK92kd7su7_OP7Di0wW0zZo,658
815
+ babel/locale-data/sah.dat,sha256=T8bTksxuDgX0_YzpJ6PgnoRtF4BB3Vm4dVnFafFSWDU,51456
816
+ babel/locale-data/sah_RU.dat,sha256=jHlseiwMbtN-IsETeG2dsaIn6OB2kqtAogazMnn0f60,654
817
+ babel/locale-data/saq.dat,sha256=XUklSl56KHtJvgqcNsJpTNm6F2UtAbVLgRqBMdgVgIw,16375
818
+ babel/locale-data/saq_KE.dat,sha256=kN94cJJt8AT0yBRDqUPGoJtMZdOb2e-83NNsq8hmQ64,636
819
+ babel/locale-data/sat.dat,sha256=HdKfJKPFyA_KBP1-F9jblRtk7D-FZ2tXC_y82R0uVQ4,72200
820
+ babel/locale-data/sat_Deva.dat,sha256=0EHZ6UcxsVOfi399xQbOkzaH1OU4jkZ10uqmmWnK8VI,1943
821
+ babel/locale-data/sat_Deva_IN.dat,sha256=Bzh9Vmzia_8KLAryt9VqCl9ter9tKxng4b8oFYbYK6I,659
822
+ babel/locale-data/sat_Olck.dat,sha256=mszOmf6B29mFbE6qN6Moy6SfBjwsjaCsbk75dJR245Q,905
823
+ babel/locale-data/sat_Olck_IN.dat,sha256=Bzh9Vmzia_8KLAryt9VqCl9ter9tKxng4b8oFYbYK6I,659
824
+ babel/locale-data/sbp.dat,sha256=fBots-db5GaQHSyVL_c670sLPouLKYhpdZi6ZMtAS4U,16442
825
+ babel/locale-data/sbp_TZ.dat,sha256=chWs0tZniO53SbtBquTHGS6E4v36tgYL2b3enxHcdCU,617
826
+ babel/locale-data/sc.dat,sha256=SczV0nBRjyJXy2nbFiX9dh9H0DI8-3a3KFLzSoIyRCg,221563
827
+ babel/locale-data/sc_IT.dat,sha256=0G0vL9YXZQLkTmnzJuuygM5ty2Tw5liDg_aWHLvg32k,653
828
+ babel/locale-data/scn.dat,sha256=rgcJX2U9DH9ING8FACFnvUaP5ujMIocxT9ahAUMHnQY,10259
829
+ babel/locale-data/scn_IT.dat,sha256=dTXZIHDRhbFDCw02T0wL1iaJ2kfY1ZUzfbvUs4_WKLs,654
830
+ babel/locale-data/sd.dat,sha256=D149b57qdbFhjEUs-rEUF0GuBFPnNRcJ51x7TcICWfo,223564
831
+ babel/locale-data/sd_Arab.dat,sha256=jgkaYGUhPXll1T7CT68ridccZaERHeZdwUzGoAZBUps,879
832
+ babel/locale-data/sd_Arab_PK.dat,sha256=c3AXdatnrTNDHW_SOh8fNNye4CVey81FnkSXwj7MmcI,635
833
+ babel/locale-data/sd_Deva.dat,sha256=0bbRtnWIj9j5rK5BzykPR0TGwv_tZc0GIiPX0SkRzQM,16972
834
+ babel/locale-data/sd_Deva_IN.dat,sha256=0KQFEKHV6hHidc5hxrxQEvhO-YyvFf5P5z6t9hPenH4,658
835
+ babel/locale-data/sdh.dat,sha256=5cD8u88qanpCtA8kPvHH9AdAi2-HbhznORqis1PYx6M,1032
836
+ babel/locale-data/sdh_IQ.dat,sha256=B_vUMOiGWVcD1HaR4Zk8XxVzcmMFSISe2vRscyA1lYY,679
837
+ babel/locale-data/sdh_IR.dat,sha256=hwMmQnne41X_lyjbyNbQq34Lpkl91bAgoavPZRuozwU,679
838
+ babel/locale-data/se.dat,sha256=_j-UAYXnQAGMshxU_CQsfyR1gVpbb0E8hxXaTmZ4BRc,74113
839
+ babel/locale-data/se_FI.dat,sha256=MwBlsCN6fqQH2Tes1eRNPZtLFW-jzX1-xI-b3Fc6fo8,47250
840
+ babel/locale-data/se_NO.dat,sha256=nm5u2VQ3ne0SUFZtFqwsRa8Gg97Xn1OSxjoP2I-i_PU,653
841
+ babel/locale-data/se_SE.dat,sha256=6M9OxtmQAY_p9fZ_6L8zqo6i--bo_X00cvhTDEbX_UU,694
842
+ babel/locale-data/seh.dat,sha256=ljLjBHD-_xtD1LXjldrCdX0I2owXk39_jyEpyYDFMPk,15823
843
+ babel/locale-data/seh_MZ.dat,sha256=Sv94DueqrM3R5RjhCdwrKZsnNdL1WpjLBg6QhBnoaX0,636
844
+ babel/locale-data/ses.dat,sha256=KhePmTzOCY4zRaDILbPap8IXfykvY6Sfzyv351JqawY,15911
845
+ babel/locale-data/ses_ML.dat,sha256=y14qGwP_r6VxzJhklYIWfYkolu0OHB-6nJ4tvF7J-iU,617
846
+ babel/locale-data/sg.dat,sha256=oDMuuvdPatbYyvy9pPBgXNRXcMYkNXHEtvtwCAlTQrE,16548
847
+ babel/locale-data/sg_CF.dat,sha256=QCNYqo_5l2Sv9JUFEWF6YLDR3MknhgkyMz1mO5j2Gv8,616
848
+ babel/locale-data/shi.dat,sha256=sIPt4Y_phnDkkvFgui8iDz0VrEf-K9eeU5NBf0ikmGc,21949
849
+ babel/locale-data/shi_Latn.dat,sha256=v956UEZ6dMSu4Sw4VhTGYFQ6D14OBmDlodFSDId8hAM,15531
850
+ babel/locale-data/shi_Latn_MA.dat,sha256=X8cwkkvm2LjcClQWzHRxxmiA8P0c37D7P8lf6RO4iNQ,617
851
+ babel/locale-data/shi_Tfng.dat,sha256=VjsR4oSiK9oFfdIdpaVDwNSIBvFbQ3Jvm63K24bRqk0,974
852
+ babel/locale-data/shi_Tfng_MA.dat,sha256=X8cwkkvm2LjcClQWzHRxxmiA8P0c37D7P8lf6RO4iNQ,617
853
+ babel/locale-data/shn.dat,sha256=awBFmgdlHbpKsnUqWZaGAQ-YbTPm9UWkJKMn9IdJ7pM,890
854
+ babel/locale-data/shn_MM.dat,sha256=7VauV3cmVfAJz7kA76hsF3FdwM75CVjvHdjx6lCoH4M,636
855
+ babel/locale-data/shn_TH.dat,sha256=QHPmr3V4GzTbb6QA5SDl2EsVzQBjpbaDP6OHfJZ0S0Y,636
856
+ babel/locale-data/si.dat,sha256=2lhHStmPqL2dqahPVp1A4v_UsMQXtuiVqFs7rM0orBc,285677
857
+ babel/locale-data/si_LK.dat,sha256=cWCgV9WmnEwIIsBmhsIVzSzbrV8hkkXaV1xH1ultlUw,635
858
+ babel/locale-data/sid.dat,sha256=1T-sqoV6zk_nJreKj5UADozq_oTLlhQiKMQaKFkdOZc,2237
859
+ babel/locale-data/sid_ET.dat,sha256=vtwy9BuaZwb5A3XdIl-3mws1cEAVk4s8oKy7i-GnM9o,636
860
+ babel/locale-data/sk.dat,sha256=exkIRNyNsgi63oGJhX4aYsByTtlpKvxnaC8C_3vScw4,298024
861
+ babel/locale-data/sk_SK.dat,sha256=eMjPq18mQOAXvkJN5WV6lKEAPyt7-eleGme2pHHevgA,653
862
+ babel/locale-data/sl.dat,sha256=JsCGVnxl_8sN-rkTjpQh-8pq78fpw-n3WB5Su1CHhyI,293278
863
+ babel/locale-data/sl_SI.dat,sha256=3Hk2t-MUfAUtqu_Gy0_fTjOhwBUtxdnndQ7Kowg0qek,635
864
+ babel/locale-data/sma.dat,sha256=F7xP7-QVGODq95JT875VPPyPT-gXV_mUTP1xb6oqk8M,986
865
+ babel/locale-data/sma_NO.dat,sha256=OeIJ-EJtvWH6z2dZ1Hv8QdmQC7M7r51t-_C6LD6ZyxE,654
866
+ babel/locale-data/sma_SE.dat,sha256=M_zYllAUd2UaWvccZ6ShB9-Gd8JYzIEln-88Q23syaU,654
867
+ babel/locale-data/smj.dat,sha256=z6V0DWiup3F-1YSf7NViI9Z4b_jyCJ9V3kPvzt9QcuM,981
868
+ babel/locale-data/smj_NO.dat,sha256=5fz-YVJEoXswvC-RdFcJWmt-EMGcNXA3c9j_pfmxqCA,654
869
+ babel/locale-data/smj_SE.dat,sha256=7l73FEZcAemOwXSrfPB3X7a0cto3J4oM7AO9i9PMIBU,654
870
+ babel/locale-data/smn.dat,sha256=4zPG9DNBrwN7lvXxpsmaXkvOgQQ2Cwmfca-tQxHfJp0,43534
871
+ babel/locale-data/smn_FI.dat,sha256=VRY3dbCyxEmDUTep9bQXDRldd5wSg4skqQpztnMXplk,654
872
+ babel/locale-data/sms.dat,sha256=ylATYbrfu8SVEVdQRbC7dTSOKCNSX7O1gjS2wJXA1tU,6521
873
+ babel/locale-data/sms_FI.dat,sha256=b-Mk20lC32xysqU5v6jGjDUYDZaMDvoMwWOZNdT5yuA,654
874
+ babel/locale-data/sn.dat,sha256=LTQbCLRgMMr4_Pb9lnGKej-IfTCdxjjcbMeH4sldHbA,23418
875
+ babel/locale-data/sn_ZW.dat,sha256=8HnH2raHHl8PI25abODlThEhjIOGXJb_u7cyQd5YzZw,635
876
+ babel/locale-data/so.dat,sha256=LjDx0NEIDSI4TXP_k5xjgWRH210QHqXgdFr0tVxHrpc,209673
877
+ babel/locale-data/so_DJ.dat,sha256=VWnaj_MuW4dJnlO84t60ySCvfJL7FXI4nIP9PTL5Amo,656
878
+ babel/locale-data/so_ET.dat,sha256=EvRRqU4yQPMYhkEK8a4MR808fwKHmW7EvPvEJdjltnE,655
879
+ babel/locale-data/so_KE.dat,sha256=OSiRggRZ7CTNmqiGOvW1W2Cw2RqjVESTVOdUfgVgWyU,1208
880
+ babel/locale-data/so_SO.dat,sha256=2IPbOqSxQGB5FukQ-B-MEme9FHYn22ClXmAV4x08pNE,616
881
+ babel/locale-data/sq.dat,sha256=eix8XVeFAi3zDFk9x3xMe_OX4LMLfRJ5nATGg5ecNO8,213937
882
+ babel/locale-data/sq_AL.dat,sha256=MN2RvkKGG2PXjCRsMHsvcnwnIOOp9tNSpcInh2uCWaI,635
883
+ babel/locale-data/sq_MK.dat,sha256=L_GaZJ9XuQMs0zw-xZlrefPF36SH0sJqMrdDDbwicZM,1208
884
+ babel/locale-data/sq_XK.dat,sha256=qILZGRwAhuIBJ9xi_T5WTrrZAVouFjQSvybrwgXTsog,1187
885
+ babel/locale-data/sr.dat,sha256=yBO5zeiaUB5ar3GHsewRa27K0YdQmalKEaScTRIROgk,322842
886
+ babel/locale-data/sr_Cyrl.dat,sha256=Tbo90CyBAWciKeDesPhmXf7sdBQfjWsmyyrKBco_NzU,1990
887
+ babel/locale-data/sr_Cyrl_BA.dat,sha256=Wkwj3MsGyxk-_jgARM2VrlcNFhYdiTPUyoAnNsrTjx4,44464
888
+ babel/locale-data/sr_Cyrl_ME.dat,sha256=o1cSgsrmMWDkLFHDhK1Mu2tn77XRauf2jsvbfH7zdRY,3908
889
+ babel/locale-data/sr_Cyrl_RS.dat,sha256=Tn9u1EvJAZZEIdgXloi326qjpq8b1N087nRQ9R1JbWE,635
890
+ babel/locale-data/sr_Cyrl_XK.dat,sha256=KLlEv9Pu32YZMj8eorGznSio7bTSjicGvEH_-T31qyM,2783
891
+ babel/locale-data/sr_Latn.dat,sha256=2Q6jJtD2qPwtd7zeKYjkMP9Kq3L5aMTrr2kaSfHExAc,273929
892
+ babel/locale-data/sr_Latn_BA.dat,sha256=aRa8EvP8C3DEpDCgro7f5IiZMKCxkHcGKn-Q_77Bfi0,34551
893
+ babel/locale-data/sr_Latn_ME.dat,sha256=Oilwiq74izAYctEOmJe3ROcFMhwUwjTjJOWwWD5bHHw,3277
894
+ babel/locale-data/sr_Latn_RS.dat,sha256=Tn9u1EvJAZZEIdgXloi326qjpq8b1N087nRQ9R1JbWE,635
895
+ babel/locale-data/sr_Latn_XK.dat,sha256=48M8oDOTV5ATZpMttuYHlXUl3Tf7YdgMF-RABRDZFWE,2389
896
+ babel/locale-data/ss.dat,sha256=EBfjK8BcF9PU_ycf49tzaXNE1Bv6cuUB2-dPbNMzofk,2490
897
+ babel/locale-data/ss_SZ.dat,sha256=X-Va1uVrsPa1ZX5hwhQ-ME6Q_bovUb24XXFS8UQ87lQ,1208
898
+ babel/locale-data/ss_ZA.dat,sha256=xwT3vZ4tmKEvJpVwFMV9U2j2FLF1tC9PEDN6MC6Qbf4,635
899
+ babel/locale-data/ssy.dat,sha256=AkCerJDPvk_d2gJSRoplTQhgsFYbl8moCu0uBEGIblA,3058
900
+ babel/locale-data/ssy_ER.dat,sha256=9CRIaVxgOMeMTc0tcV0Yz9yZzq_uD3g3ylZzqVpYzsM,617
901
+ babel/locale-data/st.dat,sha256=gTFSFNHmmkv6-8Rqn_DcoR6rhOK_KPKKM1jDsJHhpsw,15534
902
+ babel/locale-data/st_LS.dat,sha256=pSzdNm6-O5V6-14VcgF2iGNYQPFYIXQlY3SqUW3GcjA,1227
903
+ babel/locale-data/st_ZA.dat,sha256=5tdUX7dxXEL2xiS_0IvHvqhKF-gWXFsi4supkP0RDAc,635
904
+ babel/locale-data/su.dat,sha256=vNhYxPh1AzRXMdurBP5yh02ort9F5H7ghd3rk0DE9AA,13795
905
+ babel/locale-data/su_Latn.dat,sha256=ievzq_m7eD5pZWLnVlH7oMIdeadf8GIMqEuVPJTBjyM,745
906
+ babel/locale-data/su_Latn_ID.dat,sha256=axNaukDpD_-G-_4R7P1u5w4dh-ToRPN_Yo-QpC1cFRU,635
907
+ babel/locale-data/sv.dat,sha256=cmdR0j2gMWKpWl8ujFLQXMhIM2id9YP3MQyfHdHWv0Y,242064
908
+ babel/locale-data/sv_AX.dat,sha256=QFGzIe9UCr5gCpgHunvdPiZ-126vP7GYORL9jjip9-E,653
909
+ babel/locale-data/sv_FI.dat,sha256=lrcPInOi023u4IdDjftF0dCFSaHuZj36l_Qu795uysU,2695
910
+ babel/locale-data/sv_SE.dat,sha256=c9PG5p2y_4rnxepGD4uOzemBU3EOQhQNO4BtUS1m3rE,653
911
+ babel/locale-data/sw.dat,sha256=c2SJSTSB53IVWWKvYt2g1RpTJNEvOVdW5sbSRglK3_8,215403
912
+ babel/locale-data/sw_CD.dat,sha256=W7Fw8Wqwo3_x4hWlssmWbVTj4hhSQmRv8c-VSnQdlg8,2577
913
+ babel/locale-data/sw_KE.dat,sha256=UX0V8wV9CmITcAbSyHkERssggIDXA98fyVCOYnXtnik,47932
914
+ babel/locale-data/sw_TZ.dat,sha256=I1bDbpEDiR1jkCgJ_W9fWCPuPxMhjQmwG3sIueKb-Rk,616
915
+ babel/locale-data/sw_UG.dat,sha256=kuNdg2N_dLwUKFm7wSheL1wLOdyrukPxLfDw0PN7tT8,660
916
+ babel/locale-data/syr.dat,sha256=My474Zt8Vw1dvXXXDS1xqsjkVmJew4SeMzeU78pIBso,165027
917
+ babel/locale-data/syr_IQ.dat,sha256=Mrw63eJwh0vRe3Lpj0vRf6Q4cUZXJcx9tlWkuAmMrss,679
918
+ babel/locale-data/syr_SY.dat,sha256=l0Yl2UMjm_7kuzvoG2-KqBp5XR88gdjf1ZlpRRNFMuc,679
919
+ babel/locale-data/szl.dat,sha256=jan4MKB8K_nDa6k4Qn6kTHJqY6ylL5qZOO5miN0vkrY,111023
920
+ babel/locale-data/szl_PL.dat,sha256=1D5dKaG2l2Haxde8uraWI2J5lzw1dIWGeJtBesua-IM,654
921
+ babel/locale-data/ta.dat,sha256=GetaBt44B3qiriQrT-fm6JIPWeOXFO2wWgAn6sK0xCM,301942
922
+ babel/locale-data/ta_IN.dat,sha256=BOFaDBw7fc7C6xSSFYNfkhCgCUd7ydHprJ6u0DaneSE,658
923
+ babel/locale-data/ta_LK.dat,sha256=Od6ln5oUnWfaAHwt_SDafWv844c7A7_7fTT2OPVTuyw,1208
924
+ babel/locale-data/ta_MY.dat,sha256=PEUmjhs_RUr1R5kH9uHExdnG59Hy8LmbU18vXZYYPtA,1325
925
+ babel/locale-data/ta_SG.dat,sha256=tbuefTSiXPMwpeV085Qp53l5uDHLsMMXmt8TPEG2fWY,1344
926
+ babel/locale-data/te.dat,sha256=3uBiMoaDBVmlh1JN-cFB9eZOZVofJY5vGohotgfHrts,300989
927
+ babel/locale-data/te_IN.dat,sha256=LICnXU-D0uhvxVpQ986Ul1JeAQktXaX53sXZSUY3L2g,658
928
+ babel/locale-data/teo.dat,sha256=6wOYzb32RkGey4sEGPkEptonW4zxEum2Gqo__Fy1_3c,16591
929
+ babel/locale-data/teo_KE.dat,sha256=S_lAg36VkA1w384kzPfXRLmJmGWfmz3ll7MzOQAtcr8,657
930
+ babel/locale-data/teo_UG.dat,sha256=0WlDglms5bCe1AMwCqroaXpOXu9jQroxllMwXWLb8q0,640
931
+ babel/locale-data/tg.dat,sha256=T1drajN0RabMR4tG0KK5mWpeGwTlTG5xYjoblk1iYfY,51518
932
+ babel/locale-data/tg_TJ.dat,sha256=TCrsEipGp0reAS2mAvwT58tyzBnYJfL5oNHWpEe1ttc,635
933
+ babel/locale-data/th.dat,sha256=Cv5aRObrY8j69jZ3_ZOIOgvdU1Esi1II4BRKyTNc2Zw,261473
934
+ babel/locale-data/th_TH.dat,sha256=_QhA0WcHmW6Cr_-gU9e6cdpzTMDT19WyHas58fWDUnc,635
935
+ babel/locale-data/ti.dat,sha256=1pTqX8pN96SKAZPPWLCcA3B-pir9jYjzPQ-GxFojACE,128818
936
+ babel/locale-data/ti_ER.dat,sha256=m9w0P5TPQ8IqpWKldwdfnw5_1Upv09AjLdO5WUbcRic,962
937
+ babel/locale-data/ti_ET.dat,sha256=q0b9svPg8aj9xmbXr7F6fPHqeTJmclBl5t_hqQk7IuU,635
938
+ babel/locale-data/tig.dat,sha256=Zg0qqnVRIz7gyDBe3__hVZOSj-T1_2Iud5sjuoKFNjM,13685
939
+ babel/locale-data/tig_ER.dat,sha256=OoQ0U6yyzmjKwDtzLUpqR09h_ZaGvzXlp7t-HqNxmm4,617
940
+ babel/locale-data/tk.dat,sha256=j4XWeKhhe09xRpDTc6BesDQ-yyZciLXqF2cmrkeQHpc,202207
941
+ babel/locale-data/tk_TM.dat,sha256=lADxEQoz-_ImDBmpCFUqDPuZ0ozVUhZKOQF2ZwyXVlw,635
942
+ babel/locale-data/tn.dat,sha256=3zvpXUjb5YJyJCVcPI0NpDvy0dHOASFLvHBBFpWSg2g,15028
943
+ babel/locale-data/tn_BW.dat,sha256=jWMFP1tw-o7rslHAlAIgjEXflko8UCDNaSuQ8ccvNHI,654
944
+ babel/locale-data/tn_ZA.dat,sha256=S3dMOsYSpBwkUv0tW9q0kKawQQl6yx77LexAL5wQqDU,635
945
+ babel/locale-data/to.dat,sha256=Wc0FOumWNapJd1yTtBa-yU9XIZi3M6Tun77ai81pSZM,182085
946
+ babel/locale-data/to_TO.dat,sha256=jcfJ2Pjof8jGE4q1y5LHSP9rb4IanN58kR7OgG8d5Q0,616
947
+ babel/locale-data/tok.dat,sha256=VZdkFu2hovwGCYZlHO8Qy5BANYa7nSDxpnnNvNvj0no,6057
948
+ babel/locale-data/tok_001.dat,sha256=PPUMevT2TBOGFSq-U-AccYkLHSbkWnBRDvxtpokTCD4,693
949
+ babel/locale-data/tpi.dat,sha256=0hp2fl1zHPBF6-3kxfd0W8w7oJNV6t3_QrbaRpG0akc,4771
950
+ babel/locale-data/tpi_PG.dat,sha256=uZD_c8yCtiYwt2EO2VOYPzhSTqWMQBOJMCuMCXe3Css,617
951
+ babel/locale-data/tr.dat,sha256=51Me4EB7yjxjFaoVIxvDIAQfCRUoNo8lsw0FU5mCwBQ,233315
952
+ babel/locale-data/tr_CY.dat,sha256=3EmCqxcPvFuZcHCzpTmHb6pjtPwqQvwCfn27B8rtXNw,1227
953
+ babel/locale-data/tr_TR.dat,sha256=7lS5CMZw76SVlMJxsmIJW5IfL7k9t8MrfKcnElqISSI,635
954
+ babel/locale-data/trv.dat,sha256=JbNccv-KkRK3wx94LotNV6WGtJGEti6TVeD-ooHF2aA,10926
955
+ babel/locale-data/trv_TW.dat,sha256=CTQtGdDW4Z0n2Ckb6B63HgEwNE44YTFnJCetwd8q9GU,636
956
+ babel/locale-data/trw.dat,sha256=GQbDeIwZZMjP78avX1GXLA-ySyOvBLD7gMOppJ1qcd4,129847
957
+ babel/locale-data/trw_PK.dat,sha256=pBHdOulrwRLiQuC96g8ilUzpKBeG6kglBqUXB8MlURA,636
958
+ babel/locale-data/ts.dat,sha256=4DJrk4p_3RiC82zHM5gKgN4nySr-2xHP01BtsUmgPvo,13486
959
+ babel/locale-data/ts_ZA.dat,sha256=AByEO55W3DVVOBIBxIp1F2QwY01-5v6v8sDFOGSxCF0,635
960
+ babel/locale-data/tt.dat,sha256=_1urtzP-CZBIsl8rZh6Xm9IRXLVoBGklF981ZxlxguM,43024
961
+ babel/locale-data/tt_RU.dat,sha256=cmv2MzolKOrsRoqQcFZGcXQj_33dLWGh9oUjnebCnz0,653
962
+ babel/locale-data/twq.dat,sha256=MLoHw6LLZN372T5bROnq_FI8C0Ty4gmRu-VLaiZWr80,16136
963
+ babel/locale-data/twq_NE.dat,sha256=y8xQDxMtyStWC83tm_JiekFxAY0Fj-CWWdmic9GBwd4,617
964
+ babel/locale-data/tzm.dat,sha256=aqmHBfyq6JQZIWyKA2iBtn1Qsi8aE4nxZeVhXl0apj4,16066
965
+ babel/locale-data/tzm_MA.dat,sha256=8eku_7voAqAjN651VYKCuIWvdYGOScCyqbt1rtSVO_g,617
966
+ babel/locale-data/ug.dat,sha256=lKw8VTDQjeTp8BlOxPwAesi9dINASmZNbmSjuuR5UYA,129541
967
+ babel/locale-data/ug_CN.dat,sha256=2UselU1_d6K7NgQj0EDnDfb4Llk51eQZ7z78oYE-Ywg,635
968
+ babel/locale-data/uk.dat,sha256=uzPkrX0I-NhUbmshyQT2KMZN0mUwWG5ydPC609qPUAc,364290
969
+ babel/locale-data/uk_UA.dat,sha256=usJw_J4Uu9OD9nrUxNQAx6vMJBWDjbGuc9l7ssJAyuw,635
970
+ babel/locale-data/ur.dat,sha256=orRmVdptiB_ylinJ6yDIbiSKsTWlYRahX8VAKvAe_qU,231785
971
+ babel/locale-data/ur_IN.dat,sha256=BDrVnRS4pFnz7kO8V2iTSCbEdlCkQExsdFzZ3LOtRvE,12192
972
+ babel/locale-data/ur_PK.dat,sha256=EEAGl6fLd1-a7X0n2PwRxlqwYZ0a0ELm2DuLII9spX0,635
973
+ babel/locale-data/uz.dat,sha256=DqM_s3t-3upGr-FOT0vCGr0AEnViXv7vwMkOJpTWk00,206244
974
+ babel/locale-data/uz_Arab.dat,sha256=_oBgUeBN8a_aTsv8w3K_JiXkUPOkqQ0scM68z0w3H98,3914
975
+ babel/locale-data/uz_Arab_AF.dat,sha256=68eUCR8KeB0QDQRCvNMiOIkZVRozGKFTDednrQL1X_Y,678
976
+ babel/locale-data/uz_Cyrl.dat,sha256=pXZg6iCiiMA7vymcbkY1L4z7Y0gxzuLERuPENHfpPRI,100158
977
+ babel/locale-data/uz_Cyrl_UZ.dat,sha256=MWJtHPdj_pF2h6abRP4wUwDWAUF4-zr7jBn2RQcZ0z8,635
978
+ babel/locale-data/uz_Latn.dat,sha256=L5H7Xfz2Ho-vMqviRPC4ai0MnqoF9CIebiq7muISvSA,1292
979
+ babel/locale-data/uz_Latn_UZ.dat,sha256=MWJtHPdj_pF2h6abRP4wUwDWAUF4-zr7jBn2RQcZ0z8,635
980
+ babel/locale-data/vai.dat,sha256=LahyKrWiA9SCPtM0Evw9AysdrUJxbYIiEYZYsHw3sOc,19008
981
+ babel/locale-data/vai_Latn.dat,sha256=aYnJ4VJNwmTPTBF6Nzkj59hhQv6YxLu_DLUNuMmPZsE,15025
982
+ babel/locale-data/vai_Latn_LR.dat,sha256=LdVmBAL7nzDp-Ab_uHidBAi2crIf9nXhf8tBNfa7xdI,617
983
+ babel/locale-data/vai_Vaii.dat,sha256=l_IXC76zzJ2lPLfWfjWzSw6xVtFwr-x8LofcHQsSG_0,693
984
+ babel/locale-data/vai_Vaii_LR.dat,sha256=LdVmBAL7nzDp-Ab_uHidBAi2crIf9nXhf8tBNfa7xdI,617
985
+ babel/locale-data/ve.dat,sha256=uK759Lvgb-PpNsyxfTEFY0cdGcc0KtygSzFTyNEprPc,2684
986
+ babel/locale-data/ve_ZA.dat,sha256=uJndHi9RMKtDWd58f_Q3g5WgXjL3W7KLQj91rVueabQ,635
987
+ babel/locale-data/vec.dat,sha256=oJFbBfJmGgPpvhy1fqKv2DMHHmqvR3TDZVp-v-raP4w,1776
988
+ babel/locale-data/vec_IT.dat,sha256=mC9jRfk9ndmkpRIpWZNCwdMwvxvB6QX6_9HanawdaUw,654
989
+ babel/locale-data/vi.dat,sha256=GU5bwQgrbL4lEeWcfS_HuU1shwwwiTfc6abCjX7KHQI,188652
990
+ babel/locale-data/vi_VN.dat,sha256=cGwN0vw-qIaeA2g89U97N1xHSMmmaIVNPCLL2P_QJMk,635
991
+ babel/locale-data/vo.dat,sha256=3Z3f56WHslCqteTl1FP1rADNc5CvanU2cOCjyLVHS9c,5258
992
+ babel/locale-data/vo_001.dat,sha256=iF2xY9XIdxC0mOYEp9hjYZp2EG-si_YaNYXri_60-4w,850
993
+ babel/locale-data/vun.dat,sha256=akNUDGYNWXhsxEQRKMjeNbA_1UemqCov3KgYBF3Y628,15957
994
+ babel/locale-data/vun_TZ.dat,sha256=YKrOeOS1VnU3BWQ7HWtxjS-gMKJcKAPQLf4HTgkzf70,617
995
+ babel/locale-data/wa.dat,sha256=1r6krApI8oecIKQt_9RzbpwSN0LcWSjlG34Y9Rfh07Y,880
996
+ babel/locale-data/wa_BE.dat,sha256=j4YADQloo07Oek1j3aOrLYkzcFkrViS1UdRrA0Z56-o,653
997
+ babel/locale-data/wae.dat,sha256=QG4YCienzVk62qMkbSIq0qQ0MMOQwY5JTfZmmBnt9ew,30913
998
+ babel/locale-data/wae_CH.dat,sha256=Z0Wzu5Q9IVTnLGwWu54ozVx-fgnFz0IE3yrky8Y1IkQ,654
999
+ babel/locale-data/wal.dat,sha256=bmgXVK3q57btDK3v6en1XeAd8gfsbFVHlbqh1uUdaBc,8567
1000
+ babel/locale-data/wal_ET.dat,sha256=tNjeuU4GPTWtDmsroGmi4VUql0dA57v1tEtDF4rslVg,636
1001
+ babel/locale-data/wbp.dat,sha256=IjFhDqCcLq80NrrgBmb7uhiHCi-OgQDQXdqWHo_X4IA,788
1002
+ babel/locale-data/wbp_AU.dat,sha256=BT2E1-WiomuRrteCzN1_AfLyDUdEOm0ehT5miAiepBQ,636
1003
+ babel/locale-data/wo.dat,sha256=Yyd7YgFQJT3Ge4CQZEiLe8XPv_fijnJvAUv4UyCRquo,33411
1004
+ babel/locale-data/wo_SN.dat,sha256=fvlwe-ImWs04fsxSjTsXf8IPxEIiEi45BX8xhoBC_yg,616
1005
+ babel/locale-data/xh.dat,sha256=2vc9mrCFHX1rAhrFzHB5VrJB9OCAnqy1f-nJphqxocE,93311
1006
+ babel/locale-data/xh_ZA.dat,sha256=9p6wHW1sxOghJMAgsP6BC3RdUhuvLpHoCkqvjsCmPps,635
1007
+ babel/locale-data/xog.dat,sha256=9RBj7uyIzJW9uvv83Rzx-4gA7Jn4t1RDnR3RpZfQVjQ,16447
1008
+ babel/locale-data/xog_UG.dat,sha256=bMX0Tk5zS4P2LqlOLLpVP4nZxBFhS_qc-ndXjilDCNI,640
1009
+ babel/locale-data/yav.dat,sha256=dNH_Acsvz6mE-Rsv9nLUSJQrNYmMPCrc7uOc_OgRI0M,15285
1010
+ babel/locale-data/yav_CM.dat,sha256=CsaKwep5CARetyBX-JXHFvUVsFe1KTN4Pyz1Wh7NTHw,636
1011
+ babel/locale-data/yi.dat,sha256=QeHqecJsPVyQ6QlapeKZU4jECQEYbz1pmUGiH5SVqyY,30133
1012
+ babel/locale-data/yi_001.dat,sha256=tdGIV8N9o_qjy8kvn7QB-meY7HHe4ZjZxFyhO4Y2NYg,912
1013
+ babel/locale-data/yo.dat,sha256=odUlozSDJE5yIlr2fv1LjoMEop2HpQsdZ9W6OcYZ6V8,139501
1014
+ babel/locale-data/yo_BJ.dat,sha256=-2DRkfPNRUia1uqLRmvz-mVx8O-FHp1nojC-ANNudaQ,47102
1015
+ babel/locale-data/yo_NG.dat,sha256=BEIndIiMT1Mo18S5DAWpjefthptCVQkIPeVs0umSop0,616
1016
+ babel/locale-data/yrl.dat,sha256=3sVAhKVyZUwrVLJNhN-GBTVmii9sOum1c2M0Zp_FwX4,213577
1017
+ babel/locale-data/yrl_BR.dat,sha256=aUgLCNwgEORk2wtuez8AqkYahB8_mX41IWSqogt39YE,636
1018
+ babel/locale-data/yrl_CO.dat,sha256=oeTveb-u18jQraHBxtYXegyt6H4DN-NvAXDgYq0Vvx4,9331
1019
+ babel/locale-data/yrl_VE.dat,sha256=N5Z7PzXQXLg5_y31iqC4yFLeGQw1TvhxJsnOxgLANbA,9331
1020
+ babel/locale-data/yue.dat,sha256=d0JUmI3Tx52QGX7M382UFInIMMhDAmKgQ0uKidl47AY,200901
1021
+ babel/locale-data/yue_Hans.dat,sha256=IXOR94pqC8cNAzBKvvvsjFYc_g9Bxusdjc0lNKImH-k,200610
1022
+ babel/locale-data/yue_Hans_CN.dat,sha256=MOZnu5r0xokf672rwAXfgzG3VEeTfNlDbu36fR1bB6I,636
1023
+ babel/locale-data/yue_Hant.dat,sha256=76wefuhsGIjk0jT05KSTEU_pbb7AfNE2u56jdRoJaDM,1306
1024
+ babel/locale-data/yue_Hant_HK.dat,sha256=eMZ7mOTEyKzQz0MDIjvP_Z57CS9nFIP4-Uf0Jpx1CY4,636
1025
+ babel/locale-data/zgh.dat,sha256=4_BRrs_rhQZjlMMPGrE3DgaRs-P6rJYR-m19LhtSnvo,30518
1026
+ babel/locale-data/zgh_MA.dat,sha256=sV8aPBmHY23lKIzsRna-tPz3UiXoKCMQ1Ur2tCyx2YA,617
1027
+ babel/locale-data/zh.dat,sha256=soO-LIfZqc1zuQbG87Am-XNZF-d1Ym3eVJvfPkQOD9k,199506
1028
+ babel/locale-data/zh_Hans.dat,sha256=-wR64b65stjA2KWj4GWcBWiF3yI0A24p4K7wApj8qtc,1305
1029
+ babel/locale-data/zh_Hans_CN.dat,sha256=zz2qPpWEP9ba12T9cGsPXGI7Bg5LcmZ3NkAMiVTf61A,635
1030
+ babel/locale-data/zh_Hans_HK.dat,sha256=wYEV3_5mxfBkKP74urgX9N2wnD9a5jMMvSZgaqxC7FU,3697
1031
+ babel/locale-data/zh_Hans_MO.dat,sha256=YFbTnSDiLaoLfkXsmOvrwvC0Sm4e9z7q0-_kLdg3S0A,3828
1032
+ babel/locale-data/zh_Hans_SG.dat,sha256=AIkbQjmBkpZX80T3Oq6aSPjsYYekE7dELKBkF5kCLoY,4024
1033
+ babel/locale-data/zh_Hant.dat,sha256=WMLaHeGK2sQW2mWfh0Mfn0lFXlLsMNQqjB2ZwddEoik,203093
1034
+ babel/locale-data/zh_Hant_HK.dat,sha256=Vxy1c_iJyNSWFFBNBcxa7E9o0B75C2MMhCzRRGTGAyI,61870
1035
+ babel/locale-data/zh_Hant_MO.dat,sha256=8GSs5WRDxGFvEN8slDp9A3dmsZslPSN3NJDcT5EN4fk,710
1036
+ babel/locale-data/zh_Hant_TW.dat,sha256=5N4K8I3XG89knCaSoy97HGzTVOTiUcd_VmfvNJlA4Bg,635
1037
+ babel/locale-data/zu.dat,sha256=fg5PR6NhHCzp30f9PjII1e64zs66X4mJdzJNh594kHw,213979
1038
+ babel/locale-data/zu_ZA.dat,sha256=jHloBfkNbQETXgE-3xVxvESitWb994_-SoY0G4_JL5E,635
1039
+ babel/localedata.py,sha256=vdTBpZsR2ExG9jBJLe42Xg-NKbm7XU7Pg5z0lIXod1Y,8239
1040
+ babel/localtime/__init__.py,sha256=hHBBHcfWoTvnIOfahxHlxqNR7IL4A4yTuxxG7wDZWUk,1043
1041
+ babel/localtime/__pycache__/__init__.cpython-38.pyc,,
1042
+ babel/localtime/__pycache__/_fallback.cpython-38.pyc,,
1043
+ babel/localtime/__pycache__/_helpers.cpython-38.pyc,,
1044
+ babel/localtime/__pycache__/_unix.cpython-38.pyc,,
1045
+ babel/localtime/__pycache__/_win32.cpython-38.pyc,,
1046
+ babel/localtime/_fallback.py,sha256=0ak6R7ATmobpIlVjzQOK667bCMUjaFGcBWfL-IJlFEo,1207
1047
+ babel/localtime/_helpers.py,sha256=8WIkbnxv1aGVvXm63pFlB_IBRQNsMQlATsx7vorRivQ,1060
1048
+ babel/localtime/_unix.py,sha256=7ExS68O5KpjqgZ6Dhho2WhxlYQYe2etJiW8BW2mXMCc,3455
1049
+ babel/localtime/_win32.py,sha256=nSNnxSMOVAlvqvX50h9HSCzBfP7mj8njJ80JZ3pOIWk,3211
1050
+ babel/messages/__init__.py,sha256=7UsGpKWLQkcEBwmt1oLAW-7xNOXaGXJIBI1upvXH5yU,349
1051
+ babel/messages/__pycache__/__init__.cpython-38.pyc,,
1052
+ babel/messages/__pycache__/catalog.cpython-38.pyc,,
1053
+ babel/messages/__pycache__/checkers.cpython-38.pyc,,
1054
+ babel/messages/__pycache__/extract.cpython-38.pyc,,
1055
+ babel/messages/__pycache__/frontend.cpython-38.pyc,,
1056
+ babel/messages/__pycache__/jslexer.cpython-38.pyc,,
1057
+ babel/messages/__pycache__/mofile.cpython-38.pyc,,
1058
+ babel/messages/__pycache__/plurals.cpython-38.pyc,,
1059
+ babel/messages/__pycache__/pofile.cpython-38.pyc,,
1060
+ babel/messages/__pycache__/setuptools_frontend.cpython-38.pyc,,
1061
+ babel/messages/catalog.py,sha256=Dg8qHiACb1JbSjsNcKdJygj-IKgW53w0HFSwKNJSstk,36302
1062
+ babel/messages/checkers.py,sha256=Vsi4_ImORDqfu4fbDdBisJY7ALbQ3CsOJqi0VnQZCR4,6375
1063
+ babel/messages/extract.py,sha256=fpfNYBW8jGkVD2XCJcu3PsiE1p0SrbLqhCYmYmaNdc8,34333
1064
+ babel/messages/frontend.py,sha256=kHprmRt0fL4TMIBk51aJgwoAeoLNb8ZbPFPvkrfDSr8,41618
1065
+ babel/messages/jslexer.py,sha256=TUv4DXfVES21MDG38e-3HC0HZabAKf-iNvxqzd2Yo1Q,7153
1066
+ babel/messages/mofile.py,sha256=HewAYZVOdUAqtlsma3A1lojIvntXdWpFjkYkODyMhR4,7345
1067
+ babel/messages/plurals.py,sha256=dlcmsT2Lu9kzMVs3Yid5_myAR_qhWNH66v6kJeZ26Ys,7319
1068
+ babel/messages/pofile.py,sha256=mAfl-8uFlQ_KS4HaeHeDEcenrCRoMtSpgECV9KY_m7Y,22325
1069
+ babel/messages/setuptools_frontend.py,sha256=m1l9NHuawj1pSncZeC82cUJfdwxib_C7JSUb_2EhbUM,3485
1070
+ babel/numbers.py,sha256=ysT2-EqcI6znM55z-DkeXlZV7G5G8bQgGdp5gCHmDaM,60994
1071
+ babel/plural.py,sha256=GX8dOZDOyjvUnIhbZhjfxEgh2zd4FKGJkSeKPN9q-8g,23218
1072
+ babel/py.typed,sha256=DtCsIDq6KOv2NOEdQjTbeMWJKRh6ZEL2E-6Mf1RLeMA,59
1073
+ babel/support.py,sha256=_LCOy2P2_SgaUGBIR4sOpTh04-pmtjNjcjrdJ1gmeRE,27456
1074
+ babel/units.py,sha256=J8uwppyWrgaFYptgI-QPotAm105yOGoYSEPk397wE44,13590
1075
+ babel/util.py,sha256=x_2u0RKmNnUo1nucVAla_6jj9A83RDUMzRj3Vj4FenM,7956
Lib/site-packages/Babel-2.14.0.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/site-packages/Babel-2.14.0.dist-info/entry_points.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [babel.checkers]
2
+ num_plurals = babel.messages.checkers:num_plurals
3
+ python_format = babel.messages.checkers:python_format
4
+
5
+ [babel.extractors]
6
+ ignore = babel.messages.extract:extract_nothing
7
+ javascript = babel.messages.extract:extract_javascript
8
+ python = babel.messages.extract:extract_python
9
+
10
+ [console_scripts]
11
+ pybabel = babel.messages.frontend:main
12
+
13
+ [distutils.commands]
14
+ compile_catalog = babel.messages.setuptools_frontend:compile_catalog
15
+ extract_messages = babel.messages.setuptools_frontend:extract_messages
16
+ init_catalog = babel.messages.setuptools_frontend:init_catalog
17
+ update_catalog = babel.messages.setuptools_frontend:update_catalog
18
+
19
+ [distutils.setup_keywords]
20
+ message_extractors = babel.messages.setuptools_frontend:check_message_extractors
Lib/site-packages/Babel-2.14.0.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ babel
Lib/site-packages/Cython-3.0.10.dist-info/COPYING.txt ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The original Pyrex code as of 2006-04 is licensed under the following
2
+ license: "Copyright stuff: Pyrex is free of restrictions. You may use,
3
+ redistribute, modify and distribute modified versions."
4
+
5
+ ------------------
6
+
7
+ Cython, which derives from Pyrex, is licensed under the Apache 2.0
8
+ Software License. More precisely, all modifications and new code
9
+ made to go from Pyrex to Cython are so licensed.
10
+
11
+ See LICENSE.txt for more details.
12
+
13
+ ------------------
14
+
15
+ The output of a Cython compilation is NOT considered a derivative
16
+ work of Cython. Specifically, though the compilation process may
17
+ embed snippets of varying lengths into the final output, these
18
+ snippets, as embedded in the output, do not encumber the resulting
19
+ output with any license restrictions.
Lib/site-packages/Cython-3.0.10.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
Lib/site-packages/Cython-3.0.10.dist-info/LICENSE.txt ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ https://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
Lib/site-packages/Cython-3.0.10.dist-info/METADATA ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: Cython
3
+ Version: 3.0.10
4
+ Summary: The Cython compiler for writing C extensions in the Python language.
5
+ Home-page: https://cython.org/
6
+ Author: Robert Bradshaw, Stefan Behnel, Dag Seljebotn, Greg Ewing, et al.
7
+ Author-email: cython-devel@python.org
8
+ License: Apache-2.0
9
+ Project-URL: Documentation, https://cython.readthedocs.io/
10
+ Project-URL: Donate, https://cython.readthedocs.io/en/latest/src/donating.html
11
+ Project-URL: Source Code, https://github.com/cython/cython
12
+ Project-URL: Bug Tracker, https://github.com/cython/cython/issues
13
+ Project-URL: User Group, https://groups.google.com/g/cython-users
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: Apache Software License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python
19
+ Classifier: Programming Language :: Python :: 2
20
+ Classifier: Programming Language :: Python :: 2.7
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.4
23
+ Classifier: Programming Language :: Python :: 3.5
24
+ Classifier: Programming Language :: Python :: 3.6
25
+ Classifier: Programming Language :: Python :: 3.7
26
+ Classifier: Programming Language :: Python :: 3.8
27
+ Classifier: Programming Language :: Python :: 3.9
28
+ Classifier: Programming Language :: Python :: 3.10
29
+ Classifier: Programming Language :: Python :: 3.11
30
+ Classifier: Programming Language :: Python :: 3.12
31
+ Classifier: Programming Language :: Python :: Implementation :: CPython
32
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
33
+ Classifier: Programming Language :: C
34
+ Classifier: Programming Language :: Cython
35
+ Classifier: Topic :: Software Development :: Code Generators
36
+ Classifier: Topic :: Software Development :: Compilers
37
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
38
+ Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
39
+ License-File: LICENSE.txt
40
+ License-File: COPYING.txt
41
+
42
+ The Cython language makes writing C extensions for the Python language as
43
+ easy as Python itself. Cython is a source code translator based on Pyrex_,
44
+ but supports more cutting edge functionality and optimizations.
45
+
46
+ The Cython language is a superset of the Python language (almost all Python
47
+ code is also valid Cython code), but Cython additionally supports optional
48
+ static typing to natively call C functions, operate with C++ classes and
49
+ declare fast C types on variables and class attributes. This allows the
50
+ compiler to generate very efficient C code from Cython code.
51
+
52
+ This makes Cython the ideal language for writing glue code for external
53
+ C/C++ libraries, and for fast C modules that speed up the execution of
54
+ Python code.
55
+
56
+ Note that for one-time builds, e.g. for CI/testing, on platforms that are not
57
+ covered by one of the wheel packages provided on PyPI *and* the pure Python wheel
58
+ that we provide is not used, it is substantially faster than a full source build
59
+ to install an uncompiled (slower) version of Cython with::
60
+
61
+ pip install Cython --install-option="--no-cython-compile"
62
+
63
+ .. _Pyrex: https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
Lib/site-packages/Cython-3.0.10.dist-info/RECORD ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../Scripts/cygdb.exe,sha256=N5E_E6kFUPiAIKE79e2xcOpNyehHNMnWOWPsVVz8YGc,108452
2
+ ../../Scripts/cython.exe,sha256=mqfwvYb-Lo1d0SKKvrzYRt4La9mZ69UXfKMptnGmp3o,108473
3
+ ../../Scripts/cythonize.exe,sha256=HvfwF2zUaNiAwC2LnrUMFuJH4O035dE1Zq1my9gPPj4,108453
4
+ Cython-3.0.10.dist-info/COPYING.txt,sha256=bBH9iu7VCJgyoSHsOxxkbtWZiCRTKqBoHdVcQpWl6oY,775
5
+ Cython-3.0.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
6
+ Cython-3.0.10.dist-info/LICENSE.txt,sha256=BTbJRMi5EDon8TFTjjeYv71yPfqJiCpPkSC-F28EnDU,10350
7
+ Cython-3.0.10.dist-info/METADATA,sha256=aXaVAYvFdFjj8-j8hgET_I7fo9Qxb_beDu9Jz7CAh9I,3224
8
+ Cython-3.0.10.dist-info/RECORD,,
9
+ Cython-3.0.10.dist-info/WHEEL,sha256=3SeyPJ5-Us2Ct5GSftUVKtLSlm-bNefW4m5qd0GLzww,100
10
+ Cython-3.0.10.dist-info/entry_points.txt,sha256=VU8NX8gnQyFbyqiWMzfh9BHvYMuoQRS3Nbm3kKcKQeY,139
11
+ Cython-3.0.10.dist-info/top_level.txt,sha256=jLV8tZV98iCbIfiJR4DVzTX5Ru1Y_pYMZ59wkMCe6SY,24
12
+ Cython/Build/BuildExecutable.py,sha256=m6IZ7UZ_h2tNpPSHosgmaJLeLmDT59AcI5oAFfo0IKU,4959
13
+ Cython/Build/Cythonize.py,sha256=BNiJ1SdnCEixcNnwTlFazNCA2dIhjZdOvgcC7SqaWus,10085
14
+ Cython/Build/Dependencies.py,sha256=DzncslCetaCZHSdQgRDKwYd47Vk-Qb6lsZVaYuVM3b8,54310
15
+ Cython/Build/Distutils.py,sha256=hxXo722D0j7cfyYCbancdFsKYAuPdfSu9nYmGu6kL6w,50
16
+ Cython/Build/Inline.py,sha256=nK2x4k8tuTRtZz_XSz_fCo9TO_oCdNdoUDunlSVW8Xg,13460
17
+ Cython/Build/IpythonMagic.py,sha256=PPUEuBQ1r8kAer2hPqJPGgg8ORWKQ1pYrD2JUCQEz8c,22539
18
+ Cython/Build/Tests/TestCyCache.py,sha256=v5uUvNmhGr6H3zSK3sfYWEwuAulK42op_CxGZWF5ock,4586
19
+ Cython/Build/Tests/TestCythonizeArgsParser.py,sha256=Y8MNkwXwf3UlYJ1rRgjoLh_9ciFNPta4qOlo0N6bdw4,20828
20
+ Cython/Build/Tests/TestDependencies.py,sha256=nBwB0aDTGrLpoWhZHp_YYbAPwBY23Wn6whKdvBxNLDs,5977
21
+ Cython/Build/Tests/TestInline.py,sha256=XhOeBf5f3lNwsKHCtInPBMbSNvJOdkrnH9DMuNuW9sY,3599
22
+ Cython/Build/Tests/TestIpythonMagic.py,sha256=PNKz3xDGnnL6rbfn3AyXCe6yfQuf7hdEsTaMOoMdApc,9706
23
+ Cython/Build/Tests/TestRecythonize.py,sha256=Dw7_qzfsbfT4N7BwSn3ndG3mRgxOwKK7VXoBORPtgTM,6488
24
+ Cython/Build/Tests/TestStripLiterals.py,sha256=5PgFteJ91xCt1DYDjn8RNKxiMwRGLY3U9iIlss5B0fA,1605
25
+ Cython/Build/Tests/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
26
+ Cython/Build/Tests/__pycache__/TestCyCache.cpython-38.pyc,,
27
+ Cython/Build/Tests/__pycache__/TestCythonizeArgsParser.cpython-38.pyc,,
28
+ Cython/Build/Tests/__pycache__/TestDependencies.cpython-38.pyc,,
29
+ Cython/Build/Tests/__pycache__/TestInline.cpython-38.pyc,,
30
+ Cython/Build/Tests/__pycache__/TestIpythonMagic.cpython-38.pyc,,
31
+ Cython/Build/Tests/__pycache__/TestRecythonize.cpython-38.pyc,,
32
+ Cython/Build/Tests/__pycache__/TestStripLiterals.cpython-38.pyc,,
33
+ Cython/Build/Tests/__pycache__/__init__.cpython-38.pyc,,
34
+ Cython/Build/__init__.py,sha256=b6Aw5K0E5t667e-D-xK745uQRAnchOLFSieqle62bIU,415
35
+ Cython/Build/__pycache__/BuildExecutable.cpython-38.pyc,,
36
+ Cython/Build/__pycache__/Cythonize.cpython-38.pyc,,
37
+ Cython/Build/__pycache__/Dependencies.cpython-38.pyc,,
38
+ Cython/Build/__pycache__/Distutils.cpython-38.pyc,,
39
+ Cython/Build/__pycache__/Inline.cpython-38.pyc,,
40
+ Cython/Build/__pycache__/IpythonMagic.cpython-38.pyc,,
41
+ Cython/Build/__pycache__/__init__.cpython-38.pyc,,
42
+ Cython/CodeWriter.py,sha256=vYtuEUNkfFOGSsNdw1tlHAXzRHN7QDfIWiOY4sowhtc,25366
43
+ Cython/Compiler/AnalysedTreeTransforms.py,sha256=vydcZ6Gn79iREYfL5uVLvVFNL4rhrGhkYZD2Cwmb4j8,3933
44
+ Cython/Compiler/Annotate.py,sha256=z849wv5dVrfR3JsE5qcXS8dnh1LwMODuXZG27HCVMhA,14494
45
+ Cython/Compiler/AutoDocTransforms.py,sha256=tD313LL4iaGApVGmrm307YDeBpvaiRDmPOBAwJ9YEK0,12056
46
+ Cython/Compiler/Buffer.py,sha256=ZMU7RkdoEf5u9PNZdAQLvWYp621_XvtqBOP9_IVqxuk,30053
47
+ Cython/Compiler/Builtin.py,sha256=Loan_cIZUleavCbinMlrWgYC6XwwAStqJw-X_Ml0enA,32711
48
+ Cython/Compiler/CmdLine.py,sha256=0S6mqX3-qWtSnTVOeyZRF0XAbWy_oa7R0JYvID2oNr4,12777
49
+ Cython/Compiler/Code.cp38-win_amd64.pyd,sha256=TaEWPjQYUKLlZ15ayXueIbtQ3qKPGwWcwbvJfN-epwg,844288
50
+ Cython/Compiler/Code.pxd,sha256=ECP1S9TuHAbwUztwa0ghsgY8GBL7AIqNOvBlYM-EVVg,3679
51
+ Cython/Compiler/Code.py,sha256=pxZtYv6YH-udxfLY7PKMRTPzotQFtKtc2OpEgNUX9Eg,107327
52
+ Cython/Compiler/CodeGeneration.py,sha256=q3tokV8Ae6Ck6AUYNGUn2R16KRbfXTvQrI7MKJwgg58,1143
53
+ Cython/Compiler/CythonScope.py,sha256=iIHzxpNuNUrSJvo4JxD3Lg0TSD-SGWfAtkFxEve4cl8,7044
54
+ Cython/Compiler/Dataclass.py,sha256=Dad1R-j8ARUJajrqvmAA_NcPW5jZvfIFGE0GBdXszdA,36871
55
+ Cython/Compiler/DebugFlags.py,sha256=5j4pt7JRK5bwWzeDN8906xJVywsNGDmOoiYhFnevbs8,644
56
+ Cython/Compiler/Errors.py,sha256=NEGZGwRv9YHAmU8Pf5j-Nqex1Zi2GyDt9aoaxpoBbvQ,9612
57
+ Cython/Compiler/ExprNodes.py,sha256=vdR1ZFdJasYECE8c2shBNRELCEOx9ZLDjCRCyUtGTAY,616594
58
+ Cython/Compiler/FlowControl.cp38-win_amd64.pyd,sha256=76ytmTqZBsy0RUVEbZNsXjHTQdPeUSsZkTKJO9LoQ4Y,433664
59
+ Cython/Compiler/FlowControl.pxd,sha256=NbvCrSZVFsPtu8YwxRaFcoRRmWFeNrtStz6Yp31HHtY,3090
60
+ Cython/Compiler/FlowControl.py,sha256=1aak2rodOfe91EkdjShQXyvUFhnD9dd4sYlc24EYW9Y,50245
61
+ Cython/Compiler/FusedNode.cp38-win_amd64.pyd,sha256=3DxUFx2fJ0JZQA7A5ctrvjdvf_ASVogDuXX9SbZ7nuA,298496
62
+ Cython/Compiler/FusedNode.py,sha256=n1goafevt2Z2Sf6KoLkoUqiZOikYK0PxdN33moawPIw,44375
63
+ Cython/Compiler/Future.py,sha256=2Nk9GuDPE_ssf1eSJHNvScjtp-ukvqKTW7ZQOnAgQtc,645
64
+ Cython/Compiler/Interpreter.py,sha256=5KuRATS9X3T1w7AZuTV2FtyfWvw6CIuSOqmrq0T8qE8,2178
65
+ Cython/Compiler/Lexicon.py,sha256=zHaGbKOZa7-hVaHaRjJW7hI1UzD2raym3KiIXbFzInc,22114
66
+ Cython/Compiler/Main.py,sha256=vu3ysm_do5-pN_dLQkUvl0wt9c07CweXecbn8sYKt80,32994
67
+ Cython/Compiler/MemoryView.py,sha256=lGg4EANDgwegNKB_fdeAnLP_ihBCm3hDioBB3gxG-pg,31245
68
+ Cython/Compiler/ModuleNode.py,sha256=84XpHGLIZi5NilzRXT1ioryIh5HG61J5CMClo-3j3jk,188005
69
+ Cython/Compiler/Naming.py,sha256=kEwC2GPkRxr5qzNwJuUaDlSng-zokEJxx8NwbG_wtRc,8358
70
+ Cython/Compiler/Nodes.py,sha256=GPlagFFNVHKGFGtk5LeAH-FuZORAVwNt2OiO1nCvX-8,452630
71
+ Cython/Compiler/Optimize.py,sha256=mQ4dkWOvK2_CCBsaC70AlN8EQEESljlASwCFdKcLyVE,231558
72
+ Cython/Compiler/Options.py,sha256=M9j84WoXkgRUlZ2c8x1Wb80-NLIZXU25YIzAIdO1Q40,31445
73
+ Cython/Compiler/ParseTreeTransforms.pxd,sha256=kaicujhdwGVYs5-zKyE_VwI0jPFBnKuZ0w6QE7GrpMY,2667
74
+ Cython/Compiler/ParseTreeTransforms.py,sha256=wxafCQjj5EzTY9IovS-YE6tgTYRzeS9G_CEe0W5pm48,175768
75
+ Cython/Compiler/Parsing.cp38-win_amd64.pyd,sha256=4NCtz6gizuBtA-AI9LOg4k9eyXnJEZGCYv6JIEekcw8,714752
76
+ Cython/Compiler/Parsing.pxd,sha256=jE5HG2e5ePWZDFC1JZuHZ7Mhpb1XuZe4082qSLd5JtE,9371
77
+ Cython/Compiler/Parsing.py,sha256=F9MEhaoC6CFDPekyFRpQbwk0-0SJXQZClmZ-EN4rB1M,143820
78
+ Cython/Compiler/Pipeline.py,sha256=kozpch-FZlAv_N40zIl7FwfArBFDikj9u7BB0ddFa_s,16050
79
+ Cython/Compiler/PyrexTypes.py,sha256=gmvpszyfkFIJNuW2AMZaMPapSMjlqwpisxJnnPe_-Oo,213834
80
+ Cython/Compiler/Pythran.py,sha256=NKDNEEgsnFgDTeAXqDeVG5ZsfD-HZqb-eAt5XZKjCiw,7494
81
+ Cython/Compiler/Scanning.cp38-win_amd64.pyd,sha256=U_VWYa1fdqYS1PxGVb4ZBPHw7nrTDpBZBioO7SnkCBM,218624
82
+ Cython/Compiler/Scanning.pxd,sha256=QOMWvJyz2WHZcuEqo_0Ha2wVZfO7tSb8UPTPM5UmqSw,2134
83
+ Cython/Compiler/Scanning.py,sha256=YaEMTqvp0anPtlHLXIrgTQXsq9a5UW7wA62IHjhh9HI,20696
84
+ Cython/Compiler/StringEncoding.py,sha256=xV-gBh82qiiPWleTO_VuPGYw0_B8VrsdDa_vN-bkvWw,12120
85
+ Cython/Compiler/Symtab.py,sha256=cSPfaGza97c6au3Xx0xsJEEynITm8cEhYN0EinA6SWU,132694
86
+ Cython/Compiler/Tests/TestBuffer.py,sha256=9XVjnJCET8jQP-qXQiWFgqJNDsEL4fI_t7ky09Jkkfc,4261
87
+ Cython/Compiler/Tests/TestCmdLine.py,sha256=_eir0HqW3mdvIP87LMjT8XHTdVRf60uHZHX9bJRr3Xc,22423
88
+ Cython/Compiler/Tests/TestFlowControl.py,sha256=Lk7Md-owaNd4W0jgUZdD3GI5koRaf7T-otHSAPUVZwg,1916
89
+ Cython/Compiler/Tests/TestGrammar.py,sha256=6gBqrzgKg5VIRexGSvF9b5vcDFwqCmpOrWxxwa7Mr78,5331
90
+ Cython/Compiler/Tests/TestMemView.py,sha256=gxoHsXE_GMR9i-S_PfQxr8ks87066GqFDOiqmDTLBBg,2588
91
+ Cython/Compiler/Tests/TestParseTreeTransforms.py,sha256=e89g4S0va7PS02POWj6Kgj6GnLoIHozXE7bQJaf7rjQ,9215
92
+ Cython/Compiler/Tests/TestScanning.py,sha256=_xkgETyhng-kWaZ2lJHQYVBfFdI1Od00GWq_Lewzkrg,4907
93
+ Cython/Compiler/Tests/TestSignatureMatching.py,sha256=lS2zsqq7n_5lJSTE1O2cmY0Vg5x2Zsh3D6dxLvJ7pho,3415
94
+ Cython/Compiler/Tests/TestStringEncoding.py,sha256=caK5Ba948txhW3auiKJVlAm6Pc_Ca55H3y5HNyuX4L4,2359
95
+ Cython/Compiler/Tests/TestTreeFragment.py,sha256=eT4G2rY1QvYmm-Mcm_zOlfJ3XOhx4n06v0hCG44GePE,2229
96
+ Cython/Compiler/Tests/TestTreePath.py,sha256=IXfif0sk56Y_jLQoWSInGZN-j4wAar0-m5PR0by-828,4285
97
+ Cython/Compiler/Tests/TestTypes.py,sha256=9S6DHlvcGAg5IuPjU5TvPqAcjCGudhdHZz2bUAIXSLg,3411
98
+ Cython/Compiler/Tests/TestUtilityLoad.py,sha256=n2UOdh9-XllrFl7AkzMsV7adjq0megnHc1kpqTRrqYc,4035
99
+ Cython/Compiler/Tests/TestVisitor.py,sha256=AmO82RIIkx86E7BPjAx1oDM4TarT65Sjuu3q96ahdHk,2289
100
+ Cython/Compiler/Tests/Utils.py,sha256=NP0oZ2ln0hkVpMUVwusrqA2pcg4Ded5kHXtRkKVU_mY,1101
101
+ Cython/Compiler/Tests/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
102
+ Cython/Compiler/Tests/__pycache__/TestBuffer.cpython-38.pyc,,
103
+ Cython/Compiler/Tests/__pycache__/TestCmdLine.cpython-38.pyc,,
104
+ Cython/Compiler/Tests/__pycache__/TestFlowControl.cpython-38.pyc,,
105
+ Cython/Compiler/Tests/__pycache__/TestGrammar.cpython-38.pyc,,
106
+ Cython/Compiler/Tests/__pycache__/TestMemView.cpython-38.pyc,,
107
+ Cython/Compiler/Tests/__pycache__/TestParseTreeTransforms.cpython-38.pyc,,
108
+ Cython/Compiler/Tests/__pycache__/TestScanning.cpython-38.pyc,,
109
+ Cython/Compiler/Tests/__pycache__/TestSignatureMatching.cpython-38.pyc,,
110
+ Cython/Compiler/Tests/__pycache__/TestStringEncoding.cpython-38.pyc,,
111
+ Cython/Compiler/Tests/__pycache__/TestTreeFragment.cpython-38.pyc,,
112
+ Cython/Compiler/Tests/__pycache__/TestTreePath.cpython-38.pyc,,
113
+ Cython/Compiler/Tests/__pycache__/TestTypes.cpython-38.pyc,,
114
+ Cython/Compiler/Tests/__pycache__/TestUtilityLoad.cpython-38.pyc,,
115
+ Cython/Compiler/Tests/__pycache__/TestVisitor.cpython-38.pyc,,
116
+ Cython/Compiler/Tests/__pycache__/Utils.cpython-38.pyc,,
117
+ Cython/Compiler/Tests/__pycache__/__init__.cpython-38.pyc,,
118
+ Cython/Compiler/TreeFragment.py,sha256=h8xqculRh6bbcKsM2JTJddlRrQLZTmn1gJQML7ULuVQ,9989
119
+ Cython/Compiler/TreePath.py,sha256=PyyMZE5r-A8kcmoSdBTKW8qcGwQ40comtaBBKQLdI6M,7937
120
+ Cython/Compiler/TypeInference.py,sha256=1AS7dhiLkZ_YVi1RxtTfxeAiH7q4p4jJyy_X1pRiMr4,23434
121
+ Cython/Compiler/TypeSlots.py,sha256=6C7s46CfEjYqSJNjgstZ4d7sqJ8r-Qggt1B0HuhRRWI,51541
122
+ Cython/Compiler/UFuncs.py,sha256=J86EtQAz5YlXHL084TyocfuZubGLWgqflo93_w1DI8Q,9452
123
+ Cython/Compiler/UtilNodes.py,sha256=cgOMMOKGZBJyTjA0EkC4GKPZBfRdxwcTL0uXqoiuEgI,12851
124
+ Cython/Compiler/UtilityCode.py,sha256=POGz0rcCTtTLGUhyh7vYC6ORqjAEESHjE7Xxa1Y4XpA,11218
125
+ Cython/Compiler/Version.py,sha256=VjgFLzyBKxFHNN5RPglcTAa7HEiUmT-CtzQgX6SgHrc,190
126
+ Cython/Compiler/Visitor.cp38-win_amd64.pyd,sha256=V9niSVbW9PZIxUbAKW2xUXMZ15_W4VoPuuk_T-Pr_Wo,233472
127
+ Cython/Compiler/Visitor.pxd,sha256=z7aWTgkW0fLdHRLeu_F6JgsNCENPHsl-lun98REc2vQ,1869
128
+ Cython/Compiler/Visitor.py,sha256=OXsDb45WADARHgRIFVPJJoUlJ3TcQPlCbE717nNbEQg,32498
129
+ Cython/Compiler/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
130
+ Cython/Compiler/__pycache__/AnalysedTreeTransforms.cpython-38.pyc,,
131
+ Cython/Compiler/__pycache__/Annotate.cpython-38.pyc,,
132
+ Cython/Compiler/__pycache__/AutoDocTransforms.cpython-38.pyc,,
133
+ Cython/Compiler/__pycache__/Buffer.cpython-38.pyc,,
134
+ Cython/Compiler/__pycache__/Builtin.cpython-38.pyc,,
135
+ Cython/Compiler/__pycache__/CmdLine.cpython-38.pyc,,
136
+ Cython/Compiler/__pycache__/Code.cpython-38.pyc,,
137
+ Cython/Compiler/__pycache__/CodeGeneration.cpython-38.pyc,,
138
+ Cython/Compiler/__pycache__/CythonScope.cpython-38.pyc,,
139
+ Cython/Compiler/__pycache__/Dataclass.cpython-38.pyc,,
140
+ Cython/Compiler/__pycache__/DebugFlags.cpython-38.pyc,,
141
+ Cython/Compiler/__pycache__/Errors.cpython-38.pyc,,
142
+ Cython/Compiler/__pycache__/ExprNodes.cpython-38.pyc,,
143
+ Cython/Compiler/__pycache__/FlowControl.cpython-38.pyc,,
144
+ Cython/Compiler/__pycache__/FusedNode.cpython-38.pyc,,
145
+ Cython/Compiler/__pycache__/Future.cpython-38.pyc,,
146
+ Cython/Compiler/__pycache__/Interpreter.cpython-38.pyc,,
147
+ Cython/Compiler/__pycache__/Lexicon.cpython-38.pyc,,
148
+ Cython/Compiler/__pycache__/Main.cpython-38.pyc,,
149
+ Cython/Compiler/__pycache__/MemoryView.cpython-38.pyc,,
150
+ Cython/Compiler/__pycache__/ModuleNode.cpython-38.pyc,,
151
+ Cython/Compiler/__pycache__/Naming.cpython-38.pyc,,
152
+ Cython/Compiler/__pycache__/Nodes.cpython-38.pyc,,
153
+ Cython/Compiler/__pycache__/Optimize.cpython-38.pyc,,
154
+ Cython/Compiler/__pycache__/Options.cpython-38.pyc,,
155
+ Cython/Compiler/__pycache__/ParseTreeTransforms.cpython-38.pyc,,
156
+ Cython/Compiler/__pycache__/Parsing.cpython-38.pyc,,
157
+ Cython/Compiler/__pycache__/Pipeline.cpython-38.pyc,,
158
+ Cython/Compiler/__pycache__/PyrexTypes.cpython-38.pyc,,
159
+ Cython/Compiler/__pycache__/Pythran.cpython-38.pyc,,
160
+ Cython/Compiler/__pycache__/Scanning.cpython-38.pyc,,
161
+ Cython/Compiler/__pycache__/StringEncoding.cpython-38.pyc,,
162
+ Cython/Compiler/__pycache__/Symtab.cpython-38.pyc,,
163
+ Cython/Compiler/__pycache__/TreeFragment.cpython-38.pyc,,
164
+ Cython/Compiler/__pycache__/TreePath.cpython-38.pyc,,
165
+ Cython/Compiler/__pycache__/TypeInference.cpython-38.pyc,,
166
+ Cython/Compiler/__pycache__/TypeSlots.cpython-38.pyc,,
167
+ Cython/Compiler/__pycache__/UFuncs.cpython-38.pyc,,
168
+ Cython/Compiler/__pycache__/UtilNodes.cpython-38.pyc,,
169
+ Cython/Compiler/__pycache__/UtilityCode.cpython-38.pyc,,
170
+ Cython/Compiler/__pycache__/Version.cpython-38.pyc,,
171
+ Cython/Compiler/__pycache__/Visitor.cpython-38.pyc,,
172
+ Cython/Compiler/__pycache__/__init__.cpython-38.pyc,,
173
+ Cython/Coverage.py,sha256=26OCppQLW6IqGMC_WcXrOTOsjMlHz4tb5P2iOiLeCWg,18900
174
+ Cython/Debugger/Cygdb.py,sha256=NEc8lFR8ZH0vdJoUZsJjgGhuC6duTUM-g1q40M8GM6w,7091
175
+ Cython/Debugger/DebugWriter.py,sha256=wuYsCpYmVcMhBurXkb9rfVMOR1LkKxIxEJ44TxVVn84,2576
176
+ Cython/Debugger/Tests/TestLibCython.py,sha256=s9wX1BRZSQKHcmV88vsASgX-wNJ8qlPPtaDaAvAy1tM,8731
177
+ Cython/Debugger/Tests/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
178
+ Cython/Debugger/Tests/__pycache__/TestLibCython.cpython-38.pyc,,
179
+ Cython/Debugger/Tests/__pycache__/__init__.cpython-38.pyc,,
180
+ Cython/Debugger/Tests/__pycache__/test_libcython_in_gdb.cpython-38.pyc,,
181
+ Cython/Debugger/Tests/__pycache__/test_libpython_in_gdb.cpython-38.pyc,,
182
+ Cython/Debugger/Tests/cfuncs.c,sha256=0kVEVGhvczwZEmHF5mcoY-_D_Gjcla4bk5GDGsVp7AU,79
183
+ Cython/Debugger/Tests/codefile,sha256=uQwkatsrp4fgWu4mYGaamnbYXetHRmHqOdlOFQ0FDr8,691
184
+ Cython/Debugger/Tests/test_libcython_in_gdb.py,sha256=Wfcw_XuoH8u5IByAWD-JRbc6TALxcrHrwhLasJKp4Ac,18601
185
+ Cython/Debugger/Tests/test_libpython_in_gdb.py,sha256=Cl8y8XFTXzGh6_zoC0Ns1zTENRepx7n4eFMddwJtcbU,4161
186
+ Cython/Debugger/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
187
+ Cython/Debugger/__pycache__/Cygdb.cpython-38.pyc,,
188
+ Cython/Debugger/__pycache__/DebugWriter.cpython-38.pyc,,
189
+ Cython/Debugger/__pycache__/__init__.cpython-38.pyc,,
190
+ Cython/Debugger/__pycache__/libcython.cpython-38.pyc,,
191
+ Cython/Debugger/__pycache__/libpython.cpython-38.pyc,,
192
+ Cython/Debugger/libcython.py,sha256=Vom5YnM7FTZMVCnOO7mHvE3qqzzs-kmePRF_Bti7tII,47999
193
+ Cython/Debugger/libpython.py,sha256=1kSsZ9jb4jLAHB5cUxqmRDJT_ERJf3nkRTAFaiq7xFI,96854
194
+ Cython/Debugging.py,sha256=gr-gbNyN1yPTAdGgErZXv_l0SSdwhsyNfxfhaREFssM,572
195
+ Cython/Distutils/__init__.py,sha256=TIPzU9Hr1mcxoWCWMaSpqHtFrFvI9jPSVV3vY4e_D_0,100
196
+ Cython/Distutils/__pycache__/__init__.cpython-38.pyc,,
197
+ Cython/Distutils/__pycache__/build_ext.cpython-38.pyc,,
198
+ Cython/Distutils/__pycache__/extension.cpython-38.pyc,,
199
+ Cython/Distutils/__pycache__/old_build_ext.cpython-38.pyc,,
200
+ Cython/Distutils/build_ext.py,sha256=Kn1-QpsYzL_8Gp7lrhn9d2DzGUu5HFfJnjm4Md6Dq0U,5846
201
+ Cython/Distutils/extension.py,sha256=3ti-4Jdm4WNUJFBfgJE8JArvGsCMkIRsv6U_lBLzxNQ,4763
202
+ Cython/Distutils/old_build_ext.py,sha256=H3x8lpfCeHp5MoIBK6n8q30qUX7i8eDbwID9CyD7MH0,14182
203
+ Cython/Includes/cpython/__init__.pxd,sha256=6vIYhBuIK4CdiLayreovD96AMwCyE6N-P9gv3aaA_MM,8493
204
+ Cython/Includes/cpython/array.pxd,sha256=Tq-3e4mWktjca6kk1i-6YpMrq8qIs1pxg4Vw8HObDnA,6541
205
+ Cython/Includes/cpython/bool.pxd,sha256=zZuBTAAmxxi648diuEMDauxsWkv6UflqTqaeCdhrOzw,1395
206
+ Cython/Includes/cpython/buffer.pxd,sha256=qKidu0GQaHS9ZI21s5gZyGm8Zzva5aTDfL8jNtdKWqM,4982
207
+ Cython/Includes/cpython/bytearray.pxd,sha256=kS_Za3f5R9aAjkPDtOXtMeqMw04xyCXYcB4phK9naSM,1476
208
+ Cython/Includes/cpython/bytes.pxd,sha256=76NmZiixsUFYB-MSM8ljgZQ8hEdxtPf0Sfo8_4BqpPE,10266
209
+ Cython/Includes/cpython/cellobject.pxd,sha256=85vWthm3Eaz6osWFHWGir_3A_bkSr84rp0efboO00TI,1425
210
+ Cython/Includes/cpython/ceval.pxd,sha256=6zfXLYBT0BA2_1ETW9s7zKd7HGxLUAuCfcD-ufjJrDE,244
211
+ Cython/Includes/cpython/cobject.pxd,sha256=GSM8CF79I32Z4rDiDH-D4xR27zZNybPgX7YFR2bEVH0,1560
212
+ Cython/Includes/cpython/codecs.pxd,sha256=dManadMa8Q4C36EhWF1Y2H2ULyKLJ81Op-ghKzJ_7kM,5205
213
+ Cython/Includes/cpython/complex.pxd,sha256=n5qP2oBe7ozLVu6O1le0jk-V3RsSR36zRrSsYguYOro,1897
214
+ Cython/Includes/cpython/contextvars.pxd,sha256=AoaCZIzsOetNqH286PJRx6SKaxdroK04NnGGwOg7vog,5871
215
+ Cython/Includes/cpython/conversion.pxd,sha256=nNpUufRfWUJRGm7UxMd1LqsZbZuFMkPXmp5b3lUNJW8,1732
216
+ Cython/Includes/cpython/datetime.pxd,sha256=VWg7ROEs7q98izjKMB72z31BKauXM3H5Vwf_oETNjOM,16219
217
+ Cython/Includes/cpython/descr.pxd,sha256=QhWBf2vOQPM-dZuI_Y9fyUhPB8mS-A0uGegpsR_ogd4,754
218
+ Cython/Includes/cpython/dict.pxd,sha256=RRnxrINalJ0uXR2UgpYFyOwEmLh1ZX_qnxsQG2GyrVc,8125
219
+ Cython/Includes/cpython/exc.pxd,sha256=T4j6sLOVd3DnhTKr7_bCyVrAbCqJKQyTE-uHwLjOV0s,14093
220
+ Cython/Includes/cpython/fileobject.pxd,sha256=r1_hRqogYsY4qbWM2Ha4zuDN91KKexrmXoU_lgHO7fA,2946
221
+ Cython/Includes/cpython/float.pxd,sha256=oW_pjxlD3hXHgCPMOHBMDuC-Rlk2k9v5nH6QLpJMpEg,1696
222
+ Cython/Includes/cpython/function.pxd,sha256=IQUqqRgcyUb66LCU29DHPnHtIjBi0CqVK85WEsd-80I,2736
223
+ Cython/Includes/cpython/genobject.pxd,sha256=opzIi9hfc1BKak0GkkfbZOQyfd4aazZlKJ9vTUKckIk,1077
224
+ Cython/Includes/cpython/getargs.pxd,sha256=FB2VRMRBu_-tJddq5z4qt6_0AMhFD9dhnfiNpYxpd4Q,787
225
+ Cython/Includes/cpython/instance.pxd,sha256=QJhpwFewdoesdDrA6n8_WVk_bm4gzgVnlWjTEejSY5U,1010
226
+ Cython/Includes/cpython/int.pxd,sha256=X6TQzCZUpH58YrVDlbIEUzQWIivqDi5xRoXpRTloDxA,4220
227
+ Cython/Includes/cpython/iterator.pxd,sha256=nlXir1W8Twwr_Z8WLUdSBU9sT-gYs0sCSLShPmj284I,1355
228
+ Cython/Includes/cpython/iterobject.pxd,sha256=eLH3Jn-3JE45Tk0qPOkg4vyAJiZ19Aft3cYrANPZIC0,1060
229
+ Cython/Includes/cpython/list.pxd,sha256=7uIMppkZMBnamDSfXvawcqlfdp2tG__9n4oM7Vm7jLE,4188
230
+ Cython/Includes/cpython/long.pxd,sha256=5eii-LnUDC50yj5EAtjKe-fuaE7KG_aCqPjaif66mYc,7196
231
+ Cython/Includes/cpython/longintrepr.pxd,sha256=ntKRiWayBSycBCo7xp9ApNHndPsajVQv1vaUC0O4mno,499
232
+ Cython/Includes/cpython/mapping.pxd,sha256=Z5LZuj_LFDx4A9p3upUZke94bvuUMZsdam95xJEUT0U,2755
233
+ Cython/Includes/cpython/marshal.pxd,sha256=6QWSzLG9Y9KKyLwlhfRAPIthXgtdFJ2UYTHwCgSGMO4,2963
234
+ Cython/Includes/cpython/mem.pxd,sha256=4ABFEJy2Y9mx2Kpe1JPF8iwhlRU1oTBLvw485VBXPZ0,6032
235
+ Cython/Includes/cpython/memoryview.pxd,sha256=9hoTVibI_42w44IL2vl6nKoElSUN-14NvrMP-Rl8vsw,2554
236
+ Cython/Includes/cpython/method.pxd,sha256=7kVK3IL7JoBUTDjoU27bGzSW33UsfBsa4LnzwRW50kg,2245
237
+ Cython/Includes/cpython/module.pxd,sha256=QEKerLC-FO0_rmp4ElRFjukVXjCnwdu_h2i3fbnTAws,10336
238
+ Cython/Includes/cpython/number.pxd,sha256=mpfvgeOnEaFlwh0fZVYVW-Xk63WQDrDWSxt0a2VKH-g,12187
239
+ Cython/Includes/cpython/object.pxd,sha256=HXaZHzyPm5EXJ8TC6p6SQFA0-NcGmKLYQuHX42qw2q0,20443
240
+ Cython/Includes/cpython/oldbuffer.pxd,sha256=kWOvn_itUYoDchAEroxsXqFWNlkvyyPOHzyZDwP6Bec,2979
241
+ Cython/Includes/cpython/pycapsule.pxd,sha256=NivcmjqfGDZBCajreWWQEYbURBRycafpEHG6OK-P13U,5843
242
+ Cython/Includes/cpython/pylifecycle.pxd,sha256=XysyqlFavqZdT3iAL0ZAeUyVHgz7KoJlbkCH4r_oZCU,2068
243
+ Cython/Includes/cpython/pyport.pxd,sha256=WsGtMoWtzdu8BuyX5LwCfP3Ev1k37lAqfqGPrvk1EQY,230
244
+ Cython/Includes/cpython/pystate.pxd,sha256=fkOJxwgMsl7U23NDptFoHxs6wkgRCHVzr1RM4OkErLY,3874
245
+ Cython/Includes/cpython/pythread.pxd,sha256=SMHFiVCunyePliGzsw3qxwYqT40UnSbgcsgT281adOE,1999
246
+ Cython/Includes/cpython/ref.pxd,sha256=QMDNmHwQyYAdfYOCajuWva8GbuFYotOCFH3gyR8liEM,2606
247
+ Cython/Includes/cpython/sequence.pxd,sha256=uvdZ4gFqeWxbLSWukmOJ72lJCI04GOXEnJ6DEo_MIs4,6140
248
+ Cython/Includes/cpython/set.pxd,sha256=J-GJ5q0WtQ5rg1p7YlSNo2S52sDGKH3AWlm6My76gJk,5502
249
+ Cython/Includes/cpython/slice.pxd,sha256=JBO8KAj55bAZR8bmJfhNanQahMAuz41XXx6h1RQxO7Y,3181
250
+ Cython/Includes/cpython/string.pxd,sha256=Y1PdH6xAYobU966AgyuJNF4G0tW-aGlcBJDj5bI8vQw,10138
251
+ Cython/Includes/cpython/time.pxd,sha256=fbsO5fE6R_V0QanyzaPWzwbExKXWQR5bT6WiHvV7HXE,1416
252
+ Cython/Includes/cpython/tuple.pxd,sha256=HkEM7OFtbH-GLk6Y1o_QF8WfY50BaF-95_cA2a9Tt2U,3291
253
+ Cython/Includes/cpython/type.pxd,sha256=n0c_-H-9naDf8ywXSHZuUQTMebPQSkGfynOgk_170d8,2120
254
+ Cython/Includes/cpython/unicode.pxd,sha256=j2t3mWsUJtwfiv8kkuNxaQmQFSDC64ED6Gq-s35wwFA,31274
255
+ Cython/Includes/cpython/version.pxd,sha256=ErhXAeFc75yGSMPcxSFPr1tJxdt00m0itsLMPtPWDP4,879
256
+ Cython/Includes/cpython/weakref.pxd,sha256=gi7MCgySrWvcW_rV2zZUXWKAylBqoykSRHzBwS0gKa4,2026
257
+ Cython/Includes/libc/__init__.pxd,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
258
+ Cython/Includes/libc/complex.pxd,sha256=VfgRxKSvIP8GG8hJCsXmS1PYGjcROL7U_TqXPJRJ-GY,1259
259
+ Cython/Includes/libc/errno.pxd,sha256=IXvn3dzp0Ou8vy8waJY55QsAT-FEhLwBQQh4UGr_9Tw,2176
260
+ Cython/Includes/libc/float.pxd,sha256=2ULVOZskbze52RGzLh0pPUcJhkiC96Z0bwDNHcg0ktc,1009
261
+ Cython/Includes/libc/limits.pxd,sha256=RFcJ6kRt6W-v_TwZXdsVygMfyFmxLycA2SP-NAQGY2I,649
262
+ Cython/Includes/libc/locale.pxd,sha256=CG-MkozdWa3M8mTGpYa3uvRK_SL3zlXI9P8cvXMwhyw,1186
263
+ Cython/Includes/libc/math.pxd,sha256=cYBGwXaKcz9MHd1JWUtweowKUIH2SZ__3kXK1oo4lJg,6790
264
+ Cython/Includes/libc/setjmp.pxd,sha256=K9jXROXUSLe3HFkbhCHEovNmjUm536iWC_1GKzLExkI,307
265
+ Cython/Includes/libc/signal.pxd,sha256=CCZIummR_6naQIxX30FAoKdxX5xMUOwCDoX5TpRXF8o,1243
266
+ Cython/Includes/libc/stddef.pxd,sha256=koA_flVJ_GYt_naMynLAjGXCso5wDgDITza1JIaqANY,173
267
+ Cython/Includes/libc/stdint.pxd,sha256=Euh2--utaCmIRbOGCvrFkAtatB3X9Vdx-pr2AOVCsuo,3554
268
+ Cython/Includes/libc/stdio.pxd,sha256=lqnoSSBcYIU2u0vTBD8TwRcLqa7E0GIOkl_-A463Ht0,2556
269
+ Cython/Includes/libc/stdlib.pxd,sha256=XOiWmkplEFgEip83rF-1PvfXZGWnbFl_pdAaS_wDz1E,2516
270
+ Cython/Includes/libc/string.pxd,sha256=11ac2iMPeDVnthkNneKTyEdk4RO5NLlbWU2CfBHAkBo,2088
271
+ Cython/Includes/libc/time.pxd,sha256=SV0rV9W5GbfzvkHbwzkVYVC8M-HFMUIvxIRsIh-eumw,1401
272
+ Cython/Includes/libcpp/__init__.pxd,sha256=iiP2e0YRUsH-6o5S5Hz28Ex9aqB95bFavTgUIArIsJE,98
273
+ Cython/Includes/libcpp/algorithm.pxd,sha256=HbvUntLfiMDlgyRZ4pby4L8CnAsICoFWESquZJqFvxM,24024
274
+ Cython/Includes/libcpp/any.pxd,sha256=-1qlgN9NYtp1Pn-iLjal1fSpm_0qlJiqHLOaKCRSj6c,441
275
+ Cython/Includes/libcpp/atomic.pxd,sha256=PVI97tAHMzgrXy52xAKSX5hFOwSQlvnOi_tmkEgn1XM,1764
276
+ Cython/Includes/libcpp/bit.pxd,sha256=puRstKjEYW0tU7aiWiGxqodLyP5LaFtyRJDVCjVdj6E,778
277
+ Cython/Includes/libcpp/cast.pxd,sha256=H417Gs7oTKaAGrYWkj6X2SAV_6RhjLvb93gyPJBg5G8,513
278
+ Cython/Includes/libcpp/cmath.pxd,sha256=KpNvTbZ5pFPoRSqjff-URoz3CgGCu9ZJR7ccYLubQhA,20453
279
+ Cython/Includes/libcpp/complex.pxd,sha256=JbTs4yd1KlxbZ89DpaeEOaBC_dUpZ7DuC5IuBEISVS0,3101
280
+ Cython/Includes/libcpp/deque.pxd,sha256=Tr6rUxRQiLA0YdinvwU7msBgGVh4kjJ66NsGz1-QIms,6804
281
+ Cython/Includes/libcpp/execution.pxd,sha256=B_SBKxUCzJwtww3WxRIEmkVXUbCZHoLhYld7eUxNw8Q,530
282
+ Cython/Includes/libcpp/forward_list.pxd,sha256=Cq1I8W6-NwvfbQaVvrMKCyQI2I0CAXwXfAMk1DwZkYQ,2492
283
+ Cython/Includes/libcpp/functional.pxd,sha256=MGGlhbq2KgVdDPiSjbemhPtoHAaLbv--w64dDHe1A7c,748
284
+ Cython/Includes/libcpp/iterator.pxd,sha256=3QsYr_EeLm8FIwJbDoimdbPOmqXqHtVs_7mSeQM_hOo,1546
285
+ Cython/Includes/libcpp/limits.pxd,sha256=jzE3NUl6zjJ05AemEo_DZ5wq3agwVzirQr-fb4rQJlo,1882
286
+ Cython/Includes/libcpp/list.pxd,sha256=qOZ1FjkrJhOR0wZy3KU_VlhQjS2qLXNeyXmiRChNBRs,4555
287
+ Cython/Includes/libcpp/map.pxd,sha256=wT3_jyoH8yNad2hxxy33O9mgVCTelbxakL4b_JSyR_E,10733
288
+ Cython/Includes/libcpp/memory.pxd,sha256=nm56Tx4Oi4L0q3veopuH5Ma5CySnpUpSoVHmrAOwgV4,3708
289
+ Cython/Includes/libcpp/numbers.pxd,sha256=sb09CA2fOcVPV7HlrsRkeCXcyjy3_EbsHkXVFoB9T7A,410
290
+ Cython/Includes/libcpp/numeric.pxd,sha256=6dXyjSsgzFT7EYjPTy4ytrnYRWuGzdEH7EpdQy_0VWM,6702
291
+ Cython/Includes/libcpp/optional.pxd,sha256=8DctLBOpvR0JbMcB2yPi2QnUD1FrAqw_tgd0EAKi2gE,1015
292
+ Cython/Includes/libcpp/pair.pxd,sha256=Y2DuWJDXEPYbjpq5tWCRoL3VQX3BPYTSf13LX4y74W8,28
293
+ Cython/Includes/libcpp/queue.pxd,sha256=DNZO-oHeryd0n0lnYKn8hOodpnXoGHV8i0Yq9m686Ug,674
294
+ Cython/Includes/libcpp/random.pxd,sha256=WuOsS7UYAvsCzE_TqrutiOby-i7_hM78l-xrnRHmwlQ,6369
295
+ Cython/Includes/libcpp/set.pxd,sha256=72YSpfsYRtWDmc3IxrpmGDCIrQTW9dwAq8zjHYYw19M,9404
296
+ Cython/Includes/libcpp/stack.pxd,sha256=CUEZWp3K0eEgRlNmYIEJddfU1hwPyyxHCUNRf9821eM,312
297
+ Cython/Includes/libcpp/string.pxd,sha256=_cFltfJYp07vx_xitm7eMX55sShvGfGT5KR_jgqv1f4,14173
298
+ Cython/Includes/libcpp/typeindex.pxd,sha256=nhVh7eKB8MMRwqmtuLdzEt3APgE0MzOCQF6luHLsRtg,539
299
+ Cython/Includes/libcpp/typeinfo.pxd,sha256=hEjs5d-hZXcMJaCps7mT7yC8XJKRXK-gk19nUaGZxZI,314
300
+ Cython/Includes/libcpp/unordered_map.pxd,sha256=xtlblgMAxtNs_p8V_OxuQXZV58UawRy6XLxyQykRZDM,8138
301
+ Cython/Includes/libcpp/unordered_set.pxd,sha256=77p1l9dlXAn5-Jq20aG2vhcHGXI4Rh3Knr2txLZ33HI,5962
302
+ Cython/Includes/libcpp/utility.pxd,sha256=YXAj5htNEbatmvEIO2NnF_RC3Y3cgLmhuEAE6WzZaD8,1070
303
+ Cython/Includes/libcpp/vector.pxd,sha256=W4dh_Pp57Bx4uo8pLR6N2TFm7y0yJ0n7gibXjEdNxD4,7006
304
+ Cython/Includes/numpy/__init__.pxd,sha256=xM7NScKrtjEI2s7tvtdiCoZvqjG-EBoFKEOmbi8jAo8,37514
305
+ Cython/Includes/numpy/math.pxd,sha256=pNwDWvWHy8flAHY9O_sCWuj2Bh4hOjJsLah2F6-l1Rg,5940
306
+ Cython/Includes/openmp.pxd,sha256=vbg8-WbMFB5gtpSrW5eTN2End53FgnjXb46uUDci72Q,1762
307
+ Cython/Includes/posix/__init__.pxd,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
308
+ Cython/Includes/posix/dlfcn.pxd,sha256=-jmKUbrxB9nC0TAfyaVRARh9fbDxOZx-HnuRK95-xRc,370
309
+ Cython/Includes/posix/fcntl.pxd,sha256=F1CRQ5Z7sWBJw6HhNUPwgZLdHhwSJAUqfl7Ip8xalp0,1783
310
+ Cython/Includes/posix/ioctl.pxd,sha256=RzlkJVru0u1sF07_A5ZL6Erwul2OzCJDzW_23Wpjoao,103
311
+ Cython/Includes/posix/mman.pxd,sha256=D08m5iPDGAtAjDfTfXS4tPVK1LY5a_qAFhwRSmaAyDU,3576
312
+ Cython/Includes/posix/resource.pxd,sha256=yQdIqcZx2mZAd7wypTA-uqqnPrguUFGJcrGGtu5lvxY,1395
313
+ Cython/Includes/posix/select.pxd,sha256=RKlotP_ZuumcmJw9Be_IuLTdtPtrjluWXTWiMf1Tvbo,640
314
+ Cython/Includes/posix/signal.pxd,sha256=V8yD9IR-fO0ojfzGts-RyRZqCbspYk5-LDzcAso9B_U,1949
315
+ Cython/Includes/posix/stat.pxd,sha256=vBMhGC7AnrjHyV2lj8JwPW9Y3ntOAZ1C3Pcqp8qVESI,2793
316
+ Cython/Includes/posix/stdio.pxd,sha256=Ja5GfzWVQbu4iWybCy1pTGFzD-CVz9tfEevUPYTNSJs,1092
317
+ Cython/Includes/posix/stdlib.pxd,sha256=mCTDQ7vJJGHeJw7qsTnkph5n_t9FRu6lQ7Ex013_DZ4,964
318
+ Cython/Includes/posix/strings.pxd,sha256=dlQxN5qaErBGfDHY841nmrHackQceukW92eBapnM4Nw,383
319
+ Cython/Includes/posix/time.pxd,sha256=cNxvN3-_2VgCM9vXxzmwBEKZJDN5ca7i1qJvI1zCXq0,2052
320
+ Cython/Includes/posix/types.pxd,sha256=C2finliVEqGNeEJCNyaDbYY14U4AtOi7Djpg1WRIWIA,1192
321
+ Cython/Includes/posix/uio.pxd,sha256=fcyEBYJUGMjYrDOmlN6l1ee49OQctATd9ZFi5BKocus,848
322
+ Cython/Includes/posix/unistd.pxd,sha256=gEBSESCgNxXYQ-0m858AAyjRIrL3x3vX7LfkSjsJ65Y,8332
323
+ Cython/Includes/posix/wait.pxd,sha256=VWCwCsnKG8_z-ME9QwK5y2q0Xr4s_hASr2Ivh8FxCRE,1284
324
+ Cython/Plex/Actions.cp38-win_amd64.pyd,sha256=dtNKCBzcloVrUdio_PjSJgmsEo_HQNBsTRk5X06o9Z0,52224
325
+ Cython/Plex/Actions.pxd,sha256=AX5UHQEovcLHsFsTox15QQxSxaMb8sH-xAe8i6_1U7M,607
326
+ Cython/Plex/Actions.py,sha256=Pju0yOq--MAo3uOI6M3A0vN_KYSiG2XhCilTnRjdIew,3040
327
+ Cython/Plex/DFA.cp38-win_amd64.pyd,sha256=zCoN5zFuupc0j8DNP5tHgkXkZtFVTcx1_MPPweqPXAE,78336
328
+ Cython/Plex/DFA.pxd,sha256=S55YV9creBzHLNbNeu7PcujmrFadkPAJ6TDxm-xJrUY,806
329
+ Cython/Plex/DFA.py,sha256=H3ohMXzZKx6WxwxZXEUhErk5JQ90slj3QKPKEKwBKD4,5576
330
+ Cython/Plex/Errors.py,sha256=n-R2119WeROkHgPfSI3cjF0HYYyPsLl-9XDlHHr5RUc,1024
331
+ Cython/Plex/Lexicons.py,sha256=Kjp7pSSbQlBF6WLigQjrd9px5UJxdTvg6z_SBlGPc_c,6125
332
+ Cython/Plex/Machines.cp38-win_amd64.pyd,sha256=2THTXKm6iFSyYvjUWtOLuvXtXsQzUldfINCqmVAqYu0,107520
333
+ Cython/Plex/Machines.pxd,sha256=JTYnwgL_5eBCJP93cm0hjDk4DK1qwDCTAMjP4NI7mU4,765
334
+ Cython/Plex/Machines.py,sha256=ntPWDMdRjDnbgqmNbI-SV5FRdVWHRWuFhTWTau-eOm0,7926
335
+ Cython/Plex/Regexps.py,sha256=CHzEWEAy_0Hsccp5iW4wm5NaLXdiF9f3AGbwEvhIinA,15497
336
+ Cython/Plex/Scanners.cp38-win_amd64.pyd,sha256=S-7RpSPdGGtP9hUgSfOIhbAop7U6b-xRewYvObgB8-A,77824
337
+ Cython/Plex/Scanners.pxd,sha256=7mG6_kOA2y7uYzu9tVNlf7WayFaipmUx0G9Q76r5kEQ,1600
338
+ Cython/Plex/Scanners.py,sha256=NLssAIMcilN1KF4SM6SnnteQtyt2Cx54PmiU9t_y8gc,13298
339
+ Cython/Plex/Transitions.cp38-win_amd64.pyd,sha256=FrJJqIhWmU8OYqMU8PuLsPL9UjL8N3EE3RYkYtRlrhY,85504
340
+ Cython/Plex/Transitions.pxd,sha256=-FKBO3SUfjlCncGfid4mWEM3X-wPVxBCgVVC2ayfrJU,612
341
+ Cython/Plex/Transitions.py,sha256=2yOB2Ub5_8qU8MklAWO20JI4v0KU0kdGg9lRRdtbECo,6995
342
+ Cython/Plex/__init__.py,sha256=Uk6hFjDwFtgsvlvRogNM9YkMbRd1dhjngy0eQ5sT1VQ,1190
343
+ Cython/Plex/__pycache__/Actions.cpython-38.pyc,,
344
+ Cython/Plex/__pycache__/DFA.cpython-38.pyc,,
345
+ Cython/Plex/__pycache__/Errors.cpython-38.pyc,,
346
+ Cython/Plex/__pycache__/Lexicons.cpython-38.pyc,,
347
+ Cython/Plex/__pycache__/Machines.cpython-38.pyc,,
348
+ Cython/Plex/__pycache__/Regexps.cpython-38.pyc,,
349
+ Cython/Plex/__pycache__/Scanners.cpython-38.pyc,,
350
+ Cython/Plex/__pycache__/Transitions.cpython-38.pyc,,
351
+ Cython/Plex/__pycache__/__init__.cpython-38.pyc,,
352
+ Cython/Runtime/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
353
+ Cython/Runtime/__pycache__/__init__.cpython-38.pyc,,
354
+ Cython/Runtime/refnanny.cp38-win_amd64.pyd,sha256=doMMolEv4nMkiZt94N2lndrF3jbnQxd_4OAuXZKy2G4,57344
355
+ Cython/Runtime/refnanny.pyx,sha256=32nbl0LcjIAQbh4605oeisZAGjM8UUKjSHzPssFbFwU,6803
356
+ Cython/Shadow.py,sha256=eW1i5q2hs9Fbx45g8QTaCGNgjkKWSaJE8WJOQ6HmrVE,17887
357
+ Cython/Shadow.pyi,sha256=40VPeYoZ6iKXQFoPq5lT-drcNfoKSnJYQUE6_YdeBMM,2799
358
+ Cython/StringIOTree.cp38-win_amd64.pyd,sha256=DchiDha1c2Bw_ZCrRjyljvr7fcQQiH9RkrvJ1kmvli0,57856
359
+ Cython/StringIOTree.py,sha256=Kmsz_0sgyidhzaMz2qxG9UpWgNhQyXZUiX3n6VfYBEM,5911
360
+ Cython/Tempita/__init__.py,sha256=f-PIUAOGDzWIsa0jPz4hrg30WCl3PcGHiBPhRCvrwhg,156
361
+ Cython/Tempita/__pycache__/__init__.cpython-38.pyc,,
362
+ Cython/Tempita/__pycache__/_looper.cpython-38.pyc,,
363
+ Cython/Tempita/__pycache__/_tempita.cpython-38.pyc,,
364
+ Cython/Tempita/__pycache__/compat3.cpython-38.pyc,,
365
+ Cython/Tempita/_looper.py,sha256=w1J9BWt0YwNZw_IlCRGh_IGBqFSPEiMw4Af5YIqhCLE,4331
366
+ Cython/Tempita/_tempita.cp38-win_amd64.pyd,sha256=mOoFVx-3ZujQIuQxsFRAbrF4iHUK13rlCtokXIg0s_I,356864
367
+ Cython/Tempita/_tempita.py,sha256=7PnDWIBZGNPBriWu5euhHxKOaC8M5Nv8vZle5-nIXj8,38741
368
+ Cython/Tempita/compat3.py,sha256=rJ-gkuakJo43sO260R2sRNxWJIwDVX9SYZYle8dp-ys,950
369
+ Cython/TestUtils.py,sha256=sGVYUz3OtUE9Em3IkTw2KFugdyg4hsCISEYV35soFt0,15101
370
+ Cython/Tests/TestCodeWriter.py,sha256=o31QUXhQcYdzOkHHlAOIjiiFLiyzkqy10FNWWr6Yr38,3927
371
+ Cython/Tests/TestCythonUtils.py,sha256=JzhWB52kgSAxXt34FAqIcy0ySQ2LMP-bolADldgM078,7030
372
+ Cython/Tests/TestJediTyper.py,sha256=eq7KOaD6v11SKj0UVcLai99iCNovWPoYkMKZs0kuXN4,7246
373
+ Cython/Tests/TestShadow.py,sha256=PdeabbiiK4B9bl6zayJtzjHvJDLeyQjymrAxKzIqv4M,3463
374
+ Cython/Tests/TestStringIOTree.py,sha256=F15qCQYEqSKS8TlrIbeZ7k7cwkBGtMC1GFQoNuzpi7w,2013
375
+ Cython/Tests/TestTestUtils.py,sha256=ql8sU20UU9RszKWwnc8V_HTUuTYGPQcMQxN5T_R2sYY,3058
376
+ Cython/Tests/__init__.py,sha256=qTr7l4s1u10pcMfFjP9cFZGS1PKT6v2Ml_vy3dreto0,14
377
+ Cython/Tests/__pycache__/TestCodeWriter.cpython-38.pyc,,
378
+ Cython/Tests/__pycache__/TestCythonUtils.cpython-38.pyc,,
379
+ Cython/Tests/__pycache__/TestJediTyper.cpython-38.pyc,,
380
+ Cython/Tests/__pycache__/TestShadow.cpython-38.pyc,,
381
+ Cython/Tests/__pycache__/TestStringIOTree.cpython-38.pyc,,
382
+ Cython/Tests/__pycache__/TestTestUtils.cpython-38.pyc,,
383
+ Cython/Tests/__pycache__/__init__.cpython-38.pyc,,
384
+ Cython/Tests/__pycache__/xmlrunner.cpython-38.pyc,,
385
+ Cython/Tests/xmlrunner.py,sha256=vj13NkmQVQUrJpcqzX-ThU0dM-xoiNnQZSfHHrJ3ulg,15172
386
+ Cython/Utility/AsyncGen.c,sha256=3FXrTZLtvjItk95VWsIIVo9zEMdSFH8h4BsBliHx1VI,49245
387
+ Cython/Utility/Buffer.c,sha256=tblFK4HEZP5_JBjKrVc_xfmDKe8jrWPGuf8glwbVB18,30843
388
+ Cython/Utility/Builtins.c,sha256=ho79w-7VwNu4Kwfy7qJx5xjkBLEtlX7gA87Ew5e8NLI,19988
389
+ Cython/Utility/CConvert.pyx,sha256=wUjc3CrtIB7IK1-8qfj_yrdr-gywcP0O9luJW_mwZYA,4553
390
+ Cython/Utility/CMath.c,sha256=4TPbfACvlKPJWxj4ANZwwjL3zIL92c7n7IwL-zkLXMc,2661
391
+ Cython/Utility/CommonStructures.c,sha256=X7iZ9_rPeQBQOurT-YokV71QtDhRTVWFKPBrKoPgjOk,4829
392
+ Cython/Utility/Complex.c,sha256=yM6xoReXiiYEqWzg9HSERXUGtn61F4HTafMUWtXvsgk,13975
393
+ Cython/Utility/Coroutine.c,sha256=AlYXvxO0mnsy-jI40naj_WU3wT6jYJ3QRgkN16kReVQ,101471
394
+ Cython/Utility/CpdefEnums.pyx,sha256=6OrMdGgaIVZ7bC0Lzik0_czMZChI9jPbFzRNHEw1Pbc,6215
395
+ Cython/Utility/CppConvert.pyx,sha256=zb3uW6OJmGs-jTKLVVu7WKttvN2rK4JVgOcsvbe4q88,7327
396
+ Cython/Utility/CppSupport.cpp,sha256=PNQ21D_1FrMSklVty2Mirl2L-7ACUjoyBDvr9im1XcI,5067
397
+ Cython/Utility/CythonFunction.c,sha256=7TEb7wDVe-rf5j7AaYhNeo4u8YE21ppy0cdZCiS31wk,65846
398
+ Cython/Utility/Dataclasses.c,sha256=2O9KyLd-4w8zOXSxWYPw1EDBCu5miC0-XgkSNurKwvM,7459
399
+ Cython/Utility/Dataclasses.py,sha256=ueL7xNyPqaIVMXruhbIs1oyuBgNQIHpNrt39VDe9xVg,4189
400
+ Cython/Utility/Embed.c,sha256=CrFrtsp7LnnP-RkwN1zOKiPc2QNzCUdUkDL2sMmwDeY,7691
401
+ Cython/Utility/Exceptions.c,sha256=C6iFsYaoXmMApXxkAidMSi1C7xkUf9K1ZCXuZJd845c,40092
402
+ Cython/Utility/ExtensionTypes.c,sha256=mUEp0FAX5SE5t8uECqOqogdoJB1aFtdj04opG53IQx0,26077
403
+ Cython/Utility/FunctionArguments.c,sha256=HYxyvxHsxSuOxTXFCeGubARJlPDmBMlfd1zDSd6fXyg,21327
404
+ Cython/Utility/ImportExport.c,sha256=4auKONqxWlGiL-yw8zUb7eV4XQgUfeLGHFNs9cTb-1U,30911
405
+ Cython/Utility/MemoryView.pyx,sha256=XSnIC4xgCxT93sW6EH1YF0LqslAw07E9owwOCyaRgqM,51063
406
+ Cython/Utility/MemoryView_C.c,sha256=i7xVGQhbSclUURYYGE1xoJqe8Twu09iHkp_vDS_BpdE,32634
407
+ Cython/Utility/ModuleSetupCode.c,sha256=rrMF0EQNIOYiG35hw8l8xDV9kD72dYgIqRl68ltI-zs,88498
408
+ Cython/Utility/NumpyImportArray.c,sha256=ylUhO1xwMcuOLwHhhJx8cAxmF88gSP6G3NVAIvMcCIA,2079
409
+ Cython/Utility/ObjectHandling.c,sha256=CKwwuFGDSggwIhr9WeHBvbQDTC0qTR1Yqz-e_YfjYn4,119822
410
+ Cython/Utility/Optimize.c,sha256=n0jIXkdQ3HDW27TXoVXy4S7MqaTHskU_588mmGLfri0,62645
411
+ Cython/Utility/Overflow.c,sha256=wC-SqLF0ppqjWdGCFXO-2803aqZcyXrSZumh8IrQnbU,16278
412
+ Cython/Utility/Printing.c,sha256=X2bUfkGmu6MObLA6w55J6cQVqsXmeG-zC6GaluyUBeI,5279
413
+ Cython/Utility/Profile.c,sha256=-hHU8HL8O8EbCFIsb23ihQeVRoeKuP3asxeG9hN25WQ,18577
414
+ Cython/Utility/StringTools.c,sha256=_dZYj8OFxl4iCqY5qMQLrBHWEf7QBDESHOG3Sg8rZ4g,47085
415
+ Cython/Utility/TestCyUtilityLoader.pyx,sha256=wsPqsYGkqXrqV_sxF8NKMTFXIqKCO-O4lXbNsRcokjA,160
416
+ Cython/Utility/TestCythonScope.pyx,sha256=jPupaW_JBl5IBTKhaJRYamNGAyd23hOq_WoKGKIb5Ts,1865
417
+ Cython/Utility/TestUtilityLoader.c,sha256=ix8dIu4YzXADIVIfBiTiBfiG1J15RxzphNP54Bxa2Gk,291
418
+ Cython/Utility/TypeConversion.c,sha256=T-uHJxtEjVwoJT2l6csEP5EV8OVlZKL7Pcx2pmu_A_Y,49739
419
+ Cython/Utility/UFuncs.pyx,sha256=47nPr17bqogb1KyKtVhy6ZGpcUnTQ8e20ColWXd251M,2230
420
+ Cython/Utility/UFuncs_C.c,sha256=6kb5CwA6OkOPdgUrnVbHWa0JXjgc4UKyqYtDx9TbVs4,1561
421
+ Cython/Utility/__init__.py,sha256=e_qkVfB5Rvy57CZHmdH5fNrghtPdNGVNSREY4meZJUw,1188
422
+ Cython/Utility/__pycache__/Dataclasses.cpython-38.pyc,,
423
+ Cython/Utility/__pycache__/__init__.cpython-38.pyc,,
424
+ Cython/Utility/arrayarray.h,sha256=71CEek7FG2F7_R1UqGAOuBVi3IaJt__yzIdQdWB0Bls,4238
425
+ Cython/Utils.cp38-win_amd64.pyd,sha256=llDMYrJbqhHwUTaoMz1wGZ065lojHJUv4-pm2nuOshQ,256000
426
+ Cython/Utils.py,sha256=69Zh-fNWhKMmyIAhQuOyrNgC4FZyclf_VljIZWNzuAQ,22800
427
+ Cython/__init__.py,sha256=Mu3ZZzg-CrIPURm79JfIUn7zyIdSZf7eNzg4xcUOATQ,370
428
+ Cython/__pycache__/CodeWriter.cpython-38.pyc,,
429
+ Cython/__pycache__/Coverage.cpython-38.pyc,,
430
+ Cython/__pycache__/Debugging.cpython-38.pyc,,
431
+ Cython/__pycache__/Shadow.cpython-38.pyc,,
432
+ Cython/__pycache__/StringIOTree.cpython-38.pyc,,
433
+ Cython/__pycache__/TestUtils.cpython-38.pyc,,
434
+ Cython/__pycache__/Utils.cpython-38.pyc,,
435
+ Cython/__pycache__/__init__.cpython-38.pyc,,
436
+ __pycache__/cython.cpython-38.pyc,,
437
+ cython.py,sha256=QLhiwfetr0jJ-3L4S7QJCk5xkzVIBQctXcuusbSoXyY,544
438
+ pyximport/__init__.py,sha256=NceVc9JV-ifFiQ_XMcyVwAs3iSCD9rgEnNCXXUOvORw,83
439
+ pyximport/__pycache__/__init__.cpython-38.pyc,,
440
+ pyximport/__pycache__/_pyximport2.cpython-38.pyc,,
441
+ pyximport/__pycache__/_pyximport3.cpython-38.pyc,,
442
+ pyximport/__pycache__/pyxbuild.cpython-38.pyc,,
443
+ pyximport/__pycache__/pyximport.cpython-38.pyc,,
444
+ pyximport/_pyximport2.py,sha256=LFsy2q7E0C8-5hc3ob4s0wMLaIkoQUBVCAhI4Smghck,24984
445
+ pyximport/_pyximport3.py,sha256=zRUmWFn34IXZyuL1pTsu_y4wyPiOG2Jj1soRzKPGU9Y,18858
446
+ pyximport/pyxbuild.py,sha256=3SFwqu0bUZgGUBuyWpgGJ0M0pOmczkqBQ7zI8sdGdkY,5862
447
+ pyximport/pyximport.py,sha256=XMqMN-mrPKwSbwLpwBaX4KDJDaLxb6I2vcN7qM7Phks,332
Lib/site-packages/Cython-3.0.10.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.42.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp38-cp38-win_amd64
5
+
Lib/site-packages/Cython-3.0.10.dist-info/entry_points.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ [console_scripts]
2
+ cygdb = Cython.Debugger.Cygdb:main
3
+ cython = Cython.Compiler.Main:setuptools_main
4
+ cythonize = Cython.Build.Cythonize:main
Lib/site-packages/Cython-3.0.10.dist-info/top_level.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Cython
2
+ cython
3
+ pyximport
Lib/site-packages/Cython/Build/BuildExecutable.py ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Compile a Python script into an executable that embeds CPython.
3
+ Requires CPython to be built as a shared library ('libpythonX.Y').
4
+
5
+ Basic usage:
6
+
7
+ python -m Cython.Build.BuildExecutable [ARGS] somefile.py
8
+ """
9
+
10
+ from __future__ import absolute_import
11
+
12
+ DEBUG = True
13
+
14
+ import sys
15
+ import os
16
+ if sys.version_info < (3, 9):
17
+ from distutils import sysconfig as _sysconfig
18
+
19
+ class sysconfig(object):
20
+
21
+ @staticmethod
22
+ def get_path(name):
23
+ assert name == 'include'
24
+ return _sysconfig.get_python_inc()
25
+
26
+ get_config_var = staticmethod(_sysconfig.get_config_var)
27
+ else:
28
+ # sysconfig can be trusted from cpython >= 3.8.7
29
+ import sysconfig
30
+
31
+
32
+ def get_config_var(name, default=''):
33
+ return sysconfig.get_config_var(name) or default
34
+
35
+ INCDIR = sysconfig.get_path('include')
36
+ LIBDIR1 = get_config_var('LIBDIR')
37
+ LIBDIR2 = get_config_var('LIBPL')
38
+ PYLIB = get_config_var('LIBRARY')
39
+ PYLIB_DYN = get_config_var('LDLIBRARY')
40
+ if PYLIB_DYN == PYLIB:
41
+ # no shared library
42
+ PYLIB_DYN = ''
43
+ else:
44
+ PYLIB_DYN = os.path.splitext(PYLIB_DYN[3:])[0] # 'lib(XYZ).so' -> XYZ
45
+
46
+ CC = get_config_var('CC', os.environ.get('CC', ''))
47
+ CFLAGS = get_config_var('CFLAGS') + ' ' + os.environ.get('CFLAGS', '')
48
+ LINKCC = get_config_var('LINKCC', os.environ.get('LINKCC', CC))
49
+ LINKFORSHARED = get_config_var('LINKFORSHARED')
50
+ LIBS = get_config_var('LIBS')
51
+ SYSLIBS = get_config_var('SYSLIBS')
52
+ EXE_EXT = sysconfig.get_config_var('EXE')
53
+
54
+
55
+ def _debug(msg, *args):
56
+ if DEBUG:
57
+ if args:
58
+ msg = msg % args
59
+ sys.stderr.write(msg + '\n')
60
+
61
+
62
+ def dump_config():
63
+ _debug('INCDIR: %s', INCDIR)
64
+ _debug('LIBDIR1: %s', LIBDIR1)
65
+ _debug('LIBDIR2: %s', LIBDIR2)
66
+ _debug('PYLIB: %s', PYLIB)
67
+ _debug('PYLIB_DYN: %s', PYLIB_DYN)
68
+ _debug('CC: %s', CC)
69
+ _debug('CFLAGS: %s', CFLAGS)
70
+ _debug('LINKCC: %s', LINKCC)
71
+ _debug('LINKFORSHARED: %s', LINKFORSHARED)
72
+ _debug('LIBS: %s', LIBS)
73
+ _debug('SYSLIBS: %s', SYSLIBS)
74
+ _debug('EXE_EXT: %s', EXE_EXT)
75
+
76
+
77
+ def _parse_args(args):
78
+ cy_args = []
79
+ last_arg = None
80
+ for i, arg in enumerate(args):
81
+ if arg.startswith('-'):
82
+ cy_args.append(arg)
83
+ elif last_arg in ('-X', '--directive'):
84
+ cy_args.append(arg)
85
+ else:
86
+ input_file = arg
87
+ args = args[i+1:]
88
+ break
89
+ last_arg = arg
90
+ else:
91
+ raise ValueError('no input file provided')
92
+
93
+ return input_file, cy_args, args
94
+
95
+
96
+ def runcmd(cmd, shell=True):
97
+ if shell:
98
+ cmd = ' '.join(cmd)
99
+ _debug(cmd)
100
+ else:
101
+ _debug(' '.join(cmd))
102
+
103
+ import subprocess
104
+ returncode = subprocess.call(cmd, shell=shell)
105
+
106
+ if returncode:
107
+ sys.exit(returncode)
108
+
109
+
110
+ def clink(basename):
111
+ runcmd([LINKCC, '-o', basename + EXE_EXT, basename+'.o', '-L'+LIBDIR1, '-L'+LIBDIR2]
112
+ + [PYLIB_DYN and ('-l'+PYLIB_DYN) or os.path.join(LIBDIR1, PYLIB)]
113
+ + LIBS.split() + SYSLIBS.split() + LINKFORSHARED.split())
114
+
115
+
116
+ def ccompile(basename):
117
+ runcmd([CC, '-c', '-o', basename+'.o', basename+'.c', '-I' + INCDIR] + CFLAGS.split())
118
+
119
+
120
+ def cycompile(input_file, options=()):
121
+ from ..Compiler import Version, CmdLine, Main
122
+ options, sources = CmdLine.parse_command_line(list(options or ()) + ['--embed', input_file])
123
+ _debug('Using Cython %s to compile %s', Version.version, input_file)
124
+ result = Main.compile(sources, options)
125
+ if result.num_errors > 0:
126
+ sys.exit(1)
127
+
128
+
129
+ def exec_file(program_name, args=()):
130
+ runcmd([os.path.abspath(program_name)] + list(args), shell=False)
131
+
132
+
133
+ def build(input_file, compiler_args=(), force=False):
134
+ """
135
+ Build an executable program from a Cython module.
136
+
137
+ Returns the name of the executable file.
138
+ """
139
+ basename = os.path.splitext(input_file)[0]
140
+ exe_file = basename + EXE_EXT
141
+ if not force and os.path.abspath(exe_file) == os.path.abspath(input_file):
142
+ raise ValueError("Input and output file names are the same, refusing to overwrite")
143
+ if (not force and os.path.exists(exe_file) and os.path.exists(input_file)
144
+ and os.path.getmtime(input_file) <= os.path.getmtime(exe_file)):
145
+ _debug("File is up to date, not regenerating %s", exe_file)
146
+ return exe_file
147
+ cycompile(input_file, compiler_args)
148
+ ccompile(basename)
149
+ clink(basename)
150
+ return exe_file
151
+
152
+
153
+ def build_and_run(args):
154
+ """
155
+ Build an executable program from a Cython module and run it.
156
+
157
+ Arguments after the module name will be passed verbatimly to the program.
158
+ """
159
+ program_name, args = _build(args)
160
+ exec_file(program_name, args)
161
+
162
+
163
+ def _build(args):
164
+ input_file, cy_args, args = _parse_args(args)
165
+ program_name = build(input_file, cy_args)
166
+ return program_name, args
167
+
168
+
169
+ if __name__ == '__main__':
170
+ _build(sys.argv[1:])
Lib/site-packages/Cython/Build/Cythonize.py ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import, print_function
2
+
3
+ import os
4
+ import shutil
5
+ import tempfile
6
+
7
+ from .Dependencies import cythonize, extended_iglob
8
+ from ..Utils import is_package_dir
9
+ from ..Compiler import Options
10
+
11
+ try:
12
+ import multiprocessing
13
+ parallel_compiles = int(multiprocessing.cpu_count() * 1.5)
14
+ except ImportError:
15
+ multiprocessing = None
16
+ parallel_compiles = 0
17
+
18
+
19
+ class _FakePool(object):
20
+ def map_async(self, func, args):
21
+ try:
22
+ from itertools import imap
23
+ except ImportError:
24
+ imap=map
25
+ for _ in imap(func, args):
26
+ pass
27
+
28
+ def close(self):
29
+ pass
30
+
31
+ def terminate(self):
32
+ pass
33
+
34
+ def join(self):
35
+ pass
36
+
37
+
38
+ def find_package_base(path):
39
+ base_dir, package_path = os.path.split(path)
40
+ while is_package_dir(base_dir):
41
+ base_dir, parent = os.path.split(base_dir)
42
+ package_path = '%s/%s' % (parent, package_path)
43
+ return base_dir, package_path
44
+
45
+ def cython_compile(path_pattern, options):
46
+ all_paths = map(os.path.abspath, extended_iglob(path_pattern))
47
+ _cython_compile_files(all_paths, options)
48
+
49
+ def _cython_compile_files(all_paths, options):
50
+ pool = None
51
+ try:
52
+ for path in all_paths:
53
+ if options.build_inplace:
54
+ base_dir = path
55
+ while not os.path.isdir(base_dir) or is_package_dir(base_dir):
56
+ base_dir = os.path.dirname(base_dir)
57
+ else:
58
+ base_dir = None
59
+
60
+ if os.path.isdir(path):
61
+ # recursively compiling a package
62
+ paths = [os.path.join(path, '**', '*.{py,pyx}')]
63
+ else:
64
+ # assume it's a file(-like thing)
65
+ paths = [path]
66
+
67
+ ext_modules = cythonize(
68
+ paths,
69
+ nthreads=options.parallel,
70
+ exclude_failures=options.keep_going,
71
+ exclude=options.excludes,
72
+ compiler_directives=options.directives,
73
+ compile_time_env=options.compile_time_env,
74
+ force=options.force,
75
+ quiet=options.quiet,
76
+ depfile=options.depfile,
77
+ language=options.language,
78
+ **options.options)
79
+
80
+ if ext_modules and options.build:
81
+ if len(ext_modules) > 1 and options.parallel > 1:
82
+ if pool is None:
83
+ try:
84
+ pool = multiprocessing.Pool(options.parallel)
85
+ except OSError:
86
+ pool = _FakePool()
87
+ pool.map_async(run_distutils, [
88
+ (base_dir, [ext]) for ext in ext_modules])
89
+ else:
90
+ run_distutils((base_dir, ext_modules))
91
+ except:
92
+ if pool is not None:
93
+ pool.terminate()
94
+ raise
95
+ else:
96
+ if pool is not None:
97
+ pool.close()
98
+ pool.join()
99
+
100
+
101
+ def run_distutils(args):
102
+ try:
103
+ from distutils.core import setup
104
+ except ImportError:
105
+ try:
106
+ from setuptools import setup
107
+ except ImportError:
108
+ raise ImportError("'distutils' is not available. Please install 'setuptools' for binary builds.")
109
+
110
+ base_dir, ext_modules = args
111
+ script_args = ['build_ext', '-i']
112
+ cwd = os.getcwd()
113
+ temp_dir = None
114
+ try:
115
+ if base_dir:
116
+ os.chdir(base_dir)
117
+ temp_dir = tempfile.mkdtemp(dir=base_dir)
118
+ script_args.extend(['--build-temp', temp_dir])
119
+ setup(
120
+ script_name='setup.py',
121
+ script_args=script_args,
122
+ ext_modules=ext_modules,
123
+ )
124
+ finally:
125
+ if base_dir:
126
+ os.chdir(cwd)
127
+ if temp_dir and os.path.isdir(temp_dir):
128
+ shutil.rmtree(temp_dir)
129
+
130
+
131
+ def create_args_parser():
132
+ from argparse import ArgumentParser, RawDescriptionHelpFormatter
133
+ from ..Compiler.CmdLine import ParseDirectivesAction, ParseOptionsAction, ParseCompileTimeEnvAction
134
+
135
+ parser = ArgumentParser(
136
+ formatter_class=RawDescriptionHelpFormatter,
137
+ epilog="""\
138
+ Environment variables:
139
+ CYTHON_FORCE_REGEN: if set to 1, forces cythonize to regenerate the output files regardless
140
+ of modification times and changes.
141
+ Environment variables accepted by setuptools are supported to configure the C compiler and build:
142
+ https://setuptools.pypa.io/en/latest/userguide/ext_modules.html#compiler-and-linker-options"""
143
+ )
144
+
145
+ parser.add_argument('-X', '--directive', metavar='NAME=VALUE,...',
146
+ dest='directives', default={}, type=str,
147
+ action=ParseDirectivesAction,
148
+ help='set a compiler directive')
149
+ parser.add_argument('-E', '--compile-time-env', metavar='NAME=VALUE,...',
150
+ dest='compile_time_env', default={}, type=str,
151
+ action=ParseCompileTimeEnvAction,
152
+ help='set a compile time environment variable')
153
+ parser.add_argument('-s', '--option', metavar='NAME=VALUE',
154
+ dest='options', default={}, type=str,
155
+ action=ParseOptionsAction,
156
+ help='set a cythonize option')
157
+ parser.add_argument('-2', dest='language_level', action='store_const', const=2, default=None,
158
+ help='use Python 2 syntax mode by default')
159
+ parser.add_argument('-3', dest='language_level', action='store_const', const=3,
160
+ help='use Python 3 syntax mode by default')
161
+ parser.add_argument('--3str', dest='language_level', action='store_const', const='3str',
162
+ help='use Python 3 syntax mode by default')
163
+ parser.add_argument('-+', '--cplus', dest='language', action='store_const', const='c++', default=None,
164
+ help='Compile as C++ rather than C')
165
+ parser.add_argument('-a', '--annotate', action='store_const', const='default', dest='annotate',
166
+ help='Produce a colorized HTML version of the source.')
167
+ parser.add_argument('--annotate-fullc', action='store_const', const='fullc', dest='annotate',
168
+ help='Produce a colorized HTML version of the source '
169
+ 'which includes entire generated C/C++-code.')
170
+ parser.add_argument('-x', '--exclude', metavar='PATTERN', dest='excludes',
171
+ action='append', default=[],
172
+ help='exclude certain file patterns from the compilation')
173
+
174
+ parser.add_argument('-b', '--build', dest='build', action='store_true', default=None,
175
+ help='build extension modules using distutils/setuptools')
176
+ parser.add_argument('-i', '--inplace', dest='build_inplace', action='store_true', default=None,
177
+ help='build extension modules in place using distutils/setuptools (implies -b)')
178
+ parser.add_argument('-j', '--parallel', dest='parallel', metavar='N',
179
+ type=int, default=parallel_compiles,
180
+ help=('run builds in N parallel jobs (default: %d)' %
181
+ parallel_compiles or 1))
182
+ parser.add_argument('-f', '--force', dest='force', action='store_true', default=None,
183
+ help='force recompilation')
184
+ parser.add_argument('-q', '--quiet', dest='quiet', action='store_true', default=None,
185
+ help='be less verbose during compilation')
186
+
187
+ parser.add_argument('--lenient', dest='lenient', action='store_true', default=None,
188
+ help='increase Python compatibility by ignoring some compile time errors')
189
+ parser.add_argument('-k', '--keep-going', dest='keep_going', action='store_true', default=None,
190
+ help='compile as much as possible, ignore compilation failures')
191
+ parser.add_argument('--no-docstrings', dest='no_docstrings', action='store_true', default=None,
192
+ help='strip docstrings')
193
+ parser.add_argument('-M', '--depfile', action='store_true', help='produce depfiles for the sources')
194
+ parser.add_argument('sources', nargs='*')
195
+ return parser
196
+
197
+
198
+ def parse_args_raw(parser, args):
199
+ options, unknown = parser.parse_known_args(args)
200
+ sources = options.sources
201
+ # if positional arguments were interspersed
202
+ # some of them are in unknown
203
+ for option in unknown:
204
+ if option.startswith('-'):
205
+ parser.error("unknown option "+option)
206
+ else:
207
+ sources.append(option)
208
+ del options.sources
209
+ return (options, sources)
210
+
211
+
212
+ def parse_args(args):
213
+ parser = create_args_parser()
214
+ options, args = parse_args_raw(parser, args)
215
+
216
+ if not args:
217
+ parser.error("no source files provided")
218
+ if options.build_inplace:
219
+ options.build = True
220
+ if multiprocessing is None:
221
+ options.parallel = 0
222
+ if options.language_level:
223
+ assert options.language_level in (2, 3, '3str')
224
+ options.options['language_level'] = options.language_level
225
+
226
+ if options.lenient:
227
+ # increase Python compatibility by ignoring compile time errors
228
+ Options.error_on_unknown_names = False
229
+ Options.error_on_uninitialized = False
230
+
231
+ if options.annotate:
232
+ Options.annotate = options.annotate
233
+
234
+ if options.no_docstrings:
235
+ Options.docstrings = False
236
+
237
+ return options, args
238
+
239
+
240
+ def main(args=None):
241
+ options, paths = parse_args(args)
242
+
243
+ all_paths = []
244
+ for path in paths:
245
+ expanded_path = [os.path.abspath(p) for p in extended_iglob(path)]
246
+ if not expanded_path:
247
+ import sys
248
+ print("{}: No such file or directory: '{}'".format(sys.argv[0], path), file=sys.stderr)
249
+ sys.exit(1)
250
+ all_paths.extend(expanded_path)
251
+ _cython_compile_files(all_paths, options)
252
+
253
+
254
+ if __name__ == '__main__':
255
+ main()
Lib/site-packages/Cython/Build/Dependencies.py ADDED
@@ -0,0 +1,1380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import, print_function
2
+
3
+ import cython
4
+ from .. import __version__
5
+
6
+ import collections
7
+ import contextlib
8
+ import hashlib
9
+ import os
10
+ import shutil
11
+ import subprocess
12
+ import re, sys, time
13
+ from glob import iglob
14
+ from io import open as io_open
15
+ from os.path import relpath as _relpath
16
+ import zipfile
17
+
18
+ try:
19
+ from collections.abc import Iterable
20
+ except ImportError:
21
+ from collections import Iterable
22
+
23
+ try:
24
+ import gzip
25
+ gzip_open = gzip.open
26
+ gzip_ext = '.gz'
27
+ except ImportError:
28
+ gzip_open = open
29
+ gzip_ext = ''
30
+
31
+ try:
32
+ import zlib
33
+ zipfile_compression_mode = zipfile.ZIP_DEFLATED
34
+ except ImportError:
35
+ zipfile_compression_mode = zipfile.ZIP_STORED
36
+
37
+ try:
38
+ import pythran
39
+ except:
40
+ pythran = None
41
+
42
+ from .. import Utils
43
+ from ..Utils import (cached_function, cached_method, path_exists,
44
+ safe_makedirs, copy_file_to_dir_if_newer, is_package_dir, write_depfile)
45
+ from ..Compiler import Errors
46
+ from ..Compiler.Main import Context
47
+ from ..Compiler.Options import (CompilationOptions, default_options,
48
+ get_directive_defaults)
49
+
50
+ join_path = cached_function(os.path.join)
51
+ copy_once_if_newer = cached_function(copy_file_to_dir_if_newer)
52
+ safe_makedirs_once = cached_function(safe_makedirs)
53
+
54
+ if sys.version_info[0] < 3:
55
+ # stupid Py2 distutils enforces str type in list of sources
56
+ _fs_encoding = sys.getfilesystemencoding()
57
+ if _fs_encoding is None:
58
+ _fs_encoding = sys.getdefaultencoding()
59
+ def encode_filename_in_py2(filename):
60
+ if not isinstance(filename, bytes):
61
+ return filename.encode(_fs_encoding)
62
+ return filename
63
+ else:
64
+ def encode_filename_in_py2(filename):
65
+ return filename
66
+ basestring = str
67
+
68
+
69
+ def _make_relative(file_paths, base=None):
70
+ if not base:
71
+ base = os.getcwd()
72
+ if base[-1] != os.path.sep:
73
+ base += os.path.sep
74
+ return [_relpath(path, base) if path.startswith(base) else path
75
+ for path in file_paths]
76
+
77
+
78
+ def extended_iglob(pattern):
79
+ if '{' in pattern:
80
+ m = re.match('(.*){([^}]+)}(.*)', pattern)
81
+ if m:
82
+ before, switch, after = m.groups()
83
+ for case in switch.split(','):
84
+ for path in extended_iglob(before + case + after):
85
+ yield path
86
+ return
87
+
88
+ # We always accept '/' and also '\' on Windows,
89
+ # because '/' is generally common for relative paths.
90
+ if '**/' in pattern or os.sep == '\\' and '**\\' in pattern:
91
+ seen = set()
92
+ first, rest = re.split(r'\*\*[%s]' % ('/\\\\' if os.sep == '\\' else '/'), pattern, 1)
93
+ if first:
94
+ first = iglob(first + os.sep)
95
+ else:
96
+ first = ['']
97
+ for root in first:
98
+ for path in extended_iglob(join_path(root, rest)):
99
+ if path not in seen:
100
+ seen.add(path)
101
+ yield path
102
+ for path in extended_iglob(join_path(root, '*', '**', rest)):
103
+ if path not in seen:
104
+ seen.add(path)
105
+ yield path
106
+ else:
107
+ for path in iglob(pattern):
108
+ yield path
109
+
110
+
111
+ def nonempty(it, error_msg="expected non-empty iterator"):
112
+ empty = True
113
+ for value in it:
114
+ empty = False
115
+ yield value
116
+ if empty:
117
+ raise ValueError(error_msg)
118
+
119
+
120
+ @cached_function
121
+ def file_hash(filename):
122
+ path = os.path.normpath(filename)
123
+ prefix = ('%d:%s' % (len(path), path)).encode("UTF-8")
124
+ m = hashlib.sha1(prefix)
125
+ with open(path, 'rb') as f:
126
+ data = f.read(65000)
127
+ while data:
128
+ m.update(data)
129
+ data = f.read(65000)
130
+ return m.hexdigest()
131
+
132
+
133
+ def update_pythran_extension(ext):
134
+ if pythran is None:
135
+ raise RuntimeError("You first need to install Pythran to use the np_pythran directive.")
136
+ try:
137
+ pythran_ext = pythran.config.make_extension(python=True)
138
+ except TypeError: # older pythran version only
139
+ pythran_ext = pythran.config.make_extension()
140
+
141
+ ext.include_dirs.extend(pythran_ext['include_dirs'])
142
+ ext.extra_compile_args.extend(pythran_ext['extra_compile_args'])
143
+ ext.extra_link_args.extend(pythran_ext['extra_link_args'])
144
+ ext.define_macros.extend(pythran_ext['define_macros'])
145
+ ext.undef_macros.extend(pythran_ext['undef_macros'])
146
+ ext.library_dirs.extend(pythran_ext['library_dirs'])
147
+ ext.libraries.extend(pythran_ext['libraries'])
148
+ ext.language = 'c++'
149
+
150
+ # These options are not compatible with the way normal Cython extensions work
151
+ for bad_option in ["-fwhole-program", "-fvisibility=hidden"]:
152
+ try:
153
+ ext.extra_compile_args.remove(bad_option)
154
+ except ValueError:
155
+ pass
156
+
157
+
158
+ def parse_list(s):
159
+ """
160
+ >>> parse_list("")
161
+ []
162
+ >>> parse_list("a")
163
+ ['a']
164
+ >>> parse_list("a b c")
165
+ ['a', 'b', 'c']
166
+ >>> parse_list("[a, b, c]")
167
+ ['a', 'b', 'c']
168
+ >>> parse_list('a " " b')
169
+ ['a', ' ', 'b']
170
+ >>> parse_list('[a, ",a", "a,", ",", ]')
171
+ ['a', ',a', 'a,', ',']
172
+ """
173
+ if len(s) >= 2 and s[0] == '[' and s[-1] == ']':
174
+ s = s[1:-1]
175
+ delimiter = ','
176
+ else:
177
+ delimiter = ' '
178
+ s, literals = strip_string_literals(s)
179
+ def unquote(literal):
180
+ literal = literal.strip()
181
+ if literal[0] in "'\"":
182
+ return literals[literal[1:-1]]
183
+ else:
184
+ return literal
185
+ return [unquote(item) for item in s.split(delimiter) if item.strip()]
186
+
187
+
188
+ transitive_str = object()
189
+ transitive_list = object()
190
+ bool_or = object()
191
+
192
+ distutils_settings = {
193
+ 'name': str,
194
+ 'sources': list,
195
+ 'define_macros': list,
196
+ 'undef_macros': list,
197
+ 'libraries': transitive_list,
198
+ 'library_dirs': transitive_list,
199
+ 'runtime_library_dirs': transitive_list,
200
+ 'include_dirs': transitive_list,
201
+ 'extra_objects': list,
202
+ 'extra_compile_args': transitive_list,
203
+ 'extra_link_args': transitive_list,
204
+ 'export_symbols': list,
205
+ 'depends': transitive_list,
206
+ 'language': transitive_str,
207
+ 'np_pythran': bool_or
208
+ }
209
+
210
+
211
+ def _legacy_strtobool(val):
212
+ # Used to be "distutils.util.strtobool", adapted for deprecation warnings.
213
+ if val == "True":
214
+ return True
215
+ elif val == "False":
216
+ return False
217
+
218
+ import warnings
219
+ warnings.warn("The 'np_python' option requires 'True' or 'False'", category=DeprecationWarning)
220
+ val = val.lower()
221
+ if val in ('y', 'yes', 't', 'true', 'on', '1'):
222
+ return True
223
+ elif val in ('n', 'no', 'f', 'false', 'off', '0'):
224
+ return False
225
+ else:
226
+ raise ValueError("invalid truth value %r" % (val,))
227
+
228
+
229
+ @cython.locals(start=cython.Py_ssize_t, end=cython.Py_ssize_t)
230
+ def line_iter(source):
231
+ if isinstance(source, basestring):
232
+ start = 0
233
+ while True:
234
+ end = source.find('\n', start)
235
+ if end == -1:
236
+ yield source[start:]
237
+ return
238
+ yield source[start:end]
239
+ start = end+1
240
+ else:
241
+ for line in source:
242
+ yield line
243
+
244
+
245
+ class DistutilsInfo(object):
246
+
247
+ def __init__(self, source=None, exn=None):
248
+ self.values = {}
249
+ if source is not None:
250
+ for line in line_iter(source):
251
+ line = line.lstrip()
252
+ if not line:
253
+ continue
254
+ if line[0] != '#':
255
+ break
256
+ line = line[1:].lstrip()
257
+ kind = next((k for k in ("distutils:","cython:") if line.startswith(k)), None)
258
+ if kind is not None:
259
+ key, _, value = [s.strip() for s in line[len(kind):].partition('=')]
260
+ type = distutils_settings.get(key, None)
261
+ if line.startswith("cython:") and type is None: continue
262
+ if type in (list, transitive_list):
263
+ value = parse_list(value)
264
+ if key == 'define_macros':
265
+ value = [tuple(macro.split('=', 1))
266
+ if '=' in macro else (macro, None)
267
+ for macro in value]
268
+ if type is bool_or:
269
+ value = _legacy_strtobool(value)
270
+ self.values[key] = value
271
+ elif exn is not None:
272
+ for key in distutils_settings:
273
+ if key in ('name', 'sources','np_pythran'):
274
+ continue
275
+ value = getattr(exn, key, None)
276
+ if value:
277
+ self.values[key] = value
278
+
279
+ def merge(self, other):
280
+ if other is None:
281
+ return self
282
+ for key, value in other.values.items():
283
+ type = distutils_settings[key]
284
+ if type is transitive_str and key not in self.values:
285
+ self.values[key] = value
286
+ elif type is transitive_list:
287
+ if key in self.values:
288
+ # Change a *copy* of the list (Trac #845)
289
+ all = self.values[key][:]
290
+ for v in value:
291
+ if v not in all:
292
+ all.append(v)
293
+ value = all
294
+ self.values[key] = value
295
+ elif type is bool_or:
296
+ self.values[key] = self.values.get(key, False) | value
297
+ return self
298
+
299
+ def subs(self, aliases):
300
+ if aliases is None:
301
+ return self
302
+ resolved = DistutilsInfo()
303
+ for key, value in self.values.items():
304
+ type = distutils_settings[key]
305
+ if type in [list, transitive_list]:
306
+ new_value_list = []
307
+ for v in value:
308
+ if v in aliases:
309
+ v = aliases[v]
310
+ if isinstance(v, list):
311
+ new_value_list += v
312
+ else:
313
+ new_value_list.append(v)
314
+ value = new_value_list
315
+ else:
316
+ if value in aliases:
317
+ value = aliases[value]
318
+ resolved.values[key] = value
319
+ return resolved
320
+
321
+ def apply(self, extension):
322
+ for key, value in self.values.items():
323
+ type = distutils_settings[key]
324
+ if type in [list, transitive_list]:
325
+ value = getattr(extension, key) + list(value)
326
+ setattr(extension, key, value)
327
+
328
+
329
+ @cython.locals(start=cython.Py_ssize_t, q=cython.Py_ssize_t,
330
+ single_q=cython.Py_ssize_t, double_q=cython.Py_ssize_t,
331
+ hash_mark=cython.Py_ssize_t, end=cython.Py_ssize_t,
332
+ k=cython.Py_ssize_t, counter=cython.Py_ssize_t, quote_len=cython.Py_ssize_t)
333
+ def strip_string_literals(code, prefix='__Pyx_L'):
334
+ """
335
+ Normalizes every string literal to be of the form '__Pyx_Lxxx',
336
+ returning the normalized code and a mapping of labels to
337
+ string literals.
338
+ """
339
+ new_code = []
340
+ literals = {}
341
+ counter = 0
342
+ start = q = 0
343
+ in_quote = False
344
+ hash_mark = single_q = double_q = -1
345
+ code_len = len(code)
346
+ quote_type = None
347
+ quote_len = -1
348
+
349
+ while True:
350
+ if hash_mark < q:
351
+ hash_mark = code.find('#', q)
352
+ if single_q < q:
353
+ single_q = code.find("'", q)
354
+ if double_q < q:
355
+ double_q = code.find('"', q)
356
+ q = min(single_q, double_q)
357
+ if q == -1:
358
+ q = max(single_q, double_q)
359
+
360
+ # We're done.
361
+ if q == -1 and hash_mark == -1:
362
+ new_code.append(code[start:])
363
+ break
364
+
365
+ # Try to close the quote.
366
+ elif in_quote:
367
+ if code[q-1] == u'\\':
368
+ k = 2
369
+ while q >= k and code[q-k] == u'\\':
370
+ k += 1
371
+ if k % 2 == 0:
372
+ q += 1
373
+ continue
374
+ if code[q] == quote_type and (
375
+ quote_len == 1 or (code_len > q + 2 and quote_type == code[q+1] == code[q+2])):
376
+ counter += 1
377
+ label = "%s%s_" % (prefix, counter)
378
+ literals[label] = code[start+quote_len:q]
379
+ full_quote = code[q:q+quote_len]
380
+ new_code.append(full_quote)
381
+ new_code.append(label)
382
+ new_code.append(full_quote)
383
+ q += quote_len
384
+ in_quote = False
385
+ start = q
386
+ else:
387
+ q += 1
388
+
389
+ # Process comment.
390
+ elif -1 != hash_mark and (hash_mark < q or q == -1):
391
+ new_code.append(code[start:hash_mark+1])
392
+ end = code.find('\n', hash_mark)
393
+ counter += 1
394
+ label = "%s%s_" % (prefix, counter)
395
+ if end == -1:
396
+ end_or_none = None
397
+ else:
398
+ end_or_none = end
399
+ literals[label] = code[hash_mark+1:end_or_none]
400
+ new_code.append(label)
401
+ if end == -1:
402
+ break
403
+ start = q = end
404
+
405
+ # Open the quote.
406
+ else:
407
+ if code_len >= q+3 and (code[q] == code[q+1] == code[q+2]):
408
+ quote_len = 3
409
+ else:
410
+ quote_len = 1
411
+ in_quote = True
412
+ quote_type = code[q]
413
+ new_code.append(code[start:q])
414
+ start = q
415
+ q += quote_len
416
+
417
+ return "".join(new_code), literals
418
+
419
+
420
+ # We need to allow spaces to allow for conditional compilation like
421
+ # IF ...:
422
+ # cimport ...
423
+ dependency_regex = re.compile(r"(?:^\s*from +([0-9a-zA-Z_.]+) +cimport)|"
424
+ r"(?:^\s*cimport +([0-9a-zA-Z_.]+(?: *, *[0-9a-zA-Z_.]+)*))|"
425
+ r"(?:^\s*cdef +extern +from +['\"]([^'\"]+)['\"])|"
426
+ r"(?:^\s*include +['\"]([^'\"]+)['\"])", re.M)
427
+ dependency_after_from_regex = re.compile(
428
+ r"(?:^\s+\(([0-9a-zA-Z_., ]*)\)[#\n])|"
429
+ r"(?:^\s+([0-9a-zA-Z_., ]*)[#\n])",
430
+ re.M)
431
+
432
+
433
+ def normalize_existing(base_path, rel_paths):
434
+ return normalize_existing0(os.path.dirname(base_path), tuple(set(rel_paths)))
435
+
436
+
437
+ @cached_function
438
+ def normalize_existing0(base_dir, rel_paths):
439
+ """
440
+ Given some base directory ``base_dir`` and a list of path names
441
+ ``rel_paths``, normalize each relative path name ``rel`` by
442
+ replacing it by ``os.path.join(base, rel)`` if that file exists.
443
+
444
+ Return a couple ``(normalized, needed_base)`` where ``normalized``
445
+ if the list of normalized file names and ``needed_base`` is
446
+ ``base_dir`` if we actually needed ``base_dir``. If no paths were
447
+ changed (for example, if all paths were already absolute), then
448
+ ``needed_base`` is ``None``.
449
+ """
450
+ normalized = []
451
+ needed_base = None
452
+ for rel in rel_paths:
453
+ if os.path.isabs(rel):
454
+ normalized.append(rel)
455
+ continue
456
+ path = join_path(base_dir, rel)
457
+ if path_exists(path):
458
+ normalized.append(os.path.normpath(path))
459
+ needed_base = base_dir
460
+ else:
461
+ normalized.append(rel)
462
+ return (normalized, needed_base)
463
+
464
+
465
+ def resolve_depends(depends, include_dirs):
466
+ include_dirs = tuple(include_dirs)
467
+ resolved = []
468
+ for depend in depends:
469
+ path = resolve_depend(depend, include_dirs)
470
+ if path is not None:
471
+ resolved.append(path)
472
+ return resolved
473
+
474
+
475
+ @cached_function
476
+ def resolve_depend(depend, include_dirs):
477
+ if depend[0] == '<' and depend[-1] == '>':
478
+ return None
479
+ for dir in include_dirs:
480
+ path = join_path(dir, depend)
481
+ if path_exists(path):
482
+ return os.path.normpath(path)
483
+ return None
484
+
485
+
486
+ @cached_function
487
+ def package(filename):
488
+ dir = os.path.dirname(os.path.abspath(str(filename)))
489
+ if dir != filename and is_package_dir(dir):
490
+ return package(dir) + (os.path.basename(dir),)
491
+ else:
492
+ return ()
493
+
494
+
495
+ @cached_function
496
+ def fully_qualified_name(filename):
497
+ module = os.path.splitext(os.path.basename(filename))[0]
498
+ return '.'.join(package(filename) + (module,))
499
+
500
+
501
+ @cached_function
502
+ def parse_dependencies(source_filename):
503
+ # Actual parsing is way too slow, so we use regular expressions.
504
+ # The only catch is that we must strip comments and string
505
+ # literals ahead of time.
506
+ with Utils.open_source_file(source_filename, error_handling='ignore') as fh:
507
+ source = fh.read()
508
+ distutils_info = DistutilsInfo(source)
509
+ source, literals = strip_string_literals(source)
510
+ source = source.replace('\\\n', ' ').replace('\t', ' ')
511
+
512
+ # TODO: pure mode
513
+ cimports = []
514
+ includes = []
515
+ externs = []
516
+ for m in dependency_regex.finditer(source):
517
+ cimport_from, cimport_list, extern, include = m.groups()
518
+ if cimport_from:
519
+ cimports.append(cimport_from)
520
+ m_after_from = dependency_after_from_regex.search(source, pos=m.end())
521
+ if m_after_from:
522
+ multiline, one_line = m_after_from.groups()
523
+ subimports = multiline or one_line
524
+ cimports.extend("{0}.{1}".format(cimport_from, s.strip())
525
+ for s in subimports.split(','))
526
+
527
+ elif cimport_list:
528
+ cimports.extend(x.strip() for x in cimport_list.split(","))
529
+ elif extern:
530
+ externs.append(literals[extern])
531
+ else:
532
+ includes.append(literals[include])
533
+ return cimports, includes, externs, distutils_info
534
+
535
+
536
+ class DependencyTree(object):
537
+
538
+ def __init__(self, context, quiet=False):
539
+ self.context = context
540
+ self.quiet = quiet
541
+ self._transitive_cache = {}
542
+
543
+ def parse_dependencies(self, source_filename):
544
+ if path_exists(source_filename):
545
+ source_filename = os.path.normpath(source_filename)
546
+ return parse_dependencies(source_filename)
547
+
548
+ @cached_method
549
+ def included_files(self, filename):
550
+ # This is messy because included files are textually included, resolving
551
+ # cimports (but not includes) relative to the including file.
552
+ all = set()
553
+ for include in self.parse_dependencies(filename)[1]:
554
+ include_path = join_path(os.path.dirname(filename), include)
555
+ if not path_exists(include_path):
556
+ include_path = self.context.find_include_file(include, source_file_path=filename)
557
+ if include_path:
558
+ if '.' + os.path.sep in include_path:
559
+ include_path = os.path.normpath(include_path)
560
+ all.add(include_path)
561
+ all.update(self.included_files(include_path))
562
+ elif not self.quiet:
563
+ print(u"Unable to locate '%s' referenced from '%s'" % (filename, include))
564
+ return all
565
+
566
+ @cached_method
567
+ def cimports_externs_incdirs(self, filename):
568
+ # This is really ugly. Nested cimports are resolved with respect to the
569
+ # includer, but includes are resolved with respect to the includee.
570
+ cimports, includes, externs = self.parse_dependencies(filename)[:3]
571
+ cimports = set(cimports)
572
+ externs = set(externs)
573
+ incdirs = set()
574
+ for include in self.included_files(filename):
575
+ included_cimports, included_externs, included_incdirs = self.cimports_externs_incdirs(include)
576
+ cimports.update(included_cimports)
577
+ externs.update(included_externs)
578
+ incdirs.update(included_incdirs)
579
+ externs, incdir = normalize_existing(filename, externs)
580
+ if incdir:
581
+ incdirs.add(incdir)
582
+ return tuple(cimports), externs, incdirs
583
+
584
+ def cimports(self, filename):
585
+ return self.cimports_externs_incdirs(filename)[0]
586
+
587
+ def package(self, filename):
588
+ return package(filename)
589
+
590
+ def fully_qualified_name(self, filename):
591
+ return fully_qualified_name(filename)
592
+
593
+ @cached_method
594
+ def find_pxd(self, module, filename=None):
595
+ is_relative = module[0] == '.'
596
+ if is_relative and not filename:
597
+ raise NotImplementedError("New relative imports.")
598
+ if filename is not None:
599
+ module_path = module.split('.')
600
+ if is_relative:
601
+ module_path.pop(0) # just explicitly relative
602
+ package_path = list(self.package(filename))
603
+ while module_path and not module_path[0]:
604
+ try:
605
+ package_path.pop()
606
+ except IndexError:
607
+ return None # FIXME: error?
608
+ module_path.pop(0)
609
+ relative = '.'.join(package_path + module_path)
610
+ pxd = self.context.find_pxd_file(relative, source_file_path=filename)
611
+ if pxd:
612
+ return pxd
613
+ if is_relative:
614
+ return None # FIXME: error?
615
+ return self.context.find_pxd_file(module, source_file_path=filename)
616
+
617
+ @cached_method
618
+ def cimported_files(self, filename):
619
+ filename_root, filename_ext = os.path.splitext(filename)
620
+ if filename_ext in ('.pyx', '.py') and path_exists(filename_root + '.pxd'):
621
+ pxd_list = [filename_root + '.pxd']
622
+ else:
623
+ pxd_list = []
624
+ # Cimports generates all possible combinations package.module
625
+ # when imported as from package cimport module.
626
+ for module in self.cimports(filename):
627
+ if module[:7] == 'cython.' or module == 'cython':
628
+ continue
629
+ pxd_file = self.find_pxd(module, filename)
630
+ if pxd_file is not None:
631
+ pxd_list.append(pxd_file)
632
+ return tuple(pxd_list)
633
+
634
+ @cached_method
635
+ def immediate_dependencies(self, filename):
636
+ all_deps = {filename}
637
+ all_deps.update(self.cimported_files(filename))
638
+ all_deps.update(self.included_files(filename))
639
+ return all_deps
640
+
641
+ def all_dependencies(self, filename):
642
+ return self.transitive_merge(filename, self.immediate_dependencies, set.union)
643
+
644
+ @cached_method
645
+ def timestamp(self, filename):
646
+ return os.path.getmtime(filename)
647
+
648
+ def extract_timestamp(self, filename):
649
+ return self.timestamp(filename), filename
650
+
651
+ def newest_dependency(self, filename):
652
+ return max([self.extract_timestamp(f) for f in self.all_dependencies(filename)])
653
+
654
+ def transitive_fingerprint(self, filename, module, compilation_options):
655
+ r"""
656
+ Return a fingerprint of a cython file that is about to be cythonized.
657
+
658
+ Fingerprints are looked up in future compilations. If the fingerprint
659
+ is found, the cythonization can be skipped. The fingerprint must
660
+ incorporate everything that has an influence on the generated code.
661
+ """
662
+ try:
663
+ m = hashlib.sha1(__version__.encode('UTF-8'))
664
+ m.update(file_hash(filename).encode('UTF-8'))
665
+ for x in sorted(self.all_dependencies(filename)):
666
+ if os.path.splitext(x)[1] not in ('.c', '.cpp', '.h'):
667
+ m.update(file_hash(x).encode('UTF-8'))
668
+ # Include the module attributes that change the compilation result
669
+ # in the fingerprint. We do not iterate over module.__dict__ and
670
+ # include almost everything here as users might extend Extension
671
+ # with arbitrary (random) attributes that would lead to cache
672
+ # misses.
673
+ m.update(str((
674
+ module.language,
675
+ getattr(module, 'py_limited_api', False),
676
+ getattr(module, 'np_pythran', False)
677
+ )).encode('UTF-8'))
678
+
679
+ m.update(compilation_options.get_fingerprint().encode('UTF-8'))
680
+ return m.hexdigest()
681
+ except IOError:
682
+ return None
683
+
684
+ def distutils_info0(self, filename):
685
+ info = self.parse_dependencies(filename)[3]
686
+ kwds = info.values
687
+ cimports, externs, incdirs = self.cimports_externs_incdirs(filename)
688
+ basedir = os.getcwd()
689
+ # Add dependencies on "cdef extern from ..." files
690
+ if externs:
691
+ externs = _make_relative(externs, basedir)
692
+ if 'depends' in kwds:
693
+ kwds['depends'] = list(set(kwds['depends']).union(externs))
694
+ else:
695
+ kwds['depends'] = list(externs)
696
+ # Add include_dirs to ensure that the C compiler will find the
697
+ # "cdef extern from ..." files
698
+ if incdirs:
699
+ include_dirs = list(kwds.get('include_dirs', []))
700
+ for inc in _make_relative(incdirs, basedir):
701
+ if inc not in include_dirs:
702
+ include_dirs.append(inc)
703
+ kwds['include_dirs'] = include_dirs
704
+ return info
705
+
706
+ def distutils_info(self, filename, aliases=None, base=None):
707
+ return (self.transitive_merge(filename, self.distutils_info0, DistutilsInfo.merge)
708
+ .subs(aliases)
709
+ .merge(base))
710
+
711
+ def transitive_merge(self, node, extract, merge):
712
+ try:
713
+ seen = self._transitive_cache[extract, merge]
714
+ except KeyError:
715
+ seen = self._transitive_cache[extract, merge] = {}
716
+ return self.transitive_merge_helper(
717
+ node, extract, merge, seen, {}, self.cimported_files)[0]
718
+
719
+ def transitive_merge_helper(self, node, extract, merge, seen, stack, outgoing):
720
+ if node in seen:
721
+ return seen[node], None
722
+ deps = extract(node)
723
+ if node in stack:
724
+ return deps, node
725
+ try:
726
+ stack[node] = len(stack)
727
+ loop = None
728
+ for next in outgoing(node):
729
+ sub_deps, sub_loop = self.transitive_merge_helper(next, extract, merge, seen, stack, outgoing)
730
+ if sub_loop is not None:
731
+ if loop is not None and stack[loop] < stack[sub_loop]:
732
+ pass
733
+ else:
734
+ loop = sub_loop
735
+ deps = merge(deps, sub_deps)
736
+ if loop == node:
737
+ loop = None
738
+ if loop is None:
739
+ seen[node] = deps
740
+ return deps, loop
741
+ finally:
742
+ del stack[node]
743
+
744
+
745
+ _dep_tree = None
746
+
747
+ def create_dependency_tree(ctx=None, quiet=False):
748
+ global _dep_tree
749
+ if _dep_tree is None:
750
+ if ctx is None:
751
+ ctx = Context(["."], get_directive_defaults(),
752
+ options=CompilationOptions(default_options))
753
+ _dep_tree = DependencyTree(ctx, quiet=quiet)
754
+ return _dep_tree
755
+
756
+
757
+ # If this changes, change also docs/src/reference/compilation.rst
758
+ # which mentions this function
759
+ def default_create_extension(template, kwds):
760
+ if 'depends' in kwds:
761
+ include_dirs = kwds.get('include_dirs', []) + ["."]
762
+ depends = resolve_depends(kwds['depends'], include_dirs)
763
+ kwds['depends'] = sorted(set(depends + template.depends))
764
+
765
+ t = template.__class__
766
+ ext = t(**kwds)
767
+ metadata = dict(distutils=kwds, module_name=kwds['name'])
768
+ return (ext, metadata)
769
+
770
+
771
+ # This may be useful for advanced users?
772
+ def create_extension_list(patterns, exclude=None, ctx=None, aliases=None, quiet=False, language=None,
773
+ exclude_failures=False):
774
+ if language is not None:
775
+ print('Warning: passing language={0!r} to cythonize() is deprecated. '
776
+ 'Instead, put "# distutils: language={0}" in your .pyx or .pxd file(s)'.format(language))
777
+ if exclude is None:
778
+ exclude = []
779
+ if patterns is None:
780
+ return [], {}
781
+ elif isinstance(patterns, basestring) or not isinstance(patterns, Iterable):
782
+ patterns = [patterns]
783
+
784
+ from distutils.extension import Extension
785
+ if 'setuptools' in sys.modules:
786
+ # Support setuptools Extension instances as well.
787
+ extension_classes = (
788
+ Extension, # should normally be the same as 'setuptools.extension._Extension'
789
+ sys.modules['setuptools.extension']._Extension,
790
+ sys.modules['setuptools'].Extension,
791
+ )
792
+ else:
793
+ extension_classes = (Extension,)
794
+
795
+ explicit_modules = {m.name for m in patterns if isinstance(m, extension_classes)}
796
+ deps = create_dependency_tree(ctx, quiet=quiet)
797
+
798
+ to_exclude = set()
799
+ if not isinstance(exclude, list):
800
+ exclude = [exclude]
801
+ for pattern in exclude:
802
+ to_exclude.update(map(os.path.abspath, extended_iglob(pattern)))
803
+
804
+ module_list = []
805
+ module_metadata = {}
806
+
807
+ # if no create_extension() function is defined, use a simple
808
+ # default function.
809
+ create_extension = ctx.options.create_extension or default_create_extension
810
+
811
+ seen = set()
812
+ for pattern in patterns:
813
+ if not isinstance(pattern, extension_classes):
814
+ pattern = encode_filename_in_py2(pattern)
815
+ if isinstance(pattern, str):
816
+ filepattern = pattern
817
+ template = Extension(pattern, []) # Fake Extension without sources
818
+ name = '*'
819
+ base = None
820
+ ext_language = language
821
+ elif isinstance(pattern, extension_classes):
822
+ cython_sources = [s for s in pattern.sources
823
+ if os.path.splitext(s)[1] in ('.py', '.pyx')]
824
+ if cython_sources:
825
+ filepattern = cython_sources[0]
826
+ if len(cython_sources) > 1:
827
+ print(u"Warning: Multiple cython sources found for extension '%s': %s\n"
828
+ u"See https://cython.readthedocs.io/en/latest/src/userguide/sharing_declarations.html "
829
+ u"for sharing declarations among Cython files." % (pattern.name, cython_sources))
830
+ else:
831
+ # ignore non-cython modules
832
+ module_list.append(pattern)
833
+ continue
834
+ template = pattern
835
+ name = template.name
836
+ base = DistutilsInfo(exn=template)
837
+ ext_language = None # do not override whatever the Extension says
838
+ else:
839
+ msg = str("pattern is not of type str nor subclass of Extension (%s)"
840
+ " but of type %s and class %s" % (repr(Extension),
841
+ type(pattern),
842
+ pattern.__class__))
843
+ raise TypeError(msg)
844
+
845
+ for file in nonempty(sorted(extended_iglob(filepattern)), "'%s' doesn't match any files" % filepattern):
846
+ if os.path.abspath(file) in to_exclude:
847
+ continue
848
+ module_name = deps.fully_qualified_name(file)
849
+ if '*' in name:
850
+ if module_name in explicit_modules:
851
+ continue
852
+ elif name:
853
+ module_name = name
854
+
855
+ Utils.raise_error_if_module_name_forbidden(module_name)
856
+
857
+ if module_name not in seen:
858
+ try:
859
+ kwds = deps.distutils_info(file, aliases, base).values
860
+ except Exception:
861
+ if exclude_failures:
862
+ continue
863
+ raise
864
+ if base is not None:
865
+ for key, value in base.values.items():
866
+ if key not in kwds:
867
+ kwds[key] = value
868
+
869
+ kwds['name'] = module_name
870
+
871
+ sources = [file] + [m for m in template.sources if m != filepattern]
872
+ if 'sources' in kwds:
873
+ # allow users to add .c files etc.
874
+ for source in kwds['sources']:
875
+ source = encode_filename_in_py2(source)
876
+ if source not in sources:
877
+ sources.append(source)
878
+ kwds['sources'] = sources
879
+
880
+ if ext_language and 'language' not in kwds:
881
+ kwds['language'] = ext_language
882
+
883
+ np_pythran = kwds.pop('np_pythran', False)
884
+
885
+ # Create the new extension
886
+ m, metadata = create_extension(template, kwds)
887
+ m.np_pythran = np_pythran or getattr(m, 'np_pythran', False)
888
+ if m.np_pythran:
889
+ update_pythran_extension(m)
890
+ module_list.append(m)
891
+
892
+ # Store metadata (this will be written as JSON in the
893
+ # generated C file but otherwise has no purpose)
894
+ module_metadata[module_name] = metadata
895
+
896
+ if file not in m.sources:
897
+ # Old setuptools unconditionally replaces .pyx with .c/.cpp
898
+ target_file = os.path.splitext(file)[0] + ('.cpp' if m.language == 'c++' else '.c')
899
+ try:
900
+ m.sources.remove(target_file)
901
+ except ValueError:
902
+ # never seen this in the wild, but probably better to warn about this unexpected case
903
+ print(u"Warning: Cython source file not found in sources list, adding %s" % file)
904
+ m.sources.insert(0, file)
905
+ seen.add(name)
906
+ return module_list, module_metadata
907
+
908
+
909
+ # This is the user-exposed entry point.
910
+ def cythonize(module_list, exclude=None, nthreads=0, aliases=None, quiet=False, force=None, language=None,
911
+ exclude_failures=False, show_all_warnings=False, **options):
912
+ """
913
+ Compile a set of source modules into C/C++ files and return a list of distutils
914
+ Extension objects for them.
915
+
916
+ :param module_list: As module list, pass either a glob pattern, a list of glob
917
+ patterns or a list of Extension objects. The latter
918
+ allows you to configure the extensions separately
919
+ through the normal distutils options.
920
+ You can also pass Extension objects that have
921
+ glob patterns as their sources. Then, cythonize
922
+ will resolve the pattern and create a
923
+ copy of the Extension for every matching file.
924
+
925
+ :param exclude: When passing glob patterns as ``module_list``, you can exclude certain
926
+ module names explicitly by passing them into the ``exclude`` option.
927
+
928
+ :param nthreads: The number of concurrent builds for parallel compilation
929
+ (requires the ``multiprocessing`` module).
930
+
931
+ :param aliases: If you want to use compiler directives like ``# distutils: ...`` but
932
+ can only know at compile time (when running the ``setup.py``) which values
933
+ to use, you can use aliases and pass a dictionary mapping those aliases
934
+ to Python strings when calling :func:`cythonize`. As an example, say you
935
+ want to use the compiler
936
+ directive ``# distutils: include_dirs = ../static_libs/include/``
937
+ but this path isn't always fixed and you want to find it when running
938
+ the ``setup.py``. You can then do ``# distutils: include_dirs = MY_HEADERS``,
939
+ find the value of ``MY_HEADERS`` in the ``setup.py``, put it in a python
940
+ variable called ``foo`` as a string, and then call
941
+ ``cythonize(..., aliases={'MY_HEADERS': foo})``.
942
+
943
+ :param quiet: If True, Cython won't print error, warning, or status messages during the
944
+ compilation.
945
+
946
+ :param force: Forces the recompilation of the Cython modules, even if the timestamps
947
+ don't indicate that a recompilation is necessary.
948
+
949
+ :param language: To globally enable C++ mode, you can pass ``language='c++'``. Otherwise, this
950
+ will be determined at a per-file level based on compiler directives. This
951
+ affects only modules found based on file names. Extension instances passed
952
+ into :func:`cythonize` will not be changed. It is recommended to rather
953
+ use the compiler directive ``# distutils: language = c++`` than this option.
954
+
955
+ :param exclude_failures: For a broad 'try to compile' mode that ignores compilation
956
+ failures and simply excludes the failed extensions,
957
+ pass ``exclude_failures=True``. Note that this only
958
+ really makes sense for compiling ``.py`` files which can also
959
+ be used without compilation.
960
+
961
+ :param show_all_warnings: By default, not all Cython warnings are printed.
962
+ Set to true to show all warnings.
963
+
964
+ :param annotate: If ``True``, will produce a HTML file for each of the ``.pyx`` or ``.py``
965
+ files compiled. The HTML file gives an indication
966
+ of how much Python interaction there is in
967
+ each of the source code lines, compared to plain C code.
968
+ It also allows you to see the C/C++ code
969
+ generated for each line of Cython code. This report is invaluable when
970
+ optimizing a function for speed,
971
+ and for determining when to :ref:`release the GIL <nogil>`:
972
+ in general, a ``nogil`` block may contain only "white" code.
973
+ See examples in :ref:`determining_where_to_add_types` or
974
+ :ref:`primes`.
975
+
976
+
977
+ :param annotate-fullc: If ``True`` will produce a colorized HTML version of
978
+ the source which includes entire generated C/C++-code.
979
+
980
+
981
+ :param compiler_directives: Allow to set compiler directives in the ``setup.py`` like this:
982
+ ``compiler_directives={'embedsignature': True}``.
983
+ See :ref:`compiler-directives`.
984
+
985
+ :param depfile: produce depfiles for the sources if True.
986
+ """
987
+ if exclude is None:
988
+ exclude = []
989
+ if 'include_path' not in options:
990
+ options['include_path'] = ['.']
991
+ if 'common_utility_include_dir' in options:
992
+ safe_makedirs(options['common_utility_include_dir'])
993
+
994
+ depfile = options.pop('depfile', None)
995
+
996
+ if pythran is None:
997
+ pythran_options = None
998
+ else:
999
+ pythran_options = CompilationOptions(**options)
1000
+ pythran_options.cplus = True
1001
+ pythran_options.np_pythran = True
1002
+
1003
+ if force is None:
1004
+ force = os.environ.get("CYTHON_FORCE_REGEN") == "1" # allow global overrides for build systems
1005
+
1006
+ c_options = CompilationOptions(**options)
1007
+ cpp_options = CompilationOptions(**options); cpp_options.cplus = True
1008
+ ctx = Context.from_options(c_options)
1009
+ options = c_options
1010
+ module_list, module_metadata = create_extension_list(
1011
+ module_list,
1012
+ exclude=exclude,
1013
+ ctx=ctx,
1014
+ quiet=quiet,
1015
+ exclude_failures=exclude_failures,
1016
+ language=language,
1017
+ aliases=aliases)
1018
+
1019
+ fix_windows_unicode_modules(module_list)
1020
+
1021
+ deps = create_dependency_tree(ctx, quiet=quiet)
1022
+ build_dir = getattr(options, 'build_dir', None)
1023
+
1024
+ def copy_to_build_dir(filepath, root=os.getcwd()):
1025
+ filepath_abs = os.path.abspath(filepath)
1026
+ if os.path.isabs(filepath):
1027
+ filepath = filepath_abs
1028
+ if filepath_abs.startswith(root):
1029
+ # distutil extension depends are relative to cwd
1030
+ mod_dir = join_path(build_dir,
1031
+ os.path.dirname(_relpath(filepath, root)))
1032
+ copy_once_if_newer(filepath_abs, mod_dir)
1033
+
1034
+ modules_by_cfile = collections.defaultdict(list)
1035
+ to_compile = []
1036
+ for m in module_list:
1037
+ if build_dir:
1038
+ for dep in m.depends:
1039
+ copy_to_build_dir(dep)
1040
+
1041
+ cy_sources = [
1042
+ source for source in m.sources
1043
+ if os.path.splitext(source)[1] in ('.pyx', '.py')]
1044
+ if len(cy_sources) == 1:
1045
+ # normal "special" case: believe the Extension module name to allow user overrides
1046
+ full_module_name = m.name
1047
+ else:
1048
+ # infer FQMN from source files
1049
+ full_module_name = None
1050
+
1051
+ new_sources = []
1052
+ for source in m.sources:
1053
+ base, ext = os.path.splitext(source)
1054
+ if ext in ('.pyx', '.py'):
1055
+ if m.np_pythran:
1056
+ c_file = base + '.cpp'
1057
+ options = pythran_options
1058
+ elif m.language == 'c++':
1059
+ c_file = base + '.cpp'
1060
+ options = cpp_options
1061
+ else:
1062
+ c_file = base + '.c'
1063
+ options = c_options
1064
+
1065
+ # setup for out of place build directory if enabled
1066
+ if build_dir:
1067
+ if os.path.isabs(c_file):
1068
+ c_file = os.path.splitdrive(c_file)[1]
1069
+ c_file = c_file.split(os.sep, 1)[1]
1070
+ c_file = os.path.join(build_dir, c_file)
1071
+ dir = os.path.dirname(c_file)
1072
+ safe_makedirs_once(dir)
1073
+
1074
+ # write out the depfile, if requested
1075
+ if depfile:
1076
+ dependencies = deps.all_dependencies(source)
1077
+ write_depfile(c_file, source, dependencies)
1078
+
1079
+ # Missing files and those generated by other Cython versions should always be recreated.
1080
+ if Utils.file_generated_by_this_cython(c_file):
1081
+ c_timestamp = os.path.getmtime(c_file)
1082
+ else:
1083
+ c_timestamp = -1
1084
+
1085
+ # Priority goes first to modified files, second to direct
1086
+ # dependents, and finally to indirect dependents.
1087
+ if c_timestamp < deps.timestamp(source):
1088
+ dep_timestamp, dep = deps.timestamp(source), source
1089
+ priority = 0
1090
+ else:
1091
+ dep_timestamp, dep = deps.newest_dependency(source)
1092
+ priority = 2 - (dep in deps.immediate_dependencies(source))
1093
+ if force or c_timestamp < dep_timestamp:
1094
+ if not quiet and not force:
1095
+ if source == dep:
1096
+ print(u"Compiling %s because it changed." % Utils.decode_filename(source))
1097
+ else:
1098
+ print(u"Compiling %s because it depends on %s." % (
1099
+ Utils.decode_filename(source),
1100
+ Utils.decode_filename(dep),
1101
+ ))
1102
+ if not force and options.cache:
1103
+ fingerprint = deps.transitive_fingerprint(source, m, options)
1104
+ else:
1105
+ fingerprint = None
1106
+ to_compile.append((
1107
+ priority, source, c_file, fingerprint, quiet,
1108
+ options, not exclude_failures, module_metadata.get(m.name),
1109
+ full_module_name, show_all_warnings))
1110
+ new_sources.append(c_file)
1111
+ modules_by_cfile[c_file].append(m)
1112
+ else:
1113
+ new_sources.append(source)
1114
+ if build_dir:
1115
+ copy_to_build_dir(source)
1116
+ m.sources = new_sources
1117
+
1118
+ if options.cache:
1119
+ if not os.path.exists(options.cache):
1120
+ os.makedirs(options.cache)
1121
+ to_compile.sort()
1122
+ # Drop "priority" component of "to_compile" entries and add a
1123
+ # simple progress indicator.
1124
+ N = len(to_compile)
1125
+ progress_fmt = "[{0:%d}/{1}] " % len(str(N))
1126
+ for i in range(N):
1127
+ progress = progress_fmt.format(i+1, N)
1128
+ to_compile[i] = to_compile[i][1:] + (progress,)
1129
+
1130
+ if N <= 1:
1131
+ nthreads = 0
1132
+ if nthreads:
1133
+ import multiprocessing
1134
+ pool = multiprocessing.Pool(
1135
+ nthreads, initializer=_init_multiprocessing_helper)
1136
+ # This is a bit more involved than it should be, because KeyboardInterrupts
1137
+ # break the multiprocessing workers when using a normal pool.map().
1138
+ # See, for example:
1139
+ # https://noswap.com/blog/python-multiprocessing-keyboardinterrupt
1140
+ try:
1141
+ result = pool.map_async(cythonize_one_helper, to_compile, chunksize=1)
1142
+ pool.close()
1143
+ while not result.ready():
1144
+ try:
1145
+ result.get(99999) # seconds
1146
+ except multiprocessing.TimeoutError:
1147
+ pass
1148
+ except KeyboardInterrupt:
1149
+ pool.terminate()
1150
+ raise
1151
+ pool.join()
1152
+ else:
1153
+ for args in to_compile:
1154
+ cythonize_one(*args)
1155
+
1156
+ if exclude_failures:
1157
+ failed_modules = set()
1158
+ for c_file, modules in modules_by_cfile.items():
1159
+ if not os.path.exists(c_file):
1160
+ failed_modules.update(modules)
1161
+ elif os.path.getsize(c_file) < 200:
1162
+ f = io_open(c_file, 'r', encoding='iso8859-1')
1163
+ try:
1164
+ if f.read(len('#error ')) == '#error ':
1165
+ # dead compilation result
1166
+ failed_modules.update(modules)
1167
+ finally:
1168
+ f.close()
1169
+ if failed_modules:
1170
+ for module in failed_modules:
1171
+ module_list.remove(module)
1172
+ print(u"Failed compilations: %s" % ', '.join(sorted([
1173
+ module.name for module in failed_modules])))
1174
+
1175
+ if options.cache:
1176
+ cleanup_cache(options.cache, getattr(options, 'cache_size', 1024 * 1024 * 100))
1177
+ # cythonize() is often followed by the (non-Python-buffered)
1178
+ # compiler output, flush now to avoid interleaving output.
1179
+ sys.stdout.flush()
1180
+ return module_list
1181
+
1182
+
1183
+ def fix_windows_unicode_modules(module_list):
1184
+ # Hack around a distutils 3.[5678] bug on Windows for unicode module names.
1185
+ # https://bugs.python.org/issue39432
1186
+ if sys.platform != "win32":
1187
+ return
1188
+ if sys.version_info < (3, 5) or sys.version_info >= (3, 8, 2):
1189
+ return
1190
+
1191
+ def make_filtered_list(ignored_symbol, old_entries):
1192
+ class FilteredExportSymbols(list):
1193
+ # export_symbols for unicode filename cause link errors on Windows
1194
+ # Cython doesn't need them (it already defines PyInit with the correct linkage)
1195
+ # so use this class as a temporary fix to stop them from being generated
1196
+ def __contains__(self, val):
1197
+ # so distutils doesn't "helpfully" add PyInit_<name>
1198
+ return val == ignored_symbol or list.__contains__(self, val)
1199
+
1200
+ filtered_list = FilteredExportSymbols(old_entries)
1201
+ if old_entries:
1202
+ filtered_list.extend(name for name in old_entries if name != ignored_symbol)
1203
+ return filtered_list
1204
+
1205
+ for m in module_list:
1206
+ # TODO: use m.name.isascii() in Py3.7+
1207
+ try:
1208
+ m.name.encode("ascii")
1209
+ continue
1210
+ except UnicodeEncodeError:
1211
+ pass
1212
+ m.export_symbols = make_filtered_list(
1213
+ "PyInit_" + m.name.rsplit(".", 1)[-1],
1214
+ m.export_symbols,
1215
+ )
1216
+
1217
+
1218
+ if os.environ.get('XML_RESULTS'):
1219
+ compile_result_dir = os.environ['XML_RESULTS']
1220
+ def record_results(func):
1221
+ def with_record(*args):
1222
+ t = time.time()
1223
+ success = True
1224
+ try:
1225
+ try:
1226
+ func(*args)
1227
+ except:
1228
+ success = False
1229
+ finally:
1230
+ t = time.time() - t
1231
+ module = fully_qualified_name(args[0])
1232
+ name = "cythonize." + module
1233
+ failures = 1 - success
1234
+ if success:
1235
+ failure_item = ""
1236
+ else:
1237
+ failure_item = "failure"
1238
+ output = open(os.path.join(compile_result_dir, name + ".xml"), "w")
1239
+ output.write("""
1240
+ <?xml version="1.0" ?>
1241
+ <testsuite name="%(name)s" errors="0" failures="%(failures)s" tests="1" time="%(t)s">
1242
+ <testcase classname="%(name)s" name="cythonize">
1243
+ %(failure_item)s
1244
+ </testcase>
1245
+ </testsuite>
1246
+ """.strip() % locals())
1247
+ output.close()
1248
+ return with_record
1249
+ else:
1250
+ def record_results(func):
1251
+ return func
1252
+
1253
+
1254
+ # TODO: Share context? Issue: pyx processing leaks into pxd module
1255
+ @record_results
1256
+ def cythonize_one(pyx_file, c_file, fingerprint, quiet, options=None,
1257
+ raise_on_failure=True, embedded_metadata=None,
1258
+ full_module_name=None, show_all_warnings=False,
1259
+ progress=""):
1260
+ from ..Compiler.Main import compile_single, default_options
1261
+ from ..Compiler.Errors import CompileError, PyrexError
1262
+
1263
+ if fingerprint:
1264
+ if not os.path.exists(options.cache):
1265
+ safe_makedirs(options.cache)
1266
+ # Cython-generated c files are highly compressible.
1267
+ # (E.g. a compression ratio of about 10 for Sage).
1268
+ fingerprint_file_base = join_path(
1269
+ options.cache, "%s-%s" % (os.path.basename(c_file), fingerprint))
1270
+ gz_fingerprint_file = fingerprint_file_base + gzip_ext
1271
+ zip_fingerprint_file = fingerprint_file_base + '.zip'
1272
+ if os.path.exists(gz_fingerprint_file) or os.path.exists(zip_fingerprint_file):
1273
+ if not quiet:
1274
+ print(u"%sFound compiled %s in cache" % (progress, pyx_file))
1275
+ if os.path.exists(gz_fingerprint_file):
1276
+ os.utime(gz_fingerprint_file, None)
1277
+ with contextlib.closing(gzip_open(gz_fingerprint_file, 'rb')) as g:
1278
+ with contextlib.closing(open(c_file, 'wb')) as f:
1279
+ shutil.copyfileobj(g, f)
1280
+ else:
1281
+ os.utime(zip_fingerprint_file, None)
1282
+ dirname = os.path.dirname(c_file)
1283
+ with contextlib.closing(zipfile.ZipFile(zip_fingerprint_file)) as z:
1284
+ for artifact in z.namelist():
1285
+ z.extract(artifact, os.path.join(dirname, artifact))
1286
+ return
1287
+ if not quiet:
1288
+ print(u"%sCythonizing %s" % (progress, Utils.decode_filename(pyx_file)))
1289
+ if options is None:
1290
+ options = CompilationOptions(default_options)
1291
+ options.output_file = c_file
1292
+ options.embedded_metadata = embedded_metadata
1293
+
1294
+ old_warning_level = Errors.LEVEL
1295
+ if show_all_warnings:
1296
+ Errors.LEVEL = 0
1297
+
1298
+ any_failures = 0
1299
+ try:
1300
+ result = compile_single(pyx_file, options, full_module_name=full_module_name)
1301
+ if result.num_errors > 0:
1302
+ any_failures = 1
1303
+ except (EnvironmentError, PyrexError) as e:
1304
+ sys.stderr.write('%s\n' % e)
1305
+ any_failures = 1
1306
+ # XXX
1307
+ import traceback
1308
+ traceback.print_exc()
1309
+ except Exception:
1310
+ if raise_on_failure:
1311
+ raise
1312
+ import traceback
1313
+ traceback.print_exc()
1314
+ any_failures = 1
1315
+ finally:
1316
+ if show_all_warnings:
1317
+ Errors.LEVEL = old_warning_level
1318
+
1319
+ if any_failures:
1320
+ if raise_on_failure:
1321
+ raise CompileError(None, pyx_file)
1322
+ elif os.path.exists(c_file):
1323
+ os.remove(c_file)
1324
+ elif fingerprint:
1325
+ artifacts = list(filter(None, [
1326
+ getattr(result, attr, None)
1327
+ for attr in ('c_file', 'h_file', 'api_file', 'i_file')]))
1328
+ if len(artifacts) == 1:
1329
+ fingerprint_file = gz_fingerprint_file
1330
+ with contextlib.closing(open(c_file, 'rb')) as f:
1331
+ with contextlib.closing(gzip_open(fingerprint_file + '.tmp', 'wb')) as g:
1332
+ shutil.copyfileobj(f, g)
1333
+ else:
1334
+ fingerprint_file = zip_fingerprint_file
1335
+ with contextlib.closing(zipfile.ZipFile(
1336
+ fingerprint_file + '.tmp', 'w', zipfile_compression_mode)) as zip:
1337
+ for artifact in artifacts:
1338
+ zip.write(artifact, os.path.basename(artifact))
1339
+ os.rename(fingerprint_file + '.tmp', fingerprint_file)
1340
+
1341
+
1342
+ def cythonize_one_helper(m):
1343
+ import traceback
1344
+ try:
1345
+ return cythonize_one(*m)
1346
+ except Exception:
1347
+ traceback.print_exc()
1348
+ raise
1349
+
1350
+
1351
+ def _init_multiprocessing_helper():
1352
+ # KeyboardInterrupt kills workers, so don't let them get it
1353
+ import signal
1354
+ signal.signal(signal.SIGINT, signal.SIG_IGN)
1355
+
1356
+
1357
+ def cleanup_cache(cache, target_size, ratio=.85):
1358
+ try:
1359
+ p = subprocess.Popen(['du', '-s', '-k', os.path.abspath(cache)], stdout=subprocess.PIPE)
1360
+ stdout, _ = p.communicate()
1361
+ res = p.wait()
1362
+ if res == 0:
1363
+ total_size = 1024 * int(stdout.strip().split()[0])
1364
+ if total_size < target_size:
1365
+ return
1366
+ except (OSError, ValueError):
1367
+ pass
1368
+ total_size = 0
1369
+ all = []
1370
+ for file in os.listdir(cache):
1371
+ path = join_path(cache, file)
1372
+ s = os.stat(path)
1373
+ total_size += s.st_size
1374
+ all.append((s.st_atime, s.st_size, path))
1375
+ if total_size > target_size:
1376
+ for time, size, file in reversed(sorted(all)):
1377
+ os.unlink(file)
1378
+ total_size -= size
1379
+ if total_size < target_size * ratio:
1380
+ break
Lib/site-packages/Cython/Build/Distutils.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from Cython.Distutils.build_ext import build_ext
Lib/site-packages/Cython/Build/Inline.py ADDED
@@ -0,0 +1,367 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ import hashlib
4
+ import inspect
5
+ import os
6
+ import re
7
+ import sys
8
+
9
+ from distutils.core import Distribution, Extension
10
+ from distutils.command.build_ext import build_ext
11
+
12
+ import Cython
13
+ from ..Compiler.Main import Context
14
+ from ..Compiler.Options import (default_options, CompilationOptions,
15
+ get_directive_defaults)
16
+
17
+ from ..Compiler.Visitor import CythonTransform, EnvTransform
18
+ from ..Compiler.ParseTreeTransforms import SkipDeclarations
19
+ from ..Compiler.TreeFragment import parse_from_strings
20
+ from ..Compiler.StringEncoding import _unicode
21
+ from .Dependencies import strip_string_literals, cythonize, cached_function
22
+ from ..Compiler import Pipeline
23
+ from ..Utils import get_cython_cache_dir
24
+ import cython as cython_module
25
+
26
+
27
+ IS_PY3 = sys.version_info >= (3,)
28
+
29
+ # A utility function to convert user-supplied ASCII strings to unicode.
30
+ if not IS_PY3:
31
+ def to_unicode(s):
32
+ if isinstance(s, bytes):
33
+ return s.decode('ascii')
34
+ else:
35
+ return s
36
+ else:
37
+ to_unicode = lambda x: x
38
+
39
+
40
+ if sys.version_info < (3, 5):
41
+ import imp
42
+ def load_dynamic(name, module_path):
43
+ return imp.load_dynamic(name, module_path)
44
+ else:
45
+ import importlib.util
46
+ from importlib.machinery import ExtensionFileLoader
47
+
48
+ def load_dynamic(name, path):
49
+ spec = importlib.util.spec_from_file_location(name, loader=ExtensionFileLoader(name, path))
50
+ module = importlib.util.module_from_spec(spec)
51
+ spec.loader.exec_module(module)
52
+ return module
53
+
54
+
55
+ class UnboundSymbols(EnvTransform, SkipDeclarations):
56
+ def __init__(self):
57
+ super(EnvTransform, self).__init__(context=None)
58
+ self.unbound = set()
59
+ def visit_NameNode(self, node):
60
+ if not self.current_env().lookup(node.name):
61
+ self.unbound.add(node.name)
62
+ return node
63
+ def __call__(self, node):
64
+ super(UnboundSymbols, self).__call__(node)
65
+ return self.unbound
66
+
67
+
68
+ @cached_function
69
+ def unbound_symbols(code, context=None):
70
+ code = to_unicode(code)
71
+ if context is None:
72
+ context = Context([], get_directive_defaults(),
73
+ options=CompilationOptions(default_options))
74
+ from ..Compiler.ParseTreeTransforms import AnalyseDeclarationsTransform
75
+ tree = parse_from_strings('(tree fragment)', code)
76
+ for phase in Pipeline.create_pipeline(context, 'pyx'):
77
+ if phase is None:
78
+ continue
79
+ tree = phase(tree)
80
+ if isinstance(phase, AnalyseDeclarationsTransform):
81
+ break
82
+ try:
83
+ import builtins
84
+ except ImportError:
85
+ import __builtin__ as builtins
86
+ return tuple(UnboundSymbols()(tree) - set(dir(builtins)))
87
+
88
+
89
+ def unsafe_type(arg, context=None):
90
+ py_type = type(arg)
91
+ if py_type is int:
92
+ return 'long'
93
+ else:
94
+ return safe_type(arg, context)
95
+
96
+
97
+ def safe_type(arg, context=None):
98
+ py_type = type(arg)
99
+ if py_type in (list, tuple, dict, str):
100
+ return py_type.__name__
101
+ elif py_type is complex:
102
+ return 'double complex'
103
+ elif py_type is float:
104
+ return 'double'
105
+ elif py_type is bool:
106
+ return 'bint'
107
+ elif 'numpy' in sys.modules and isinstance(arg, sys.modules['numpy'].ndarray):
108
+ return 'numpy.ndarray[numpy.%s_t, ndim=%s]' % (arg.dtype.name, arg.ndim)
109
+ else:
110
+ for base_type in py_type.__mro__:
111
+ if base_type.__module__ in ('__builtin__', 'builtins'):
112
+ return 'object'
113
+ module = context.find_module(base_type.__module__, need_pxd=False)
114
+ if module:
115
+ entry = module.lookup(base_type.__name__)
116
+ if entry.is_type:
117
+ return '%s.%s' % (base_type.__module__, base_type.__name__)
118
+ return 'object'
119
+
120
+
121
+ def _get_build_extension():
122
+ dist = Distribution()
123
+ # Ensure the build respects distutils configuration by parsing
124
+ # the configuration files
125
+ config_files = dist.find_config_files()
126
+ dist.parse_config_files(config_files)
127
+ build_extension = build_ext(dist)
128
+ build_extension.finalize_options()
129
+ return build_extension
130
+
131
+
132
+ @cached_function
133
+ def _create_context(cython_include_dirs):
134
+ return Context(
135
+ list(cython_include_dirs),
136
+ get_directive_defaults(),
137
+ options=CompilationOptions(default_options)
138
+ )
139
+
140
+
141
+ _cython_inline_cache = {}
142
+ _cython_inline_default_context = _create_context(('.',))
143
+
144
+
145
+ def _populate_unbound(kwds, unbound_symbols, locals=None, globals=None):
146
+ for symbol in unbound_symbols:
147
+ if symbol not in kwds:
148
+ if locals is None or globals is None:
149
+ calling_frame = inspect.currentframe().f_back.f_back.f_back
150
+ if locals is None:
151
+ locals = calling_frame.f_locals
152
+ if globals is None:
153
+ globals = calling_frame.f_globals
154
+ if symbol in locals:
155
+ kwds[symbol] = locals[symbol]
156
+ elif symbol in globals:
157
+ kwds[symbol] = globals[symbol]
158
+ else:
159
+ print("Couldn't find %r" % symbol)
160
+
161
+
162
+ def _inline_key(orig_code, arg_sigs, language_level):
163
+ key = orig_code, arg_sigs, sys.version_info, sys.executable, language_level, Cython.__version__
164
+ return hashlib.sha1(_unicode(key).encode('utf-8')).hexdigest()
165
+
166
+
167
+ def cython_inline(code, get_type=unsafe_type,
168
+ lib_dir=os.path.join(get_cython_cache_dir(), 'inline'),
169
+ cython_include_dirs=None, cython_compiler_directives=None,
170
+ force=False, quiet=False, locals=None, globals=None, language_level=None, **kwds):
171
+
172
+ if get_type is None:
173
+ get_type = lambda x: 'object'
174
+ ctx = _create_context(tuple(cython_include_dirs)) if cython_include_dirs else _cython_inline_default_context
175
+
176
+ cython_compiler_directives = dict(cython_compiler_directives) if cython_compiler_directives else {}
177
+ if language_level is None and 'language_level' not in cython_compiler_directives:
178
+ language_level = '3str'
179
+ if language_level is not None:
180
+ cython_compiler_directives['language_level'] = language_level
181
+
182
+ key_hash = None
183
+
184
+ # Fast path if this has been called in this session.
185
+ _unbound_symbols = _cython_inline_cache.get(code)
186
+ if _unbound_symbols is not None:
187
+ _populate_unbound(kwds, _unbound_symbols, locals, globals)
188
+ args = sorted(kwds.items())
189
+ arg_sigs = tuple([(get_type(value, ctx), arg) for arg, value in args])
190
+ key_hash = _inline_key(code, arg_sigs, language_level)
191
+ invoke = _cython_inline_cache.get((code, arg_sigs, key_hash))
192
+ if invoke is not None:
193
+ arg_list = [arg[1] for arg in args]
194
+ return invoke(*arg_list)
195
+
196
+ orig_code = code
197
+ code = to_unicode(code)
198
+ code, literals = strip_string_literals(code)
199
+ code = strip_common_indent(code)
200
+ if locals is None:
201
+ locals = inspect.currentframe().f_back.f_back.f_locals
202
+ if globals is None:
203
+ globals = inspect.currentframe().f_back.f_back.f_globals
204
+ try:
205
+ _cython_inline_cache[orig_code] = _unbound_symbols = unbound_symbols(code)
206
+ _populate_unbound(kwds, _unbound_symbols, locals, globals)
207
+ except AssertionError:
208
+ if not quiet:
209
+ # Parsing from strings not fully supported (e.g. cimports).
210
+ print("Could not parse code as a string (to extract unbound symbols).")
211
+
212
+ cimports = []
213
+ for name, arg in list(kwds.items()):
214
+ if arg is cython_module:
215
+ cimports.append('\ncimport cython as %s' % name)
216
+ del kwds[name]
217
+ arg_names = sorted(kwds)
218
+ arg_sigs = tuple([(get_type(kwds[arg], ctx), arg) for arg in arg_names])
219
+ if key_hash is None:
220
+ key_hash = _inline_key(orig_code, arg_sigs, language_level)
221
+ module_name = "_cython_inline_" + key_hash
222
+
223
+ if module_name in sys.modules:
224
+ module = sys.modules[module_name]
225
+
226
+ else:
227
+ build_extension = None
228
+ if cython_inline.so_ext is None:
229
+ # Figure out and cache current extension suffix
230
+ build_extension = _get_build_extension()
231
+ cython_inline.so_ext = build_extension.get_ext_filename('')
232
+
233
+ lib_dir = os.path.abspath(lib_dir)
234
+ module_path = os.path.join(lib_dir, module_name + cython_inline.so_ext)
235
+
236
+ if not os.path.exists(lib_dir):
237
+ os.makedirs(lib_dir)
238
+ if force or not os.path.isfile(module_path):
239
+ cflags = []
240
+ define_macros = []
241
+ c_include_dirs = []
242
+ qualified = re.compile(r'([.\w]+)[.]')
243
+ for type, _ in arg_sigs:
244
+ m = qualified.match(type)
245
+ if m:
246
+ cimports.append('\ncimport %s' % m.groups()[0])
247
+ # one special case
248
+ if m.groups()[0] == 'numpy':
249
+ import numpy
250
+ c_include_dirs.append(numpy.get_include())
251
+ define_macros.append(("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION"))
252
+ # cflags.append('-Wno-unused')
253
+ module_body, func_body = extract_func_code(code)
254
+ params = ', '.join(['%s %s' % a for a in arg_sigs])
255
+ module_code = """
256
+ %(module_body)s
257
+ %(cimports)s
258
+ def __invoke(%(params)s):
259
+ %(func_body)s
260
+ return locals()
261
+ """ % {'cimports': '\n'.join(cimports),
262
+ 'module_body': module_body,
263
+ 'params': params,
264
+ 'func_body': func_body }
265
+ for key, value in literals.items():
266
+ module_code = module_code.replace(key, value)
267
+ pyx_file = os.path.join(lib_dir, module_name + '.pyx')
268
+ fh = open(pyx_file, 'w')
269
+ try:
270
+ fh.write(module_code)
271
+ finally:
272
+ fh.close()
273
+ extension = Extension(
274
+ name=module_name,
275
+ sources=[pyx_file],
276
+ include_dirs=c_include_dirs or None,
277
+ extra_compile_args=cflags or None,
278
+ define_macros=define_macros or None,
279
+ )
280
+ if build_extension is None:
281
+ build_extension = _get_build_extension()
282
+ build_extension.extensions = cythonize(
283
+ [extension],
284
+ include_path=cython_include_dirs or ['.'],
285
+ compiler_directives=cython_compiler_directives,
286
+ quiet=quiet)
287
+ build_extension.build_temp = os.path.dirname(pyx_file)
288
+ build_extension.build_lib = lib_dir
289
+ build_extension.run()
290
+
291
+ if sys.platform == 'win32' and sys.version_info >= (3, 8):
292
+ with os.add_dll_directory(os.path.abspath(lib_dir)):
293
+ module = load_dynamic(module_name, module_path)
294
+ else:
295
+ module = load_dynamic(module_name, module_path)
296
+
297
+ _cython_inline_cache[orig_code, arg_sigs, key_hash] = module.__invoke
298
+ arg_list = [kwds[arg] for arg in arg_names]
299
+ return module.__invoke(*arg_list)
300
+
301
+
302
+ # Cached suffix used by cython_inline above. None should get
303
+ # overridden with actual value upon the first cython_inline invocation
304
+ cython_inline.so_ext = None
305
+
306
+ _find_non_space = re.compile('[^ ]').search
307
+
308
+
309
+ def strip_common_indent(code):
310
+ min_indent = None
311
+ lines = code.splitlines()
312
+ for line in lines:
313
+ match = _find_non_space(line)
314
+ if not match:
315
+ continue # blank
316
+ indent = match.start()
317
+ if line[indent] == '#':
318
+ continue # comment
319
+ if min_indent is None or min_indent > indent:
320
+ min_indent = indent
321
+ for ix, line in enumerate(lines):
322
+ match = _find_non_space(line)
323
+ if not match or not line or line[indent:indent+1] == '#':
324
+ continue
325
+ lines[ix] = line[min_indent:]
326
+ return '\n'.join(lines)
327
+
328
+
329
+ module_statement = re.compile(r'^((cdef +(extern|class))|cimport|(from .+ cimport)|(from .+ import +[*]))')
330
+ def extract_func_code(code):
331
+ module = []
332
+ function = []
333
+ current = function
334
+ code = code.replace('\t', ' ')
335
+ lines = code.split('\n')
336
+ for line in lines:
337
+ if not line.startswith(' '):
338
+ if module_statement.match(line):
339
+ current = module
340
+ else:
341
+ current = function
342
+ current.append(line)
343
+ return '\n'.join(module), ' ' + '\n '.join(function)
344
+
345
+
346
+ def get_body(source):
347
+ ix = source.index(':')
348
+ if source[:5] == 'lambda':
349
+ return "return %s" % source[ix+1:]
350
+ else:
351
+ return source[ix+1:]
352
+
353
+
354
+ # Lots to be done here... It would be especially cool if compiled functions
355
+ # could invoke each other quickly.
356
+ class RuntimeCompiledFunction(object):
357
+
358
+ def __init__(self, f):
359
+ self._f = f
360
+ self._body = get_body(inspect.getsource(f))
361
+
362
+ def __call__(self, *args, **kwds):
363
+ all = inspect.getcallargs(self._f, *args, **kwds)
364
+ if IS_PY3:
365
+ return cython_inline(self._body, locals=self._f.__globals__, globals=self._f.__globals__, **all)
366
+ else:
367
+ return cython_inline(self._body, locals=self._f.func_globals, globals=self._f.func_globals, **all)
Lib/site-packages/Cython/Build/IpythonMagic.py ADDED
@@ -0,0 +1,572 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ =====================
4
+ Cython related magics
5
+ =====================
6
+
7
+ Magic command interface for interactive work with Cython
8
+
9
+ .. note::
10
+
11
+ The ``Cython`` package needs to be installed separately. It
12
+ can be obtained using ``easy_install`` or ``pip``.
13
+
14
+ Usage
15
+ =====
16
+
17
+ To enable the magics below, execute ``%load_ext cython``.
18
+
19
+ ``%%cython``
20
+
21
+ {CYTHON_DOC}
22
+
23
+ ``%%cython_inline``
24
+
25
+ {CYTHON_INLINE_DOC}
26
+
27
+ ``%%cython_pyximport``
28
+
29
+ {CYTHON_PYXIMPORT_DOC}
30
+
31
+ Author:
32
+ * Brian Granger
33
+
34
+ Code moved from IPython and adapted by:
35
+ * Martín Gaitán
36
+
37
+ Parts of this code were taken from Cython.inline.
38
+ """
39
+ #-----------------------------------------------------------------------------
40
+ # Copyright (C) 2010-2011, IPython Development Team.
41
+ #
42
+ # Distributed under the terms of the Modified BSD License.
43
+ #
44
+ # The full license is in the file ipython-COPYING.rst, distributed with this software.
45
+ #-----------------------------------------------------------------------------
46
+
47
+ from __future__ import absolute_import, print_function
48
+
49
+ import io
50
+ import os
51
+ import re
52
+ import sys
53
+ import time
54
+ import copy
55
+ import distutils.log
56
+ import textwrap
57
+
58
+ IO_ENCODING = sys.getfilesystemencoding()
59
+ IS_PY2 = sys.version_info[0] < 3
60
+
61
+ import hashlib
62
+ from distutils.core import Distribution, Extension
63
+ from distutils.command.build_ext import build_ext
64
+
65
+ from IPython.core import display
66
+ from IPython.core import magic_arguments
67
+ from IPython.core.magic import Magics, magics_class, cell_magic
68
+ try:
69
+ from IPython.paths import get_ipython_cache_dir
70
+ except ImportError:
71
+ # older IPython version
72
+ from IPython.utils.path import get_ipython_cache_dir
73
+ from IPython.utils.text import dedent
74
+
75
+ from ..Shadow import __version__ as cython_version
76
+ from ..Compiler.Errors import CompileError
77
+ from .Inline import cython_inline, load_dynamic
78
+ from .Dependencies import cythonize
79
+ from ..Utils import captured_fd, print_captured
80
+
81
+
82
+ PGO_CONFIG = {
83
+ 'gcc': {
84
+ 'gen': ['-fprofile-generate', '-fprofile-dir={TEMPDIR}'],
85
+ 'use': ['-fprofile-use', '-fprofile-correction', '-fprofile-dir={TEMPDIR}'],
86
+ },
87
+ # blind copy from 'configure' script in CPython 3.7
88
+ 'icc': {
89
+ 'gen': ['-prof-gen'],
90
+ 'use': ['-prof-use'],
91
+ }
92
+ }
93
+ PGO_CONFIG['mingw32'] = PGO_CONFIG['gcc']
94
+
95
+
96
+ if IS_PY2:
97
+ def encode_fs(name):
98
+ return name if isinstance(name, bytes) else name.encode(IO_ENCODING)
99
+ else:
100
+ def encode_fs(name):
101
+ return name
102
+
103
+
104
+ @magics_class
105
+ class CythonMagics(Magics):
106
+
107
+ def __init__(self, shell):
108
+ super(CythonMagics, self).__init__(shell)
109
+ self._reloads = {}
110
+ self._code_cache = {}
111
+ self._pyximport_installed = False
112
+
113
+ def _import_all(self, module):
114
+ mdict = module.__dict__
115
+ if '__all__' in mdict:
116
+ keys = mdict['__all__']
117
+ else:
118
+ keys = [k for k in mdict if not k.startswith('_')]
119
+
120
+ for k in keys:
121
+ try:
122
+ self.shell.push({k: mdict[k]})
123
+ except KeyError:
124
+ msg = "'module' object has no attribute '%s'" % k
125
+ raise AttributeError(msg)
126
+
127
+ @cell_magic
128
+ def cython_inline(self, line, cell):
129
+ """Compile and run a Cython code cell using Cython.inline.
130
+
131
+ This magic simply passes the body of the cell to Cython.inline
132
+ and returns the result. If the variables `a` and `b` are defined
133
+ in the user's namespace, here is a simple example that returns
134
+ their sum::
135
+
136
+ %%cython_inline
137
+ return a+b
138
+
139
+ For most purposes, we recommend the usage of the `%%cython` magic.
140
+ """
141
+ locs = self.shell.user_global_ns
142
+ globs = self.shell.user_ns
143
+ return cython_inline(cell, locals=locs, globals=globs)
144
+
145
+ @cell_magic
146
+ def cython_pyximport(self, line, cell):
147
+ """Compile and import a Cython code cell using pyximport.
148
+
149
+ The contents of the cell are written to a `.pyx` file in the current
150
+ working directory, which is then imported using `pyximport`. This
151
+ magic requires a module name to be passed::
152
+
153
+ %%cython_pyximport modulename
154
+ def f(x):
155
+ return 2.0*x
156
+
157
+ The compiled module is then imported and all of its symbols are
158
+ injected into the user's namespace. For most purposes, we recommend
159
+ the usage of the `%%cython` magic.
160
+ """
161
+ module_name = line.strip()
162
+ if not module_name:
163
+ raise ValueError('module name must be given')
164
+ fname = module_name + '.pyx'
165
+ with io.open(fname, 'w', encoding='utf-8') as f:
166
+ f.write(cell)
167
+ if 'pyximport' not in sys.modules or not self._pyximport_installed:
168
+ import pyximport
169
+ pyximport.install()
170
+ self._pyximport_installed = True
171
+ if module_name in self._reloads:
172
+ module = self._reloads[module_name]
173
+ # Note: reloading extension modules is not actually supported
174
+ # (requires PEP-489 reinitialisation support).
175
+ # Don't know why this should ever have worked as it reads here.
176
+ # All we really need to do is to update the globals below.
177
+ #reload(module)
178
+ else:
179
+ __import__(module_name)
180
+ module = sys.modules[module_name]
181
+ self._reloads[module_name] = module
182
+ self._import_all(module)
183
+
184
+ @magic_arguments.magic_arguments()
185
+ @magic_arguments.argument(
186
+ '-a', '--annotate', action='store_const', const='default', dest='annotate',
187
+ help="Produce a colorized HTML version of the source."
188
+ )
189
+ @magic_arguments.argument(
190
+ '--annotate-fullc', action='store_const', const='fullc', dest='annotate',
191
+ help="Produce a colorized HTML version of the source "
192
+ "which includes entire generated C/C++-code."
193
+ )
194
+ @magic_arguments.argument(
195
+ '-+', '--cplus', action='store_true', default=False,
196
+ help="Output a C++ rather than C file."
197
+ )
198
+ @magic_arguments.argument(
199
+ '-3', dest='language_level', action='store_const', const=3, default=None,
200
+ help="Select Python 3 syntax."
201
+ )
202
+ @magic_arguments.argument(
203
+ '-2', dest='language_level', action='store_const', const=2, default=None,
204
+ help="Select Python 2 syntax."
205
+ )
206
+ @magic_arguments.argument(
207
+ '-f', '--force', action='store_true', default=False,
208
+ help="Force the compilation of a new module, even if the source has been "
209
+ "previously compiled."
210
+ )
211
+ @magic_arguments.argument(
212
+ '-c', '--compile-args', action='append', default=[],
213
+ help="Extra flags to pass to compiler via the `extra_compile_args` "
214
+ "Extension flag (can be specified multiple times)."
215
+ )
216
+ @magic_arguments.argument(
217
+ '--link-args', action='append', default=[],
218
+ help="Extra flags to pass to linker via the `extra_link_args` "
219
+ "Extension flag (can be specified multiple times)."
220
+ )
221
+ @magic_arguments.argument(
222
+ '-l', '--lib', action='append', default=[],
223
+ help="Add a library to link the extension against (can be specified "
224
+ "multiple times)."
225
+ )
226
+ @magic_arguments.argument(
227
+ '-n', '--name',
228
+ help="Specify a name for the Cython module."
229
+ )
230
+ @magic_arguments.argument(
231
+ '-L', dest='library_dirs', metavar='dir', action='append', default=[],
232
+ help="Add a path to the list of library directories (can be specified "
233
+ "multiple times)."
234
+ )
235
+ @magic_arguments.argument(
236
+ '-I', '--include', action='append', default=[],
237
+ help="Add a path to the list of include directories (can be specified "
238
+ "multiple times)."
239
+ )
240
+ @magic_arguments.argument(
241
+ '-S', '--src', action='append', default=[],
242
+ help="Add a path to the list of src files (can be specified "
243
+ "multiple times)."
244
+ )
245
+ @magic_arguments.argument(
246
+ '--pgo', dest='pgo', action='store_true', default=False,
247
+ help=("Enable profile guided optimisation in the C compiler. "
248
+ "Compiles the cell twice and executes it in between to generate a runtime profile.")
249
+ )
250
+ @magic_arguments.argument(
251
+ '--verbose', dest='quiet', action='store_false', default=True,
252
+ help=("Print debug information like generated .c/.cpp file location "
253
+ "and exact gcc/g++ command invoked.")
254
+ )
255
+ @cell_magic
256
+ def cython(self, line, cell):
257
+ """Compile and import everything from a Cython code cell.
258
+
259
+ The contents of the cell are written to a `.pyx` file in the
260
+ directory `IPYTHONDIR/cython` using a filename with the hash of the
261
+ code. This file is then cythonized and compiled. The resulting module
262
+ is imported and all of its symbols are injected into the user's
263
+ namespace. The usage is similar to that of `%%cython_pyximport` but
264
+ you don't have to pass a module name::
265
+
266
+ %%cython
267
+ def f(x):
268
+ return 2.0*x
269
+
270
+ To compile OpenMP codes, pass the required `--compile-args`
271
+ and `--link-args`. For example with gcc::
272
+
273
+ %%cython --compile-args=-fopenmp --link-args=-fopenmp
274
+ ...
275
+
276
+ To enable profile guided optimisation, pass the ``--pgo`` option.
277
+ Note that the cell itself needs to take care of establishing a suitable
278
+ profile when executed. This can be done by implementing the functions to
279
+ optimise, and then calling them directly in the same cell on some realistic
280
+ training data like this::
281
+
282
+ %%cython --pgo
283
+ def critical_function(data):
284
+ for item in data:
285
+ ...
286
+
287
+ # execute function several times to build profile
288
+ from somewhere import some_typical_data
289
+ for _ in range(100):
290
+ critical_function(some_typical_data)
291
+
292
+ In Python 3.5 and later, you can distinguish between the profile and
293
+ non-profile runs as follows::
294
+
295
+ if "_pgo_" in __name__:
296
+ ... # execute critical code here
297
+ """
298
+ args = magic_arguments.parse_argstring(self.cython, line)
299
+ code = cell if cell.endswith('\n') else cell + '\n'
300
+ lib_dir = os.path.join(get_ipython_cache_dir(), 'cython')
301
+ key = (code, line, sys.version_info, sys.executable, cython_version)
302
+
303
+ if not os.path.exists(lib_dir):
304
+ os.makedirs(lib_dir)
305
+
306
+ if args.pgo:
307
+ key += ('pgo',)
308
+ if args.force:
309
+ # Force a new module name by adding the current time to the
310
+ # key which is hashed to determine the module name.
311
+ key += (time.time(),)
312
+
313
+ if args.name:
314
+ module_name = str(args.name) # no-op in Py3
315
+ else:
316
+ module_name = "_cython_magic_" + hashlib.sha1(str(key).encode('utf-8')).hexdigest()
317
+ html_file = os.path.join(lib_dir, module_name + '.html')
318
+ module_path = os.path.join(lib_dir, module_name + self.so_ext)
319
+
320
+ have_module = os.path.isfile(module_path)
321
+ need_cythonize = args.pgo or not have_module
322
+
323
+ if args.annotate:
324
+ if not os.path.isfile(html_file):
325
+ need_cythonize = True
326
+
327
+ extension = None
328
+ if need_cythonize:
329
+ extensions = self._cythonize(module_name, code, lib_dir, args, quiet=args.quiet)
330
+ if extensions is None:
331
+ # Compilation failed and printed error message
332
+ return None
333
+ assert len(extensions) == 1
334
+ extension = extensions[0]
335
+ self._code_cache[key] = module_name
336
+
337
+ if args.pgo:
338
+ self._profile_pgo_wrapper(extension, lib_dir)
339
+
340
+ def print_compiler_output(stdout, stderr, where):
341
+ # On windows, errors are printed to stdout, we redirect both to sys.stderr.
342
+ print_captured(stdout, where, u"Content of stdout:\n")
343
+ print_captured(stderr, where, u"Content of stderr:\n")
344
+
345
+ get_stderr = get_stdout = None
346
+ try:
347
+ with captured_fd(1) as get_stdout:
348
+ with captured_fd(2) as get_stderr:
349
+ self._build_extension(
350
+ extension, lib_dir, pgo_step_name='use' if args.pgo else None, quiet=args.quiet)
351
+ except (distutils.errors.CompileError, distutils.errors.LinkError):
352
+ # Build failed, print error message from compiler/linker
353
+ print_compiler_output(get_stdout(), get_stderr(), sys.stderr)
354
+ return None
355
+
356
+ # Build seems ok, but we might still want to show any warnings that occurred
357
+ print_compiler_output(get_stdout(), get_stderr(), sys.stdout)
358
+
359
+ module = load_dynamic(module_name, module_path)
360
+ self._import_all(module)
361
+
362
+ if args.annotate:
363
+ try:
364
+ with io.open(html_file, encoding='utf-8') as f:
365
+ annotated_html = f.read()
366
+ except IOError as e:
367
+ # File could not be opened. Most likely the user has a version
368
+ # of Cython before 0.15.1 (when `cythonize` learned the
369
+ # `force` keyword argument) and has already compiled this
370
+ # exact source without annotation.
371
+ print('Cython completed successfully but the annotated '
372
+ 'source could not be read.', file=sys.stderr)
373
+ print(e, file=sys.stderr)
374
+ else:
375
+ return display.HTML(self.clean_annotated_html(annotated_html))
376
+
377
+ def _profile_pgo_wrapper(self, extension, lib_dir):
378
+ """
379
+ Generate a .c file for a separate extension module that calls the
380
+ module init function of the original module. This makes sure that the
381
+ PGO profiler sees the correct .o file of the final module, but it still
382
+ allows us to import the module under a different name for profiling,
383
+ before recompiling it into the PGO optimised module. Overwriting and
384
+ reimporting the same shared library is not portable.
385
+ """
386
+ extension = copy.copy(extension) # shallow copy, do not modify sources in place!
387
+ module_name = extension.name
388
+ pgo_module_name = '_pgo_' + module_name
389
+ pgo_wrapper_c_file = os.path.join(lib_dir, pgo_module_name + '.c')
390
+ with io.open(pgo_wrapper_c_file, 'w', encoding='utf-8') as f:
391
+ f.write(textwrap.dedent(u"""
392
+ #include "Python.h"
393
+ #if PY_MAJOR_VERSION < 3
394
+ extern PyMODINIT_FUNC init%(module_name)s(void);
395
+ PyMODINIT_FUNC init%(pgo_module_name)s(void); /*proto*/
396
+ PyMODINIT_FUNC init%(pgo_module_name)s(void) {
397
+ PyObject *sys_modules;
398
+ init%(module_name)s(); if (PyErr_Occurred()) return;
399
+ sys_modules = PyImport_GetModuleDict(); /* borrowed, no exception, "never" fails */
400
+ if (sys_modules) {
401
+ PyObject *module = PyDict_GetItemString(sys_modules, "%(module_name)s"); if (!module) return;
402
+ PyDict_SetItemString(sys_modules, "%(pgo_module_name)s", module);
403
+ Py_DECREF(module);
404
+ }
405
+ }
406
+ #else
407
+ extern PyMODINIT_FUNC PyInit_%(module_name)s(void);
408
+ PyMODINIT_FUNC PyInit_%(pgo_module_name)s(void); /*proto*/
409
+ PyMODINIT_FUNC PyInit_%(pgo_module_name)s(void) {
410
+ return PyInit_%(module_name)s();
411
+ }
412
+ #endif
413
+ """ % {'module_name': module_name, 'pgo_module_name': pgo_module_name}))
414
+
415
+ extension.sources = extension.sources + [pgo_wrapper_c_file] # do not modify in place!
416
+ extension.name = pgo_module_name
417
+
418
+ self._build_extension(extension, lib_dir, pgo_step_name='gen')
419
+
420
+ # import and execute module code to generate profile
421
+ so_module_path = os.path.join(lib_dir, pgo_module_name + self.so_ext)
422
+ load_dynamic(pgo_module_name, so_module_path)
423
+
424
+ def _cythonize(self, module_name, code, lib_dir, args, quiet=True):
425
+ pyx_file = os.path.join(lib_dir, module_name + '.pyx')
426
+ pyx_file = encode_fs(pyx_file)
427
+
428
+ c_include_dirs = args.include
429
+ c_src_files = list(map(str, args.src))
430
+ if 'numpy' in code:
431
+ import numpy
432
+ c_include_dirs.append(numpy.get_include())
433
+ with io.open(pyx_file, 'w', encoding='utf-8') as f:
434
+ f.write(code)
435
+ extension = Extension(
436
+ name=module_name,
437
+ sources=[pyx_file] + c_src_files,
438
+ include_dirs=c_include_dirs,
439
+ library_dirs=args.library_dirs,
440
+ extra_compile_args=args.compile_args,
441
+ extra_link_args=args.link_args,
442
+ libraries=args.lib,
443
+ language='c++' if args.cplus else 'c',
444
+ )
445
+ try:
446
+ opts = dict(
447
+ quiet=quiet,
448
+ annotate=args.annotate,
449
+ force=True,
450
+ language_level=min(3, sys.version_info[0]),
451
+ )
452
+ if args.language_level is not None:
453
+ assert args.language_level in (2, 3)
454
+ opts['language_level'] = args.language_level
455
+ return cythonize([extension], **opts)
456
+ except CompileError:
457
+ return None
458
+
459
+ def _build_extension(self, extension, lib_dir, temp_dir=None, pgo_step_name=None, quiet=True):
460
+ build_extension = self._get_build_extension(
461
+ extension, lib_dir=lib_dir, temp_dir=temp_dir, pgo_step_name=pgo_step_name)
462
+ old_threshold = None
463
+ try:
464
+ if not quiet:
465
+ old_threshold = distutils.log.set_threshold(distutils.log.DEBUG)
466
+ build_extension.run()
467
+ finally:
468
+ if not quiet and old_threshold is not None:
469
+ distutils.log.set_threshold(old_threshold)
470
+
471
+ def _add_pgo_flags(self, build_extension, step_name, temp_dir):
472
+ compiler_type = build_extension.compiler.compiler_type
473
+ if compiler_type == 'unix':
474
+ compiler_cmd = build_extension.compiler.compiler_so
475
+ # TODO: we could try to call "[cmd] --version" for better insights
476
+ if not compiler_cmd:
477
+ pass
478
+ elif 'clang' in compiler_cmd or 'clang' in compiler_cmd[0]:
479
+ compiler_type = 'clang'
480
+ elif 'icc' in compiler_cmd or 'icc' in compiler_cmd[0]:
481
+ compiler_type = 'icc'
482
+ elif 'gcc' in compiler_cmd or 'gcc' in compiler_cmd[0]:
483
+ compiler_type = 'gcc'
484
+ elif 'g++' in compiler_cmd or 'g++' in compiler_cmd[0]:
485
+ compiler_type = 'gcc'
486
+ config = PGO_CONFIG.get(compiler_type)
487
+ orig_flags = []
488
+ if config and step_name in config:
489
+ flags = [f.format(TEMPDIR=temp_dir) for f in config[step_name]]
490
+ for extension in build_extension.extensions:
491
+ orig_flags.append((extension.extra_compile_args, extension.extra_link_args))
492
+ extension.extra_compile_args = extension.extra_compile_args + flags
493
+ extension.extra_link_args = extension.extra_link_args + flags
494
+ else:
495
+ print("No PGO %s configuration known for C compiler type '%s'" % (step_name, compiler_type),
496
+ file=sys.stderr)
497
+ return orig_flags
498
+
499
+ @property
500
+ def so_ext(self):
501
+ """The extension suffix for compiled modules."""
502
+ try:
503
+ return self._so_ext
504
+ except AttributeError:
505
+ self._so_ext = self._get_build_extension().get_ext_filename('')
506
+ return self._so_ext
507
+
508
+ def _clear_distutils_mkpath_cache(self):
509
+ """clear distutils mkpath cache
510
+
511
+ prevents distutils from skipping re-creation of dirs that have been removed
512
+ """
513
+ try:
514
+ from distutils.dir_util import _path_created
515
+ except ImportError:
516
+ pass
517
+ else:
518
+ _path_created.clear()
519
+
520
+ def _get_build_extension(self, extension=None, lib_dir=None, temp_dir=None,
521
+ pgo_step_name=None, _build_ext=build_ext):
522
+ self._clear_distutils_mkpath_cache()
523
+ dist = Distribution()
524
+ config_files = dist.find_config_files()
525
+ try:
526
+ config_files.remove('setup.cfg')
527
+ except ValueError:
528
+ pass
529
+ dist.parse_config_files(config_files)
530
+
531
+ if not temp_dir:
532
+ temp_dir = lib_dir
533
+ add_pgo_flags = self._add_pgo_flags
534
+
535
+ if pgo_step_name:
536
+ base_build_ext = _build_ext
537
+ class _build_ext(_build_ext):
538
+ def build_extensions(self):
539
+ add_pgo_flags(self, pgo_step_name, temp_dir)
540
+ base_build_ext.build_extensions(self)
541
+
542
+ build_extension = _build_ext(dist)
543
+ build_extension.finalize_options()
544
+ if temp_dir:
545
+ temp_dir = encode_fs(temp_dir)
546
+ build_extension.build_temp = temp_dir
547
+ if lib_dir:
548
+ lib_dir = encode_fs(lib_dir)
549
+ build_extension.build_lib = lib_dir
550
+ if extension is not None:
551
+ build_extension.extensions = [extension]
552
+ return build_extension
553
+
554
+ @staticmethod
555
+ def clean_annotated_html(html):
556
+ """Clean up the annotated HTML source.
557
+
558
+ Strips the link to the generated C or C++ file, which we do not
559
+ present to the user.
560
+ """
561
+ r = re.compile('<p>Raw output: <a href="(.*)">(.*)</a>')
562
+ html = '\n'.join(l for l in html.splitlines() if not r.match(l))
563
+ return html
564
+
565
+ __doc__ = __doc__.format(
566
+ # rST doesn't see the -+ flag as part of an option list, so we
567
+ # hide it from the module-level docstring.
568
+ CYTHON_DOC=dedent(CythonMagics.cython.__doc__\
569
+ .replace('-+, --cplus', '--cplus ')),
570
+ CYTHON_INLINE_DOC=dedent(CythonMagics.cython_inline.__doc__),
571
+ CYTHON_PYXIMPORT_DOC=dedent(CythonMagics.cython_pyximport.__doc__),
572
+ )
Lib/site-packages/Cython/Build/Tests/TestCyCache.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import difflib
2
+ import glob
3
+ import gzip
4
+ import os
5
+ import sys
6
+ import tempfile
7
+ import unittest
8
+
9
+ import Cython.Build.Dependencies
10
+ import Cython.Utils
11
+ from Cython.TestUtils import CythonTest
12
+
13
+
14
+ class TestCyCache(CythonTest):
15
+
16
+ def setUp(self):
17
+ CythonTest.setUp(self)
18
+ self.temp_dir = tempfile.mkdtemp(
19
+ prefix='cycache-test',
20
+ dir='TEST_TMP' if os.path.isdir('TEST_TMP') else None)
21
+ self.src_dir = tempfile.mkdtemp(prefix='src', dir=self.temp_dir)
22
+ self.cache_dir = tempfile.mkdtemp(prefix='cache', dir=self.temp_dir)
23
+
24
+ def cache_files(self, file_glob):
25
+ return glob.glob(os.path.join(self.cache_dir, file_glob))
26
+
27
+ def fresh_cythonize(self, *args, **kwargs):
28
+ Cython.Utils.clear_function_caches()
29
+ Cython.Build.Dependencies._dep_tree = None # discard method caches
30
+ Cython.Build.Dependencies.cythonize(*args, **kwargs)
31
+
32
+ def test_cycache_switch(self):
33
+ content1 = 'value = 1\n'
34
+ content2 = 'value = 2\n'
35
+ a_pyx = os.path.join(self.src_dir, 'a.pyx')
36
+ a_c = a_pyx[:-4] + '.c'
37
+
38
+ with open(a_pyx, 'w') as f:
39
+ f.write(content1)
40
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
41
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
42
+ self.assertEqual(1, len(self.cache_files('a.c*')))
43
+ with open(a_c) as f:
44
+ a_contents1 = f.read()
45
+ os.unlink(a_c)
46
+
47
+ with open(a_pyx, 'w') as f:
48
+ f.write(content2)
49
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
50
+ with open(a_c) as f:
51
+ a_contents2 = f.read()
52
+ os.unlink(a_c)
53
+
54
+ self.assertNotEqual(a_contents1, a_contents2, 'C file not changed!')
55
+ self.assertEqual(2, len(self.cache_files('a.c*')))
56
+
57
+ with open(a_pyx, 'w') as f:
58
+ f.write(content1)
59
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
60
+ self.assertEqual(2, len(self.cache_files('a.c*')))
61
+ with open(a_c) as f:
62
+ a_contents = f.read()
63
+ self.assertEqual(
64
+ a_contents, a_contents1,
65
+ msg='\n'.join(list(difflib.unified_diff(
66
+ a_contents.split('\n'), a_contents1.split('\n')))[:10]))
67
+
68
+ def test_cycache_uses_cache(self):
69
+ a_pyx = os.path.join(self.src_dir, 'a.pyx')
70
+ a_c = a_pyx[:-4] + '.c'
71
+ with open(a_pyx, 'w') as f:
72
+ f.write('pass')
73
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
74
+ a_cache = os.path.join(self.cache_dir, os.listdir(self.cache_dir)[0])
75
+ with gzip.GzipFile(a_cache, 'wb') as gzipfile:
76
+ gzipfile.write('fake stuff'.encode('ascii'))
77
+ os.unlink(a_c)
78
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
79
+ with open(a_c) as f:
80
+ a_contents = f.read()
81
+ self.assertEqual(a_contents, 'fake stuff',
82
+ 'Unexpected contents: %s...' % a_contents[:100])
83
+
84
+ def test_multi_file_output(self):
85
+ a_pyx = os.path.join(self.src_dir, 'a.pyx')
86
+ a_c = a_pyx[:-4] + '.c'
87
+ a_h = a_pyx[:-4] + '.h'
88
+ a_api_h = a_pyx[:-4] + '_api.h'
89
+ with open(a_pyx, 'w') as f:
90
+ f.write('cdef public api int foo(int x): return x\n')
91
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
92
+ expected = [a_c, a_h, a_api_h]
93
+ for output in expected:
94
+ self.assertTrue(os.path.exists(output), output)
95
+ os.unlink(output)
96
+ self.fresh_cythonize(a_pyx, cache=self.cache_dir)
97
+ for output in expected:
98
+ self.assertTrue(os.path.exists(output), output)
99
+
100
+ def test_options_invalidation(self):
101
+ hash_pyx = os.path.join(self.src_dir, 'options.pyx')
102
+ hash_c = hash_pyx[:-len('.pyx')] + '.c'
103
+
104
+ with open(hash_pyx, 'w') as f:
105
+ f.write('pass')
106
+ self.fresh_cythonize(hash_pyx, cache=self.cache_dir, cplus=False)
107
+ self.assertEqual(1, len(self.cache_files('options.c*')))
108
+
109
+ os.unlink(hash_c)
110
+ self.fresh_cythonize(hash_pyx, cache=self.cache_dir, cplus=True)
111
+ self.assertEqual(2, len(self.cache_files('options.c*')))
112
+
113
+ os.unlink(hash_c)
114
+ self.fresh_cythonize(hash_pyx, cache=self.cache_dir, cplus=False, show_version=False)
115
+ self.assertEqual(2, len(self.cache_files('options.c*')))
116
+
117
+ os.unlink(hash_c)
118
+ self.fresh_cythonize(hash_pyx, cache=self.cache_dir, cplus=False, show_version=True)
119
+ self.assertEqual(2, len(self.cache_files('options.c*')))
Lib/site-packages/Cython/Build/Tests/TestCythonizeArgsParser.py ADDED
@@ -0,0 +1,482 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Cython.Build.Cythonize import (
2
+ create_args_parser, parse_args_raw, parse_args,
3
+ parallel_compiles
4
+ )
5
+
6
+ from Cython.Compiler import Options
7
+ from Cython.Compiler.Tests.Utils import backup_Options, restore_Options, check_global_options
8
+
9
+ from unittest import TestCase
10
+
11
+ import sys
12
+ try:
13
+ from StringIO import StringIO
14
+ except ImportError:
15
+ from io import StringIO # doesn't accept 'str' in Py2
16
+
17
+
18
+ class TestCythonizeArgsParser(TestCase):
19
+
20
+ def setUp(self):
21
+ TestCase.setUp(self)
22
+ self.parse_args = lambda x, parser=create_args_parser() : parse_args_raw(parser, x)
23
+
24
+
25
+ def are_default(self, options, skip):
26
+ # empty containers
27
+ empty_containers = ['directives', 'compile_time_env', 'options', 'excludes']
28
+ are_none = ['language_level', 'annotate', 'build', 'build_inplace', 'force', 'quiet', 'lenient', 'keep_going', 'no_docstrings']
29
+ for opt_name in empty_containers:
30
+ if len(getattr(options, opt_name))!=0 and (opt_name not in skip):
31
+ self.assertEqual(opt_name,"", msg="For option "+opt_name)
32
+ return False
33
+ for opt_name in are_none:
34
+ if (getattr(options, opt_name) is not None) and (opt_name not in skip):
35
+ self.assertEqual(opt_name,"", msg="For option "+opt_name)
36
+ return False
37
+ if options.parallel!=parallel_compiles and ('parallel' not in skip):
38
+ return False
39
+ return True
40
+
41
+ # testing directives:
42
+ def test_directive_short(self):
43
+ options, args = self.parse_args(['-X', 'cdivision=True'])
44
+ self.assertFalse(args)
45
+ self.assertTrue(self.are_default(options, ['directives']))
46
+ self.assertEqual(options.directives['cdivision'], True)
47
+
48
+ def test_directive_long(self):
49
+ options, args = self.parse_args(['--directive', 'cdivision=True'])
50
+ self.assertFalse(args)
51
+ self.assertTrue(self.are_default(options, ['directives']))
52
+ self.assertEqual(options.directives['cdivision'], True)
53
+
54
+ def test_directive_multiple(self):
55
+ options, args = self.parse_args(['-X', 'cdivision=True', '-X', 'c_string_type=bytes'])
56
+ self.assertFalse(args)
57
+ self.assertTrue(self.are_default(options, ['directives']))
58
+ self.assertEqual(options.directives['cdivision'], True)
59
+ self.assertEqual(options.directives['c_string_type'], 'bytes')
60
+
61
+ def test_directive_multiple_v2(self):
62
+ options, args = self.parse_args(['-X', 'cdivision=True,c_string_type=bytes'])
63
+ self.assertFalse(args)
64
+ self.assertTrue(self.are_default(options, ['directives']))
65
+ self.assertEqual(options.directives['cdivision'], True)
66
+ self.assertEqual(options.directives['c_string_type'], 'bytes')
67
+
68
+ def test_directive_value_yes(self):
69
+ options, args = self.parse_args(['-X', 'cdivision=YeS'])
70
+ self.assertFalse(args)
71
+ self.assertTrue(self.are_default(options, ['directives']))
72
+ self.assertEqual(options.directives['cdivision'], True)
73
+
74
+ def test_directive_value_no(self):
75
+ options, args = self.parse_args(['-X', 'cdivision=no'])
76
+ self.assertFalse(args)
77
+ self.assertTrue(self.are_default(options, ['directives']))
78
+ self.assertEqual(options.directives['cdivision'], False)
79
+
80
+ def test_directive_value_invalid(self):
81
+ with self.assertRaises(ValueError) as context:
82
+ options, args = self.parse_args(['-X', 'cdivision=sadfasd'])
83
+
84
+ def test_directive_key_invalid(self):
85
+ with self.assertRaises(ValueError) as context:
86
+ options, args = self.parse_args(['-X', 'abracadabra'])
87
+
88
+ def test_directive_no_value(self):
89
+ with self.assertRaises(ValueError) as context:
90
+ options, args = self.parse_args(['-X', 'cdivision'])
91
+
92
+ def test_directives_types(self):
93
+ directives = {
94
+ 'auto_pickle': True,
95
+ 'c_string_type': 'bytearray',
96
+ 'c_string_type': 'bytes',
97
+ 'c_string_type': 'str',
98
+ 'c_string_type': 'bytearray',
99
+ 'c_string_type': 'unicode',
100
+ 'c_string_encoding' : 'ascii',
101
+ 'language_level' : 2,
102
+ 'language_level' : 3,
103
+ 'language_level' : '3str',
104
+ 'set_initial_path' : 'my_initial_path',
105
+ }
106
+ for key, value in directives.items():
107
+ cmd = '{key}={value}'.format(key=key, value=str(value))
108
+ options, args = self.parse_args(['-X', cmd])
109
+ self.assertFalse(args)
110
+ self.assertTrue(self.are_default(options, ['directives']), msg = "Error for option: "+cmd)
111
+ self.assertEqual(options.directives[key], value, msg = "Error for option: "+cmd)
112
+
113
+ def test_directives_wrong(self):
114
+ directives = {
115
+ 'auto_pickle': 42, # for bool type
116
+ 'auto_pickle': 'NONONO', # for bool type
117
+ 'c_string_type': 'bites',
118
+ #'c_string_encoding' : 'a',
119
+ #'language_level' : 4,
120
+ }
121
+ for key, value in directives.items():
122
+ cmd = '{key}={value}'.format(key=key, value=str(value))
123
+ with self.assertRaises(ValueError, msg = "Error for option: "+cmd) as context:
124
+ options, args = self.parse_args(['-X', cmd])
125
+
126
+ def test_compile_time_env_short(self):
127
+ options, args = self.parse_args(['-E', 'MYSIZE=10'])
128
+ self.assertFalse(args)
129
+ self.assertTrue(self.are_default(options, ['compile_time_env']))
130
+ self.assertEqual(options.compile_time_env['MYSIZE'], 10)
131
+
132
+ def test_compile_time_env_long(self):
133
+ options, args = self.parse_args(['--compile-time-env', 'MYSIZE=10'])
134
+ self.assertFalse(args)
135
+ self.assertTrue(self.are_default(options, ['compile_time_env']))
136
+ self.assertEqual(options.compile_time_env['MYSIZE'], 10)
137
+
138
+ def test_compile_time_env_multiple(self):
139
+ options, args = self.parse_args(['-E', 'MYSIZE=10', '-E', 'ARRSIZE=11'])
140
+ self.assertFalse(args)
141
+ self.assertTrue(self.are_default(options, ['compile_time_env']))
142
+ self.assertEqual(options.compile_time_env['MYSIZE'], 10)
143
+ self.assertEqual(options.compile_time_env['ARRSIZE'], 11)
144
+
145
+ def test_compile_time_env_multiple_v2(self):
146
+ options, args = self.parse_args(['-E', 'MYSIZE=10,ARRSIZE=11'])
147
+ self.assertFalse(args)
148
+ self.assertTrue(self.are_default(options, ['compile_time_env']))
149
+ self.assertEqual(options.compile_time_env['MYSIZE'], 10)
150
+ self.assertEqual(options.compile_time_env['ARRSIZE'], 11)
151
+
152
+ #testing options
153
+ def test_option_short(self):
154
+ options, args = self.parse_args(['-s', 'docstrings=True'])
155
+ self.assertFalse(args)
156
+ self.assertTrue(self.are_default(options, ['options']))
157
+ self.assertEqual(options.options['docstrings'], True)
158
+
159
+ def test_option_long(self):
160
+ options, args = self.parse_args(['--option', 'docstrings=True'])
161
+ self.assertFalse(args)
162
+ self.assertTrue(self.are_default(options, ['options']))
163
+ self.assertEqual(options.options['docstrings'], True)
164
+
165
+ def test_option_multiple(self):
166
+ options, args = self.parse_args(['-s', 'docstrings=True', '-s', 'buffer_max_dims=8'])
167
+ self.assertFalse(args)
168
+ self.assertTrue(self.are_default(options, ['options']))
169
+ self.assertEqual(options.options['docstrings'], True)
170
+ self.assertEqual(options.options['buffer_max_dims'], True) # really?
171
+
172
+ def test_option_multiple_v2(self):
173
+ options, args = self.parse_args(['-s', 'docstrings=True,buffer_max_dims=8'])
174
+ self.assertFalse(args)
175
+ self.assertTrue(self.are_default(options, ['options']))
176
+ self.assertEqual(options.options['docstrings'], True)
177
+ self.assertEqual(options.options['buffer_max_dims'], True) # really?
178
+
179
+ def test_option_value_yes(self):
180
+ options, args = self.parse_args(['-s', 'docstrings=YeS'])
181
+ self.assertFalse(args)
182
+ self.assertTrue(self.are_default(options, ['options']))
183
+ self.assertEqual(options.options['docstrings'], True)
184
+
185
+ def test_option_value_4242(self):
186
+ options, args = self.parse_args(['-s', 'docstrings=4242'])
187
+ self.assertFalse(args)
188
+ self.assertTrue(self.are_default(options, ['options']))
189
+ self.assertEqual(options.options['docstrings'], True)
190
+
191
+ def test_option_value_0(self):
192
+ options, args = self.parse_args(['-s', 'docstrings=0'])
193
+ self.assertFalse(args)
194
+ self.assertTrue(self.are_default(options, ['options']))
195
+ self.assertEqual(options.options['docstrings'], False)
196
+
197
+ def test_option_value_emptystr(self):
198
+ options, args = self.parse_args(['-s', 'docstrings='])
199
+ self.assertFalse(args)
200
+ self.assertTrue(self.are_default(options, ['options']))
201
+ self.assertEqual(options.options['docstrings'], True)
202
+
203
+ def test_option_value_a_str(self):
204
+ options, args = self.parse_args(['-s', 'docstrings=BB'])
205
+ self.assertFalse(args)
206
+ self.assertTrue(self.are_default(options, ['options']))
207
+ self.assertEqual(options.options['docstrings'], True)
208
+
209
+ def test_option_value_no(self):
210
+ options, args = self.parse_args(['-s', 'docstrings=nO'])
211
+ self.assertFalse(args)
212
+ self.assertTrue(self.are_default(options, ['options']))
213
+ self.assertEqual(options.options['docstrings'], False)
214
+
215
+ def test_option_no_value(self):
216
+ options, args = self.parse_args(['-s', 'docstrings'])
217
+ self.assertFalse(args)
218
+ self.assertTrue(self.are_default(options, ['options']))
219
+ self.assertEqual(options.options['docstrings'], True)
220
+
221
+ def test_option_any_key(self):
222
+ options, args = self.parse_args(['-s', 'abracadabra'])
223
+ self.assertFalse(args)
224
+ self.assertTrue(self.are_default(options, ['options']))
225
+ self.assertEqual(options.options['abracadabra'], True)
226
+
227
+ def test_language_level_2(self):
228
+ options, args = self.parse_args(['-2'])
229
+ self.assertFalse(args)
230
+ self.assertTrue(self.are_default(options, ['language_level']))
231
+ self.assertEqual(options.language_level, 2)
232
+
233
+ def test_language_level_3(self):
234
+ options, args = self.parse_args(['-3'])
235
+ self.assertFalse(args)
236
+ self.assertTrue(self.are_default(options, ['language_level']))
237
+ self.assertEqual(options.language_level, 3)
238
+
239
+ def test_language_level_3str(self):
240
+ options, args = self.parse_args(['--3str'])
241
+ self.assertFalse(args)
242
+ self.assertTrue(self.are_default(options, ['language_level']))
243
+ self.assertEqual(options.language_level, '3str')
244
+
245
+ def test_annotate_short(self):
246
+ options, args = self.parse_args(['-a'])
247
+ self.assertFalse(args)
248
+ self.assertTrue(self.are_default(options, ['annotate']))
249
+ self.assertEqual(options.annotate, 'default')
250
+
251
+ def test_annotate_long(self):
252
+ options, args = self.parse_args(['--annotate'])
253
+ self.assertFalse(args)
254
+ self.assertTrue(self.are_default(options, ['annotate']))
255
+ self.assertEqual(options.annotate, 'default')
256
+
257
+ def test_annotate_fullc(self):
258
+ options, args = self.parse_args(['--annotate-fullc'])
259
+ self.assertFalse(args)
260
+ self.assertTrue(self.are_default(options, ['annotate']))
261
+ self.assertEqual(options.annotate, 'fullc')
262
+
263
+ def test_annotate_and_positional(self):
264
+ options, args = self.parse_args(['-a', 'foo.pyx'])
265
+ self.assertEqual(args, ['foo.pyx'])
266
+ self.assertTrue(self.are_default(options, ['annotate']))
267
+ self.assertEqual(options.annotate, 'default')
268
+
269
+ def test_annotate_and_optional(self):
270
+ options, args = self.parse_args(['-a', '--3str'])
271
+ self.assertFalse(args)
272
+ self.assertTrue(self.are_default(options, ['annotate', 'language_level']))
273
+ self.assertEqual(options.annotate, 'default')
274
+ self.assertEqual(options.language_level, '3str')
275
+
276
+ def test_exclude_short(self):
277
+ options, args = self.parse_args(['-x', '*.pyx'])
278
+ self.assertFalse(args)
279
+ self.assertTrue(self.are_default(options, ['excludes']))
280
+ self.assertTrue('*.pyx' in options.excludes)
281
+
282
+ def test_exclude_long(self):
283
+ options, args = self.parse_args(['--exclude', '*.pyx'])
284
+ self.assertFalse(args)
285
+ self.assertTrue(self.are_default(options, ['excludes']))
286
+ self.assertTrue('*.pyx' in options.excludes)
287
+
288
+ def test_exclude_multiple(self):
289
+ options, args = self.parse_args(['--exclude', '*.pyx', '--exclude', '*.py', ])
290
+ self.assertFalse(args)
291
+ self.assertTrue(self.are_default(options, ['excludes']))
292
+ self.assertEqual(options.excludes, ['*.pyx', '*.py'])
293
+
294
+ def test_build_short(self):
295
+ options, args = self.parse_args(['-b'])
296
+ self.assertFalse(args)
297
+ self.assertTrue(self.are_default(options, ['build']))
298
+ self.assertEqual(options.build, True)
299
+
300
+ def test_build_long(self):
301
+ options, args = self.parse_args(['--build'])
302
+ self.assertFalse(args)
303
+ self.assertTrue(self.are_default(options, ['build']))
304
+ self.assertEqual(options.build, True)
305
+
306
+ def test_inplace_short(self):
307
+ options, args = self.parse_args(['-i'])
308
+ self.assertFalse(args)
309
+ self.assertTrue(self.are_default(options, ['build_inplace']))
310
+ self.assertEqual(options.build_inplace, True)
311
+
312
+ def test_inplace_long(self):
313
+ options, args = self.parse_args(['--inplace'])
314
+ self.assertFalse(args)
315
+ self.assertTrue(self.are_default(options, ['build_inplace']))
316
+ self.assertEqual(options.build_inplace, True)
317
+
318
+ def test_parallel_short(self):
319
+ options, args = self.parse_args(['-j', '42'])
320
+ self.assertFalse(args)
321
+ self.assertTrue(self.are_default(options, ['parallel']))
322
+ self.assertEqual(options.parallel, 42)
323
+
324
+ def test_parallel_long(self):
325
+ options, args = self.parse_args(['--parallel', '42'])
326
+ self.assertFalse(args)
327
+ self.assertTrue(self.are_default(options, ['parallel']))
328
+ self.assertEqual(options.parallel, 42)
329
+
330
+ def test_force_short(self):
331
+ options, args = self.parse_args(['-f'])
332
+ self.assertFalse(args)
333
+ self.assertTrue(self.are_default(options, ['force']))
334
+ self.assertEqual(options.force, True)
335
+
336
+ def test_force_long(self):
337
+ options, args = self.parse_args(['--force'])
338
+ self.assertFalse(args)
339
+ self.assertTrue(self.are_default(options, ['force']))
340
+ self.assertEqual(options.force, True)
341
+
342
+ def test_quite_short(self):
343
+ options, args = self.parse_args(['-q'])
344
+ self.assertFalse(args)
345
+ self.assertTrue(self.are_default(options, ['quiet']))
346
+ self.assertEqual(options.quiet, True)
347
+
348
+ def test_quite_long(self):
349
+ options, args = self.parse_args(['--quiet'])
350
+ self.assertFalse(args)
351
+ self.assertTrue(self.are_default(options, ['quiet']))
352
+ self.assertEqual(options.quiet, True)
353
+
354
+ def test_lenient_long(self):
355
+ options, args = self.parse_args(['--lenient'])
356
+ self.assertTrue(self.are_default(options, ['lenient']))
357
+ self.assertFalse(args)
358
+ self.assertEqual(options.lenient, True)
359
+
360
+ def test_keep_going_short(self):
361
+ options, args = self.parse_args(['-k'])
362
+ self.assertFalse(args)
363
+ self.assertTrue(self.are_default(options, ['keep_going']))
364
+ self.assertEqual(options.keep_going, True)
365
+
366
+ def test_keep_going_long(self):
367
+ options, args = self.parse_args(['--keep-going'])
368
+ self.assertFalse(args)
369
+ self.assertTrue(self.are_default(options, ['keep_going']))
370
+ self.assertEqual(options.keep_going, True)
371
+
372
+ def test_no_docstrings_long(self):
373
+ options, args = self.parse_args(['--no-docstrings'])
374
+ self.assertFalse(args)
375
+ self.assertTrue(self.are_default(options, ['no_docstrings']))
376
+ self.assertEqual(options.no_docstrings, True)
377
+
378
+ def test_file_name(self):
379
+ options, args = self.parse_args(['file1.pyx', 'file2.pyx'])
380
+ self.assertEqual(len(args), 2)
381
+ self.assertEqual(args[0], 'file1.pyx')
382
+ self.assertEqual(args[1], 'file2.pyx')
383
+ self.assertTrue(self.are_default(options, []))
384
+
385
+ def test_option_first(self):
386
+ options, args = self.parse_args(['-i', 'file.pyx'])
387
+ self.assertEqual(args, ['file.pyx'])
388
+ self.assertEqual(options.build_inplace, True)
389
+ self.assertTrue(self.are_default(options, ['build_inplace']))
390
+
391
+ def test_file_inbetween(self):
392
+ options, args = self.parse_args(['-i', 'file.pyx', '-a'])
393
+ self.assertEqual(args, ['file.pyx'])
394
+ self.assertEqual(options.build_inplace, True)
395
+ self.assertEqual(options.annotate, 'default')
396
+ self.assertTrue(self.are_default(options, ['build_inplace', 'annotate']))
397
+
398
+ def test_option_trailing(self):
399
+ options, args = self.parse_args(['file.pyx', '-i'])
400
+ self.assertEqual(args, ['file.pyx'])
401
+ self.assertEqual(options.build_inplace, True)
402
+ self.assertTrue(self.are_default(options, ['build_inplace']))
403
+
404
+ def test_interspersed_positional(self):
405
+ options, sources = self.parse_args([
406
+ 'file1.pyx', '-a',
407
+ 'file2.pyx'
408
+ ])
409
+ self.assertEqual(sources, ['file1.pyx', 'file2.pyx'])
410
+ self.assertEqual(options.annotate, 'default')
411
+ self.assertTrue(self.are_default(options, ['annotate']))
412
+
413
+ def test_interspersed_positional2(self):
414
+ options, sources = self.parse_args([
415
+ 'file1.pyx', '-a',
416
+ 'file2.pyx', '-a', 'file3.pyx'
417
+ ])
418
+ self.assertEqual(sources, ['file1.pyx', 'file2.pyx', 'file3.pyx'])
419
+ self.assertEqual(options.annotate, 'default')
420
+ self.assertTrue(self.are_default(options, ['annotate']))
421
+
422
+ def test_interspersed_positional3(self):
423
+ options, sources = self.parse_args([
424
+ '-f', 'f1', 'f2', '-a',
425
+ 'f3', 'f4', '-a', 'f5'
426
+ ])
427
+ self.assertEqual(sources, ['f1', 'f2', 'f3', 'f4', 'f5'])
428
+ self.assertEqual(options.annotate, 'default')
429
+ self.assertEqual(options.force, True)
430
+ self.assertTrue(self.are_default(options, ['annotate', 'force']))
431
+
432
+ def test_wrong_option(self):
433
+ old_stderr = sys.stderr
434
+ stderr = sys.stderr = StringIO()
435
+ try:
436
+ self.assertRaises(SystemExit, self.parse_args,
437
+ ['--unknown-option']
438
+ )
439
+ finally:
440
+ sys.stderr = old_stderr
441
+ self.assertTrue(stderr.getvalue())
442
+
443
+
444
+ class TestParseArgs(TestCase):
445
+ def setUp(self):
446
+ self._options_backup = backup_Options()
447
+
448
+ def tearDown(self):
449
+ restore_Options(self._options_backup)
450
+
451
+ def check_default_global_options(self, white_list=[]):
452
+ self.assertEqual(check_global_options(self._options_backup, white_list), "")
453
+
454
+ def test_build_set_for_inplace(self):
455
+ options, args = parse_args(['foo.pyx', '-i'])
456
+ self.assertEqual(options.build, True)
457
+ self.check_default_global_options()
458
+
459
+ def test_lenient(self):
460
+ options, sources = parse_args(['foo.pyx', '--lenient'])
461
+ self.assertEqual(sources, ['foo.pyx'])
462
+ self.assertEqual(Options.error_on_unknown_names, False)
463
+ self.assertEqual(Options.error_on_uninitialized, False)
464
+ self.check_default_global_options(['error_on_unknown_names', 'error_on_uninitialized'])
465
+
466
+ def test_annotate(self):
467
+ options, sources = parse_args(['foo.pyx', '--annotate'])
468
+ self.assertEqual(sources, ['foo.pyx'])
469
+ self.assertEqual(Options.annotate, 'default')
470
+ self.check_default_global_options(['annotate'])
471
+
472
+ def test_annotate_fullc(self):
473
+ options, sources = parse_args(['foo.pyx', '--annotate-fullc'])
474
+ self.assertEqual(sources, ['foo.pyx'])
475
+ self.assertEqual(Options.annotate, 'fullc')
476
+ self.check_default_global_options(['annotate'])
477
+
478
+ def test_no_docstrings(self):
479
+ options, sources = parse_args(['foo.pyx', '--no-docstrings'])
480
+ self.assertEqual(sources, ['foo.pyx'])
481
+ self.assertEqual(Options.docstrings, False)
482
+ self.check_default_global_options(['docstrings'])
Lib/site-packages/Cython/Build/Tests/TestDependencies.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import contextlib
2
+ import os.path
3
+ import sys
4
+ import tempfile
5
+ import unittest
6
+ from io import open
7
+ from os.path import join as pjoin
8
+
9
+ from ..Dependencies import extended_iglob
10
+
11
+
12
+ @contextlib.contextmanager
13
+ def writable_file(dir_path, filename):
14
+ with open(pjoin(dir_path, filename), "w", encoding="utf8") as f:
15
+ yield f
16
+
17
+
18
+ class TestGlobbing(unittest.TestCase):
19
+ @classmethod
20
+ def setUpClass(cls):
21
+ cls._orig_dir = os.getcwd()
22
+ if sys.version_info[0] < 3:
23
+ temp_path = cls._tmpdir = tempfile.mkdtemp()
24
+ else:
25
+ cls._tmpdir = tempfile.TemporaryDirectory()
26
+ temp_path = cls._tmpdir.name
27
+ os.chdir(temp_path)
28
+
29
+ for dir1 in "abcd":
30
+ for dir1x in [dir1, dir1 + 'x']:
31
+ for dir2 in "xyz":
32
+ dir_path = pjoin(dir1x, dir2)
33
+ os.makedirs(dir_path)
34
+ with writable_file(dir_path, "file2_pyx.pyx") as f:
35
+ f.write(u'""" PYX """')
36
+ with writable_file(dir_path, "file2_py.py") as f:
37
+ f.write(u'""" PY """')
38
+
39
+ with writable_file(dir1x, "file1_pyx.pyx") as f:
40
+ f.write(u'""" PYX """')
41
+ with writable_file(dir1x, "file1_py.py") as f:
42
+ f.write(u'""" PY """')
43
+
44
+ @classmethod
45
+ def tearDownClass(cls):
46
+ os.chdir(cls._orig_dir)
47
+ if sys.version_info[0] < 3:
48
+ import shutil
49
+ shutil.rmtree(cls._tmpdir)
50
+ else:
51
+ cls._tmpdir.cleanup()
52
+
53
+ def files_equal(self, pattern, expected_files):
54
+ expected_files = sorted(expected_files)
55
+ # It's the users's choice whether '/' will appear on Windows.
56
+ matched_files = sorted(path.replace('/', os.sep) for path in extended_iglob(pattern))
57
+ self.assertListEqual(matched_files, expected_files) # /
58
+
59
+ # Special case for Windows: also support '\' in patterns.
60
+ if os.sep == '\\' and '/' in pattern:
61
+ matched_files = sorted(extended_iglob(pattern.replace('/', '\\')))
62
+ self.assertListEqual(matched_files, expected_files) # \
63
+
64
+ def test_extended_iglob_simple(self):
65
+ ax_files = [pjoin("a", "x", "file2_pyx.pyx"), pjoin("a", "x", "file2_py.py")]
66
+ self.files_equal("a/x/*", ax_files)
67
+ self.files_equal("a/x/*.c12", [])
68
+ self.files_equal("a/x/*.{py,pyx,c12}", ax_files)
69
+ self.files_equal("a/x/*.{py,pyx}", ax_files)
70
+ self.files_equal("a/x/*.{pyx}", ax_files[:1])
71
+ self.files_equal("a/x/*.pyx", ax_files[:1])
72
+ self.files_equal("a/x/*.{py}", ax_files[1:])
73
+ self.files_equal("a/x/*.py", ax_files[1:])
74
+
75
+ def test_extended_iglob_simple_star(self):
76
+ for basedir in "ad":
77
+ files = [
78
+ pjoin(basedir, dirname, filename)
79
+ for dirname in "xyz"
80
+ for filename in ["file2_pyx.pyx", "file2_py.py"]
81
+ ]
82
+ self.files_equal(basedir + "/*/*", files)
83
+ self.files_equal(basedir + "/*/*.c12", [])
84
+ self.files_equal(basedir + "/*/*.{py,pyx,c12}", files)
85
+ self.files_equal(basedir + "/*/*.{py,pyx}", files)
86
+ self.files_equal(basedir + "/*/*.{pyx}", files[::2])
87
+ self.files_equal(basedir + "/*/*.pyx", files[::2])
88
+ self.files_equal(basedir + "/*/*.{py}", files[1::2])
89
+ self.files_equal(basedir + "/*/*.py", files[1::2])
90
+
91
+ for subdir in "xy*":
92
+ files = [
93
+ pjoin(basedir, dirname, filename)
94
+ for dirname in "xyz"
95
+ if subdir in ('*', dirname)
96
+ for filename in ["file2_pyx.pyx", "file2_py.py"]
97
+ ]
98
+ path = basedir + '/' + subdir + '/'
99
+ self.files_equal(path + "*", files)
100
+ self.files_equal(path + "*.{py,pyx}", files)
101
+ self.files_equal(path + "*.{pyx}", files[::2])
102
+ self.files_equal(path + "*.pyx", files[::2])
103
+ self.files_equal(path + "*.{py}", files[1::2])
104
+ self.files_equal(path + "*.py", files[1::2])
105
+
106
+ def test_extended_iglob_double_star(self):
107
+ basedirs = os.listdir(".")
108
+ files = [
109
+ pjoin(basedir, dirname, filename)
110
+ for basedir in basedirs
111
+ for dirname in "xyz"
112
+ for filename in ["file2_pyx.pyx", "file2_py.py"]
113
+ ]
114
+ all_files = [
115
+ pjoin(basedir, filename)
116
+ for basedir in basedirs
117
+ for filename in ["file1_pyx.pyx", "file1_py.py"]
118
+ ] + files
119
+ self.files_equal("*/*/*", files)
120
+ self.files_equal("*/*/**/*", files)
121
+ self.files_equal("*/**/*.*", all_files)
122
+ self.files_equal("**/*.*", all_files)
123
+ self.files_equal("*/**/*.c12", [])
124
+ self.files_equal("**/*.c12", [])
125
+ self.files_equal("*/*/*.{py,pyx,c12}", files)
126
+ self.files_equal("*/*/**/*.{py,pyx,c12}", files)
127
+ self.files_equal("*/**/*/*.{py,pyx,c12}", files)
128
+ self.files_equal("**/*/*/*.{py,pyx,c12}", files)
129
+ self.files_equal("**/*.{py,pyx,c12}", all_files)
130
+ self.files_equal("*/*/*.{py,pyx}", files)
131
+ self.files_equal("**/*/*/*.{py,pyx}", files)
132
+ self.files_equal("*/**/*/*.{py,pyx}", files)
133
+ self.files_equal("**/*.{py,pyx}", all_files)
134
+ self.files_equal("*/*/*.{pyx}", files[::2])
135
+ self.files_equal("**/*.{pyx}", all_files[::2])
136
+ self.files_equal("*/**/*/*.pyx", files[::2])
137
+ self.files_equal("*/*/*.pyx", files[::2])
138
+ self.files_equal("**/*.pyx", all_files[::2])
139
+ self.files_equal("*/*/*.{py}", files[1::2])
140
+ self.files_equal("**/*.{py}", all_files[1::2])
141
+ self.files_equal("*/*/*.py", files[1::2])
142
+ self.files_equal("**/*.py", all_files[1::2])
Lib/site-packages/Cython/Build/Tests/TestInline.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import tempfile
3
+ import unittest
4
+ from Cython.Shadow import inline
5
+ from Cython.Build.Inline import safe_type
6
+ from Cython.TestUtils import CythonTest
7
+
8
+ try:
9
+ import numpy
10
+ has_numpy = True
11
+ except:
12
+ has_numpy = False
13
+
14
+ test_kwds = dict(force=True, quiet=True)
15
+
16
+ global_value = 100
17
+
18
+ class TestInline(CythonTest):
19
+ def setUp(self):
20
+ CythonTest.setUp(self)
21
+ self._call_kwds = dict(test_kwds)
22
+ if os.path.isdir('TEST_TMP'):
23
+ lib_dir = os.path.join('TEST_TMP','inline')
24
+ else:
25
+ lib_dir = tempfile.mkdtemp(prefix='cython_inline_')
26
+ self._call_kwds['lib_dir'] = lib_dir
27
+
28
+ def test_simple(self):
29
+ self.assertEqual(inline("return 1+2", **self._call_kwds), 3)
30
+
31
+ def test_types(self):
32
+ self.assertEqual(inline("""
33
+ cimport cython
34
+ return cython.typeof(a), cython.typeof(b)
35
+ """, a=1.0, b=[], **self._call_kwds), ('double', 'list object'))
36
+
37
+ def test_locals(self):
38
+ a = 1
39
+ b = 2
40
+ self.assertEqual(inline("return a+b", **self._call_kwds), 3)
41
+
42
+ def test_globals(self):
43
+ self.assertEqual(inline("return global_value + 1", **self._call_kwds), global_value + 1)
44
+
45
+ def test_no_return(self):
46
+ self.assertEqual(inline("""
47
+ a = 1
48
+ cdef double b = 2
49
+ cdef c = []
50
+ """, **self._call_kwds), dict(a=1, b=2.0, c=[]))
51
+
52
+ def test_def_node(self):
53
+ foo = inline("def foo(x): return x * x", **self._call_kwds)['foo']
54
+ self.assertEqual(foo(7), 49)
55
+
56
+ def test_class_ref(self):
57
+ class Type(object):
58
+ pass
59
+ tp = inline("Type")['Type']
60
+ self.assertEqual(tp, Type)
61
+
62
+ def test_pure(self):
63
+ import cython as cy
64
+ b = inline("""
65
+ b = cy.declare(float, a)
66
+ c = cy.declare(cy.pointer(cy.float), &b)
67
+ return b
68
+ """, a=3, **self._call_kwds)
69
+ self.assertEqual(type(b), float)
70
+
71
+ def test_compiler_directives(self):
72
+ self.assertEqual(
73
+ inline('return sum(x)',
74
+ x=[1, 2, 3],
75
+ cython_compiler_directives={'boundscheck': False}),
76
+ 6
77
+ )
78
+
79
+ def test_lang_version(self):
80
+ # GH-3419. Caching for inline code didn't always respect compiler directives.
81
+ inline_divcode = "def f(int a, int b): return a/b"
82
+ self.assertEqual(
83
+ inline(inline_divcode, language_level=2)['f'](5,2),
84
+ 2
85
+ )
86
+ self.assertEqual(
87
+ inline(inline_divcode, language_level=3)['f'](5,2),
88
+ 2.5
89
+ )
90
+ self.assertEqual(
91
+ inline(inline_divcode, language_level=2)['f'](5,2),
92
+ 2
93
+ )
94
+
95
+ def test_repeated_use(self):
96
+ inline_mulcode = "def f(int a, int b): return a * b"
97
+ self.assertEqual(inline(inline_mulcode)['f'](5, 2), 10)
98
+ self.assertEqual(inline(inline_mulcode)['f'](5, 3), 15)
99
+ self.assertEqual(inline(inline_mulcode)['f'](6, 2), 12)
100
+ self.assertEqual(inline(inline_mulcode)['f'](5, 2), 10)
101
+
102
+ f = inline(inline_mulcode)['f']
103
+ self.assertEqual(f(5, 2), 10)
104
+ self.assertEqual(f(5, 3), 15)
105
+
106
+ @unittest.skipIf(not has_numpy, "NumPy is not available")
107
+ def test_numpy(self):
108
+ import numpy
109
+ a = numpy.ndarray((10, 20))
110
+ a[0,0] = 10
111
+ self.assertEqual(safe_type(a), 'numpy.ndarray[numpy.float64_t, ndim=2]')
112
+ self.assertEqual(inline("return a[0,0]", a=a, **self._call_kwds), 10.0)
Lib/site-packages/Cython/Build/Tests/TestIpythonMagic.py ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ # tag: ipython
3
+
4
+ """Tests for the Cython magics extension."""
5
+
6
+ from __future__ import absolute_import
7
+
8
+ import os
9
+ import io
10
+ import sys
11
+ from contextlib import contextmanager
12
+ from unittest import skipIf
13
+
14
+ from Cython.Build import IpythonMagic
15
+ from Cython.TestUtils import CythonTest
16
+ from Cython.Compiler.Annotate import AnnotationCCodeWriter
17
+
18
+ try:
19
+ import IPython.testing.globalipapp
20
+ except ImportError:
21
+ # Disable tests and fake helpers for initialisation below.
22
+ def skip_if_not_installed(_):
23
+ return None
24
+ else:
25
+ def skip_if_not_installed(c):
26
+ return c
27
+
28
+ # not using IPython's decorators here because they depend on "nose"
29
+ skip_win32 = skipIf(sys.platform == 'win32', "Skip on Windows")
30
+ skip_py27 = skipIf(sys.version_info[:2] == (2,7), "Disabled in Py2.7")
31
+
32
+ try:
33
+ # disable IPython history thread before it gets started to avoid having to clean it up
34
+ from IPython.core.history import HistoryManager
35
+ HistoryManager.enabled = False
36
+ except ImportError:
37
+ pass
38
+
39
+
40
+ @contextmanager
41
+ def capture_output():
42
+ backup = sys.stdout, sys.stderr
43
+ try:
44
+ replacement = [
45
+ io.TextIOWrapper(io.BytesIO(), encoding=sys.stdout.encoding),
46
+ io.TextIOWrapper(io.BytesIO(), encoding=sys.stderr.encoding),
47
+ ]
48
+ sys.stdout, sys.stderr = replacement
49
+ output = []
50
+ yield output
51
+ finally:
52
+ sys.stdout, sys.stderr = backup
53
+ for wrapper in replacement:
54
+ wrapper.seek(0) # rewind
55
+ output.append(wrapper.read())
56
+ wrapper.close()
57
+
58
+
59
+ code = u"""\
60
+ def f(x):
61
+ return 2*x
62
+ """
63
+
64
+ cython3_code = u"""\
65
+ def f(int x):
66
+ return 2 / x
67
+
68
+ def call(x):
69
+ return f(*(x,))
70
+ """
71
+
72
+ pgo_cython3_code = cython3_code + u"""\
73
+ def main():
74
+ for _ in range(100): call(5)
75
+ main()
76
+ """
77
+
78
+ compile_error_code = u'''\
79
+ cdef extern from *:
80
+ """
81
+ xxx a=1;
82
+ """
83
+ int a;
84
+ def doit():
85
+ return a
86
+ '''
87
+
88
+ compile_warning_code = u'''\
89
+ cdef extern from *:
90
+ """
91
+ #pragma message ( "CWarning" )
92
+ int a = 42;
93
+ """
94
+ int a;
95
+ def doit():
96
+ return a
97
+ '''
98
+
99
+
100
+ @skip_if_not_installed
101
+ class TestIPythonMagic(CythonTest):
102
+
103
+ @classmethod
104
+ def setUpClass(cls):
105
+ CythonTest.setUpClass()
106
+ cls._ip = IPython.testing.globalipapp.get_ipython()
107
+
108
+ def setUp(self):
109
+ CythonTest.setUp(self)
110
+ self._ip.extension_manager.load_extension('cython')
111
+
112
+ def test_cython_inline(self):
113
+ ip = self._ip
114
+ ip.ex('a=10; b=20')
115
+ result = ip.run_cell_magic('cython_inline', '', 'return a+b')
116
+ self.assertEqual(result, 30)
117
+
118
+ @skip_win32
119
+ def test_cython_pyximport(self):
120
+ ip = self._ip
121
+ module_name = '_test_cython_pyximport'
122
+ ip.run_cell_magic('cython_pyximport', module_name, code)
123
+ ip.ex('g = f(10)')
124
+ self.assertEqual(ip.user_ns['g'], 20.0)
125
+ ip.run_cell_magic('cython_pyximport', module_name, code)
126
+ ip.ex('h = f(-10)')
127
+ self.assertEqual(ip.user_ns['h'], -20.0)
128
+ try:
129
+ os.remove(module_name + '.pyx')
130
+ except OSError:
131
+ pass
132
+
133
+ def test_cython(self):
134
+ ip = self._ip
135
+ ip.run_cell_magic('cython', '', code)
136
+ ip.ex('g = f(10)')
137
+ self.assertEqual(ip.user_ns['g'], 20.0)
138
+
139
+ def test_cython_name(self):
140
+ # The Cython module named 'mymodule' defines the function f.
141
+ ip = self._ip
142
+ ip.run_cell_magic('cython', '--name=mymodule', code)
143
+ # This module can now be imported in the interactive namespace.
144
+ ip.ex('import mymodule; g = mymodule.f(10)')
145
+ self.assertEqual(ip.user_ns['g'], 20.0)
146
+
147
+ def test_cython_language_level(self):
148
+ # The Cython cell defines the functions f() and call().
149
+ ip = self._ip
150
+ ip.run_cell_magic('cython', '', cython3_code)
151
+ ip.ex('g = f(10); h = call(10)')
152
+ if sys.version_info[0] < 3:
153
+ self.assertEqual(ip.user_ns['g'], 2 // 10)
154
+ self.assertEqual(ip.user_ns['h'], 2 // 10)
155
+ else:
156
+ self.assertEqual(ip.user_ns['g'], 2.0 / 10.0)
157
+ self.assertEqual(ip.user_ns['h'], 2.0 / 10.0)
158
+
159
+ def test_cython3(self):
160
+ # The Cython cell defines the functions f() and call().
161
+ ip = self._ip
162
+ ip.run_cell_magic('cython', '-3', cython3_code)
163
+ ip.ex('g = f(10); h = call(10)')
164
+ self.assertEqual(ip.user_ns['g'], 2.0 / 10.0)
165
+ self.assertEqual(ip.user_ns['h'], 2.0 / 10.0)
166
+
167
+ def test_cython2(self):
168
+ # The Cython cell defines the functions f() and call().
169
+ ip = self._ip
170
+ ip.run_cell_magic('cython', '-2', cython3_code)
171
+ ip.ex('g = f(10); h = call(10)')
172
+ self.assertEqual(ip.user_ns['g'], 2 // 10)
173
+ self.assertEqual(ip.user_ns['h'], 2 // 10)
174
+
175
+ def test_cython_compile_error_shown(self):
176
+ ip = self._ip
177
+ with capture_output() as out:
178
+ ip.run_cell_magic('cython', '-3', compile_error_code)
179
+ captured_out, captured_err = out
180
+
181
+ # it could be that c-level output is captured by distutil-extension
182
+ # (and not by us) and is printed to stdout:
183
+ captured_all = captured_out + "\n" + captured_err
184
+ self.assertTrue("error" in captured_all, msg="error in " + captured_all)
185
+
186
+ def test_cython_link_error_shown(self):
187
+ ip = self._ip
188
+ with capture_output() as out:
189
+ ip.run_cell_magic('cython', '-3 -l=xxxxxxxx', code)
190
+ captured_out, captured_err = out
191
+
192
+ # it could be that c-level output is captured by distutil-extension
193
+ # (and not by us) and is printed to stdout:
194
+ captured_all = captured_out + "\n!" + captured_err
195
+ self.assertTrue("error" in captured_all, msg="error in " + captured_all)
196
+
197
+ def test_cython_warning_shown(self):
198
+ ip = self._ip
199
+ with capture_output() as out:
200
+ # force rebuild, otherwise no warning as after the first success
201
+ # no build step is performed
202
+ ip.run_cell_magic('cython', '-3 -f', compile_warning_code)
203
+ captured_out, captured_err = out
204
+
205
+ # check that warning was printed to stdout even if build hasn't failed
206
+ self.assertTrue("CWarning" in captured_out)
207
+
208
+ @skip_py27 # Not strictly broken in Py2.7 but currently fails in CI due to C compiler issues.
209
+ @skip_win32
210
+ def test_cython3_pgo(self):
211
+ # The Cython cell defines the functions f() and call().
212
+ ip = self._ip
213
+ ip.run_cell_magic('cython', '-3 --pgo', pgo_cython3_code)
214
+ ip.ex('g = f(10); h = call(10); main()')
215
+ self.assertEqual(ip.user_ns['g'], 2.0 / 10.0)
216
+ self.assertEqual(ip.user_ns['h'], 2.0 / 10.0)
217
+
218
+ @skip_win32
219
+ def test_extlibs(self):
220
+ ip = self._ip
221
+ code = u"""
222
+ from libc.math cimport sin
223
+ x = sin(0.0)
224
+ """
225
+ ip.user_ns['x'] = 1
226
+ ip.run_cell_magic('cython', '-l m', code)
227
+ self.assertEqual(ip.user_ns['x'], 0)
228
+
229
+
230
+ def test_cython_verbose(self):
231
+ ip = self._ip
232
+ ip.run_cell_magic('cython', '--verbose', code)
233
+ ip.ex('g = f(10)')
234
+ self.assertEqual(ip.user_ns['g'], 20.0)
235
+
236
+ def test_cython_verbose_thresholds(self):
237
+ @contextmanager
238
+ def mock_distutils():
239
+ class MockLog:
240
+ DEBUG = 1
241
+ INFO = 2
242
+ thresholds = [INFO]
243
+
244
+ def set_threshold(self, val):
245
+ self.thresholds.append(val)
246
+ return self.thresholds[-2]
247
+
248
+
249
+ new_log = MockLog()
250
+ old_log = IpythonMagic.distutils.log
251
+ try:
252
+ IpythonMagic.distutils.log = new_log
253
+ yield new_log
254
+ finally:
255
+ IpythonMagic.distutils.log = old_log
256
+
257
+ ip = self._ip
258
+ with mock_distutils() as verbose_log:
259
+ ip.run_cell_magic('cython', '--verbose', code)
260
+ ip.ex('g = f(10)')
261
+ self.assertEqual(ip.user_ns['g'], 20.0)
262
+ self.assertEqual([verbose_log.INFO, verbose_log.DEBUG, verbose_log.INFO],
263
+ verbose_log.thresholds)
264
+
265
+ with mock_distutils() as normal_log:
266
+ ip.run_cell_magic('cython', '', code)
267
+ ip.ex('g = f(10)')
268
+ self.assertEqual(ip.user_ns['g'], 20.0)
269
+ self.assertEqual([normal_log.INFO], normal_log.thresholds)
270
+
271
+ def test_cython_no_annotate(self):
272
+ ip = self._ip
273
+ html = ip.run_cell_magic('cython', '', code)
274
+ self.assertTrue(html is None)
275
+
276
+ def test_cython_annotate(self):
277
+ ip = self._ip
278
+ html = ip.run_cell_magic('cython', '--annotate', code)
279
+ # somewhat brittle way to differentiate between annotated htmls
280
+ # with/without complete source code:
281
+ self.assertTrue(AnnotationCCodeWriter.COMPLETE_CODE_TITLE not in html.data)
282
+
283
+ def test_cython_annotate_default(self):
284
+ ip = self._ip
285
+ html = ip.run_cell_magic('cython', '-a', code)
286
+ # somewhat brittle way to differentiate between annotated htmls
287
+ # with/without complete source code:
288
+ self.assertTrue(AnnotationCCodeWriter.COMPLETE_CODE_TITLE not in html.data)
289
+
290
+ def test_cython_annotate_complete_c_code(self):
291
+ ip = self._ip
292
+ html = ip.run_cell_magic('cython', '--annotate-fullc', code)
293
+ # somewhat brittle way to differentiate between annotated htmls
294
+ # with/without complete source code:
295
+ self.assertTrue(AnnotationCCodeWriter.COMPLETE_CODE_TITLE in html.data)
Lib/site-packages/Cython/Build/Tests/TestRecythonize.py ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import shutil
2
+ import os
3
+ import tempfile
4
+ import time
5
+
6
+ import Cython.Build.Dependencies
7
+ import Cython.Utils
8
+ from Cython.TestUtils import CythonTest
9
+
10
+
11
+ def fresh_cythonize(*args, **kwargs):
12
+ Cython.Utils.clear_function_caches()
13
+ Cython.Build.Dependencies._dep_tree = None # discard method caches
14
+ Cython.Build.Dependencies.cythonize(*args, **kwargs)
15
+
16
+ class TestRecythonize(CythonTest):
17
+
18
+ def setUp(self):
19
+ CythonTest.setUp(self)
20
+ self.temp_dir = (
21
+ tempfile.mkdtemp(
22
+ prefix='recythonize-test',
23
+ dir='TEST_TMP' if os.path.isdir('TEST_TMP') else None
24
+ )
25
+ )
26
+
27
+ def tearDown(self):
28
+ CythonTest.tearDown(self)
29
+ shutil.rmtree(self.temp_dir)
30
+
31
+ def test_recythonize_pyx_on_pxd_change(self):
32
+
33
+ src_dir = tempfile.mkdtemp(prefix='src', dir=self.temp_dir)
34
+
35
+ a_pxd = os.path.join(src_dir, 'a.pxd')
36
+ a_pyx = os.path.join(src_dir, 'a.pyx')
37
+ a_c = os.path.join(src_dir, 'a.c')
38
+ dep_tree = Cython.Build.Dependencies.create_dependency_tree()
39
+
40
+ with open(a_pxd, 'w') as f:
41
+ f.write('cdef int value\n')
42
+
43
+ with open(a_pyx, 'w') as f:
44
+ f.write('value = 1\n')
45
+
46
+
47
+ # The dependencies for "a.pyx" are "a.pxd" and "a.pyx".
48
+ self.assertEqual({a_pxd, a_pyx}, dep_tree.all_dependencies(a_pyx))
49
+
50
+ # Cythonize to create a.c
51
+ fresh_cythonize(a_pyx)
52
+
53
+ # Sleep to address coarse time-stamp precision.
54
+ time.sleep(1)
55
+
56
+ with open(a_c) as f:
57
+ a_c_contents1 = f.read()
58
+
59
+ with open(a_pxd, 'w') as f:
60
+ f.write('cdef double value\n')
61
+
62
+ fresh_cythonize(a_pyx)
63
+
64
+ with open(a_c) as f:
65
+ a_c_contents2 = f.read()
66
+
67
+ self.assertTrue("__pyx_v_1a_value = 1;" in a_c_contents1)
68
+ self.assertFalse("__pyx_v_1a_value = 1;" in a_c_contents2)
69
+ self.assertTrue("__pyx_v_1a_value = 1.0;" in a_c_contents2)
70
+ self.assertFalse("__pyx_v_1a_value = 1.0;" in a_c_contents1)
71
+
72
+
73
+ def test_recythonize_py_on_pxd_change(self):
74
+
75
+ src_dir = tempfile.mkdtemp(prefix='src', dir=self.temp_dir)
76
+
77
+ a_pxd = os.path.join(src_dir, 'a.pxd')
78
+ a_py = os.path.join(src_dir, 'a.py')
79
+ a_c = os.path.join(src_dir, 'a.c')
80
+ dep_tree = Cython.Build.Dependencies.create_dependency_tree()
81
+
82
+ with open(a_pxd, 'w') as f:
83
+ f.write('cdef int value\n')
84
+
85
+ with open(a_py, 'w') as f:
86
+ f.write('value = 1\n')
87
+
88
+
89
+ # The dependencies for "a.py" are "a.pxd" and "a.py".
90
+ self.assertEqual({a_pxd, a_py}, dep_tree.all_dependencies(a_py))
91
+
92
+ # Cythonize to create a.c
93
+ fresh_cythonize(a_py)
94
+
95
+ # Sleep to address coarse time-stamp precision.
96
+ time.sleep(1)
97
+
98
+ with open(a_c) as f:
99
+ a_c_contents1 = f.read()
100
+
101
+ with open(a_pxd, 'w') as f:
102
+ f.write('cdef double value\n')
103
+
104
+ fresh_cythonize(a_py)
105
+
106
+ with open(a_c) as f:
107
+ a_c_contents2 = f.read()
108
+
109
+
110
+ self.assertTrue("__pyx_v_1a_value = 1;" in a_c_contents1)
111
+ self.assertFalse("__pyx_v_1a_value = 1;" in a_c_contents2)
112
+ self.assertTrue("__pyx_v_1a_value = 1.0;" in a_c_contents2)
113
+ self.assertFalse("__pyx_v_1a_value = 1.0;" in a_c_contents1)
114
+
115
+ def test_recythonize_pyx_on_dep_pxd_change(self):
116
+ src_dir = tempfile.mkdtemp(prefix='src', dir=self.temp_dir)
117
+
118
+ a_pxd = os.path.join(src_dir, 'a.pxd')
119
+ a_pyx = os.path.join(src_dir, 'a.pyx')
120
+ b_pyx = os.path.join(src_dir, 'b.pyx')
121
+ b_c = os.path.join(src_dir, 'b.c')
122
+ dep_tree = Cython.Build.Dependencies.create_dependency_tree()
123
+
124
+ with open(a_pxd, 'w') as f:
125
+ f.write('cdef int value\n')
126
+
127
+ with open(a_pyx, 'w') as f:
128
+ f.write('value = 1\n')
129
+
130
+ with open(b_pyx, 'w') as f:
131
+ f.write('cimport a\n' + 'a.value = 2\n')
132
+
133
+
134
+ # The dependencies for "b.pyx" are "a.pxd" and "b.pyx".
135
+ self.assertEqual({a_pxd, b_pyx}, dep_tree.all_dependencies(b_pyx))
136
+
137
+
138
+ # Cythonize to create b.c
139
+ fresh_cythonize([a_pyx, b_pyx])
140
+
141
+ # Sleep to address coarse time-stamp precision.
142
+ time.sleep(1)
143
+
144
+ with open(b_c) as f:
145
+ b_c_contents1 = f.read()
146
+
147
+ with open(a_pxd, 'w') as f:
148
+ f.write('cdef double value\n')
149
+
150
+ fresh_cythonize([a_pyx, b_pyx])
151
+
152
+ with open(b_c) as f:
153
+ b_c_contents2 = f.read()
154
+
155
+
156
+
157
+ self.assertTrue("__pyx_v_1a_value = 2;" in b_c_contents1)
158
+ self.assertFalse("__pyx_v_1a_value = 2;" in b_c_contents2)
159
+ self.assertTrue("__pyx_v_1a_value = 2.0;" in b_c_contents2)
160
+ self.assertFalse("__pyx_v_1a_value = 2.0;" in b_c_contents1)
161
+
162
+
163
+
164
+ def test_recythonize_py_on_dep_pxd_change(self):
165
+
166
+ src_dir = tempfile.mkdtemp(prefix='src', dir=self.temp_dir)
167
+
168
+ a_pxd = os.path.join(src_dir, 'a.pxd')
169
+ a_pyx = os.path.join(src_dir, 'a.pyx')
170
+ b_pxd = os.path.join(src_dir, 'b.pxd')
171
+ b_py = os.path.join(src_dir, 'b.py')
172
+ b_c = os.path.join(src_dir, 'b.c')
173
+ dep_tree = Cython.Build.Dependencies.create_dependency_tree()
174
+
175
+ with open(a_pxd, 'w') as f:
176
+ f.write('cdef int value\n')
177
+
178
+ with open(a_pyx, 'w') as f:
179
+ f.write('value = 1\n')
180
+
181
+ with open(b_pxd, 'w') as f:
182
+ f.write('cimport a\n')
183
+
184
+ with open(b_py, 'w') as f:
185
+ f.write('a.value = 2\n')
186
+
187
+
188
+ # The dependencies for b.py are "a.pxd", "b.pxd" and "b.py".
189
+ self.assertEqual({a_pxd, b_pxd, b_py}, dep_tree.all_dependencies(b_py))
190
+
191
+
192
+ # Cythonize to create b.c
193
+ fresh_cythonize([a_pyx, b_py])
194
+
195
+ # Sleep to address coarse time-stamp precision.
196
+ time.sleep(1)
197
+
198
+ with open(b_c) as f:
199
+ b_c_contents1 = f.read()
200
+
201
+ with open(a_pxd, 'w') as f:
202
+ f.write('cdef double value\n')
203
+
204
+ fresh_cythonize([a_pyx, b_py])
205
+
206
+ with open(b_c) as f:
207
+ b_c_contents2 = f.read()
208
+
209
+ self.assertTrue("__pyx_v_1a_value = 2;" in b_c_contents1)
210
+ self.assertFalse("__pyx_v_1a_value = 2;" in b_c_contents2)
211
+ self.assertTrue("__pyx_v_1a_value = 2.0;" in b_c_contents2)
212
+ self.assertFalse("__pyx_v_1a_value = 2.0;" in b_c_contents1)
Lib/site-packages/Cython/Build/Tests/TestStripLiterals.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Cython.Build.Dependencies import strip_string_literals
2
+
3
+ from Cython.TestUtils import CythonTest
4
+
5
+ class TestStripLiterals(CythonTest):
6
+
7
+ def t(self, before, expected):
8
+ actual, literals = strip_string_literals(before, prefix="_L")
9
+ self.assertEqual(expected, actual)
10
+ for key, value in literals.items():
11
+ actual = actual.replace(key, value)
12
+ self.assertEqual(before, actual)
13
+
14
+ def test_empty(self):
15
+ self.t("", "")
16
+
17
+ def test_single_quote(self):
18
+ self.t("'x'", "'_L1_'")
19
+
20
+ def test_double_quote(self):
21
+ self.t('"x"', '"_L1_"')
22
+
23
+ def test_nested_quotes(self):
24
+ self.t(""" '"' "'" """, """ '_L1_' "_L2_" """)
25
+
26
+ def test_triple_quote(self):
27
+ self.t(" '''a\n''' ", " '''_L1_''' ")
28
+
29
+ def test_backslash(self):
30
+ self.t(r"'a\'b'", "'_L1_'")
31
+ self.t(r"'a\\'", "'_L1_'")
32
+ self.t(r"'a\\\'b'", "'_L1_'")
33
+
34
+ def test_unicode(self):
35
+ self.t("u'abc'", "u'_L1_'")
36
+
37
+ def test_raw(self):
38
+ self.t(r"r'abc\\'", "r'_L1_'")
39
+
40
+ def test_raw_unicode(self):
41
+ self.t(r"ru'abc\\'", "ru'_L1_'")
42
+
43
+ def test_comment(self):
44
+ self.t("abc # foo", "abc #_L1_")
45
+
46
+ def test_comment_and_quote(self):
47
+ self.t("abc # 'x'", "abc #_L1_")
48
+ self.t("'abc#'", "'_L1_'")
49
+
50
+ def test_include(self):
51
+ self.t("include 'a.pxi' # something here",
52
+ "include '_L1_' #_L2_")
53
+
54
+ def test_extern(self):
55
+ self.t("cdef extern from 'a.h': # comment",
56
+ "cdef extern from '_L1_': #_L2_")
Lib/site-packages/Cython/Build/Tests/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # empty file
Lib/site-packages/Cython/Build/Tests/__pycache__/TestCyCache.cpython-38.pyc ADDED
Binary file (4.16 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestCythonizeArgsParser.cpython-38.pyc ADDED
Binary file (20.4 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestDependencies.cpython-38.pyc ADDED
Binary file (5.32 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestInline.cpython-38.pyc ADDED
Binary file (4.62 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestIpythonMagic.cpython-38.pyc ADDED
Binary file (8.9 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestRecythonize.cpython-38.pyc ADDED
Binary file (4.44 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/TestStripLiterals.cpython-38.pyc ADDED
Binary file (3.15 kB). View file
 
Lib/site-packages/Cython/Build/Tests/__pycache__/__init__.cpython-38.pyc ADDED
Binary file (213 Bytes). View file
 
Lib/site-packages/Cython/Build/__init__.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .Dependencies import cythonize
2
+
3
+ import sys
4
+ if sys.version_info < (3, 7):
5
+ from .Distutils import build_ext
6
+ del sys
7
+
8
+
9
+ def __getattr__(name):
10
+ if name == 'build_ext':
11
+ # Lazy import, fails if distutils is not available (in Python 3.12+).
12
+ from .Distutils import build_ext
13
+ return build_ext
14
+ raise AttributeError("module '%s' has no attribute '%s'" % (__name__, name))
Lib/site-packages/Cython/Build/__pycache__/BuildExecutable.cpython-38.pyc ADDED
Binary file (5.12 kB). View file
 
Lib/site-packages/Cython/Build/__pycache__/Cythonize.cpython-38.pyc ADDED
Binary file (7.83 kB). View file
 
Lib/site-packages/Cython/Build/__pycache__/Dependencies.cpython-38.pyc ADDED
Binary file (37.3 kB). View file
 
Lib/site-packages/Cython/Build/__pycache__/Distutils.cpython-38.pyc ADDED
Binary file (268 Bytes). View file
 
Lib/site-packages/Cython/Build/__pycache__/Inline.cpython-38.pyc ADDED
Binary file (10.6 kB). View file
 
Lib/site-packages/Cython/Build/__pycache__/IpythonMagic.cpython-38.pyc ADDED
Binary file (17.4 kB). View file
 
Lib/site-packages/Cython/Build/__pycache__/__init__.cpython-38.pyc ADDED
Binary file (601 Bytes). View file
 
Lib/site-packages/Cython/CodeWriter.py ADDED
@@ -0,0 +1,820 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Serializes a Cython code tree to Cython code. This is primarily useful for
3
+ debugging and testing purposes.
4
+ The output is in a strict format, no whitespace or comments from the input
5
+ is preserved (and it could not be as it is not present in the code tree).
6
+ """
7
+
8
+ from __future__ import absolute_import, print_function
9
+
10
+ from .Compiler.Visitor import TreeVisitor
11
+ from .Compiler.ExprNodes import *
12
+ from .Compiler.Nodes import CSimpleBaseTypeNode
13
+
14
+
15
+ class LinesResult(object):
16
+ def __init__(self):
17
+ self.lines = []
18
+ self.s = u""
19
+
20
+ def put(self, s):
21
+ self.s += s
22
+
23
+ def newline(self):
24
+ self.lines.append(self.s)
25
+ self.s = u""
26
+
27
+ def putline(self, s):
28
+ self.put(s)
29
+ self.newline()
30
+
31
+
32
+ class DeclarationWriter(TreeVisitor):
33
+ """
34
+ A Cython code writer that is limited to declarations nodes.
35
+ """
36
+
37
+ indent_string = u" "
38
+
39
+ def __init__(self, result=None):
40
+ super(DeclarationWriter, self).__init__()
41
+ if result is None:
42
+ result = LinesResult()
43
+ self.result = result
44
+ self.numindents = 0
45
+ self.tempnames = {}
46
+ self.tempblockindex = 0
47
+
48
+ def write(self, tree):
49
+ self.visit(tree)
50
+ return self.result
51
+
52
+ def indent(self):
53
+ self.numindents += 1
54
+
55
+ def dedent(self):
56
+ self.numindents -= 1
57
+
58
+ def startline(self, s=u""):
59
+ self.result.put(self.indent_string * self.numindents + s)
60
+
61
+ def put(self, s):
62
+ self.result.put(s)
63
+
64
+ def putline(self, s):
65
+ self.result.putline(self.indent_string * self.numindents + s)
66
+
67
+ def endline(self, s=u""):
68
+ self.result.putline(s)
69
+
70
+ def line(self, s):
71
+ self.startline(s)
72
+ self.endline()
73
+
74
+ def comma_separated_list(self, items, output_rhs=False):
75
+ if len(items) > 0:
76
+ for item in items[:-1]:
77
+ self.visit(item)
78
+ if output_rhs and item.default is not None:
79
+ self.put(u" = ")
80
+ self.visit(item.default)
81
+ self.put(u", ")
82
+ self.visit(items[-1])
83
+ if output_rhs and items[-1].default is not None:
84
+ self.put(u" = ")
85
+ self.visit(items[-1].default)
86
+
87
+ def _visit_indented(self, node):
88
+ self.indent()
89
+ self.visit(node)
90
+ self.dedent()
91
+
92
+ def visit_Node(self, node):
93
+ raise AssertionError("Node not handled by serializer: %r" % node)
94
+
95
+ def visit_ModuleNode(self, node):
96
+ self.visitchildren(node)
97
+
98
+ def visit_StatListNode(self, node):
99
+ self.visitchildren(node)
100
+
101
+ def visit_CDefExternNode(self, node):
102
+ if node.include_file is None:
103
+ file = u'*'
104
+ else:
105
+ file = u'"%s"' % node.include_file
106
+ self.putline(u"cdef extern from %s:" % file)
107
+ self._visit_indented(node.body)
108
+
109
+ def visit_CPtrDeclaratorNode(self, node):
110
+ self.put('*')
111
+ self.visit(node.base)
112
+
113
+ def visit_CReferenceDeclaratorNode(self, node):
114
+ self.put('&')
115
+ self.visit(node.base)
116
+
117
+ def visit_CArrayDeclaratorNode(self, node):
118
+ self.visit(node.base)
119
+ self.put(u'[')
120
+ if node.dimension is not None:
121
+ self.visit(node.dimension)
122
+ self.put(u']')
123
+
124
+ def visit_CFuncDeclaratorNode(self, node):
125
+ # TODO: except, gil, etc.
126
+ self.visit(node.base)
127
+ self.put(u'(')
128
+ self.comma_separated_list(node.args)
129
+ self.endline(u')')
130
+
131
+ def visit_CNameDeclaratorNode(self, node):
132
+ self.put(node.name)
133
+
134
+ def visit_CSimpleBaseTypeNode(self, node):
135
+ # See Parsing.p_sign_and_longness
136
+ if node.is_basic_c_type:
137
+ self.put(("unsigned ", "", "signed ")[node.signed])
138
+ if node.longness < 0:
139
+ self.put("short " * -node.longness)
140
+ elif node.longness > 0:
141
+ self.put("long " * node.longness)
142
+ if node.name is not None:
143
+ self.put(node.name)
144
+
145
+ def visit_CComplexBaseTypeNode(self, node):
146
+ self.visit(node.base_type)
147
+ self.visit(node.declarator)
148
+
149
+ def visit_CNestedBaseTypeNode(self, node):
150
+ self.visit(node.base_type)
151
+ self.put(u'.')
152
+ self.put(node.name)
153
+
154
+ def visit_TemplatedTypeNode(self, node):
155
+ self.visit(node.base_type_node)
156
+ self.put(u'[')
157
+ self.comma_separated_list(node.positional_args + node.keyword_args.key_value_pairs)
158
+ self.put(u']')
159
+
160
+ def visit_CVarDefNode(self, node):
161
+ self.startline(u"cdef ")
162
+ self.visit(node.base_type)
163
+ self.put(u" ")
164
+ self.comma_separated_list(node.declarators, output_rhs=True)
165
+ self.endline()
166
+
167
+ def _visit_container_node(self, node, decl, extras, attributes):
168
+ # TODO: visibility
169
+ self.startline(decl)
170
+ if node.name:
171
+ self.put(u' ')
172
+ self.put(node.name)
173
+ if node.cname is not None:
174
+ self.put(u' "%s"' % node.cname)
175
+ if extras:
176
+ self.put(extras)
177
+ self.endline(':')
178
+ self.indent()
179
+ if not attributes:
180
+ self.putline('pass')
181
+ else:
182
+ for attribute in attributes:
183
+ self.visit(attribute)
184
+ self.dedent()
185
+
186
+ def visit_CStructOrUnionDefNode(self, node):
187
+ if node.typedef_flag:
188
+ decl = u'ctypedef '
189
+ else:
190
+ decl = u'cdef '
191
+ if node.visibility == 'public':
192
+ decl += u'public '
193
+ if node.packed:
194
+ decl += u'packed '
195
+ decl += node.kind
196
+ self._visit_container_node(node, decl, None, node.attributes)
197
+
198
+ def visit_CppClassNode(self, node):
199
+ extras = ""
200
+ if node.templates:
201
+ extras = u"[%s]" % ", ".join(node.templates)
202
+ if node.base_classes:
203
+ extras += "(%s)" % ", ".join(node.base_classes)
204
+ self._visit_container_node(node, u"cdef cppclass", extras, node.attributes)
205
+
206
+ def visit_CEnumDefNode(self, node):
207
+ self._visit_container_node(node, u"cdef enum", None, node.items)
208
+
209
+ def visit_CEnumDefItemNode(self, node):
210
+ self.startline(node.name)
211
+ if node.cname:
212
+ self.put(u' "%s"' % node.cname)
213
+ if node.value:
214
+ self.put(u" = ")
215
+ self.visit(node.value)
216
+ self.endline()
217
+
218
+ def visit_CClassDefNode(self, node):
219
+ assert not node.module_name
220
+ if node.decorators:
221
+ for decorator in node.decorators:
222
+ self.visit(decorator)
223
+ self.startline(u"cdef class ")
224
+ self.put(node.class_name)
225
+ if node.base_class_name:
226
+ self.put(u"(")
227
+ if node.base_class_module:
228
+ self.put(node.base_class_module)
229
+ self.put(u".")
230
+ self.put(node.base_class_name)
231
+ self.put(u")")
232
+ self.endline(u":")
233
+ self._visit_indented(node.body)
234
+
235
+ def visit_CTypeDefNode(self, node):
236
+ self.startline(u"ctypedef ")
237
+ self.visit(node.base_type)
238
+ self.put(u" ")
239
+ self.visit(node.declarator)
240
+ self.endline()
241
+
242
+ def visit_FuncDefNode(self, node):
243
+ # TODO: support cdef + cpdef functions
244
+ self.startline(u"def %s(" % node.name)
245
+ self.comma_separated_list(node.args)
246
+ self.endline(u"):")
247
+ self._visit_indented(node.body)
248
+
249
+ def visit_CFuncDefNode(self, node):
250
+ self.startline(u'cpdef ' if node.overridable else u'cdef ')
251
+ if node.modifiers:
252
+ self.put(' '.join(node.modifiers))
253
+ self.put(' ')
254
+ if node.visibility != 'private':
255
+ self.put(node.visibility)
256
+ self.put(u' ')
257
+ if node.api:
258
+ self.put(u'api ')
259
+
260
+ if node.base_type:
261
+ self.visit(node.base_type)
262
+ if node.base_type.name is not None:
263
+ self.put(u' ')
264
+
265
+ # visit the CFuncDeclaratorNode, but put a `:` at the end of line
266
+ self.visit(node.declarator.base)
267
+ self.put(u'(')
268
+ self.comma_separated_list(node.declarator.args)
269
+ self.endline(u'):')
270
+
271
+ self._visit_indented(node.body)
272
+
273
+ def visit_CArgDeclNode(self, node):
274
+ # For "CSimpleBaseTypeNode", the variable type may have been parsed as type.
275
+ # For other node types, the "name" is always None.
276
+ if not isinstance(node.base_type, CSimpleBaseTypeNode) or \
277
+ node.base_type.name is not None:
278
+ self.visit(node.base_type)
279
+
280
+ # If we printed something for "node.base_type", we may need to print an extra ' '.
281
+ #
282
+ # Special case: if "node.declarator" is a "CNameDeclaratorNode",
283
+ # its "name" might be an empty string, for example, for "cdef f(x)".
284
+ if node.declarator.declared_name():
285
+ self.put(u" ")
286
+ self.visit(node.declarator)
287
+ if node.default is not None:
288
+ self.put(u" = ")
289
+ self.visit(node.default)
290
+
291
+ def visit_CImportStatNode(self, node):
292
+ self.startline(u"cimport ")
293
+ self.put(node.module_name)
294
+ if node.as_name:
295
+ self.put(u" as ")
296
+ self.put(node.as_name)
297
+ self.endline()
298
+
299
+ def visit_FromCImportStatNode(self, node):
300
+ self.startline(u"from ")
301
+ self.put(node.module_name)
302
+ self.put(u" cimport ")
303
+ first = True
304
+ for pos, name, as_name, kind in node.imported_names:
305
+ assert kind is None
306
+ if first:
307
+ first = False
308
+ else:
309
+ self.put(u", ")
310
+ self.put(name)
311
+ if as_name:
312
+ self.put(u" as ")
313
+ self.put(as_name)
314
+ self.endline()
315
+
316
+ def visit_NameNode(self, node):
317
+ self.put(node.name)
318
+
319
+ def visit_DecoratorNode(self, node):
320
+ self.startline("@")
321
+ self.visit(node.decorator)
322
+ self.endline()
323
+
324
+ def visit_PassStatNode(self, node):
325
+ self.startline(u"pass")
326
+ self.endline()
327
+
328
+
329
+ class StatementWriter(DeclarationWriter):
330
+ """
331
+ A Cython code writer for most language statement features.
332
+ """
333
+
334
+ def visit_SingleAssignmentNode(self, node):
335
+ self.startline()
336
+ self.visit(node.lhs)
337
+ self.put(u" = ")
338
+ self.visit(node.rhs)
339
+ self.endline()
340
+
341
+ def visit_CascadedAssignmentNode(self, node):
342
+ self.startline()
343
+ for lhs in node.lhs_list:
344
+ self.visit(lhs)
345
+ self.put(u" = ")
346
+ self.visit(node.rhs)
347
+ self.endline()
348
+
349
+ def visit_PrintStatNode(self, node):
350
+ self.startline(u"print ")
351
+ self.comma_separated_list(node.arg_tuple.args)
352
+ if not node.append_newline:
353
+ self.put(u",")
354
+ self.endline()
355
+
356
+ def visit_ForInStatNode(self, node):
357
+ self.startline(u"for ")
358
+ if node.target.is_sequence_constructor:
359
+ self.comma_separated_list(node.target.args)
360
+ else:
361
+ self.visit(node.target)
362
+ self.put(u" in ")
363
+ self.visit(node.iterator.sequence)
364
+ self.endline(u":")
365
+ self._visit_indented(node.body)
366
+ if node.else_clause is not None:
367
+ self.line(u"else:")
368
+ self._visit_indented(node.else_clause)
369
+
370
+ def visit_IfStatNode(self, node):
371
+ # The IfClauseNode is handled directly without a separate match
372
+ # for clariy.
373
+ self.startline(u"if ")
374
+ self.visit(node.if_clauses[0].condition)
375
+ self.endline(":")
376
+ self._visit_indented(node.if_clauses[0].body)
377
+ for clause in node.if_clauses[1:]:
378
+ self.startline("elif ")
379
+ self.visit(clause.condition)
380
+ self.endline(":")
381
+ self._visit_indented(clause.body)
382
+ if node.else_clause is not None:
383
+ self.line("else:")
384
+ self._visit_indented(node.else_clause)
385
+
386
+ def visit_WhileStatNode(self, node):
387
+ self.startline(u"while ")
388
+ self.visit(node.condition)
389
+ self.endline(u":")
390
+ self._visit_indented(node.body)
391
+ if node.else_clause is not None:
392
+ self.line("else:")
393
+ self._visit_indented(node.else_clause)
394
+
395
+ def visit_ContinueStatNode(self, node):
396
+ self.line(u"continue")
397
+
398
+ def visit_BreakStatNode(self, node):
399
+ self.line(u"break")
400
+
401
+ def visit_SequenceNode(self, node):
402
+ self.comma_separated_list(node.args) # Might need to discover whether we need () around tuples...hmm...
403
+
404
+ def visit_ExprStatNode(self, node):
405
+ self.startline()
406
+ self.visit(node.expr)
407
+ self.endline()
408
+
409
+ def visit_InPlaceAssignmentNode(self, node):
410
+ self.startline()
411
+ self.visit(node.lhs)
412
+ self.put(u" %s= " % node.operator)
413
+ self.visit(node.rhs)
414
+ self.endline()
415
+
416
+ def visit_WithStatNode(self, node):
417
+ self.startline()
418
+ self.put(u"with ")
419
+ self.visit(node.manager)
420
+ if node.target is not None:
421
+ self.put(u" as ")
422
+ self.visit(node.target)
423
+ self.endline(u":")
424
+ self._visit_indented(node.body)
425
+
426
+ def visit_TryFinallyStatNode(self, node):
427
+ self.line(u"try:")
428
+ self._visit_indented(node.body)
429
+ self.line(u"finally:")
430
+ self._visit_indented(node.finally_clause)
431
+
432
+ def visit_TryExceptStatNode(self, node):
433
+ self.line(u"try:")
434
+ self._visit_indented(node.body)
435
+ for x in node.except_clauses:
436
+ self.visit(x)
437
+ if node.else_clause is not None:
438
+ self.visit(node.else_clause)
439
+
440
+ def visit_ExceptClauseNode(self, node):
441
+ self.startline(u"except")
442
+ if node.pattern is not None:
443
+ self.put(u" ")
444
+ self.visit(node.pattern)
445
+ if node.target is not None:
446
+ self.put(u", ")
447
+ self.visit(node.target)
448
+ self.endline(":")
449
+ self._visit_indented(node.body)
450
+
451
+ def visit_ReturnStatNode(self, node):
452
+ self.startline("return")
453
+ if node.value is not None:
454
+ self.put(u" ")
455
+ self.visit(node.value)
456
+ self.endline()
457
+
458
+ def visit_ReraiseStatNode(self, node):
459
+ self.line("raise")
460
+
461
+ def visit_ImportNode(self, node):
462
+ self.put(u"(import %s)" % node.module_name.value)
463
+
464
+ def visit_TempsBlockNode(self, node):
465
+ """
466
+ Temporaries are output like $1_1', where the first number is
467
+ an index of the TempsBlockNode and the second number is an index
468
+ of the temporary which that block allocates.
469
+ """
470
+ idx = 0
471
+ for handle in node.temps:
472
+ self.tempnames[handle] = "$%d_%d" % (self.tempblockindex, idx)
473
+ idx += 1
474
+ self.tempblockindex += 1
475
+ self.visit(node.body)
476
+
477
+ def visit_TempRefNode(self, node):
478
+ self.put(self.tempnames[node.handle])
479
+
480
+
481
+ class ExpressionWriter(TreeVisitor):
482
+ """
483
+ A Cython code writer that is intentionally limited to expressions.
484
+ """
485
+
486
+ def __init__(self, result=None):
487
+ super(ExpressionWriter, self).__init__()
488
+ if result is None:
489
+ result = u""
490
+ self.result = result
491
+ self.precedence = [0]
492
+
493
+ def write(self, tree):
494
+ self.visit(tree)
495
+ return self.result
496
+
497
+ def put(self, s):
498
+ self.result += s
499
+
500
+ def remove(self, s):
501
+ if self.result.endswith(s):
502
+ self.result = self.result[:-len(s)]
503
+
504
+ def comma_separated_list(self, items):
505
+ if len(items) > 0:
506
+ for item in items[:-1]:
507
+ self.visit(item)
508
+ self.put(u", ")
509
+ self.visit(items[-1])
510
+
511
+ def visit_Node(self, node):
512
+ raise AssertionError("Node not handled by serializer: %r" % node)
513
+
514
+ def visit_IntNode(self, node):
515
+ self.put(node.value)
516
+
517
+ def visit_FloatNode(self, node):
518
+ self.put(node.value)
519
+
520
+ def visit_NoneNode(self, node):
521
+ self.put(u"None")
522
+
523
+ def visit_NameNode(self, node):
524
+ self.put(node.name)
525
+
526
+ def visit_EllipsisNode(self, node):
527
+ self.put(u"...")
528
+
529
+ def visit_BoolNode(self, node):
530
+ self.put(str(node.value))
531
+
532
+ def visit_ConstNode(self, node):
533
+ self.put(str(node.value))
534
+
535
+ def visit_ImagNode(self, node):
536
+ self.put(node.value)
537
+ self.put(u"j")
538
+
539
+ def emit_string(self, node, prefix=u""):
540
+ repr_val = repr(node.value)
541
+ if repr_val[0] in 'ub':
542
+ repr_val = repr_val[1:]
543
+ self.put(u"%s%s" % (prefix, repr_val))
544
+
545
+ def visit_BytesNode(self, node):
546
+ self.emit_string(node, u"b")
547
+
548
+ def visit_StringNode(self, node):
549
+ self.emit_string(node)
550
+
551
+ def visit_UnicodeNode(self, node):
552
+ self.emit_string(node, u"u")
553
+
554
+ def emit_sequence(self, node, parens=(u"", u"")):
555
+ open_paren, close_paren = parens
556
+ items = node.subexpr_nodes()
557
+ self.put(open_paren)
558
+ self.comma_separated_list(items)
559
+ self.put(close_paren)
560
+
561
+ def visit_ListNode(self, node):
562
+ self.emit_sequence(node, u"[]")
563
+
564
+ def visit_TupleNode(self, node):
565
+ self.emit_sequence(node, u"()")
566
+
567
+ def visit_SetNode(self, node):
568
+ if len(node.subexpr_nodes()) > 0:
569
+ self.emit_sequence(node, u"{}")
570
+ else:
571
+ self.put(u"set()")
572
+
573
+ def visit_DictNode(self, node):
574
+ self.emit_sequence(node, u"{}")
575
+
576
+ def visit_DictItemNode(self, node):
577
+ self.visit(node.key)
578
+ self.put(u": ")
579
+ self.visit(node.value)
580
+
581
+ unop_precedence = {
582
+ 'not': 3, '!': 3,
583
+ '+': 11, '-': 11, '~': 11,
584
+ }
585
+ binop_precedence = {
586
+ 'or': 1,
587
+ 'and': 2,
588
+ # unary: 'not': 3, '!': 3,
589
+ 'in': 4, 'not_in': 4, 'is': 4, 'is_not': 4, '<': 4, '<=': 4, '>': 4, '>=': 4, '!=': 4, '==': 4,
590
+ '|': 5,
591
+ '^': 6,
592
+ '&': 7,
593
+ '<<': 8, '>>': 8,
594
+ '+': 9, '-': 9,
595
+ '*': 10, '@': 10, '/': 10, '//': 10, '%': 10,
596
+ # unary: '+': 11, '-': 11, '~': 11
597
+ '**': 12,
598
+ }
599
+
600
+ def operator_enter(self, new_prec):
601
+ old_prec = self.precedence[-1]
602
+ if old_prec > new_prec:
603
+ self.put(u"(")
604
+ self.precedence.append(new_prec)
605
+
606
+ def operator_exit(self):
607
+ old_prec, new_prec = self.precedence[-2:]
608
+ if old_prec > new_prec:
609
+ self.put(u")")
610
+ self.precedence.pop()
611
+
612
+ def visit_NotNode(self, node):
613
+ op = 'not'
614
+ prec = self.unop_precedence[op]
615
+ self.operator_enter(prec)
616
+ self.put(u"not ")
617
+ self.visit(node.operand)
618
+ self.operator_exit()
619
+
620
+ def visit_UnopNode(self, node):
621
+ op = node.operator
622
+ prec = self.unop_precedence[op]
623
+ self.operator_enter(prec)
624
+ self.put(u"%s" % node.operator)
625
+ self.visit(node.operand)
626
+ self.operator_exit()
627
+
628
+ def visit_BinopNode(self, node):
629
+ op = node.operator
630
+ prec = self.binop_precedence.get(op, 0)
631
+ self.operator_enter(prec)
632
+ self.visit(node.operand1)
633
+ self.put(u" %s " % op.replace('_', ' '))
634
+ self.visit(node.operand2)
635
+ self.operator_exit()
636
+
637
+ def visit_BoolBinopNode(self, node):
638
+ self.visit_BinopNode(node)
639
+
640
+ def visit_PrimaryCmpNode(self, node):
641
+ self.visit_BinopNode(node)
642
+
643
+ def visit_IndexNode(self, node):
644
+ self.visit(node.base)
645
+ self.put(u"[")
646
+ if isinstance(node.index, TupleNode):
647
+ if node.index.subexpr_nodes():
648
+ self.emit_sequence(node.index)
649
+ else:
650
+ self.put(u"()")
651
+ else:
652
+ self.visit(node.index)
653
+ self.put(u"]")
654
+
655
+ def visit_SliceIndexNode(self, node):
656
+ self.visit(node.base)
657
+ self.put(u"[")
658
+ if node.start:
659
+ self.visit(node.start)
660
+ self.put(u":")
661
+ if node.stop:
662
+ self.visit(node.stop)
663
+ if node.slice:
664
+ self.put(u":")
665
+ self.visit(node.slice)
666
+ self.put(u"]")
667
+
668
+ def visit_SliceNode(self, node):
669
+ if not node.start.is_none:
670
+ self.visit(node.start)
671
+ self.put(u":")
672
+ if not node.stop.is_none:
673
+ self.visit(node.stop)
674
+ if not node.step.is_none:
675
+ self.put(u":")
676
+ self.visit(node.step)
677
+
678
+ def visit_CondExprNode(self, node):
679
+ self.visit(node.true_val)
680
+ self.put(u" if ")
681
+ self.visit(node.test)
682
+ self.put(u" else ")
683
+ self.visit(node.false_val)
684
+
685
+ def visit_AttributeNode(self, node):
686
+ self.visit(node.obj)
687
+ self.put(u".%s" % node.attribute)
688
+
689
+ def visit_SimpleCallNode(self, node):
690
+ self.visit(node.function)
691
+ self.put(u"(")
692
+ self.comma_separated_list(node.args)
693
+ self.put(")")
694
+
695
+ def emit_pos_args(self, node):
696
+ if node is None:
697
+ return
698
+ if isinstance(node, AddNode):
699
+ self.emit_pos_args(node.operand1)
700
+ self.emit_pos_args(node.operand2)
701
+ elif isinstance(node, TupleNode):
702
+ for expr in node.subexpr_nodes():
703
+ self.visit(expr)
704
+ self.put(u", ")
705
+ elif isinstance(node, AsTupleNode):
706
+ self.put("*")
707
+ self.visit(node.arg)
708
+ self.put(u", ")
709
+ else:
710
+ self.visit(node)
711
+ self.put(u", ")
712
+
713
+ def emit_kwd_args(self, node):
714
+ if node is None:
715
+ return
716
+ if isinstance(node, MergedDictNode):
717
+ for expr in node.subexpr_nodes():
718
+ self.emit_kwd_args(expr)
719
+ elif isinstance(node, DictNode):
720
+ for expr in node.subexpr_nodes():
721
+ self.put(u"%s=" % expr.key.value)
722
+ self.visit(expr.value)
723
+ self.put(u", ")
724
+ else:
725
+ self.put(u"**")
726
+ self.visit(node)
727
+ self.put(u", ")
728
+
729
+ def visit_GeneralCallNode(self, node):
730
+ self.visit(node.function)
731
+ self.put(u"(")
732
+ self.emit_pos_args(node.positional_args)
733
+ self.emit_kwd_args(node.keyword_args)
734
+ self.remove(u", ")
735
+ self.put(")")
736
+
737
+ def emit_comprehension(self, body, target,
738
+ sequence, condition,
739
+ parens=(u"", u"")):
740
+ open_paren, close_paren = parens
741
+ self.put(open_paren)
742
+ self.visit(body)
743
+ self.put(u" for ")
744
+ self.visit(target)
745
+ self.put(u" in ")
746
+ self.visit(sequence)
747
+ if condition:
748
+ self.put(u" if ")
749
+ self.visit(condition)
750
+ self.put(close_paren)
751
+
752
+ def visit_ComprehensionAppendNode(self, node):
753
+ self.visit(node.expr)
754
+
755
+ def visit_DictComprehensionAppendNode(self, node):
756
+ self.visit(node.key_expr)
757
+ self.put(u": ")
758
+ self.visit(node.value_expr)
759
+
760
+ def visit_ComprehensionNode(self, node):
761
+ tpmap = {'list': u"[]", 'dict': u"{}", 'set': u"{}"}
762
+ parens = tpmap[node.type.py_type_name()]
763
+ body = node.loop.body
764
+ target = node.loop.target
765
+ sequence = node.loop.iterator.sequence
766
+ condition = None
767
+ if hasattr(body, 'if_clauses'):
768
+ # type(body) is Nodes.IfStatNode
769
+ condition = body.if_clauses[0].condition
770
+ body = body.if_clauses[0].body
771
+ self.emit_comprehension(body, target, sequence, condition, parens)
772
+
773
+ def visit_GeneratorExpressionNode(self, node):
774
+ body = node.loop.body
775
+ target = node.loop.target
776
+ sequence = node.loop.iterator.sequence
777
+ condition = None
778
+ if hasattr(body, 'if_clauses'):
779
+ # type(body) is Nodes.IfStatNode
780
+ condition = body.if_clauses[0].condition
781
+ body = body.if_clauses[0].body.expr.arg
782
+ elif hasattr(body, 'expr'):
783
+ # type(body) is Nodes.ExprStatNode
784
+ body = body.expr.arg
785
+ self.emit_comprehension(body, target, sequence, condition, u"()")
786
+
787
+
788
+ class PxdWriter(DeclarationWriter, ExpressionWriter):
789
+ """
790
+ A Cython code writer for everything supported in pxd files.
791
+ (currently unused)
792
+ """
793
+
794
+ def __call__(self, node):
795
+ print(u'\n'.join(self.write(node).lines))
796
+ return node
797
+
798
+ def visit_CFuncDefNode(self, node):
799
+ if node.overridable:
800
+ self.startline(u'cpdef ')
801
+ else:
802
+ self.startline(u'cdef ')
803
+ if node.modifiers:
804
+ self.put(' '.join(node.modifiers))
805
+ self.put(' ')
806
+ if node.visibility != 'private':
807
+ self.put(node.visibility)
808
+ self.put(u' ')
809
+ if node.api:
810
+ self.put(u'api ')
811
+ self.visit(node.declarator)
812
+
813
+ def visit_StatNode(self, node):
814
+ pass
815
+
816
+
817
+ class CodeWriter(StatementWriter, ExpressionWriter):
818
+ """
819
+ A complete Cython code writer.
820
+ """
Lib/site-packages/Cython/Compiler/AnalysedTreeTransforms.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ from .Visitor import ScopeTrackingTransform
4
+ from .Nodes import StatListNode, SingleAssignmentNode, CFuncDefNode, DefNode
5
+ from .ExprNodes import DictNode, DictItemNode, NameNode, UnicodeNode
6
+ from .PyrexTypes import py_object_type
7
+ from .StringEncoding import EncodedString
8
+ from . import Symtab
9
+
10
+ class AutoTestDictTransform(ScopeTrackingTransform):
11
+ # Handles autotestdict directive
12
+
13
+ excludelist = ['__cinit__', '__dealloc__', '__richcmp__',
14
+ '__nonzero__', '__bool__',
15
+ '__len__', '__contains__']
16
+
17
+ def visit_ModuleNode(self, node):
18
+ if node.is_pxd:
19
+ return node
20
+ self.scope_type = 'module'
21
+ self.scope_node = node
22
+
23
+ if not self.current_directives['autotestdict']:
24
+ return node
25
+ self.all_docstrings = self.current_directives['autotestdict.all']
26
+ self.cdef_docstrings = self.all_docstrings or self.current_directives['autotestdict.cdef']
27
+
28
+ assert isinstance(node.body, StatListNode)
29
+
30
+ # First see if __test__ is already created
31
+ if u'__test__' in node.scope.entries:
32
+ # Do nothing
33
+ return node
34
+
35
+ pos = node.pos
36
+
37
+ self.tests = []
38
+ self.testspos = node.pos
39
+
40
+ test_dict_entry = node.scope.declare_var(EncodedString(u'__test__'),
41
+ py_object_type,
42
+ pos,
43
+ visibility='public')
44
+ create_test_dict_assignment = SingleAssignmentNode(pos,
45
+ lhs=NameNode(pos, name=EncodedString(u'__test__'),
46
+ entry=test_dict_entry),
47
+ rhs=DictNode(pos, key_value_pairs=self.tests))
48
+ self.visitchildren(node)
49
+ node.body.stats.append(create_test_dict_assignment)
50
+ return node
51
+
52
+ def add_test(self, testpos, path, doctest):
53
+ pos = self.testspos
54
+ keystr = u'%s (line %d)' % (path, testpos[1])
55
+ key = UnicodeNode(pos, value=EncodedString(keystr))
56
+ value = UnicodeNode(pos, value=doctest)
57
+ self.tests.append(DictItemNode(pos, key=key, value=value))
58
+
59
+ def visit_ExprNode(self, node):
60
+ # expressions cannot contain functions and lambda expressions
61
+ # do not have a docstring
62
+ return node
63
+
64
+ def visit_FuncDefNode(self, node):
65
+ if not node.doc or (isinstance(node, DefNode) and node.fused_py_func):
66
+ return node
67
+ if not self.cdef_docstrings:
68
+ if isinstance(node, CFuncDefNode) and not node.py_func:
69
+ return node
70
+ if not self.all_docstrings and '>>>' not in node.doc:
71
+ return node
72
+
73
+ pos = self.testspos
74
+ if self.scope_type == 'module':
75
+ path = node.entry.name
76
+ elif self.scope_type in ('pyclass', 'cclass'):
77
+ if isinstance(node, CFuncDefNode):
78
+ if node.py_func is not None:
79
+ name = node.py_func.name
80
+ else:
81
+ name = node.entry.name
82
+ else:
83
+ name = node.name
84
+ if self.scope_type == 'cclass' and name in self.excludelist:
85
+ return node
86
+ if self.scope_type == 'pyclass':
87
+ class_name = self.scope_node.name
88
+ else:
89
+ class_name = self.scope_node.class_name
90
+ if isinstance(node.entry.scope, Symtab.PropertyScope):
91
+ property_method_name = node.entry.scope.name
92
+ path = "%s.%s.%s" % (class_name, node.entry.scope.name,
93
+ node.entry.name)
94
+ else:
95
+ path = "%s.%s" % (class_name, node.entry.name)
96
+ else:
97
+ assert False
98
+ self.add_test(node.pos, path, node.doc)
99
+ return node
Lib/site-packages/Cython/Compiler/Annotate.py ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Note: Work in progress
2
+
3
+ from __future__ import absolute_import
4
+
5
+ import os
6
+ import os.path
7
+ import re
8
+ import codecs
9
+ import textwrap
10
+ from datetime import datetime
11
+ from functools import partial
12
+ from collections import defaultdict
13
+ from xml.sax.saxutils import escape as html_escape
14
+ try:
15
+ from StringIO import StringIO
16
+ except ImportError:
17
+ from io import StringIO # does not support writing 'str' in Py2
18
+
19
+ from . import Version
20
+ from .Code import CCodeWriter
21
+ from .. import Utils
22
+
23
+
24
+ class AnnotationCCodeWriter(CCodeWriter):
25
+
26
+ # also used as marker for detection of complete code emission in tests
27
+ COMPLETE_CODE_TITLE = "Complete cythonized code"
28
+
29
+ def __init__(self, create_from=None, buffer=None, copy_formatting=True, show_entire_c_code=False, source_desc=None):
30
+ CCodeWriter.__init__(self, create_from, buffer, copy_formatting=copy_formatting)
31
+ self.show_entire_c_code = show_entire_c_code
32
+ if create_from is None:
33
+ self.annotation_buffer = StringIO()
34
+ self.last_annotated_pos = None
35
+ # annotations[filename][line] -> [(column, AnnotationItem)*]
36
+ self.annotations = defaultdict(partial(defaultdict, list))
37
+ # code[filename][line] -> str
38
+ self.code = defaultdict(partial(defaultdict, str))
39
+ # scopes[filename][line] -> set(scopes)
40
+ self.scopes = defaultdict(partial(defaultdict, set))
41
+ else:
42
+ # When creating an insertion point, keep references to the same database
43
+ self.annotation_buffer = create_from.annotation_buffer
44
+ self.annotations = create_from.annotations
45
+ self.code = create_from.code
46
+ self.scopes = create_from.scopes
47
+ self.last_annotated_pos = create_from.last_annotated_pos
48
+
49
+ def create_new(self, create_from, buffer, copy_formatting):
50
+ return AnnotationCCodeWriter(create_from, buffer, copy_formatting)
51
+
52
+ def _write_to_buffer(self, s):
53
+ self.buffer.write(s)
54
+ self.annotation_buffer.write(s)
55
+
56
+ def mark_pos(self, pos, trace=True):
57
+ if pos is not None:
58
+ CCodeWriter.mark_pos(self, pos, trace)
59
+ if self.funcstate and self.funcstate.scope:
60
+ # lambdas and genexprs can result in multiple scopes per line => keep them in a set
61
+ self.scopes[pos[0].filename][pos[1]].add(self.funcstate.scope)
62
+ if self.last_annotated_pos:
63
+ source_desc, line, _ = self.last_annotated_pos
64
+ pos_code = self.code[source_desc.filename]
65
+ pos_code[line] += self.annotation_buffer.getvalue()
66
+ self.annotation_buffer = StringIO()
67
+ self.last_annotated_pos = pos
68
+
69
+ def annotate(self, pos, item):
70
+ self.annotations[pos[0].filename][pos[1]].append((pos[2], item))
71
+
72
+ def _css(self):
73
+ """css template will later allow to choose a colormap"""
74
+ css = [self._css_template]
75
+ for i in range(255):
76
+ color = u"FFFF%02x" % int(255.0 // (1.0 + i/10.0))
77
+ css.append('.cython.score-%d {background-color: #%s;}' % (i, color))
78
+ try:
79
+ from pygments.formatters import HtmlFormatter
80
+ except ImportError:
81
+ pass
82
+ else:
83
+ css.append(HtmlFormatter().get_style_defs('.cython'))
84
+ return '\n'.join(css)
85
+
86
+ _css_template = textwrap.dedent("""
87
+ body.cython { font-family: courier; font-size: 12; }
88
+
89
+ .cython.tag { }
90
+ .cython.line { color: #000000; margin: 0em }
91
+ .cython.code { font-size: 9; color: #444444; display: none; margin: 0px 0px 0px 8px; border-left: 8px none; }
92
+
93
+ .cython.line .run { background-color: #B0FFB0; }
94
+ .cython.line .mis { background-color: #FFB0B0; }
95
+ .cython.code.run { border-left: 8px solid #B0FFB0; }
96
+ .cython.code.mis { border-left: 8px solid #FFB0B0; }
97
+
98
+ .cython.code .py_c_api { color: red; }
99
+ .cython.code .py_macro_api { color: #FF7000; }
100
+ .cython.code .pyx_c_api { color: #FF3000; }
101
+ .cython.code .pyx_macro_api { color: #FF7000; }
102
+ .cython.code .refnanny { color: #FFA000; }
103
+ .cython.code .trace { color: #FFA000; }
104
+ .cython.code .error_goto { color: #FFA000; }
105
+
106
+ .cython.code .coerce { color: #008000; border: 1px dotted #008000 }
107
+ .cython.code .py_attr { color: #FF0000; font-weight: bold; }
108
+ .cython.code .c_attr { color: #0000FF; }
109
+ .cython.code .py_call { color: #FF0000; font-weight: bold; }
110
+ .cython.code .c_call { color: #0000FF; }
111
+ """)
112
+
113
+ # on-click toggle function to show/hide C source code
114
+ _onclick_attr = ' onclick="{0}"'.format((
115
+ "(function(s){"
116
+ " s.display = s.display === 'block' ? 'none' : 'block'"
117
+ "})(this.nextElementSibling.style)"
118
+ ).replace(' ', '') # poor dev's JS minification
119
+ )
120
+
121
+ def save_annotation(self, source_filename, target_filename, coverage_xml=None):
122
+ with Utils.open_source_file(source_filename) as f:
123
+ code = f.read()
124
+ generated_code = self.code.get(source_filename, {})
125
+ c_file = Utils.decode_filename(os.path.basename(target_filename))
126
+ html_filename = os.path.splitext(target_filename)[0] + ".html"
127
+
128
+ with codecs.open(html_filename, "w", encoding="UTF-8") as out_buffer:
129
+ out_buffer.write(self._save_annotation(code, generated_code, c_file, source_filename, coverage_xml))
130
+
131
+ def _save_annotation_header(self, c_file, source_filename, coverage_timestamp=None):
132
+ coverage_info = ''
133
+ if coverage_timestamp:
134
+ coverage_info = u' with coverage data from {timestamp}'.format(
135
+ timestamp=datetime.fromtimestamp(int(coverage_timestamp) // 1000))
136
+
137
+ outlist = [
138
+ textwrap.dedent(u'''\
139
+ <!DOCTYPE html>
140
+ <!-- Generated by Cython {watermark} -->
141
+ <html>
142
+ <head>
143
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
144
+ <title>Cython: {filename}</title>
145
+ <style type="text/css">
146
+ {css}
147
+ </style>
148
+ </head>
149
+ <body class="cython">
150
+ <p><span style="border-bottom: solid 1px grey;">Generated by Cython {watermark}</span>{more_info}</p>
151
+ <p>
152
+ <span style="background-color: #FFFF00">Yellow lines</span> hint at Python interaction.<br />
153
+ Click on a line that starts with a "<code>+</code>" to see the C code that Cython generated for it.
154
+ </p>
155
+ ''').format(css=self._css(), watermark=Version.watermark,
156
+ filename=os.path.basename(source_filename) if source_filename else '',
157
+ more_info=coverage_info)
158
+ ]
159
+ if c_file:
160
+ outlist.append(u'<p>Raw output: <a href="%s">%s</a></p>\n' % (c_file, c_file))
161
+ return outlist
162
+
163
+ def _save_annotation_footer(self):
164
+ return (u'</body></html>\n',)
165
+
166
+ def _save_annotation(self, code, generated_code, c_file=None, source_filename=None, coverage_xml=None):
167
+ """
168
+ lines : original cython source code split by lines
169
+ generated_code : generated c code keyed by line number in original file
170
+ target filename : name of the file in which to store the generated html
171
+ c_file : filename in which the c_code has been written
172
+ """
173
+ if coverage_xml is not None and source_filename:
174
+ coverage_timestamp = coverage_xml.get('timestamp', '').strip()
175
+ covered_lines = self._get_line_coverage(coverage_xml, source_filename)
176
+ else:
177
+ coverage_timestamp = covered_lines = None
178
+ annotation_items = dict(self.annotations[source_filename])
179
+ scopes = dict(self.scopes[source_filename])
180
+
181
+ outlist = []
182
+ outlist.extend(self._save_annotation_header(c_file, source_filename, coverage_timestamp))
183
+ outlist.extend(self._save_annotation_body(code, generated_code, annotation_items, scopes, covered_lines))
184
+ outlist.extend(self._save_annotation_footer())
185
+ return ''.join(outlist)
186
+
187
+ def _get_line_coverage(self, coverage_xml, source_filename):
188
+ coverage_data = None
189
+ for entry in coverage_xml.iterfind('.//class'):
190
+ if not entry.get('filename'):
191
+ continue
192
+ if (entry.get('filename') == source_filename or
193
+ os.path.abspath(entry.get('filename')) == source_filename):
194
+ coverage_data = entry
195
+ break
196
+ elif source_filename.endswith(entry.get('filename')):
197
+ coverage_data = entry # but we might still find a better match...
198
+ if coverage_data is None:
199
+ return None
200
+ return dict(
201
+ (int(line.get('number')), int(line.get('hits')))
202
+ for line in coverage_data.iterfind('lines/line')
203
+ )
204
+
205
+ def _htmlify_code(self, code, language):
206
+ try:
207
+ from pygments import highlight
208
+ from pygments.lexers import CythonLexer, CppLexer
209
+ from pygments.formatters import HtmlFormatter
210
+ except ImportError:
211
+ # no Pygments, just escape the code
212
+ return html_escape(code)
213
+
214
+ if language == "cython":
215
+ lexer = CythonLexer(stripnl=False, stripall=False)
216
+ elif language == "c/cpp":
217
+ lexer = CppLexer(stripnl=False, stripall=False)
218
+ else:
219
+ # unknown language, use fallback
220
+ return html_escape(code)
221
+ html_code = highlight(
222
+ code, lexer,
223
+ HtmlFormatter(nowrap=True))
224
+ return html_code
225
+
226
+ def _save_annotation_body(self, cython_code, generated_code, annotation_items, scopes, covered_lines=None):
227
+ outlist = [u'<div class="cython">']
228
+ pos_comment_marker = u'/* \N{HORIZONTAL ELLIPSIS} */\n'
229
+ new_calls_map = dict(
230
+ (name, 0) for name in
231
+ 'refnanny trace py_macro_api py_c_api pyx_macro_api pyx_c_api error_goto'.split()
232
+ ).copy
233
+
234
+ self.mark_pos(None)
235
+
236
+ def annotate(match):
237
+ group_name = match.lastgroup
238
+ calls[group_name] += 1
239
+ return u"<span class='%s'>%s</span>" % (
240
+ group_name, match.group(group_name))
241
+
242
+ lines = self._htmlify_code(cython_code, "cython").splitlines()
243
+ lineno_width = len(str(len(lines)))
244
+ if not covered_lines:
245
+ covered_lines = None
246
+
247
+ for k, line in enumerate(lines, 1):
248
+ try:
249
+ c_code = generated_code[k]
250
+ except KeyError:
251
+ c_code = ''
252
+ else:
253
+ c_code = _replace_pos_comment(pos_comment_marker, c_code)
254
+ if c_code.startswith(pos_comment_marker):
255
+ c_code = c_code[len(pos_comment_marker):]
256
+ c_code = html_escape(c_code)
257
+
258
+ calls = new_calls_map()
259
+ c_code = _parse_code(annotate, c_code)
260
+ score = (5 * calls['py_c_api'] + 2 * calls['pyx_c_api'] +
261
+ calls['py_macro_api'] + calls['pyx_macro_api'])
262
+
263
+ if c_code:
264
+ onclick = self._onclick_attr
265
+ expandsymbol = '+'
266
+ else:
267
+ onclick = ''
268
+ expandsymbol = '&#xA0;'
269
+
270
+ covered = ''
271
+ if covered_lines is not None and k in covered_lines:
272
+ hits = covered_lines[k]
273
+ if hits is not None:
274
+ covered = 'run' if hits else 'mis'
275
+
276
+ outlist.append(
277
+ u'<pre class="cython line score-{score}"{onclick}>'
278
+ # generate line number with expand symbol in front,
279
+ # and the right number of digit
280
+ u'{expandsymbol}<span class="{covered}">{line:0{lineno_width}d}</span>: {code}</pre>\n'.format(
281
+ score=score,
282
+ expandsymbol=expandsymbol,
283
+ covered=covered,
284
+ lineno_width=lineno_width,
285
+ line=k,
286
+ code=line.rstrip(),
287
+ onclick=onclick,
288
+ ))
289
+ if c_code:
290
+ outlist.append(u"<pre class='cython code score-{score} {covered}'>{code}</pre>".format(
291
+ score=score, covered=covered, code=c_code))
292
+ outlist.append(u"</div>")
293
+
294
+ # now the whole c-code if needed:
295
+ if self.show_entire_c_code:
296
+ outlist.append(u'<p><div class="cython">')
297
+ onclick_title = u"<pre class='cython line'{onclick}>+ {title}</pre>\n"
298
+ outlist.append(onclick_title.format(
299
+ onclick=self._onclick_attr,
300
+ title=AnnotationCCodeWriter.COMPLETE_CODE_TITLE,
301
+ ))
302
+ complete_code_as_html = self._htmlify_code(self.buffer.getvalue(), "c/cpp")
303
+ outlist.append(u"<pre class='cython code'>{code}</pre>".format(code=complete_code_as_html))
304
+ outlist.append(u"</div></p>")
305
+
306
+ return outlist
307
+
308
+
309
+ _parse_code = re.compile((
310
+ br'(?P<refnanny>__Pyx_X?(?:GOT|GIVE)REF|__Pyx_RefNanny[A-Za-z]+)|'
311
+ br'(?P<trace>__Pyx_Trace[A-Za-z]+)|'
312
+ br'(?:'
313
+ br'(?P<pyx_macro_api>__Pyx_[A-Z][A-Z_]+)|'
314
+ br'(?P<pyx_c_api>(?:__Pyx_[A-Z][a-z_][A-Za-z_]*)|__pyx_convert_[A-Za-z_]*)|'
315
+ br'(?P<py_macro_api>Py[A-Z][a-z]+_[A-Z][A-Z_]+)|'
316
+ br'(?P<py_c_api>Py[A-Z][a-z]+_[A-Z][a-z][A-Za-z_]*)'
317
+ br')(?=\()|' # look-ahead to exclude subsequent '(' from replacement
318
+ br'(?P<error_goto>(?:(?<=;) *if [^;]* +)?__PYX_ERR\([^)]+\))'
319
+ ).decode('ascii')).sub
320
+
321
+
322
+ _replace_pos_comment = re.compile(
323
+ # this matches what Cython generates as code line marker comment
324
+ br'^\s*/\*(?:(?:[^*]|\*[^/])*\n)+\s*\*/\s*\n'.decode('ascii'),
325
+ re.M
326
+ ).sub
327
+
328
+
329
+ class AnnotationItem(object):
330
+
331
+ def __init__(self, style, text, tag="", size=0):
332
+ self.style = style
333
+ self.text = text
334
+ self.tag = tag
335
+ self.size = size
336
+
337
+ def start(self):
338
+ return u"<span class='cython tag %s' title='%s'>%s" % (self.style, self.text, self.tag)
339
+
340
+ def end(self):
341
+ return self.size, u"</span>"