a1o commited on
Commit
5efd29c
·
verified ·
1 Parent(s): 3f99a2e

Upload folder using huggingface_hub (part 5)

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 +5 -0
  2. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/INSTALLER +1 -0
  3. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/METADATA +64 -0
  4. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/RECORD +106 -0
  5. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/REQUESTED +0 -0
  6. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/WHEEL +5 -0
  7. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/LICENSE +30 -0
  8. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/hdf5.txt +69 -0
  9. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/license.txt +34 -0
  10. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/pytables.txt +33 -0
  11. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/python.txt +44 -0
  12. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/stdint.txt +25 -0
  13. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/lzf/LICENSE.txt +33 -0
  14. .venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/top_level.txt +1 -0
  15. .venv/lib/python3.11/site-packages/h5py.libs/libaec-a27cf049.so.0.1.4 +0 -0
  16. .venv/lib/python3.11/site-packages/h5py.libs/libhdf5-9e18f0c6.so.320.0.0 +3 -0
  17. .venv/lib/python3.11/site-packages/h5py.libs/libhdf5_hl-69da89c9.so.320.0.0 +3 -0
  18. .venv/lib/python3.11/site-packages/h5py.libs/libsz-c6be10dd.so.2.0.1 +0 -0
  19. .venv/lib/python3.11/site-packages/h5py/tests/test_objects.py +92 -0
  20. .venv/lib/python3.11/site-packages/h5py/tests/test_ros3.py +112 -0
  21. .venv/lib/python3.11/site-packages/h5py/tests/test_selections.py +142 -0
  22. .venv/lib/python3.11/site-packages/h5py/tests/test_slicing.py +421 -0
  23. .venv/lib/python3.11/site-packages/h5py/tests/test_vds/__init__.py +4 -0
  24. .venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_highlevel_vds.py +482 -0
  25. .venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_lowlevel_vds.py +298 -0
  26. .venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_virtual_source.py +166 -0
  27. .venv/lib/python3.11/site-packages/h5py/utils.cpython-311-x86_64-linux-gnu.so +3 -0
  28. .venv/lib/python3.11/site-packages/h5py/version.py +65 -0
  29. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/INSTALLER +1 -0
  30. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/METADATA +87 -0
  31. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/RECORD +9 -0
  32. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/REQUESTED +0 -0
  33. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/WHEEL +5 -0
  34. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/licenses/LICENSE +201 -0
  35. .venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/sboms/hf_xet.cyclonedx.json +0 -0
  36. .venv/lib/python3.11/site-packages/hf_xet/__init__.py +5 -0
  37. .venv/lib/python3.11/site-packages/hf_xet/__pycache__/__init__.cpython-311.pyc +0 -0
  38. .venv/lib/python3.11/site-packages/hf_xet/hf_xet.abi3.so +3 -0
  39. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/INSTALLER +1 -0
  40. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/METADATA +625 -0
  41. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/RECORD +38 -0
  42. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/REQUESTED +0 -0
  43. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/WHEEL +4 -0
  44. .venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/licenses/LICENSE.md +27 -0
  45. .venv/lib/python3.11/site-packages/httpcore/__init__.py +141 -0
  46. .venv/lib/python3.11/site-packages/httpcore/__pycache__/__init__.cpython-311.pyc +0 -0
  47. .venv/lib/python3.11/site-packages/httpcore/__pycache__/_api.cpython-311.pyc +0 -0
  48. .venv/lib/python3.11/site-packages/httpcore/__pycache__/_exceptions.cpython-311.pyc +0 -0
  49. .venv/lib/python3.11/site-packages/httpcore/__pycache__/_models.cpython-311.pyc +0 -0
  50. .venv/lib/python3.11/site-packages/httpcore/__pycache__/_ssl.cpython-311.pyc +0 -0
.gitattributes CHANGED
@@ -73,3 +73,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
73
  .venv/lib/python3.11/site-packages/h5py/h5s.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
74
  .venv/lib/python3.11/site-packages/h5py/h5t.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
75
  .venv/lib/python3.11/site-packages/h5py/h5z.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
73
  .venv/lib/python3.11/site-packages/h5py/h5s.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
74
  .venv/lib/python3.11/site-packages/h5py/h5t.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
75
  .venv/lib/python3.11/site-packages/h5py/h5z.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
76
+ .venv/lib/python3.11/site-packages/h5py/utils.cpython-311-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
77
+ .venv/lib/python3.11/site-packages/h5py.libs/libhdf5-9e18f0c6.so.320.0.0 filter=lfs diff=lfs merge=lfs -text
78
+ .venv/lib/python3.11/site-packages/h5py.libs/libhdf5_hl-69da89c9.so.320.0.0 filter=lfs diff=lfs merge=lfs -text
79
+ .venv/lib/python3.11/site-packages/hf_xet/hf_xet.abi3.so filter=lfs diff=lfs merge=lfs -text
80
+ .venv/lib/python3.11/site-packages/huggingface_hub/__pycache__/hf_api.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ uv
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/METADATA ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: h5py
3
+ Version: 3.16.0
4
+ Summary: Read and write HDF5 files from Python
5
+ Author-email: Andrew Collette <andrew.collette@gmail.com>
6
+ Maintainer-email: Thomas Kluyver <thomas@kluyver.me.uk>, Thomas A Caswell <tcaswell@bnl.gov>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://www.h5py.org/
9
+ Project-URL: Source, https://github.com/h5py/h5py
10
+ Project-URL: Documentation, https://docs.h5py.org/en/stable/
11
+ Project-URL: Release notes, https://docs.h5py.org/en/stable/whatsnew/index.html
12
+ Project-URL: Discussion forum, https://forum.hdfgroup.org/c/hdf5/h5py
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Operating System :: Unix
18
+ Classifier: Operating System :: POSIX :: Linux
19
+ Classifier: Operating System :: MacOS :: MacOS X
20
+ Classifier: Operating System :: Microsoft :: Windows
21
+ Classifier: Programming Language :: Cython
22
+ Classifier: Programming Language :: Python
23
+ Classifier: Programming Language :: Python :: 3
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Programming Language :: Python :: 3.14
29
+ Classifier: Programming Language :: Python :: Free Threading :: 1 - Unstable
30
+ Classifier: Programming Language :: Python :: Implementation :: CPython
31
+ Classifier: Topic :: Scientific/Engineering
32
+ Classifier: Topic :: Database
33
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
34
+ Requires-Python: >=3.10
35
+ Description-Content-Type: text/x-rst
36
+ License-File: LICENSE
37
+ License-File: lzf/LICENSE.txt
38
+ License-File: licenses/hdf5.txt
39
+ License-File: licenses/license.txt
40
+ License-File: licenses/pytables.txt
41
+ License-File: licenses/python.txt
42
+ License-File: licenses/stdint.txt
43
+ Requires-Dist: numpy>=1.21.2
44
+ Dynamic: license-file
45
+ Dynamic: requires-dist
46
+
47
+ The h5py package provides both a high- and low-level interface to the HDF5
48
+ library from Python. The low-level interface is intended to be a complete
49
+ wrapping of the HDF5 API, while the high-level component supports access to
50
+ HDF5 files, datasets and groups using established Python and NumPy concepts.
51
+
52
+ A strong emphasis on automatic conversion between Python (Numpy) datatypes and
53
+ data structures and their HDF5 equivalents vastly simplifies the process of
54
+ reading and writing data from Python.
55
+
56
+ Wheels are provided for several popular platforms, with an included copy of
57
+ the HDF5 library (usually the latest version when h5py is released).
58
+
59
+ You can also `build h5py from source
60
+ <https://docs.h5py.org/en/stable/build.html#source-installation>`_
61
+ with any HDF5 stable release from version 1.10.4 onwards, although naturally new
62
+ HDF5 versions released after this version of h5py may not work.
63
+ Odd-numbered minor versions of HDF5 (e.g. 1.13) are experimental, and may not
64
+ be supported.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/RECORD ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ h5py-3.16.0.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
2
+ h5py-3.16.0.dist-info/METADATA,sha256=5GH89-uf7mJCIF-SJcwXhFWgIS0cDLj5l_fuv4zZaV4,3007
3
+ h5py-3.16.0.dist-info/RECORD,,
4
+ h5py-3.16.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ h5py-3.16.0.dist-info/WHEEL,sha256=Op2QaqlU71fNSBP2nIljEWzUWxRUBAuK-SqS4BfzclU,113
6
+ h5py-3.16.0.dist-info/licenses/LICENSE,sha256=5XSylmVc-wylGA7G7uPJXRIrCQZzbTyn484Z4PKX8Mk,1520
7
+ h5py-3.16.0.dist-info/licenses/licenses/hdf5.txt,sha256=K4L--O2KAgumVs4tslBe2FiTnLfDtvffCEvYMDLXe8c,3766
8
+ h5py-3.16.0.dist-info/licenses/licenses/license.txt,sha256=-s9D4DGTz0z42LzdZ84E_GHvaUjdBmcqTl2leeZKOUg,1739
9
+ h5py-3.16.0.dist-info/licenses/licenses/pytables.txt,sha256=mi1dboFWOMajwRMPZr58z_CehMDoIeVz8q3WnURiJBQ,1640
10
+ h5py-3.16.0.dist-info/licenses/licenses/python.txt,sha256=hITnBcmcf12_FXcjtOPNHa_5z-QcdAtXJVWHjwWFiYQ,2503
11
+ h5py-3.16.0.dist-info/licenses/licenses/stdint.txt,sha256=HUwLpl1NqiPvjWwFcevpazCrrr2inCbWbOE1QNTxKyg,1394
12
+ h5py-3.16.0.dist-info/licenses/lzf/LICENSE.txt,sha256=qPjFSrwA0azRV0AVV7Psb1AKx2pe_Reg6qZE4tMua-s,1556
13
+ h5py-3.16.0.dist-info/top_level.txt,sha256=fO7Bsaa0F3Nx6djErCCbSw4-E7rBFMWrBVTGLEMxUMg,5
14
+ h5py.libs/libaec-a27cf049.so.0.1.4,sha256=mnI5kmsWLg2-QaH8AYHlXs0p1dv6Vv_eQr7IrUtPLbY,50545
15
+ h5py.libs/libhdf5-9e18f0c6.so.320.0.0,sha256=H2PzwC8C3NcC_OY6D23GeGQwvxuYmSbGhQ0gJrLItCQ,6132905
16
+ h5py.libs/libhdf5_hl-69da89c9.so.320.0.0,sha256=xC-1hG-mWDV1ZmGETFmmDd6EghL0s14EuuHZ-xd1Nvk,198665
17
+ h5py.libs/libsz-c6be10dd.so.2.0.1,sha256=pKlk1m-DS3eHyWl94BlWUzPs0ZCtGVeeoYBQVvm8fVY,54057
18
+ h5py/__init__.py,sha256=1KRoAwhyR872fuNKTZjXl74vVbH5IwvF-KH6NY-NG4c,3705
19
+ h5py/_conv.cpython-311-x86_64-linux-gnu.so,sha256=86f18GMgtaax4dfi8ZXOaDiEj657dJOB7JmaSzR1dMQ,459673
20
+ h5py/_errors.cpython-311-x86_64-linux-gnu.so,sha256=1cKD22D2spMDBWskavz2_RdK1nq0jEtBCHeAZNn_HWc,159673
21
+ h5py/_hl/__init__.py,sha256=R6siZWBApRmGrOkxi8kNKxZ0Hcp2MieM-0EBWwbp7vc,457
22
+ h5py/_hl/attrs.py,sha256=v9v8fJ9AaqGRXBDVDm89Pbms_7eqRQW4Ta45lUop1A4,10209
23
+ h5py/_hl/base.py,sha256=TGEn-w9w297bIQy-8--DfeMf5khezya6lO1bq7JhKDU,15701
24
+ h5py/_hl/compat.py,sha256=UXvt42U_OiXAcPcrr1FwVP_ScD4yL-ONPercjyUx6FA,1523
25
+ h5py/_hl/dataset.py,sha256=Vzq8QU7sLBDgM86qPzNjjyYbAZERHdrkk6yR-7dOZVc,45291
26
+ h5py/_hl/datatype.py,sha256=-kIh5Ha9K21VLqInUmZ6SZdXag1yvyo30MpgsM3H0P0,1548
27
+ h5py/_hl/dims.py,sha256=rbjYav9D7dFG-Tns_RDuP24B6bwR80LO_2d2NQYihh8,5109
28
+ h5py/_hl/files.py,sha256=kmhW1WMm27-M1qaYFpwF6Nb1STLUDcmYk1GzCOA1jTY,25154
29
+ h5py/_hl/filters.py,sha256=8e00taWWH4eV9y0Hq9CIRsCNZMqJyN9x2sUjKkYya-Y,14604
30
+ h5py/_hl/group.py,sha256=6q_QLDGOLHgXlw0Qmr56WlQ8Qk9tbyVyeADgFu7GX7c,34321
31
+ h5py/_hl/selections.py,sha256=MThKzB1B4N9x9T5CwfQvTqLCXP_GwGrLP1HatNV1yBg,14686
32
+ h5py/_hl/selections2.py,sha256=PcKxIbSCYjL_QrbeCHw8-MHWDBxOlEDG_UHvP4aBuKY,2723
33
+ h5py/_hl/vds.py,sha256=QpMLtumI_uaJ1CdqMXyxgGaW3rxAztcwSIB4rEjLC3U,9468
34
+ h5py/_npystrings.cpython-311-x86_64-linux-gnu.so,sha256=GqlAY4hUG7phhRzb0tC9Afdhrme-Py4ZSrfeZWW29OU,154849
35
+ h5py/_objects.cpython-311-x86_64-linux-gnu.so,sha256=Lv29s0RkqNPn-Dm8fdZRgmZwAn5CEyaVihp_Hs8hWQ8,360785
36
+ h5py/_proxy.cpython-311-x86_64-linux-gnu.so,sha256=vqzGOpz3Fne-WzIDkYDD87hYNL1Y1h1LX2VzDR0ZCS8,142321
37
+ h5py/_selector.cpython-311-x86_64-linux-gnu.so,sha256=PtYkVj6sWMEuStPNF-PbPhfaPMHWeUzQbPNVjlnEZ8A,364945
38
+ h5py/defs.cpython-311-x86_64-linux-gnu.so,sha256=jReZI6HVK9hXR8TxiqYqwUoofism1bdCfPRbyIYcHIM,512497
39
+ h5py/h5.cpython-311-x86_64-linux-gnu.so,sha256=g_uzy5YKyzdPSL2EZLrV-f3obiWiceqaxL9Zc2I2Hvw,257665
40
+ h5py/h5a.cpython-311-x86_64-linux-gnu.so,sha256=CXAB8DvXN9t88oCRBchXVU7a43Dp9WJWQ3U6lNTvt1U,319121
41
+ h5py/h5ac.cpython-311-x86_64-linux-gnu.so,sha256=xecNlWm9uIx_2WGhg0EwnYbDoSiR_La3Ig2-4xDpcvg,216257
42
+ h5py/h5d.cpython-311-x86_64-linux-gnu.so,sha256=hHGhKMb8L0ZRLW51RhukB1rkQLIkEkeD8-W5KvqrZSw,577985
43
+ h5py/h5ds.cpython-311-x86_64-linux-gnu.so,sha256=ctcMYks7lOFzV8wKAcHWkgpk-cEbdcTKWQbpdJV5r48,224825
44
+ h5py/h5f.cpython-311-x86_64-linux-gnu.so,sha256=bKdZMDaC82rt-e0EqgcA9hjLaax18jZDClvIkrQU_bI,352025
45
+ h5py/h5fd.cpython-311-x86_64-linux-gnu.so,sha256=zwo74dnNsIv0M_3uCZ-ngdny1GhRgFhsCe9qmKMOFn8,364857
46
+ h5py/h5g.cpython-311-x86_64-linux-gnu.so,sha256=7bphFJdzlfqSjAhGycM43DuT9FPOiBwxLTV1n8dKpGc,381033
47
+ h5py/h5i.cpython-311-x86_64-linux-gnu.so,sha256=NCe1NW1amlKjOZFlKu09hlF_TBGoswlrIDnhUb3coHs,175457
48
+ h5py/h5l.cpython-311-x86_64-linux-gnu.so,sha256=3BKvrhWKEKl_pTGhb3-1cXpqRVINy_ZAozFDZZc1xp0,274001
49
+ h5py/h5o.cpython-311-x86_64-linux-gnu.so,sha256=5bE5Q7z2grHZyrI9_LemJVl95F1cezW1xZZjrcEmgS0,343609
50
+ h5py/h5p.cpython-311-x86_64-linux-gnu.so,sha256=c-yPWSc4TzT8O3wXIW4vsYznvu8rBt5YDr2tShB529E,885185
51
+ h5py/h5pl.cpython-311-x86_64-linux-gnu.so,sha256=LBFTKE-RL0YZSW89pGXbkOzkVxuishZ1lfCcA9kQG64,162889
52
+ h5py/h5py_warnings.py,sha256=bNPu7wWPt1xLVZVB-lpycIoMux1kcNfaKf4NE78dK90,523
53
+ h5py/h5r.cpython-311-x86_64-linux-gnu.so,sha256=EluXGlvs36y_OeT5-uji1rlebS-lj0hEc2ibZ8rRoCE,200169
54
+ h5py/h5s.cpython-311-x86_64-linux-gnu.so,sha256=3aUO9A77EAQjVmV5icOTeXO6_vKJFZlgDHailgjyHXs,319049
55
+ h5py/h5t.cpython-311-x86_64-linux-gnu.so,sha256=REVuP3pTUBWGp2ihJklbPo5LKAsgzuVLQ_ZBdLn4jcY,919425
56
+ h5py/h5z.cpython-311-x86_64-linux-gnu.so,sha256=pQh4ME-qhAKMhW1CECUnk6fLlr9SLJQAHyeUdZv4wFk,171313
57
+ h5py/ipy_completer.py,sha256=dGKYNK3CE32jwRVrBeUssdXRocu45VnrA3cvLRp-2E0,3733
58
+ h5py/tests/__init__.py,sha256=oPTnFGaf5_48QHzq0mpTwlxbagBvnvU3W9s2AWRcWFU,613
59
+ h5py/tests/common.py,sha256=YuWJ5cblajJUGbejKVDl7C_FVzFgjWeKr1p3EIBO0sc,9278
60
+ h5py/tests/conftest.py,sha256=-aF7Ig1w4yd00YxOS9ScB4hFunPLXPXUGF8rDL43WSg,545
61
+ h5py/tests/data_files/__init__.py,sha256=WgwvU8ZVG00ZN2EOOnZ7TYJX_NzF_JCSd7nSEDJrbrE,193
62
+ h5py/tests/data_files/compound-dtype-complex.h5,sha256=682WWAlgZPFuRqLXS5UyyeamrVtnqCfy-09jefawU4A,13792
63
+ h5py/tests/data_files/vlen_string_dset.h5,sha256=kA-LrxnT2MTRGTrBrGAZ7nd0AF6FwDCvROZ1ezjSl5M,6304
64
+ h5py/tests/data_files/vlen_string_dset_utc.h5,sha256=hbcoOCuDPB2mFie5ozTiKCLVwcs1n-O6byUmKvRTL2M,169904
65
+ h5py/tests/data_files/vlen_string_s390x.h5,sha256=6pkMaOA3G6-rSWb3UvoTVbO59kNgBm9tna_48bfnTKU,9008
66
+ h5py/tests/test_attribute_create.py,sha256=YWXGzX53dryJT2eW-tSXOEPq80Vrq-s4B9aJpV_Wjsg,3181
67
+ h5py/tests/test_attrs.py,sha256=jt2w-bbIgNV-U1LJ71LmoN9ltqePrlmAzYZOOM7YLdo,9652
68
+ h5py/tests/test_attrs_data.py,sha256=hLttIRENNppMAY7zGVHiuly1QOg54gndk9OA3fFuxI8,10154
69
+ h5py/tests/test_base.py,sha256=8zkoukhM7XqR08lvFHFxmP-3B5RLYCaXwEJvDvXuDpQ,3971
70
+ h5py/tests/test_big_endian_file.py,sha256=-IYw7zyybjYIGKgZu1ys5D74ur4WMHeJRCHXiohlWvQ,1469
71
+ h5py/tests/test_completions.py,sha256=5IoOj-sdctWpf_shX4sCweZEEgrzZRMv4KDalWPsJtM,1894
72
+ h5py/tests/test_dataset.py,sha256=ikpvsbNnSPe91fUG3Uqne6bewfxVAHvayBPWpn2NDLw,88749
73
+ h5py/tests/test_dataset_getitem.py,sha256=9IlFGNFs-ioNe7YsXBVrkZMYi0YxagUD_nls7ftIV1U,21005
74
+ h5py/tests/test_dataset_swmr.py,sha256=cwkcX4GwGuLXD3IRlrgPnstbeWCUOhJXBEWthJWSakw,4060
75
+ h5py/tests/test_datatype.py,sha256=Gr-0IgmeC7ldt5rQMX3r4zlPwhUTsh7Fru6sMCRj0vU,1091
76
+ h5py/tests/test_dimension_scales.py,sha256=qA_dlkb5WYbqz8eXKpy6g_VcOsKKamT71t010kJH6b0,8424
77
+ h5py/tests/test_dims_dimensionproxy.py,sha256=OzhpDSYjKegKusgqaCcxcjIlLtELzKndzlpbqqpCu54,591
78
+ h5py/tests/test_dtype.py,sha256=ScTD9_PI3wsdBnfmlbfHcioCB_o0okjccwoANQK-hCQ,20109
79
+ h5py/tests/test_errors.py,sha256=jRWnUxN9bwlhdcSrcsgElto1amVHOg564_StvA9WcVA,2369
80
+ h5py/tests/test_file.py,sha256=FimQtXH8zbjVeqtEUaBA-HsTgA3Jztrq_X7StmSZFA8,35243
81
+ h5py/tests/test_file2.py,sha256=R3eoUPK-DwIl_bU3Xr2IJ5iLdEbuUNoc8138nWJ0WRg,11160
82
+ h5py/tests/test_file_alignment.py,sha256=Ov8hhi6ZfcIf-sntv9OGBQ0kk8aAag9yXjsN-yA64kI,4488
83
+ h5py/tests/test_file_image.py,sha256=w7COnNE--O_zfmJKdADzNjTsJp8zUC5Z5XzX0p9OGeY,2009
84
+ h5py/tests/test_filters.py,sha256=GeU-WR6C3fblqRrfUG7hxK90E3LeDNn-ADwS9GQ8qzg,3218
85
+ h5py/tests/test_group.py,sha256=bx0pd8pI7JiKQuIE-ARZ-cXGeNfShGn92OAQVlcAx6k,48757
86
+ h5py/tests/test_h5.py,sha256=FlYZcVxxP1kIYCZdSEC3sR7o72dPWYiUbhyFO0rvN-8,1216
87
+ h5py/tests/test_h5d_direct_chunk.py,sha256=xDEEP-djvITkMNMk3T7TPFnZ5g4kpvshXdIvgVJ1Nmo,7811
88
+ h5py/tests/test_h5f.py,sha256=eNZAcfQ2Au1W5nwewZ6FDbA0JURlY5R4hhjZPijdGnI,3929
89
+ h5py/tests/test_h5o.py,sha256=5bob6Brn-lW-xSNgSS5rLiuwKWQ0SzP4aTYoccgYfDQ,522
90
+ h5py/tests/test_h5p.py,sha256=qWO3u5JOQ4XkgLm2t0kSZgj0RgAylFWlSHia_M2r9AI,8094
91
+ h5py/tests/test_h5pl.py,sha256=2LZY4glHa9lMQLXfuPFFs_mcdGHMgUxpixKQ6RyEIx8,1847
92
+ h5py/tests/test_h5s.py,sha256=TGgvWcqPmBKuyNnEDmQxwOCXqvW9Uj0KTt9bVZ2IGOw,2149
93
+ h5py/tests/test_h5t.py,sha256=EjYXQl70rJaUfE9NOYnWjTltP0g02IYGWpmq1uMQsx8,6595
94
+ h5py/tests/test_h5z.py,sha256=WuQljb3J9K_dv29sysjnwc9lnPeUUAEHrjFx90BypOg,1972
95
+ h5py/tests/test_native_complex.py,sha256=Sog3Dm0TSHFEY-r8td-9k_apFFw1TsRzt_BAVYJQurY,5684
96
+ h5py/tests/test_npystrings.py,sha256=IwssUPMLTBq7kpTZuU4Xj7k0QTAkYZ_gpuC7o3U4O5g,5846
97
+ h5py/tests/test_objects.py,sha256=ia_kwGyWdD0e8fXunF2MP4apuJ3vc1I49jfKu1aPIS8,3043
98
+ h5py/tests/test_ros3.py,sha256=19xBp3LF0QnFwKbcuZDAa2YEt90hl44_bB2Qdo2F0JM,3378
99
+ h5py/tests/test_selections.py,sha256=gXYA8OStDr_LwUGbBEwRC14yRRBmRRxz-HBp6fOwuFk,4891
100
+ h5py/tests/test_slicing.py,sha256=ql5vshPyFoyqvZetERA2NPqu0tkSTXqU0nTveaI7ngY,14158
101
+ h5py/tests/test_vds/__init__.py,sha256=2mnHIhOAdjMVjHQjBp9VFDLfltPEOR02aoZ1yTJU5hY,103
102
+ h5py/tests/test_vds/test_highlevel_vds.py,sha256=p38uAjBJ252qXnwnMMeP4DA7WX9j_XVpu6cSbBRrgpw,17852
103
+ h5py/tests/test_vds/test_lowlevel_vds.py,sha256=Gp2dX53EaGmJ4Vd7N7K_e0efGkkqPkdnQtZBmjSVLOc,11934
104
+ h5py/tests/test_vds/test_virtual_source.py,sha256=eJglh9M8-JZsKFbOq__dLgnhafs91UcujxdD1Ng6ryA,6055
105
+ h5py/utils.cpython-311-x86_64-linux-gnu.so,sha256=e24uxED3CLW1YrrR-M3Cwvc-rSv9muBWuxgXfq_fCKk,175529
106
+ h5py/version.py,sha256=uR4EyeOssFzeBCJ0F_16laX3Plet5Dx7iXTSTMNJ6fw,1911
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/REQUESTED ADDED
File without changes
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-manylinux_2_28_x86_64
5
+
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/LICENSE ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2008 Andrew Collette and contributors
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the
14
+ distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/hdf5.txt ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ HDF5 (Hierarchical Data Format 5) Software Library and Utilities
2
+ Copyright 2006-2007 by The HDF Group (THG).
3
+
4
+ NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
5
+ Copyright 1998-2006 by the Board of Trustees of the University of Illinois.
6
+
7
+ All rights reserved.
8
+
9
+ Contributors: National Center for Supercomputing Applications (NCSA)
10
+ at the University of Illinois, Fortner Software, Unidata Program
11
+ Center (netCDF), The Independent JPEG Group (JPEG), Jean-loup Gailly
12
+ and Mark Adler (gzip), and Digital Equipment Corporation (DEC).
13
+
14
+ Redistribution and use in source and binary forms, with or without
15
+ modification, are permitted for any purpose (including commercial
16
+ purposes) provided that the following conditions are met:
17
+
18
+ 1. Redistributions of source code must retain the above copyright
19
+ notice, this list of conditions, and the following disclaimer.
20
+ 2. Redistributions in binary form must reproduce the above
21
+ copyright notice, this list of conditions, and the following
22
+ disclaimer in the documentation and/or materials provided with the
23
+ distribution.
24
+ 3. In addition, redistributions of modified forms of the source or
25
+ binary code must carry prominent notices stating that the original
26
+ code was changed and the date of the change.
27
+ 4. All publications or advertising materials mentioning features or
28
+ use of this software are asked, but not required, to acknowledge that
29
+ it was developed by The HDF Group and by the National Center for
30
+ Supercomputing Applications at the University of Illinois at
31
+ Urbana-Champaign and credit the contributors.
32
+ 5. Neither the name of The HDF Group, the name of the University,
33
+ nor the name of any Contributor may be used to endorse or promote
34
+ products derived from this software without specific prior written
35
+ permission from THG, the University, or the Contributor, respectively.
36
+
37
+ DISCLAIMER: THIS SOFTWARE IS PROVIDED BY THE HDF GROUP (THG) AND THE
38
+ CONTRIBUTORS "AS IS" WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR
39
+ IMPLIED. In no event shall THG or the Contributors be liable for any
40
+ damages suffered by the users arising out of the use of this software,
41
+ even if advised of the possibility of such damage.
42
+
43
+ Portions of HDF5 were developed with support from the University of
44
+ California, Lawrence Livermore National Laboratory (UC LLNL). The
45
+ following statement applies to those portions of the product and must
46
+ be retained in any redistribution of source code, binaries,
47
+ documentation, and/or accompanying materials:
48
+
49
+ This work was partially produced at the University of California,
50
+ Lawrence Livermore National Laboratory (UC LLNL) under contract
51
+ no. W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy
52
+ (DOE) and The Regents of the University of California (University) for
53
+ the operation of UC LLNL.
54
+
55
+ DISCLAIMER: This work was prepared as an account of work sponsored by
56
+ an agency of the United States Government. Neither the United States
57
+ Government nor the University of California nor any of their
58
+ employees, makes any warranty, express or implied, or assumes any
59
+ liability or responsibility for the accuracy, completeness, or
60
+ usefulness of any information, apparatus, product, or process
61
+ disclosed, or represents that its use would not infringe privately-
62
+ owned rights. Reference herein to any specific commercial products,
63
+ process, or service by trade name, trademark, manufacturer, or
64
+ otherwise, does not necessarily constitute or imply its endorsement,
65
+ recommendation, or favoring by the United States Government or the
66
+ University of California. The views and opinions of authors expressed
67
+ herein do not necessarily state or reflect those of the United States
68
+ Government or the University of California, and shall not be used for
69
+ advertising or product endorsement purposes.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/license.txt ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright Notice and Statement for the h5py Project
2
+ ===================================================
3
+
4
+ Copyright (c) 2008-2013 Andrew Collette and contributors
5
+ http://www.h5py.org
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions are
10
+ met:
11
+
12
+ a. Redistributions of source code must retain the above copyright
13
+ notice, this list of conditions and the following disclaimer.
14
+
15
+ b. Redistributions in binary form must reproduce the above copyright
16
+ notice, this list of conditions and the following disclaimer in the
17
+ documentation and/or other materials provided with the
18
+ distribution.
19
+
20
+ c. Neither the name of the author nor the names of contributors may
21
+ be used to endorse or promote products derived from this software
22
+ without specific prior written permission.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/pytables.txt ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright Notice and Statement for PyTables Software Library and Utilities:
2
+
3
+ Copyright (c) 2002, 2003, 2004 Francesc Altet
4
+ Copyright (c) 2005, 2006, 2007 Carabos Coop. V.
5
+ All rights reserved.
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions are
9
+ met:
10
+
11
+ a. Redistributions of source code must retain the above copyright
12
+ notice, this list of conditions and the following disclaimer.
13
+
14
+ b. Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimer in the
16
+ documentation and/or other materials provided with the
17
+ distribution.
18
+
19
+ c. Neither the name of the Carabos Coop. V. nor the names of its
20
+ contributors may be used to endorse or promote products derived
21
+ from this software without specific prior written permission.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/python.txt ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Python license
2
+ ==============
3
+
4
+ #. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
5
+ the Individual or Organization ("Licensee") accessing and otherwise using Python
6
+ Python 2.7.5 software in source or binary form and its associated documentation.
7
+
8
+ #. Subject to the terms and conditions of this License Agreement, PSF hereby
9
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
10
+ analyze, test, perform and/or display publicly, prepare derivative works,
11
+ distribute, and otherwise use Python Python 2.7.5 alone or in any derivative
12
+ version, provided, however, that PSF's License Agreement and PSF's notice of
13
+ copyright, i.e., "Copyright 2001-2013 Python Software Foundation; All Rights
14
+ Reserved" are retained in Python Python 2.7.5 alone or in any derivative version
15
+ prepared by Licensee.
16
+
17
+ #. In the event Licensee prepares a derivative work that is based on or
18
+ incorporates Python Python 2.7.5 or any part thereof, and wants to make the
19
+ derivative work available to others as provided herein, then Licensee hereby
20
+ agrees to include in any such work a brief summary of the changes made to Python
21
+ Python 2.7.5.
22
+
23
+ #. PSF is making Python Python 2.7.5 available to Licensee on an "AS IS" basis.
24
+ PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF
25
+ EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
26
+ WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
27
+ USE OF PYTHON Python 2.7.5 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
28
+
29
+ #. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON Python 2.7.5
30
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
31
+ MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON Python 2.7.5, OR ANY DERIVATIVE
32
+ THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
33
+
34
+ #. This License Agreement will automatically terminate upon a material breach of
35
+ its terms and conditions.
36
+
37
+ #. Nothing in this License Agreement shall be deemed to create any relationship
38
+ of agency, partnership, or joint venture between PSF and Licensee. This License
39
+ Agreement does not grant permission to use PSF trademarks or trade name in a
40
+ trademark sense to endorse or promote products or services of Licensee, or any
41
+ third party.
42
+
43
+ #. By copying, installing or otherwise using Python Python 2.7.5, Licensee agrees
44
+ to be bound by the terms and conditions of this License Agreement.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/licenses/stdint.txt ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2006-2008 Alexander Chemeris
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice,
7
+ this list of conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright
10
+ notice, this list of conditions and the following disclaimer in the
11
+ documentation and/or other materials provided with the distribution.
12
+
13
+ 3. The name of the author may be used to endorse or promote products
14
+ derived from this software without specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/licenses/lzf/LICENSE.txt ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright Notice and Statement for LZF filter
2
+
3
+ Copyright (c) 2008-2009 Andrew Collette
4
+ http://h5py.org
5
+ All rights reserved.
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions are
9
+ met:
10
+
11
+ a. Redistributions of source code must retain the above copyright
12
+ notice, this list of conditions and the following disclaimer.
13
+
14
+ b. Redistributions in binary form must reproduce the above copyright
15
+ notice, this list of conditions and the following disclaimer in the
16
+ documentation and/or other materials provided with the
17
+ distribution.
18
+
19
+ c. Neither the name of the author nor the names of contributors may
20
+ be used to endorse or promote products derived from this software
21
+ without specific prior written permission.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/lib/python3.11/site-packages/h5py-3.16.0.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ h5py
.venv/lib/python3.11/site-packages/h5py.libs/libaec-a27cf049.so.0.1.4 ADDED
Binary file (50.5 kB). View file
 
.venv/lib/python3.11/site-packages/h5py.libs/libhdf5-9e18f0c6.so.320.0.0 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f63f3c02f02dcd702fce63a0f6dc6786430bf1b989926c6850d2026b2c8b424
3
+ size 6132905
.venv/lib/python3.11/site-packages/h5py.libs/libhdf5_hl-69da89c9.so.320.0.0 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c42fb5846fa65835756661844c59a60dde848212f4b35e04bae1d9fb177536f9
3
+ size 198665
.venv/lib/python3.11/site-packages/h5py.libs/libsz-c6be10dd.so.2.0.1 ADDED
Binary file (54.1 kB). View file
 
.venv/lib/python3.11/site-packages/h5py/tests/test_objects.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is part of h5py, a Python interface to the HDF5 library.
2
+ #
3
+ # http://www.h5py.org
4
+ #
5
+ # Copyright 2008-2013 Andrew Collette and contributors
6
+ #
7
+ # License: Standard 3-clause BSD; see "license.txt" for full license terms
8
+ # and contributor agreement.
9
+ import os
10
+ import threading
11
+ import time
12
+
13
+ import pytest
14
+
15
+ from h5py import _objects as o
16
+ from .common import TestCase
17
+
18
+
19
+ class TestObjects(TestCase):
20
+
21
+ def test_invalid(self):
22
+ # Check for segfault on close
23
+ oid = o.ObjectID(0)
24
+ del oid
25
+ oid = o.ObjectID(1)
26
+ del oid
27
+
28
+ def test_equality(self):
29
+ # Identifier-based equality
30
+ oid1 = o.ObjectID(42)
31
+ oid2 = o.ObjectID(42)
32
+ oid3 = o.ObjectID(43)
33
+
34
+ self.assertEqual(oid1, oid2)
35
+ self.assertNotEqual(oid1, oid3)
36
+
37
+ def test_hash(self):
38
+ # Default objects are not hashable
39
+ oid = o.ObjectID(42)
40
+ with self.assertRaises(TypeError):
41
+ hash(oid)
42
+
43
+ @pytest.mark.thread_unsafe(reason="fork() from a thread may deadlock")
44
+ @pytest.mark.filterwarnings(
45
+ # https://github.com/python/cpython/pull/100229
46
+ r"ignore:.*use of fork\(\) may lead to deadlocks:DeprecationWarning"
47
+ )
48
+ @pytest.mark.skipif(not hasattr(os, "fork"), reason="fork() not available")
49
+ def test_phil_fork_with_threads(self):
50
+ """Test that handling of the phil Lock after fork is correct.
51
+
52
+ h5py uses os.register_at_fork() to cause os.fork() to acquire the phil lock
53
+ before forking and release it afterwards, so that the global state of libhdf5
54
+ cannot be cloned in a corrupted state.
55
+ """
56
+ thread_acquired_phil_event = threading.Event()
57
+
58
+ def f():
59
+ # Simulate another thread holding the phil lock while it updates
60
+ # the libhdf5 global state
61
+ with o.phil:
62
+ thread_acquired_phil_event.set()
63
+ time.sleep(1)
64
+
65
+ thread = threading.Thread(target=f)
66
+ thread.start()
67
+ thread_acquired_phil_event.wait()
68
+
69
+ try:
70
+ # Now fork the current (main) thread while the other thread holds the lock.
71
+ # os.fork() acquires the phil lock, so this will block until the other
72
+ # thread releases it.
73
+ pid = os.fork()
74
+ if pid == 0:
75
+ # Child process
76
+ # If we handle the phil lock correctly, this should not deadlock, and we
77
+ # should be able to acquire the lock here.
78
+ if o.phil.acquire(blocking=False):
79
+ o.phil.release()
80
+ os._exit(0)
81
+ else:
82
+ os._exit(1)
83
+ else:
84
+ # Parent process
85
+ assert o.phil.acquire(blocking=False)
86
+ o.phil.release()
87
+ # Wait for the child process to finish
88
+ _, status = os.waitpid(pid, 0)
89
+ assert os.WIFEXITED(status)
90
+ assert os.WEXITSTATUS(status) == 0
91
+ finally:
92
+ thread.join()
.venv/lib/python3.11/site-packages/h5py/tests/test_ros3.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is part of h5py, a Python interface to the HDF5 library.
2
+ #
3
+ # http://www.h5py.org
4
+ #
5
+ # Copyright 2008-2013 Andrew Collette and contributors
6
+ #
7
+ # License: Standard 3-clause BSD; see "license.txt" for full license terms
8
+ # and contributor agreement.
9
+
10
+ """
11
+ Read-only S3 virtual file driver (VFD) test module.
12
+ """
13
+
14
+ import h5py
15
+ from h5py._hl.files import make_fapl
16
+ import pytest
17
+
18
+
19
+ pytestmark = [
20
+ pytest.mark.skipif(
21
+ not h5py.h5.get_config().ros3,
22
+ reason="ros3 driver not available")
23
+ ]
24
+
25
+
26
+ @pytest.mark.network
27
+ @pytest.mark.parametrize(
28
+ "kwargs",
29
+ [
30
+ pytest.param(
31
+ {},
32
+ id="HDF5-v1",
33
+ marks=pytest.mark.skipif(
34
+ h5py.version.hdf5_version_tuple >= (2, 0, 0),
35
+ reason="Requires HDF5 < 2.0",
36
+ ),
37
+ ),
38
+ pytest.param(
39
+ {"aws_region": b"us-east-2"},
40
+ id="HDF5-v2",
41
+ marks=pytest.mark.skipif(
42
+ h5py.version.hdf5_version_tuple < (2, 0, 0),
43
+ reason="Requires HDF5 >= 2.0",
44
+ ),
45
+ ),
46
+ ],
47
+ )
48
+ def test_ros3(kwargs):
49
+ """ ROS3 driver and options """
50
+
51
+ with h5py.File("https://dandiarchive.s3.amazonaws.com/ros3test.hdf5", 'r',
52
+ driver='ros3', **kwargs) as f:
53
+ assert f
54
+ assert 'mydataset' in f.keys()
55
+ assert f["mydataset"].shape == (100,)
56
+
57
+
58
+ @pytest.mark.parametrize(
59
+ "exc,match_exc",
60
+ [
61
+ pytest.param(
62
+ ValueError,
63
+ [
64
+ "AWS region required for s3:// location",
65
+ r"^foo://wrong/scheme: S3 location must begin with",
66
+ ],
67
+ id="HDF5-v1",
68
+ marks=pytest.mark.skipif(
69
+ h5py.version.hdf5_version_tuple >= (2, 0, 0),
70
+ reason="Requires HDF5 < 2.0",
71
+ ),
72
+ ),
73
+ pytest.param(
74
+ OSError,
75
+ [None, "can't parse object key from path"],
76
+ id="HDF5-v2",
77
+ marks=pytest.mark.skipif(
78
+ h5py.version.hdf5_version_tuple < (2, 0, 0),
79
+ reason="Requires HDF5 >= 2.0",
80
+ ),
81
+ ),
82
+ ],
83
+ )
84
+ def test_ros3_s3_fails(exc, match_exc):
85
+ """ROS3 exceptions for s3:// location"""
86
+ with pytest.raises(exc, match=match_exc[0]):
87
+ h5py.File('s3://fakebucket/fakekey', 'r', driver='ros3')
88
+
89
+ with pytest.raises(exc, match=match_exc[1]):
90
+ h5py.File('foo://wrong/scheme', 'r', driver='ros3')
91
+
92
+
93
+ @pytest.mark.network
94
+ def test_ros3_s3uri():
95
+ """Use S3 URI with ROS3 driver"""
96
+ with h5py.File('s3://dandiarchive/ros3test.hdf5', 'r', driver='ros3',
97
+ aws_region=b'us-east-2') as f:
98
+ assert f
99
+ assert 'mydataset' in f.keys()
100
+ assert f["mydataset"].shape == (100,)
101
+
102
+
103
+ @pytest.mark.skipif(h5py.version.hdf5_version_tuple < (1, 14, 2),
104
+ reason='AWS S3 access token support in HDF5 >= 1.14.2')
105
+ def test_ros3_temp_token():
106
+ """Set and get S3 access token"""
107
+ token = b'#0123FakeToken4567/8/9'
108
+ fapl = make_fapl('ros3', libver=None, rdcc_nslots=None, rdcc_nbytes=None,
109
+ rdcc_w0=None, locking=None, page_buf_size=None, min_meta_keep=None,
110
+ min_raw_keep=None, alignment_threshold=1, alignment_interval=1,
111
+ meta_block_size=None, session_token=token)
112
+ assert token, fapl.get_fapl_ros3_token()
.venv/lib/python3.11/site-packages/h5py/tests/test_selections.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is part of h5py, a Python interface to the HDF5 library.
2
+ #
3
+ # http://www.h5py.org
4
+ #
5
+ # Copyright 2008-2013 Andrew Collette and contributors
6
+ #
7
+ # License: Standard 3-clause BSD; see "license.txt" for full license terms
8
+ # and contributor agreement.
9
+
10
+ """
11
+ Tests for the (internal) selections module
12
+ """
13
+
14
+ import numpy as np
15
+ import h5py
16
+ import h5py._hl.selections as sel
17
+ import h5py._hl.selections2 as sel2
18
+
19
+ from .common import TestCase, make_name
20
+
21
+ class BaseSelection(TestCase):
22
+ def setUp(self):
23
+ self.f = h5py.File(self.mktemp(), 'w')
24
+ self.dsid = self.f.create_dataset('x', (), "f4").id
25
+
26
+ def tearDown(self):
27
+ if self.f:
28
+ self.f.close()
29
+
30
+ class TestTypeGeneration(BaseSelection):
31
+
32
+ """
33
+ Internal feature: Determine output types from dataset dtype and fields.
34
+ """
35
+
36
+ def test_simple(self):
37
+ """ Non-compound types are handled appropriately """
38
+ dt = np.dtype('i')
39
+ out, format = sel2.read_dtypes(dt, ())
40
+ self.assertEqual(out, format)
41
+ self.assertEqual(out, np.dtype('i'))
42
+
43
+ def test_simple_fieldexc(self):
44
+ """ Field names for non-field types raises ValueError """
45
+ dt = np.dtype('i')
46
+ with self.assertRaises(ValueError):
47
+ out, format = sel2.read_dtypes(dt, ('a',))
48
+
49
+ def test_compound_simple(self):
50
+ """ Compound types with elemental subtypes """
51
+ dt = np.dtype( [('a','i'), ('b','f'), ('c','|S10')] )
52
+
53
+ # Implicit selection of all fields -> all fields
54
+ out, format = sel2.read_dtypes(dt, ())
55
+ self.assertEqual(out, format)
56
+ self.assertEqual(out, dt)
57
+
58
+ # Explicit selection of fields -> requested fields
59
+ out, format = sel2.read_dtypes(dt, ('a','b'))
60
+ self.assertEqual(out, format)
61
+ self.assertEqual(out, np.dtype( [('a','i'), ('b','f')] ))
62
+
63
+ # Explicit selection of exactly one field -> no fields
64
+ out, format = sel2.read_dtypes(dt, ('a',))
65
+ self.assertEqual(out, np.dtype('i'))
66
+ self.assertEqual(format, np.dtype( [('a','i')] ))
67
+
68
+ # Field does not appear in named typed
69
+ with self.assertRaises(ValueError):
70
+ out, format = sel2.read_dtypes(dt, ('j', 'k'))
71
+
72
+ class TestScalarSliceRules(BaseSelection):
73
+
74
+ """
75
+ Internal feature: selections rules for scalar datasets
76
+ """
77
+
78
+ def test_args(self):
79
+ """ Permissible arguments for scalar slicing """
80
+ shape, selection = sel2.read_selections_scalar(self.dsid, ())
81
+ self.assertEqual(shape, None)
82
+ self.assertEqual(selection.get_select_npoints(), 1)
83
+
84
+ shape, selection = sel2.read_selections_scalar(self.dsid, (Ellipsis,))
85
+ self.assertEqual(shape, ())
86
+ self.assertEqual(selection.get_select_npoints(), 1)
87
+
88
+ with self.assertRaises(ValueError):
89
+ shape, selection = sel2.read_selections_scalar(self.dsid, (1,))
90
+
91
+ dsid = self.f.create_dataset(make_name(), (1,), "f4").id
92
+ with self.assertRaises(RuntimeError):
93
+ shape, selection = sel2.read_selections_scalar(dsid, (1,))
94
+
95
+ class TestSelection(BaseSelection):
96
+
97
+ """ High-level routes to generate a selection
98
+ """
99
+
100
+ def test_selection(self):
101
+ dset = self.f.create_dataset(make_name(), (100,100), "f4")
102
+ regref = dset.regionref[0:100, 0:100]
103
+
104
+ # args is list, return a FancySelection
105
+ st = sel.select((10,), list([1,2,3]), dset)
106
+ self.assertIsInstance(st, sel.FancySelection)
107
+
108
+ # args[0] is tuple, return a FancySelection
109
+ st = sel.select((10,), ((1, 2, 3),), dset)
110
+ self.assertIsInstance(st, sel.FancySelection)
111
+
112
+ # args is a Boolean mask, return a PointSelection
113
+ st1 = sel.select((5,), np.array([True,False,False,False,True]), dset)
114
+ self.assertIsInstance(st1, sel.PointSelection)
115
+
116
+ # args is int, return a SimpleSelection
117
+ st2 = sel.select((10,), 1, dset)
118
+ self.assertIsInstance(st2, sel.SimpleSelection)
119
+
120
+ # args is str, should be rejected
121
+ with self.assertRaises(TypeError):
122
+ sel.select((100,), "foo", dset)
123
+
124
+ # args is RegionReference, return a Selection instance
125
+ st3 = sel.select((100,100), regref, dset)
126
+ self.assertIsInstance(st3, sel.Selection)
127
+
128
+ # args is RegionReference, but dataset is None
129
+ with self.assertRaises(TypeError):
130
+ sel.select((100,), regref, None)
131
+
132
+ # args is RegionReference, but its shape doesn't match dataset shape
133
+ with self.assertRaises(TypeError):
134
+ sel.select((100,), regref, dset)
135
+
136
+ # args is a single Selection instance, return the arg
137
+ st4 = sel.select((100,100), st3, dset)
138
+ self.assertEqual(st4,st3)
139
+
140
+ # args is a single Selection instance, but args shape doesn't match Shape
141
+ with self.assertRaises(TypeError):
142
+ sel.select((100,), st3, dset)
.venv/lib/python3.11/site-packages/h5py/tests/test_slicing.py ADDED
@@ -0,0 +1,421 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is part of h5py, a Python interface to the HDF5 library.
2
+ #
3
+ # http://www.h5py.org
4
+ #
5
+ # Copyright 2008-2013 Andrew Collette and contributors
6
+ #
7
+ # License: Standard 3-clause BSD; see "license.txt" for full license terms
8
+ # and contributor agreement.
9
+
10
+ """
11
+ Dataset slicing test module.
12
+
13
+ Tests all supported slicing operations, including read/write and
14
+ broadcasting operations. Does not test type conversion except for
15
+ corner cases overlapping with slicing; for example, when selecting
16
+ specific fields of a compound type.
17
+ """
18
+
19
+ import numpy as np
20
+
21
+ from .common import TestCase, make_name
22
+
23
+ import h5py
24
+ from h5py import File, MultiBlockSlice
25
+
26
+ class BaseSlicing(TestCase):
27
+
28
+ def setUp(self):
29
+ self.f = File(self.mktemp(), 'w')
30
+
31
+ def tearDown(self):
32
+ if self.f:
33
+ self.f.close()
34
+
35
+ class TestSingleElement(BaseSlicing):
36
+
37
+ """
38
+ Feature: Retrieving a single element works with NumPy semantics
39
+ """
40
+
41
+ def test_single_index(self):
42
+ """ Single-element selection with [index] yields array scalar """
43
+ dset = self.f.create_dataset(make_name(), (1,), dtype='i1')
44
+ out = dset[0]
45
+ self.assertIsInstance(out, np.int8)
46
+
47
+ def test_single_null(self):
48
+ """ Single-element selection with [()] yields ndarray """
49
+ dset = self.f.create_dataset(make_name(), (1,), dtype='i1')
50
+ out = dset[()]
51
+ self.assertIsInstance(out, np.ndarray)
52
+ self.assertEqual(out.shape, (1,))
53
+
54
+ def test_scalar_index(self):
55
+ """ Slicing with [...] yields scalar ndarray """
56
+ dset = self.f.create_dataset(make_name(), shape=(), dtype='f')
57
+ out = dset[...]
58
+ self.assertIsInstance(out, np.ndarray)
59
+ self.assertEqual(out.shape, ())
60
+
61
+ def test_scalar_null(self):
62
+ """ Slicing with [()] yields array scalar """
63
+ dset = self.f.create_dataset(make_name(), shape=(), dtype='i1')
64
+ out = dset[()]
65
+ self.assertIsInstance(out, np.int8)
66
+
67
+ def test_compound(self):
68
+ """ Compound scalar is numpy.void, not tuple (issue 135) """
69
+ dt = np.dtype([('a','i4'),('b','f8')])
70
+ v = np.ones((4,), dtype=dt)
71
+ dset = self.f.create_dataset(make_name(), (4,), data=v)
72
+ self.assertEqual(dset[0], v[0])
73
+ self.assertIsInstance(dset[0], np.void)
74
+
75
+ class TestObjectIndex(BaseSlicing):
76
+
77
+ """
78
+ Feature: numpy.object_ subtypes map to real Python objects
79
+ """
80
+
81
+ def test_reference(self):
82
+ """ Indexing a reference dataset returns a h5py.Reference instance """
83
+ dset = self.f.create_dataset(make_name(), (1,), dtype=h5py.ref_dtype)
84
+ dset[0] = self.f.ref
85
+ self.assertEqual(type(dset[0]), h5py.Reference)
86
+
87
+ def test_regref(self):
88
+ """ Indexing a region reference dataset returns a h5py.RegionReference
89
+ """
90
+ dset1 = self.f.create_dataset(make_name("x"), (10,10), "f4")
91
+ regref = dset1.regionref[...]
92
+ dset2 = self.f.create_dataset(make_name("y"), (1,), dtype=h5py.regionref_dtype)
93
+ dset2[0] = regref
94
+ self.assertEqual(type(dset2[0]), h5py.RegionReference)
95
+
96
+ def test_reference_field(self):
97
+ """ Compound types of which a reference is an element work right """
98
+ dt = np.dtype([('a', 'i'),('b', h5py.ref_dtype)])
99
+
100
+ dset = self.f.create_dataset(make_name(), (1,), dtype=dt)
101
+ dset[0] = (42, self.f['/'].ref)
102
+
103
+ out = dset[0]
104
+ self.assertEqual(type(out[1]), h5py.Reference) # isinstance does NOT work
105
+
106
+ def test_scalar(self):
107
+ """ Indexing returns a real Python object on scalar datasets """
108
+ dset = self.f.create_dataset(make_name(), (), dtype=h5py.ref_dtype)
109
+ dset[()] = self.f.ref
110
+ self.assertEqual(type(dset[()]), h5py.Reference)
111
+
112
+ def test_bytestr(self):
113
+ """ Indexing a byte string dataset returns a real python byte string
114
+ """
115
+ dset = self.f.create_dataset(make_name(), (1,), dtype=h5py.string_dtype(encoding='ascii'))
116
+ dset[0] = b"Hello there!"
117
+ self.assertEqual(type(dset[0]), bytes)
118
+
119
+ class TestSimpleSlicing(TestCase):
120
+
121
+ """
122
+ Feature: Simple NumPy-style slices (start:stop:step) are supported.
123
+ """
124
+
125
+ def setUp(self):
126
+ self.f = File(self.mktemp(), 'w')
127
+ self.arr = np.arange(10)
128
+ self.dset = self.f.create_dataset('x', data=self.arr)
129
+
130
+ def tearDown(self):
131
+ if self.f:
132
+ self.f.close()
133
+
134
+ def test_negative_stop(self):
135
+ """ Negative stop indexes work as they do in NumPy """
136
+ self.assertArrayEqual(self.dset[2:-2], self.arr[2:-2])
137
+
138
+ def test_write(self):
139
+ """Assigning to a 1D slice of a 2D dataset
140
+ """
141
+ dset = self.f.create_dataset(make_name(), (10, 2), "f4")
142
+
143
+ x = np.zeros((10, 1))
144
+ dset[:, 0] = x[:, 0]
145
+ with self.assertRaises(TypeError):
146
+ dset[:, 1] = x
147
+
148
+ class TestArraySlicing(BaseSlicing):
149
+
150
+ """
151
+ Feature: Array types are handled appropriately
152
+ """
153
+
154
+ def test_read(self):
155
+ """ Read arrays tack array dimensions onto end of shape tuple """
156
+ dt = np.dtype('(3,)f8')
157
+ dset = self.f.create_dataset(make_name(), (10,), dtype=dt)
158
+ self.assertEqual(dset.shape, (10,))
159
+ self.assertEqual(dset.dtype, dt)
160
+
161
+ # Full read
162
+ out = dset[...]
163
+ self.assertEqual(out.dtype, np.dtype('f8'))
164
+ self.assertEqual(out.shape, (10,3))
165
+
166
+ # Single element
167
+ out = dset[0]
168
+ self.assertEqual(out.dtype, np.dtype('f8'))
169
+ self.assertEqual(out.shape, (3,))
170
+
171
+ # Range
172
+ out = dset[2:8:2]
173
+ self.assertEqual(out.dtype, np.dtype('f8'))
174
+ self.assertEqual(out.shape, (3,3))
175
+
176
+ def test_write_broadcast(self):
177
+ """ Array fill from constant is not supported (issue 211).
178
+ """
179
+ dt = np.dtype('(3,)i')
180
+
181
+ dset = self.f.create_dataset(make_name(), (10,), dtype=dt)
182
+
183
+ with self.assertRaises(TypeError):
184
+ dset[...] = 42
185
+
186
+ def test_write_element(self):
187
+ """ Write a single element to the array
188
+
189
+ Issue 211.
190
+ """
191
+ dt = np.dtype('(3,)f8')
192
+ dset = self.f.create_dataset(make_name(), (10,), dtype=dt)
193
+
194
+ data = np.array([1,2,3.0])
195
+ dset[4] = data
196
+
197
+ out = dset[4]
198
+ self.assertTrue(np.all(out == data))
199
+
200
+ def test_write_slices(self):
201
+ """ Write slices to array type """
202
+ dt = np.dtype('(3,)i')
203
+
204
+ data1 = np.ones((2,), dtype=dt)
205
+ data2 = np.ones((4,5), dtype=dt)
206
+
207
+ dset = self.f.create_dataset(make_name(), (10,9,11), dtype=dt)
208
+
209
+ dset[0,0,2:4] = data1
210
+ self.assertArrayEqual(dset[0,0,2:4], data1)
211
+
212
+ dset[3, 1:5, 6:11] = data2
213
+ self.assertArrayEqual(dset[3, 1:5, 6:11], data2)
214
+
215
+
216
+ def test_roundtrip(self):
217
+ """ Read the contents of an array and write them back
218
+
219
+ Issue 211.
220
+ """
221
+ dt = np.dtype('(3,)f8')
222
+ dset = self.f.create_dataset(make_name(), (10,), dtype=dt)
223
+
224
+ out = dset[...]
225
+ dset[...] = out
226
+
227
+ self.assertTrue(np.all(dset[...] == out))
228
+
229
+
230
+ class TestZeroLengthSlicing(BaseSlicing):
231
+
232
+ """
233
+ Slices resulting in empty arrays
234
+ """
235
+
236
+ def test_slice_zero_length_dimension(self):
237
+ """ Slice a dataset with a zero in its shape vector
238
+ along the zero-length dimension """
239
+ for i, shape in enumerate([(0,), (0, 3), (0, 2, 1)]):
240
+ dset = self.f.create_dataset(make_name(f"x{i}"), shape, dtype=int, maxshape=(None,)*len(shape))
241
+ self.assertEqual(dset.shape, shape)
242
+ out = dset[...]
243
+ self.assertIsInstance(out, np.ndarray)
244
+ self.assertEqual(out.shape, shape)
245
+ out = dset[:]
246
+ self.assertIsInstance(out, np.ndarray)
247
+ self.assertEqual(out.shape, shape)
248
+ if len(shape) > 1:
249
+ out = dset[:, :1]
250
+ self.assertIsInstance(out, np.ndarray)
251
+ self.assertEqual(out.shape[:2], (0, 1))
252
+
253
+ def test_slice_other_dimension(self):
254
+ """ Slice a dataset with a zero in its shape vector
255
+ along a non-zero-length dimension """
256
+ for i, shape in enumerate([(3, 0), (1, 2, 0), (2, 0, 1)]):
257
+ dset = self.f.create_dataset(make_name(f"x{i}"), shape, dtype=int, maxshape=(None,)*len(shape))
258
+ self.assertEqual(dset.shape, shape)
259
+ out = dset[:1]
260
+ self.assertIsInstance(out, np.ndarray)
261
+ self.assertEqual(out.shape, (1,)+shape[1:])
262
+
263
+ def test_slice_of_length_zero(self):
264
+ """ Get a slice of length zero from a non-empty dataset """
265
+ for i, shape in enumerate([(3,), (2, 2,), (2, 1, 5)]):
266
+ dset = self.f.create_dataset(make_name(f"x{i}"), data=np.zeros(shape, int), maxshape=(None,)*len(shape))
267
+ self.assertEqual(dset.shape, shape)
268
+ out = dset[1:1]
269
+ self.assertIsInstance(out, np.ndarray)
270
+ self.assertEqual(out.shape, (0,)+shape[1:])
271
+
272
+ class TestFieldNames(BaseSlicing):
273
+
274
+ """
275
+ Field names for read & write
276
+ """
277
+
278
+ dt = np.dtype([('a', 'f'), ('b', 'i'), ('c', 'f4')])
279
+ data = np.ones((100,), dtype=dt)
280
+
281
+ def setUp(self):
282
+ BaseSlicing.setUp(self)
283
+ self.dset = self.f.create_dataset('x', (100,), dtype=self.dt)
284
+ self.dset[...] = self.data
285
+
286
+ def test_read(self):
287
+ """ Test read with field selections """
288
+ self.assertArrayEqual(self.dset['a'], self.data['a'])
289
+
290
+ def test_unicode_names(self):
291
+ """ Unicode field names for for read and write """
292
+ self.assertArrayEqual(self.dset['a'], self.data['a'])
293
+
294
+ data = self.data.copy()
295
+ dset = self.f.create_dataset(make_name(), data=data)
296
+ dset['a'] = 42
297
+ data['a'] = 42
298
+ self.assertArrayEqual(dset['a'], data['a'])
299
+
300
+ def test_write(self):
301
+ """ Test write with field selections """
302
+ data = self.data.copy()
303
+ dset = self.f.create_dataset(make_name(), data=data)
304
+
305
+ data['a'] *= 2
306
+ dset['a'] = data
307
+ self.assertTrue(np.all(dset[...] == data))
308
+ data['b'] *= 4
309
+ dset['b'] = data
310
+ self.assertTrue(np.all(dset[...] == data))
311
+ data['a'] *= 3
312
+ data['c'] *= 3
313
+ dset['a','c'] = data
314
+ self.assertTrue(np.all(dset[...] == data))
315
+
316
+ def test_write_noncompound(self):
317
+ """ Test write with non-compound source (single-field) """
318
+ data = self.data.copy()
319
+ dset = self.f.create_dataset(make_name(), data=data)
320
+
321
+ data['b'] = 1.0
322
+ dset['b'] = 1.0
323
+ self.assertTrue(np.all(dset[...] == data))
324
+
325
+
326
+ class TestMultiBlockSlice(BaseSlicing):
327
+
328
+ def setUp(self):
329
+ super().setUp()
330
+ self.arr = np.arange(10)
331
+ self.dset = self.f.create_dataset('x', data=self.arr)
332
+
333
+ def test_default(self):
334
+ # Default selects entire dataset as one block
335
+ mbslice = MultiBlockSlice()
336
+
337
+ self.assertEqual(mbslice.indices(10), (0, 1, 10, 1))
338
+ np.testing.assert_array_equal(self.dset[mbslice], self.arr)
339
+
340
+ def test_default_explicit(self):
341
+ mbslice = MultiBlockSlice(start=0, count=10, stride=1, block=1)
342
+
343
+ self.assertEqual(mbslice.indices(10), (0, 1, 10, 1))
344
+ np.testing.assert_array_equal(self.dset[mbslice], self.arr)
345
+
346
+ def test_start(self):
347
+ mbslice = MultiBlockSlice(start=4)
348
+
349
+ self.assertEqual(mbslice.indices(10), (4, 1, 6, 1))
350
+ np.testing.assert_array_equal(self.dset[mbslice], np.array([4, 5, 6, 7, 8, 9]))
351
+
352
+ def test_count(self):
353
+ mbslice = MultiBlockSlice(count=7)
354
+
355
+ self.assertEqual(mbslice.indices(10), (0, 1, 7, 1))
356
+ np.testing.assert_array_equal(
357
+ self.dset[mbslice], np.array([0, 1, 2, 3, 4, 5, 6])
358
+ )
359
+
360
+ def test_count_more_than_length_error(self):
361
+ mbslice = MultiBlockSlice(count=11)
362
+ with self.assertRaises(ValueError):
363
+ mbslice.indices(10)
364
+
365
+ def test_stride(self):
366
+ mbslice = MultiBlockSlice(stride=2)
367
+
368
+ self.assertEqual(mbslice.indices(10), (0, 2, 5, 1))
369
+ np.testing.assert_array_equal(self.dset[mbslice], np.array([0, 2, 4, 6, 8]))
370
+
371
+ def test_stride_zero_error(self):
372
+ with self.assertRaises(ValueError):
373
+ # This would cause a ZeroDivisionError if not caught
374
+ MultiBlockSlice(stride=0, block=0).indices(10)
375
+
376
+ def test_stride_block_equal(self):
377
+ mbslice = MultiBlockSlice(stride=2, block=2)
378
+
379
+ self.assertEqual(mbslice.indices(10), (0, 2, 5, 2))
380
+ np.testing.assert_array_equal(self.dset[mbslice], self.arr)
381
+
382
+ def test_block_more_than_stride_error(self):
383
+ with self.assertRaises(ValueError):
384
+ MultiBlockSlice(block=3)
385
+
386
+ with self.assertRaises(ValueError):
387
+ MultiBlockSlice(stride=2, block=3)
388
+
389
+ def test_stride_more_than_block(self):
390
+ mbslice = MultiBlockSlice(stride=3, block=2)
391
+
392
+ self.assertEqual(mbslice.indices(10), (0, 3, 3, 2))
393
+ np.testing.assert_array_equal(self.dset[mbslice], np.array([0, 1, 3, 4, 6, 7]))
394
+
395
+ def test_block_overruns_extent_error(self):
396
+ # If fully described then must fit within extent
397
+ mbslice = MultiBlockSlice(start=2, count=2, stride=5, block=4)
398
+ with self.assertRaises(ValueError):
399
+ mbslice.indices(10)
400
+
401
+ def test_fully_described(self):
402
+ mbslice = MultiBlockSlice(start=1, count=2, stride=5, block=4)
403
+
404
+ self.assertEqual(mbslice.indices(10), (1, 5, 2, 4))
405
+ np.testing.assert_array_equal(
406
+ self.dset[mbslice], np.array([1, 2, 3, 4, 6, 7, 8, 9])
407
+ )
408
+
409
+ def test_count_calculated(self):
410
+ # If not given, count should be calculated to select as many full blocks as possible
411
+ mbslice = MultiBlockSlice(start=1, stride=3, block=2)
412
+
413
+ self.assertEqual(mbslice.indices(10), (1, 3, 3, 2))
414
+ np.testing.assert_array_equal(self.dset[mbslice], np.array([1, 2, 4, 5, 7, 8]))
415
+
416
+ def test_zero_count_calculated_error(self):
417
+ # In this case, there is no possible count to select even one block, so error
418
+ mbslice = MultiBlockSlice(start=8, stride=4, block=3)
419
+
420
+ with self.assertRaises(ValueError):
421
+ mbslice.indices(10)
.venv/lib/python3.11/site-packages/h5py/tests/test_vds/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+
2
+ from .test_virtual_source import *
3
+ from .test_highlevel_vds import *
4
+ from .test_lowlevel_vds import *
.venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_highlevel_vds.py ADDED
@@ -0,0 +1,482 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ '''
2
+ Unit test for the high level vds interface for eiger
3
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
4
+ '''
5
+ import os
6
+ import os.path as osp
7
+ import shutil
8
+ import tempfile
9
+
10
+ import numpy as np
11
+ from numpy.testing import assert_array_equal
12
+ import pytest
13
+
14
+ import h5py as h5
15
+ from ..common import ut, make_name
16
+ from ..._hl.vds import vds_support
17
+
18
+
19
+ @ut.skipUnless(vds_support,
20
+ 'VDS requires HDF5 >= 1.9.233')
21
+ class TestEigerHighLevel(ut.TestCase):
22
+ def setUp(self):
23
+ self.working_dir = tempfile.mkdtemp()
24
+ self.fname = ['raw_file_1.h5', 'raw_file_2.h5', 'raw_file_3.h5']
25
+ for k, outfile in enumerate(self.fname):
26
+ filename = osp.join(self.working_dir, outfile)
27
+ f = h5.File(filename, 'w')
28
+ f['data'] = np.ones((20, 200, 200)) * k
29
+ f.close()
30
+
31
+ f = h5.File(osp.join(self.working_dir, 'raw_file_4.h5'), 'w')
32
+ f['data'] = np.ones((18, 200, 200)) * 3
33
+ self.fname.append('raw_file_4.h5')
34
+ self.fname = [osp.join(self.working_dir, ix) for ix in self.fname]
35
+ f.close()
36
+
37
+ def test_eiger_high_level(self):
38
+ outfile = osp.join(self.working_dir, make_name('eiger{}.h5'))
39
+ layout = h5.VirtualLayout(shape=(78, 200, 200), dtype=float)
40
+
41
+ M_minus_1 = 0
42
+ # Create the virtual dataset file
43
+ with h5.File(outfile, 'w', libver='latest') as f:
44
+ for foo in self.fname:
45
+ in_data = h5.File(foo, 'r')['data']
46
+ src_shape = in_data.shape
47
+ in_data.file.close()
48
+ M = M_minus_1 + src_shape[0]
49
+ vsource = h5.VirtualSource(foo, 'data', shape=src_shape)
50
+ layout[M_minus_1:M, :, :] = vsource
51
+ M_minus_1 = M
52
+ f.create_virtual_dataset('data', layout, fillvalue=45)
53
+
54
+ f = h5.File(outfile, 'r')['data']
55
+ self.assertEqual(f[10, 100, 10], 0.0)
56
+ self.assertEqual(f[30, 100, 100], 1.0)
57
+ self.assertEqual(f[50, 100, 100], 2.0)
58
+ self.assertEqual(f[70, 100, 100], 3.0)
59
+ f.file.close()
60
+
61
+ def tearDown(self):
62
+ shutil.rmtree(self.working_dir)
63
+
64
+ '''
65
+ Unit test for the high level vds interface for excalibur
66
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
67
+ '''
68
+
69
+ class ExcaliburData:
70
+ FEM_PIXELS_PER_CHIP_X = 256
71
+ FEM_PIXELS_PER_CHIP_Y = 256
72
+ FEM_CHIPS_PER_STRIPE_X = 8
73
+ FEM_CHIPS_PER_STRIPE_Y = 1
74
+ FEM_STRIPES_PER_MODULE = 2
75
+
76
+ @property
77
+ def sensor_module_dimensions(self):
78
+ x_pixels = self.FEM_PIXELS_PER_CHIP_X * self.FEM_CHIPS_PER_STRIPE_X
79
+ y_pixels = self.FEM_PIXELS_PER_CHIP_Y * self.FEM_CHIPS_PER_STRIPE_Y * self.FEM_STRIPES_PER_MODULE
80
+ return y_pixels, x_pixels,
81
+
82
+ @property
83
+ def fem_stripe_dimensions(self):
84
+ x_pixels = self.FEM_PIXELS_PER_CHIP_X * self.FEM_CHIPS_PER_STRIPE_X
85
+ y_pixels = self.FEM_PIXELS_PER_CHIP_Y * self.FEM_CHIPS_PER_STRIPE_Y
86
+ return y_pixels, x_pixels,
87
+
88
+ def generate_sensor_module_image(self, value, dtype='uint16'):
89
+ dset = np.empty(shape=self.sensor_module_dimensions, dtype=dtype)
90
+ dset.fill(value)
91
+ return dset
92
+
93
+ def generate_fem_stripe_image(self, value, dtype='uint16'):
94
+ dset = np.empty(shape=self.fem_stripe_dimensions, dtype=dtype)
95
+ dset.fill(value)
96
+ return dset
97
+
98
+
99
+ @ut.skipUnless(vds_support,
100
+ 'VDS requires HDF5 >= 1.9.233')
101
+ class TestExcaliburHighLevel(ut.TestCase):
102
+ def create_excalibur_fem_stripe_datafile(self, fname, nframes, excalibur_data,scale):
103
+ shape = (nframes,) + excalibur_data.fem_stripe_dimensions
104
+ max_shape = shape#(None,) + excalibur_data.fem_stripe_dimensions
105
+ chunk = (1,) + excalibur_data.fem_stripe_dimensions
106
+ with h5.File(fname, 'w', libver='latest') as f:
107
+ dset = f.create_dataset('data', shape=shape, maxshape=max_shape, chunks=chunk, dtype='uint16')
108
+ for data_value_index in np.arange(nframes):
109
+ dset[data_value_index] = excalibur_data.generate_fem_stripe_image(data_value_index*scale)
110
+
111
+ def setUp(self):
112
+ self.working_dir = tempfile.mkdtemp()
113
+ self.fname = ["stripe_%d.h5" % stripe for stripe in range(1,7)]
114
+ self.fname = [osp.join(self.working_dir, f) for f in self.fname]
115
+ nframes = 5
116
+ self.edata = ExcaliburData()
117
+ for k, raw_file in enumerate(self.fname):
118
+ self.create_excalibur_fem_stripe_datafile(raw_file, nframes, self.edata,k)
119
+
120
+ def test_excalibur_high_level(self):
121
+ outfile = osp.join(self.working_dir, make_name('excalibur{}.h5'))
122
+ f = h5.File(outfile,'w',libver='latest') # create an output file.
123
+ in_key = 'data' # where is the data at the input?
124
+ in_sh = h5.File(self.fname[0],'r')[in_key].shape # get the input shape
125
+ dtype = h5.File(self.fname[0],'r')[in_key].dtype # get the datatype
126
+
127
+ # now generate the output shape
128
+ vertical_gap = 10 # pixels spacing in the vertical
129
+ nfiles = len(self.fname)
130
+ nframes = in_sh[0]
131
+ width = in_sh[2]
132
+ height = (in_sh[1]*nfiles) + (vertical_gap*(nfiles-1))
133
+ out_sh = (nframes, height, width)
134
+
135
+ # Virtual layout is a representation of the output dataset
136
+ layout = h5.VirtualLayout(shape=out_sh, dtype=dtype)
137
+ offset = 0 # initial offset
138
+ for i, filename in enumerate(self.fname):
139
+ # A representation of the input dataset
140
+ vsource = h5.VirtualSource(filename, in_key, shape=in_sh)
141
+ layout[:, offset:(offset + in_sh[1]), :] = vsource # map them with indexing
142
+ offset += in_sh[1] + vertical_gap # increment the offset
143
+
144
+ # pass the fill value and list of maps
145
+ f.create_virtual_dataset('data', layout, fillvalue=0x1)
146
+ f.close()
147
+
148
+ f = h5.File(outfile,'r')['data']
149
+ self.assertEqual(f[3,100,0], 0.0)
150
+ self.assertEqual(f[3,260,0], 1.0)
151
+ self.assertEqual(f[3,350,0], 3.0)
152
+ self.assertEqual(f[3,650,0], 6.0)
153
+ self.assertEqual(f[3,900,0], 9.0)
154
+ self.assertEqual(f[3,1150,0], 12.0)
155
+ self.assertEqual(f[3,1450,0], 15.0)
156
+ f.file.close()
157
+
158
+ def tearDown(self):
159
+ shutil.rmtree(self.working_dir)
160
+
161
+
162
+ '''
163
+ Unit test for the high level vds interface for percival
164
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
165
+ '''
166
+
167
+
168
+ @ut.skipUnless(vds_support,
169
+ 'VDS requires HDF5 >= 1.9.233')
170
+ class TestPercivalHighLevel(ut.TestCase):
171
+
172
+ def setUp(self):
173
+ self.working_dir = tempfile.mkdtemp()
174
+ self.fname = ['raw_file_1.h5','raw_file_2.h5','raw_file_3.h5']
175
+ k = 0
176
+ for outfile in self.fname:
177
+ filename = osp.join(self.working_dir, outfile)
178
+ f = h5.File(filename,'w')
179
+ f['data'] = np.ones((20,200,200))*k
180
+ k +=1
181
+ f.close()
182
+
183
+ f = h5.File(osp.join(self.working_dir, 'raw_file_4.h5'), 'w')
184
+ f['data'] = np.ones((19,200,200))*3
185
+ self.fname.append('raw_file_4.h5')
186
+ self.fname = [osp.join(self.working_dir, ix) for ix in self.fname]
187
+ f.close()
188
+
189
+ def test_percival_high_level(self):
190
+ outfile = osp.join(self.working_dir, make_name('percival{}.h5'))
191
+
192
+ # Virtual layout is a representation of the output dataset
193
+ layout = h5.VirtualLayout(shape=(79, 200, 200), dtype=np.float64)
194
+ for k, filename in enumerate(self.fname):
195
+ dim1 = 19 if k == 3 else 20
196
+ vsource = h5.VirtualSource(filename, 'data',shape=(dim1, 200, 200))
197
+ layout[k:79:4, :, :] = vsource[:, :, :]
198
+
199
+ # Create the virtual dataset file
200
+ with h5.File(outfile, 'w', libver='latest') as f:
201
+ f.create_virtual_dataset('data', layout, fillvalue=-5)
202
+
203
+ foo = np.array(2 * list(range(4)))
204
+ with h5.File(outfile,'r') as f:
205
+ ds = f['data']
206
+ line = ds[:8,100,100]
207
+ self.assertEqual(ds.shape, (79,200,200),)
208
+ assert_array_equal(line, foo)
209
+
210
+ def test_percival_source_from_dataset(self):
211
+ outfile = osp.join(self.working_dir, make_name('percival{}.h5'))
212
+
213
+ # Virtual layout is a representation of the output dataset
214
+ layout = h5.VirtualLayout(shape=(79, 200, 200), dtype=np.float64)
215
+ for k, filename in enumerate(self.fname):
216
+ with h5.File(filename, 'r') as f:
217
+ vsource = h5.VirtualSource(f['data'])
218
+ layout[k:79:4, :, :] = vsource
219
+
220
+ # Create the virtual dataset file
221
+ with h5.File(outfile, 'w', libver='latest') as f:
222
+ f.create_virtual_dataset('data', layout, fillvalue=-5)
223
+
224
+ foo = np.array(2 * list(range(4)))
225
+ with h5.File(outfile,'r') as f:
226
+ ds = f['data']
227
+ line = ds[:8,100,100]
228
+ self.assertEqual(ds.shape, (79,200,200),)
229
+ assert_array_equal(line, foo)
230
+
231
+ def tearDown(self):
232
+ shutil.rmtree(self.working_dir)
233
+
234
+ @ut.skipUnless(vds_support,
235
+ 'VDS requires HDF5 >= 1.9.233')
236
+ class SlicingTestCase(ut.TestCase):
237
+
238
+ def setUp(self):
239
+ self.tmpdir = tempfile.mkdtemp()
240
+ # Create source files (1.h5 to 4.h5)
241
+ for n in range(1, 5):
242
+ with h5.File(osp.join(self.tmpdir, '{}.h5'.format(n)), 'w') as f:
243
+ d = f.create_dataset('data', (100,), 'i4')
244
+ d[:] = np.arange(100) + n
245
+
246
+ def make_virtual_ds(self):
247
+ # Assemble virtual dataset
248
+ layout = h5.VirtualLayout((4, 100), 'i4', maxshape=(4, None))
249
+
250
+ for n in range(1, 5):
251
+ filename = osp.join(self.tmpdir, "{}.h5".format(n))
252
+ vsource = h5.VirtualSource(filename, 'data', shape=(100,))
253
+ # Fill the first half with positions 0, 2, 4... from the source
254
+ layout[n - 1, :50] = vsource[0:100:2]
255
+ # Fill the second half with places 1, 3, 5... from the source
256
+ layout[n - 1, 50:] = vsource[1:100:2]
257
+
258
+ outfile = osp.join(self.tmpdir, make_name('VDS{}.h5'))
259
+
260
+ # Add virtual dataset to output file
261
+ with h5.File(outfile, 'w', libver='latest') as f:
262
+ f.create_virtual_dataset('/group/data', layout, fillvalue=-5)
263
+
264
+ return outfile
265
+
266
+ def test_slice_source(self):
267
+ outfile = self.make_virtual_ds()
268
+
269
+ with h5.File(outfile, 'r') as f:
270
+ assert_array_equal(f['/group/data'][0][:3], [1, 3, 5])
271
+ assert_array_equal(f['/group/data'][0][50:53], [2, 4, 6])
272
+ assert_array_equal(f['/group/data'][3][:3], [4, 6, 8])
273
+ assert_array_equal(f['/group/data'][3][50:53], [5, 7, 9])
274
+
275
+ def test_inspection(self):
276
+ with h5.File(osp.join(self.tmpdir, '1.h5'), 'r') as f:
277
+ assert not f['data'].is_virtual
278
+
279
+ outfile = self.make_virtual_ds()
280
+
281
+ with h5.File(outfile, 'r') as f:
282
+ ds = f['/group/data']
283
+ assert ds.is_virtual
284
+
285
+ src_files = {osp.join(self.tmpdir, '{}.h5'.format(n))
286
+ for n in range(1, 5)}
287
+ assert {s.file_name for s in ds.virtual_sources()} == src_files
288
+
289
+ def test_mismatched_selections(self):
290
+ layout = h5.VirtualLayout((4, 100), 'i4', maxshape=(4, None))
291
+
292
+ filename = osp.join(self.tmpdir, "1.h5")
293
+ vsource = h5.VirtualSource(filename, 'data', shape=(100,))
294
+ with self.assertRaisesRegex(ValueError, r'different number'):
295
+ layout[0, :49] = vsource[0:100:2]
296
+
297
+ def tearDown(self):
298
+ shutil.rmtree(self.tmpdir)
299
+
300
+ @ut.skipUnless(vds_support,
301
+ 'VDS requires HDF5 >= 1.9.233')
302
+ class IndexingTestCase(ut.TestCase):
303
+
304
+ def setUp(self):
305
+ self.tmpdir = tempfile.mkdtemp()
306
+ # Create source file (1.h5)
307
+ with h5.File(osp.join(self.tmpdir, '1.h5'), 'w') as f:
308
+ d = f.create_dataset('data', (10,), 'i4')
309
+ d[:] = np.arange(10)*10
310
+
311
+ def test_index_layout(self):
312
+ # Assemble virtual dataset (indexing target)
313
+ layout = h5.VirtualLayout((100,), 'i4')
314
+
315
+ inds = [3,6,20,25,33,47,70,75,96,98]
316
+
317
+ filename = osp.join(self.tmpdir, "1.h5")
318
+ vsource = h5.VirtualSource(filename, 'data', shape=(10,))
319
+ layout[inds] = vsource
320
+
321
+ outfile = osp.join(self.tmpdir, make_name('VDS{}.h5'))
322
+
323
+ # Assembly virtual dataset (indexing source)
324
+ layout2 = h5.VirtualLayout((6,), 'i4')
325
+
326
+ inds2 = [0,1,4,5,8]
327
+ layout2[1:] = vsource[inds2]
328
+
329
+ # Add virtual datasets to output file and close
330
+ with h5.File(outfile, 'w', libver='latest') as f:
331
+ f.create_virtual_dataset('/data', layout, fillvalue=-5)
332
+ f.create_virtual_dataset(b'/data2', layout2, fillvalue=-3)
333
+
334
+ # Read data from virtual datasets
335
+ with h5.File(outfile, 'r') as f:
336
+ data = f['/data'][()]
337
+ data2 = f['/data2'][()]
338
+
339
+ # Verify
340
+ assert_array_equal(data[inds], np.arange(10)*10)
341
+ assert_array_equal(data2[1:], [0,10,40,50,80])
342
+
343
+ mask = np.zeros(100)
344
+ mask[inds] = 1
345
+ self.assertEqual(data[mask == 0].min(), -5)
346
+ self.assertEqual(data[mask == 0].max(), -5)
347
+ self.assertEqual(data2[0], -3)
348
+
349
+ def tearDown(self):
350
+ shutil.rmtree(self.tmpdir)
351
+
352
+ @ut.skipUnless(vds_support,
353
+ 'VDS requires HDF5 >= 1.9.233')
354
+ class RelativeLinkTestCase(ut.TestCase):
355
+
356
+ def setUp(self):
357
+ self.tmpdir = tempfile.mkdtemp()
358
+ self.f1 = osp.join(self.tmpdir, 'testfile1.h5')
359
+ self.f2 = osp.join(self.tmpdir, 'testfile2.h5')
360
+
361
+ self.data1 = np.arange(10)
362
+ self.data2 = np.arange(10) * -1
363
+
364
+ with h5.File(self.f1, 'w') as f:
365
+ # dataset
366
+ ds = f.create_dataset('data', (10,), 'f4')
367
+ ds[:] = self.data1
368
+
369
+ with h5.File(self.f2, 'w') as f:
370
+ # dataset
371
+ ds = f.create_dataset('data', (10,), 'f4')
372
+ ds[:] = self.data2
373
+ self.make_vds(f)
374
+
375
+ def make_vds(self, f):
376
+ # virtual dataset
377
+ layout = h5.VirtualLayout((2, 10), 'f4')
378
+ vsource1 = h5.VirtualSource(self.f1, 'data', shape=(10,))
379
+ vsource2 = h5.VirtualSource(self.f2, 'data', shape=(10,))
380
+ layout[0] = vsource1
381
+ layout[1] = vsource2
382
+ f.create_virtual_dataset('virtual', layout)
383
+
384
+ @pytest.mark.thread_unsafe(reason="Renames shared files")
385
+ def test_relative_vds(self):
386
+ with h5.File(self.f2) as f:
387
+ data = f['virtual'][:]
388
+ np.testing.assert_array_equal(data[0], self.data1)
389
+ np.testing.assert_array_equal(data[1], self.data2)
390
+
391
+ # move f2 -> f3
392
+ f3 = osp.join(self.tmpdir, 'testfile3.h5')
393
+ os.rename(self.f2, f3)
394
+
395
+ with h5.File(f3) as f:
396
+ data = f['virtual'][:]
397
+ assert data.dtype == 'f4'
398
+ np.testing.assert_array_equal(data[0], self.data1)
399
+ np.testing.assert_array_equal(data[1], self.data2)
400
+
401
+ # moving other file
402
+ f4 = osp.join(self.tmpdir, 'testfile4.h5')
403
+ os.rename(self.f1, f4)
404
+
405
+ with h5.File(f3) as f:
406
+ data = f['virtual'][:]
407
+ assert data.dtype == 'f4'
408
+ # unavailable data is silently converted to default value
409
+ np.testing.assert_array_equal(data[0], 0)
410
+ np.testing.assert_array_equal(data[1], self.data2)
411
+
412
+ def tearDown(self):
413
+ shutil.rmtree(self.tmpdir)
414
+
415
+ class RelativeLinkBuildVDSTestCase(RelativeLinkTestCase):
416
+ # Test a link to the same file with the virtual dataset created by
417
+ # File.build_virtual_dataset()
418
+ def make_vds(self, f):
419
+ with f.build_virtual_dataset('virtual', (2, 10), dtype='f4') as layout:
420
+ layout[0] = h5.VirtualSource(self.f1, 'data', shape=(10,))
421
+ layout[1] = h5.VirtualSource(self.f2, 'data', shape=(10,))
422
+
423
+ @ut.skipUnless(vds_support,
424
+ 'VDS requires HDF5 >= 1.9.233')
425
+ class VDSUnlimitedTestCase(ut.TestCase):
426
+
427
+ def setUp(self):
428
+ self.tmpdir = tempfile.mkdtemp()
429
+ self.path = osp.join(self.tmpdir, "resize.h5")
430
+ with h5.File(self.path, "w") as f:
431
+ source_dset = f.create_dataset(
432
+ "source",
433
+ data=np.arange(20),
434
+ shape=(10, 2),
435
+ maxshape=(None, 2),
436
+ chunks=(10, 1),
437
+ fillvalue=-1
438
+ )
439
+ self.layout = h5.VirtualLayout((10, 1), int, maxshape=(None, 1))
440
+ layout_source = h5.VirtualSource(source_dset)
441
+ self.layout[:h5.UNLIMITED, 0] = layout_source[:h5.UNLIMITED, 1]
442
+
443
+ f.create_virtual_dataset("virtual", self.layout)
444
+
445
+ def test_unlimited_axis(self):
446
+ comp1 = np.arange(1, 20, 2).reshape(10, 1)
447
+ comp2 = np.vstack((
448
+ comp1,
449
+ np.full(shape=(10, 1), fill_value=-1)
450
+ ))
451
+ comp3 = np.vstack((
452
+ comp1,
453
+ np.full(shape=(10, 1), fill_value=0)
454
+ ))
455
+ fname = osp.join(self.tmpdir, make_name("resize2{}.h5"))
456
+ shutil.copyfile(self.path, fname)
457
+ with h5.File(fname, "a") as f:
458
+ source_dset = f['source']
459
+ virtual_dset = f['virtual']
460
+ np.testing.assert_array_equal(comp1, virtual_dset)
461
+ source_dset.resize(20, axis=0)
462
+ np.testing.assert_array_equal(comp2, virtual_dset)
463
+ source_dset[10:, 1] = np.zeros((10,), dtype=int)
464
+ np.testing.assert_array_equal(comp3, virtual_dset)
465
+
466
+ def tearDown(self):
467
+ shutil.rmtree(self.tmpdir)
468
+
469
+
470
+ def test_no_mappings(writable_file):
471
+ name = make_name()
472
+ with writable_file.build_virtual_dataset(name, (10, 20), np.int32):
473
+ pass
474
+
475
+ dset = writable_file[name]
476
+ assert dset.is_virtual
477
+ assert dset.virtual_sources() == []
478
+ np.testing.assert_array_equal(dset[()], np.zeros((10, 20), np.int32))
479
+
480
+
481
+ if __name__ == "__main__":
482
+ ut.main()
.venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_lowlevel_vds.py ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ '''
2
+ Unit test for the low level vds interface for eiger
3
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
4
+ '''
5
+
6
+ import os.path as osp
7
+ import tempfile
8
+
9
+ import numpy as np
10
+
11
+ import h5py as h5
12
+ from ..common import ut, make_name
13
+
14
+
15
+ class TestEigerLowLevel(ut.TestCase):
16
+ def setUp(self):
17
+ self.working_dir = tempfile.TemporaryDirectory()
18
+ self.fname = ['raw_file_1.h5', 'raw_file_2.h5', 'raw_file_3.h5']
19
+ k = 0
20
+ for outfile in self.fname:
21
+ filename = osp.join(self.working_dir.name, outfile)
22
+ with h5.File(filename, 'w') as f:
23
+ f['data'] = np.ones((20, 200, 200))*k
24
+ k += 1
25
+
26
+ with h5.File(osp.join(self.working_dir.name, 'raw_file_4.h5'), 'w') as f:
27
+ f['data'] = np.ones((18, 200, 200))*3
28
+ self.fname.append('raw_file_4.h5')
29
+ self.fname = [osp.join(self.working_dir.name, ix) for ix in self.fname]
30
+
31
+ def test_eiger_low_level(self):
32
+ outfile = osp.join(self.working_dir.name, make_name('eiger{}.h5'))
33
+ with h5.File(outfile, 'w', libver='latest') as f:
34
+ vdset_shape = (78, 200, 200)
35
+ vdset_max_shape = vdset_shape
36
+ virt_dspace = h5.h5s.create_simple(vdset_shape, vdset_max_shape)
37
+ dcpl = h5.h5p.create(h5.h5p.DATASET_CREATE)
38
+ dcpl.set_fill_value(np.array([-1]))
39
+ # Create the source dataset dataspace
40
+ k = 0
41
+ for foo in self.fname:
42
+ with h5.File(foo, 'r') as in_f:
43
+ src_shape = in_f['data'].shape
44
+ src_dspace = h5.h5s.create_simple(src_shape, src_shape)
45
+ # Select the source dataset hyperslab
46
+ src_dspace.select_hyperslab(start=(0, 0, 0),
47
+ stride=(1, 1, 1),
48
+ count=(1, 1, 1),
49
+ block=src_shape)
50
+
51
+ virt_dspace.select_hyperslab(start=(k, 0, 0),
52
+ stride=(1, 1, 1),
53
+ count=(1, 1, 1),
54
+ block=src_shape)
55
+
56
+ dcpl.set_virtual(virt_dspace, foo.encode('utf-8'),
57
+ b'data', src_dspace)
58
+ k += src_shape[0]
59
+
60
+ # Create the virtual dataset
61
+ h5.h5d.create(f.id, name=b"data", tid=h5.h5t.NATIVE_INT16,
62
+ space=virt_dspace, dcpl=dcpl)
63
+
64
+ with h5.File(outfile, 'r') as f:
65
+ d = f['data']
66
+ self.assertEqual(d[10, 100, 10], 0.0)
67
+ self.assertEqual(d[30, 100, 100], 1.0)
68
+ self.assertEqual(d[50, 100, 100], 2.0)
69
+ self.assertEqual(d[70, 100, 100], 3.0)
70
+
71
+ def tearDown(self):
72
+ self.working_dir.cleanup()
73
+
74
+
75
+ if __name__ == "__main__":
76
+ ut.main()
77
+ '''
78
+ Unit test for the low level vds interface for excalibur
79
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
80
+ '''
81
+
82
+
83
+ class ExcaliburData:
84
+ FEM_PIXELS_PER_CHIP_X = 256
85
+ FEM_PIXELS_PER_CHIP_Y = 256
86
+ FEM_CHIPS_PER_STRIPE_X = 8
87
+ FEM_CHIPS_PER_STRIPE_Y = 1
88
+ FEM_STRIPES_PER_MODULE = 2
89
+
90
+ @property
91
+ def sensor_module_dimensions(self):
92
+ x_pixels = self.FEM_PIXELS_PER_CHIP_X * self.FEM_CHIPS_PER_STRIPE_X
93
+ y_pixels = self.FEM_PIXELS_PER_CHIP_Y * self.FEM_CHIPS_PER_STRIPE_Y * self.FEM_STRIPES_PER_MODULE
94
+ return y_pixels, x_pixels,
95
+
96
+ @property
97
+ def fem_stripe_dimensions(self):
98
+ x_pixels = self.FEM_PIXELS_PER_CHIP_X * self.FEM_CHIPS_PER_STRIPE_X
99
+ y_pixels = self.FEM_PIXELS_PER_CHIP_Y * self.FEM_CHIPS_PER_STRIPE_Y
100
+ return y_pixels, x_pixels,
101
+
102
+ def generate_sensor_module_image(self, value, dtype='uint16'):
103
+ dset = np.empty(shape=self.sensor_module_dimensions, dtype=dtype)
104
+ dset.fill(value)
105
+ return dset
106
+
107
+ def generate_fem_stripe_image(self, value, dtype='uint16'):
108
+ dset = np.empty(shape=self.fem_stripe_dimensions, dtype=dtype)
109
+ dset.fill(value)
110
+ return dset
111
+
112
+
113
+ class TestExcaliburLowLevel(ut.TestCase):
114
+ def create_excalibur_fem_stripe_datafile(self, fname, nframes, excalibur_data,scale):
115
+ shape = (nframes,) + excalibur_data.fem_stripe_dimensions
116
+ max_shape = (nframes,) + excalibur_data.fem_stripe_dimensions
117
+ chunk = (1,) + excalibur_data.fem_stripe_dimensions
118
+ with h5.File(fname, 'w', libver='latest') as f:
119
+ dset = f.create_dataset('data', shape=shape, maxshape=max_shape, chunks=chunk, dtype='uint16')
120
+ for data_value_index in np.arange(nframes):
121
+ dset[data_value_index] = excalibur_data.generate_fem_stripe_image(data_value_index*scale)
122
+
123
+ def setUp(self):
124
+ self.working_dir = tempfile.TemporaryDirectory()
125
+ self.fname = ["stripe_%d.h5" % stripe for stripe in range(1,7)]
126
+ self.fname = [osp.join(self.working_dir.name, ix) for ix in self.fname]
127
+ nframes = 5
128
+ self.edata = ExcaliburData()
129
+ k=0
130
+ for raw_file in self.fname:
131
+ self.create_excalibur_fem_stripe_datafile(raw_file, nframes, self.edata,k)
132
+ k+=1
133
+
134
+ def test_excalibur_low_level(self):
135
+
136
+ excalibur_data = self.edata
137
+ outfile = osp.join(self.working_dir.name, make_name('excalibur{}.h5'))
138
+ vdset_stripe_shape = (1,) + excalibur_data.fem_stripe_dimensions
139
+ vdset_stripe_max_shape = (5, ) + excalibur_data.fem_stripe_dimensions
140
+ vdset_shape = (5,
141
+ excalibur_data.fem_stripe_dimensions[0] * len(self.fname) + (10 * (len(self.fname)-1)),
142
+ excalibur_data.fem_stripe_dimensions[1])
143
+ vdset_max_shape = (5,
144
+ excalibur_data.fem_stripe_dimensions[0] * len(self.fname) + (10 * (len(self.fname)-1)),
145
+ excalibur_data.fem_stripe_dimensions[1])
146
+ vdset_y_offset = 0
147
+
148
+ # Create the virtual dataset file
149
+ with h5.File(outfile, 'w', libver='latest') as f:
150
+
151
+ # Create the source dataset dataspace
152
+ src_dspace = h5.h5s.create_simple(vdset_stripe_shape, vdset_stripe_max_shape)
153
+ # Create the virtual dataset dataspace
154
+ virt_dspace = h5.h5s.create_simple(vdset_shape, vdset_max_shape)
155
+
156
+ # Create the virtual dataset property list
157
+ dcpl = h5.h5p.create(h5.h5p.DATASET_CREATE)
158
+ dcpl.set_fill_value(np.array([0x01]))
159
+
160
+ # Select the source dataset hyperslab
161
+ src_dspace.select_hyperslab(start=(0, 0, 0), count=(1, 1, 1), block=vdset_stripe_max_shape)
162
+
163
+ for raw_file in self.fname:
164
+ # Select the virtual dataset hyperslab (for the source dataset)
165
+ virt_dspace.select_hyperslab(start=(0, vdset_y_offset, 0),
166
+ count=(1, 1, 1),
167
+ block=vdset_stripe_max_shape)
168
+ # Set the virtual dataset hyperslab to point to the real first dataset
169
+ dcpl.set_virtual(virt_dspace, raw_file.encode('utf-8'),
170
+ b"/data", src_dspace)
171
+ vdset_y_offset += vdset_stripe_shape[1] + 10
172
+
173
+ # Create the virtual dataset
174
+ h5.h5d.create(
175
+ f.id,
176
+ name=b"data",
177
+ tid=h5.h5t.NATIVE_INT16,
178
+ space=virt_dspace,
179
+ dcpl=dcpl,
180
+ )
181
+ assert(f['data'].fillvalue == 0x01)
182
+
183
+ with h5.File(outfile,'r') as f:
184
+ d = f['data']
185
+ self.assertEqual(d[3,100,0], 0.0)
186
+ self.assertEqual(d[3,260,0], 1.0)
187
+ self.assertEqual(d[3,350,0], 3.0)
188
+ self.assertEqual(d[3,650,0], 6.0)
189
+ self.assertEqual(d[3,900,0], 9.0)
190
+ self.assertEqual(d[3,1150,0], 12.0)
191
+ self.assertEqual(d[3,1450,0], 15.0)
192
+
193
+ def tearDown(self):
194
+ self.working_dir.cleanup()
195
+
196
+ '''
197
+ Unit test for the low level vds interface for percival
198
+ https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
199
+ '''
200
+
201
+
202
+ class TestPercivalLowLevel(ut.TestCase):
203
+
204
+ def setUp(self):
205
+ self.working_dir = tempfile.TemporaryDirectory()
206
+ self.fname = ['raw_file_1.h5','raw_file_2.h5','raw_file_3.h5']
207
+ k = 0
208
+ for outfile in self.fname:
209
+ filename = osp.join(self.working_dir.name, outfile)
210
+ with h5.File(filename,'w') as f:
211
+ f['data'] = np.ones((20,200,200))*k
212
+ k +=1
213
+
214
+ with h5.File(osp.join(self.working_dir.name, 'raw_file_4.h5'),'w') as f:
215
+ f['data'] = np.ones((19,200,200))*3
216
+ self.fname.append('raw_file_4.h5')
217
+ self.fname = [osp.join(self.working_dir.name, ix) for ix in self.fname]
218
+
219
+ def test_percival_low_level(self):
220
+ outfile = osp.join(self.working_dir.name, make_name('percival{}.h5'))
221
+
222
+ with h5.File(outfile, 'w', libver='latest') as f:
223
+ vdset_shape = (1,200,200)
224
+ num = h5.h5s.UNLIMITED
225
+ vdset_max_shape = (num,)+vdset_shape[1:]
226
+ virt_dspace = h5.h5s.create_simple(vdset_shape, vdset_max_shape)
227
+ dcpl = h5.h5p.create(h5.h5p.DATASET_CREATE)
228
+ dcpl.set_fill_value(np.array([-1]))
229
+ # Create the source dataset dataspace
230
+ k = 0
231
+ for foo in self.fname:
232
+ with h5.File(foo, 'r') as in_f:
233
+ src_shape = in_f['data'].shape
234
+ max_src_shape = (num,)+src_shape[1:]
235
+ src_dspace = h5.h5s.create_simple(src_shape, max_src_shape)
236
+ # Select the source dataset hyperslab
237
+ src_dspace.select_hyperslab(start=(0, 0, 0),
238
+ stride=(1,1,1),
239
+ count=(num, 1, 1),
240
+ block=(1,)+src_shape[1:])
241
+
242
+ virt_dspace.select_hyperslab(start=(k, 0, 0),
243
+ stride=(4,1,1),
244
+ count=(num, 1, 1),
245
+ block=(1,)+src_shape[1:])
246
+
247
+ dcpl.set_virtual(virt_dspace, foo.encode('utf-8'), b'data', src_dspace)
248
+ k+=1
249
+
250
+ # Create the virtual dataset
251
+ h5.h5d.create(
252
+ f.id,
253
+ name=b"data",
254
+ tid=h5.h5t.NATIVE_INT16,
255
+ space=virt_dspace,
256
+ dcpl=dcpl,
257
+ )
258
+
259
+ with h5.File(outfile, 'r') as f:
260
+ sh = f['data'].shape
261
+ line = f['data'][:8,100,100]
262
+ foo = np.array(2*list(range(4)))
263
+ self.assertEqual(sh,(79,200,200),)
264
+ np.testing.assert_array_equal(line,foo)
265
+
266
+ def tearDown(self):
267
+ self.working_dir.cleanup()
268
+
269
+
270
+ def test_virtual_prefix(tmp_path):
271
+ a = tmp_path / make_name('a')
272
+ b = tmp_path / make_name('b')
273
+ a.mkdir()
274
+ b.mkdir()
275
+ src_file = h5.File(a / 'src.h5', 'w')
276
+ src_file['data'] = np.arange(10)
277
+
278
+ vds_file = h5.File(b / 'vds.h5', 'w')
279
+ layout = h5.VirtualLayout(shape=(10,), dtype=np.int64)
280
+ layout[:] = h5.VirtualSource('src.h5', 'data', shape=(10,))
281
+ vds_file.create_virtual_dataset('data', layout, fillvalue=-1)
282
+
283
+ # Path doesn't resolve
284
+ np.testing.assert_array_equal(vds_file['data'], np.full(10, fill_value=-1))
285
+
286
+ a_bytes = bytes(a)
287
+ dapl = h5.h5p.create(h5.h5p.DATASET_ACCESS)
288
+ dapl.set_virtual_prefix(a_bytes)
289
+ vds_id = h5.h5d.open(vds_file.id, b'data', dapl=dapl)
290
+ vds = h5.Dataset(vds_id)
291
+
292
+ # Now it should find the source file and read the data correctly
293
+ np.testing.assert_array_equal(vds[:], np.arange(10))
294
+ # Check that get_virtual_prefix gives back what we put in
295
+ assert vds.id.get_access_plist().get_virtual_prefix() == a_bytes
296
+
297
+ src_file.close()
298
+ vds_file.close()
.venv/lib/python3.11/site-packages/h5py/tests/test_vds/test_virtual_source.py ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ..common import ut, make_name
2
+ import h5py as h5
3
+ import numpy as np
4
+
5
+
6
+ class TestVirtualSource(ut.TestCase):
7
+ def test_full_slice(self):
8
+ dataset = h5.VirtualSource('test','test',(20,30,30))
9
+ sliced = dataset[:,:,:]
10
+ self.assertEqual(dataset.shape,sliced.shape)
11
+
12
+ # def test_full_slice_inverted(self):
13
+ # dataset = h5.VirtualSource('test','test',(20,30,30))
14
+ # sliced = dataset[:,:,::-1]
15
+ # self.assertEqual(dataset.shape,sliced.shape)
16
+ #
17
+ # def test_subsampled_slice_inverted(self):
18
+ # dataset = h5.VirtualSource('test','test',(20,30,30))
19
+ # sliced = dataset[:,:,::-2]
20
+ # self.assertEqual((20,30,15),sliced.shape)
21
+
22
+ def test_integer_indexed(self):
23
+ dataset = h5.VirtualSource('test','test',(20,30,30))
24
+ sliced = dataset[5,:,:]
25
+ self.assertEqual((30,30),sliced.shape)
26
+
27
+ def test_integer_single_indexed(self):
28
+ dataset = h5.VirtualSource('test','test',(20,30,30))
29
+ sliced = dataset[5]
30
+ self.assertEqual((30,30),sliced.shape)
31
+
32
+ def test_two_integer_indexed(self):
33
+ dataset = h5.VirtualSource('test','test',(20,30,30))
34
+ sliced = dataset[5,:,10]
35
+ self.assertEqual((30,),sliced.shape)
36
+
37
+ def test_single_range(self):
38
+ dataset = h5.VirtualSource('test','test',(20,30,30))
39
+ sliced = dataset[5:10,:,:]
40
+ self.assertEqual((5,)+dataset.shape[1:],sliced.shape)
41
+
42
+ def test_shape_calculation_positive_step(self):
43
+ dataset = h5.VirtualSource('test','test',(20,))
44
+ cmp = []
45
+ for i in range(5):
46
+ d = dataset[2:12+i:3].shape[0]
47
+ ref = np.arange(20)[2:12+i:3].size
48
+ cmp.append(ref==d)
49
+ self.assertEqual(5, sum(cmp))
50
+
51
+ # def test_shape_calculation_positive_step_switched_start_stop(self):
52
+ # dataset = h5.VirtualSource('test','test',(20,))
53
+ # cmp = []
54
+ # for i in range(5):
55
+ # d = dataset[12+i:2:3].shape[0]
56
+ # ref = np.arange(20)[12+i:2:3].size
57
+ # cmp.append(ref==d)
58
+ # self.assertEqual(5, sum(cmp))
59
+ #
60
+ #
61
+ # def test_shape_calculation_negative_step(self):
62
+ # dataset = h5.VirtualSource('test','test',(20,))
63
+ # cmp = []
64
+ # for i in range(5):
65
+ # d = dataset[12+i:2:-3].shape[0]
66
+ # ref = np.arange(20)[12+i:2:-3].size
67
+ # cmp.append(ref==d)
68
+ # self.assertEqual(5, sum(cmp))
69
+ #
70
+ # def test_shape_calculation_negative_step_switched_start_stop(self):
71
+ # dataset = h5.VirtualSource('test','test',(20,))
72
+ # cmp = []
73
+ # for i in range(5):
74
+ # d = dataset[2:12+i:-3].shape[0]
75
+ # ref = np.arange(20)[2:12+i:-3].size
76
+ # cmp.append(ref==d)
77
+ # self.assertEqual(5, sum(cmp))
78
+
79
+
80
+ def test_double_range(self):
81
+ dataset = h5.VirtualSource('test','test',(20,30,30))
82
+ sliced = dataset[5:10,:,20:25]
83
+ self.assertEqual((5,30,5),sliced.shape)
84
+
85
+ def test_double_strided_range(self):
86
+ dataset = h5.VirtualSource('test','test',(20,30,30))
87
+ sliced = dataset[6:12:2,:,20:26:3]
88
+ self.assertEqual((3,30,2,),sliced.shape)
89
+
90
+ # def test_double_strided_range_inverted(self):
91
+ # dataset = h5.VirtualSource('test','test',(20,30,30))
92
+ # sliced = dataset[12:6:-2,:,26:20:-3]
93
+ # self.assertEqual((3,30,2),sliced.shape)
94
+
95
+ def test_negative_start_index(self):
96
+ dataset = h5.VirtualSource('test','test',(20,30,30))
97
+ sliced = dataset[-10:16]
98
+ self.assertEqual((6,30,30),sliced.shape)
99
+
100
+ def test_negative_stop_index(self):
101
+ dataset = h5.VirtualSource('test','test',(20,30,30))
102
+ sliced = dataset[10:-4]
103
+ self.assertEqual((6,30,30),sliced.shape)
104
+
105
+ def test_negative_start_and_stop_index(self):
106
+ dataset = h5.VirtualSource('test','test',(20,30,30))
107
+ sliced = dataset[-10:-4]
108
+ self.assertEqual((6,30,30),sliced.shape)
109
+
110
+ # def test_negative_start_and_stop_and_stride_index(self):
111
+ # dataset = h5.VirtualSource('test','test',(20,30,30))
112
+ # sliced = dataset[-4:-10:-2]
113
+ # self.assertEqual((3,30,30),sliced.shape)
114
+ #
115
+ def test_ellipsis(self):
116
+ dataset = h5.VirtualSource('test','test',(20,30,30))
117
+ sliced = dataset[...]
118
+ self.assertEqual(dataset.shape,sliced.shape)
119
+
120
+ def test_ellipsis_end(self):
121
+ dataset = h5.VirtualSource('test','test',(20,30,30))
122
+ sliced = dataset[0:1,...]
123
+ self.assertEqual((1,)+dataset.shape[1:],sliced.shape)
124
+
125
+ def test_ellipsis_start(self):
126
+ dataset = h5.VirtualSource('test','test',(20,30,30))
127
+ sliced = dataset[...,0:1]
128
+ self.assertEqual(dataset.shape[:-1]+(1,),sliced.shape)
129
+
130
+ def test_ellipsis_sandwich(self):
131
+ dataset = h5.VirtualSource('test','test',(20,30,30,40))
132
+ sliced = dataset[0:1,...,5:6]
133
+ self.assertEqual((1,)+dataset.shape[1:-1]+(1,),sliced.shape)
134
+
135
+ def test_integer_shape(self):
136
+ dataset = h5.VirtualSource('test','test', 20)
137
+ self.assertEqual(dataset.shape, (20,))
138
+
139
+ def test_integer_maxshape(self):
140
+ dataset = h5.VirtualSource('test','test', 20, maxshape=30)
141
+ self.assertEqual(dataset.maxshape, (30,))
142
+
143
+ def test_extra_args(self):
144
+ with h5.File(make_name("f1{}.h5"), driver='core',
145
+ backing_store=False, mode='w') as ftest:
146
+ ftest['a'] = [1, 2, 3]
147
+ a = ftest['a']
148
+
149
+ with self.assertRaises(TypeError):
150
+ h5.VirtualSource(a, 'b')
151
+ with self.assertRaises(TypeError):
152
+ h5.VirtualSource(a, shape=(1, ))
153
+ with self.assertRaises(TypeError):
154
+ h5.VirtualSource(a, maxshape=(None,))
155
+ with self.assertRaises(TypeError):
156
+ h5.VirtualSource(a, dtype=int)
157
+
158
+ def test_repeated_slice(self):
159
+ dataset = h5.VirtualSource('test', 'test', (20, 30, 30))
160
+ sliced = dataset[5:10, :, :]
161
+ with self.assertRaises(RuntimeError):
162
+ sliced[:, :4]
163
+
164
+
165
+ if __name__ == "__main__":
166
+ ut.main()
.venv/lib/python3.11/site-packages/h5py/utils.cpython-311-x86_64-linux-gnu.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7b6e2ec440f708b5b562bad1f8cdc2c2f73ead2bfd9ae056bb18177eafdf08a9
3
+ size 175529
.venv/lib/python3.11/site-packages/h5py/version.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is part of h5py, a Python interface to the HDF5 library.
2
+ #
3
+ # http://www.h5py.org
4
+ #
5
+ # Copyright 2008-2013 Andrew Collette and contributors
6
+ #
7
+ # License: Standard 3-clause BSD; see "license.txt" for full license terms
8
+ # and contributor agreement.
9
+
10
+ """
11
+ Versioning module for h5py.
12
+ """
13
+
14
+ from collections import namedtuple
15
+ from . import h5 as _h5
16
+ import sys
17
+ import numpy
18
+
19
+ # All should be integers, except pre, as validating versions is more than is
20
+ # needed for our use case
21
+ _H5PY_VERSION_CLS = namedtuple("_H5PY_VERSION_CLS",
22
+ "major minor bugfix pre post dev")
23
+
24
+ hdf5_built_version_tuple = _h5.HDF5_VERSION_COMPILED_AGAINST
25
+
26
+ version_tuple = _H5PY_VERSION_CLS(3, 16, 0, None, None, None)
27
+
28
+ version = "{0.major:d}.{0.minor:d}.{0.bugfix:d}".format(version_tuple)
29
+ if version_tuple.pre is not None:
30
+ version += version_tuple.pre
31
+ if version_tuple.post is not None:
32
+ version += ".post{0.post:d}".format(version_tuple)
33
+ if version_tuple.dev is not None:
34
+ version += ".dev{0.dev:d}".format(version_tuple)
35
+
36
+ hdf5_version_tuple = _h5.get_libversion()
37
+ hdf5_version = "%d.%d.%d" % hdf5_version_tuple
38
+
39
+ api_version_tuple = (1,8)
40
+ api_version = "%d.%d" % api_version_tuple
41
+
42
+ info = """\
43
+ Summary of the h5py configuration
44
+ ---------------------------------
45
+
46
+ h5py %(h5py)s
47
+ HDF5 %(hdf5)s
48
+ Python %(python)s
49
+ sys.platform %(platform)s
50
+ sys.maxsize %(maxsize)s
51
+ numpy %(numpy)s
52
+ cython (built with) %(cython_version)s
53
+ numpy (built against) %(numpy_build_version)s
54
+ HDF5 (built against) %(hdf5_build_version)s
55
+ """ % {
56
+ 'h5py': version,
57
+ 'hdf5': hdf5_version,
58
+ 'python': sys.version,
59
+ 'platform': sys.platform,
60
+ 'maxsize': sys.maxsize,
61
+ 'numpy': numpy.__version__,
62
+ 'cython_version': _h5.CYTHON_VERSION_COMPILED_WITH,
63
+ 'numpy_build_version': _h5.NUMPY_VERSION_COMPILED_AGAINST,
64
+ 'hdf5_build_version': "%d.%d.%d" % hdf5_built_version_tuple,
65
+ }
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ uv
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/METADATA ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: hf-xet
3
+ Version: 1.5.1
4
+ Classifier: Development Status :: 5 - Production/Stable
5
+ Classifier: License :: OSI Approved :: Apache Software License
6
+ Classifier: Programming Language :: Rust
7
+ Classifier: Programming Language :: Python :: Implementation :: CPython
8
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3 :: Only
11
+ Classifier: Programming Language :: Python :: 3.8
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Programming Language :: Python :: Free Threading
19
+ Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta
20
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
+ Requires-Dist: pytest ; extra == 'tests'
22
+ Provides-Extra: tests
23
+ License-File: LICENSE
24
+ Summary: Fast transfer of large files with the Hugging Face Hub.
25
+ Maintainer-email: Rajat Arya <rajat@rajatarya.com>, Jared Sulzdorf <j.sulzdorf@gmail.com>, Di Xiao <di@huggingface.co>, Assaf Vayner <assaf@huggingface.co>, Hoyt Koepke <hoytak@gmail.com>
26
+ License-Expression: Apache-2.0
27
+ Requires-Python: >=3.8
28
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
29
+ Project-URL: Documentation, https://huggingface.co/docs/hub/xet/index
30
+ Project-URL: Homepage, https://github.com/huggingface/xet-core
31
+ Project-URL: Issues, https://github.com/huggingface/xet-core/issues
32
+ Project-URL: Repository, https://github.com/huggingface/xet-core.git
33
+
34
+ <!---
35
+ Copyright 2024 The HuggingFace Team. All rights reserved.
36
+
37
+ Licensed under the Apache License, Version 2.0 (the "License");
38
+ you may not use this file except in compliance with the License.
39
+ You may obtain a copy of the License at
40
+
41
+ http://www.apache.org/licenses/LICENSE-2.0
42
+
43
+ Unless required by applicable law or agreed to in writing, software
44
+ distributed under the License is distributed on an "AS IS" BASIS,
45
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ See the License for the specific language governing permissions and
47
+ limitations under the License.
48
+ -->
49
+ <p align="center">
50
+ <a href="https://github.com/huggingface/xet-core/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/huggingface/xet-core.svg?color=blue"></a>
51
+ <a href="https://github.com/huggingface/xet-core/releases"><img alt="GitHub release" src="https://img.shields.io/github/release/huggingface/xet-core.svg"></a>
52
+ <a href="https://github.com/huggingface/xet-core/blob/main/CODE_OF_CONDUCT.md"><img alt="Contributor Covenant" src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg"></a>
53
+ </p>
54
+
55
+ <h3 align="center">
56
+ <p>🤗 hf-xet - xet client tech, used in <a target="_blank" href="https://github.com/huggingface/huggingface_hub/">huggingface_hub</a></p>
57
+ </h3>
58
+
59
+ ## Welcome
60
+
61
+ `hf-xet` enables `huggingface_hub` to utilize xet storage for uploading and downloading to HF Hub. Xet storage provides chunk-based deduplication, efficient storage/retrieval with local disk caching, and backwards compatibility with Git LFS. This library is not meant to be used directly, and is instead intended to be used from [huggingface_hub](https://pypi.org/project/huggingface-hub).
62
+
63
+ ## Key features
64
+
65
+ ♻ **chunk-based deduplication implementation**: avoid transferring and storing chunks that are shared across binary files (models, datasets, etc).
66
+
67
+ 🤗 **Python bindings**: bindings for [huggingface_hub](https://github.com/huggingface/huggingface_hub/) package.
68
+
69
+ ↔ **network communications**: concurrent communication to HF Hub Xet backend services (CAS).
70
+
71
+ 🔖 **local disk caching**: chunk-based cache that sits alongside the existing [huggingface_hub disk cache](https://huggingface.co/docs/huggingface_hub/guides/manage-cache).
72
+
73
+ ## Installation
74
+
75
+ Install the `hf_xet` package with [pip](https://pypi.org/project/hf-xet/):
76
+
77
+ ```bash
78
+ pip install hf_xet
79
+ ```
80
+
81
+ ## Quick Start
82
+
83
+ `hf_xet` is not intended to be run independently as it is expected to be used from `huggingface_hub`, so to get started with `huggingface_hub` check out the documentation [here]("https://hf.co/docs/huggingface_hub").
84
+
85
+ ## Contributions (feature requests, bugs, etc.) are encouraged & appreciated 💙💚💛💜🧡❤️
86
+
87
+ Please join us in making hf-xet better. We value everyone's contributions. Code is not the only way to help. Answering questions, helping each other, improving documentation, filing issues all help immensely. If you are interested in contributing (please do!), check out the [contribution guide](https://github.com/huggingface/xet-core/blob/main/CONTRIBUTING.md) for this repository.
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/RECORD ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ hf_xet-1.5.1.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
2
+ hf_xet-1.5.1.dist-info/METADATA,sha256=Ng3NIurLVmsxfHrQzB0hVplUWdfDjyPgOB1vV43zU9s,4882
3
+ hf_xet-1.5.1.dist-info/RECORD,,
4
+ hf_xet-1.5.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ hf_xet-1.5.1.dist-info/WHEEL,sha256=OkX4wPsZin6E8CKOzxYqaTQ7om8YEJGkDJxzf2dJ9DM,143
6
+ hf_xet-1.5.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
7
+ hf_xet-1.5.1.dist-info/sboms/hf_xet.cyclonedx.json,sha256=qwtR4a6GgW2Y-ybzx9ThgMyHXF11N79IyEWcWf1CeBw,304991
8
+ hf_xet/__init__.py,sha256=E8UDdyQ8glZ_nve9hHEf22bPang8-RKx4VuApXYeQUo,107
9
+ hf_xet/hf_xet.abi3.so,sha256=67AVYfNTLATTgxnYRWZSV5vBoS_6j1FFDErdBM-hhTY,11601472
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/REQUESTED ADDED
File without changes
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.13.3)
3
+ Root-Is-Purelib: false
4
+ Tag: cp37-abi3-manylinux_2_17_x86_64
5
+ Tag: cp37-abi3-manylinux2014_x86_64
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/licenses/LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
.venv/lib/python3.11/site-packages/hf_xet-1.5.1.dist-info/sboms/hf_xet.cyclonedx.json ADDED
The diff for this file is too large to render. See raw diff
 
.venv/lib/python3.11/site-packages/hf_xet/__init__.py ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ from .hf_xet import *
2
+
3
+ __doc__ = hf_xet.__doc__
4
+ if hasattr(hf_xet, "__all__"):
5
+ __all__ = hf_xet.__all__
.venv/lib/python3.11/site-packages/hf_xet/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (371 Bytes). View file
 
.venv/lib/python3.11/site-packages/hf_xet/hf_xet.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ebb01561f3532c04d38319d8456652579bc1a12ffa8f51450c4add04cfa18536
3
+ size 11601472
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ uv
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/METADATA ADDED
@@ -0,0 +1,625 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: httpcore
3
+ Version: 1.0.9
4
+ Summary: A minimal low-level HTTP client.
5
+ Project-URL: Documentation, https://www.encode.io/httpcore
6
+ Project-URL: Homepage, https://www.encode.io/httpcore/
7
+ Project-URL: Source, https://github.com/encode/httpcore
8
+ Author-email: Tom Christie <tom@tomchristie.com>
9
+ License-Expression: BSD-3-Clause
10
+ License-File: LICENSE.md
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Framework :: AsyncIO
14
+ Classifier: Framework :: Trio
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: BSD License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.8
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Topic :: Internet :: WWW/HTTP
26
+ Requires-Python: >=3.8
27
+ Requires-Dist: certifi
28
+ Requires-Dist: h11>=0.16
29
+ Provides-Extra: asyncio
30
+ Requires-Dist: anyio<5.0,>=4.0; extra == 'asyncio'
31
+ Provides-Extra: http2
32
+ Requires-Dist: h2<5,>=3; extra == 'http2'
33
+ Provides-Extra: socks
34
+ Requires-Dist: socksio==1.*; extra == 'socks'
35
+ Provides-Extra: trio
36
+ Requires-Dist: trio<1.0,>=0.22.0; extra == 'trio'
37
+ Description-Content-Type: text/markdown
38
+
39
+ # HTTP Core
40
+
41
+ [![Test Suite](https://github.com/encode/httpcore/workflows/Test%20Suite/badge.svg)](https://github.com/encode/httpcore/actions)
42
+ [![Package version](https://badge.fury.io/py/httpcore.svg)](https://pypi.org/project/httpcore/)
43
+
44
+ > *Do one thing, and do it well.*
45
+
46
+ The HTTP Core package provides a minimal low-level HTTP client, which does
47
+ one thing only. Sending HTTP requests.
48
+
49
+ It does not provide any high level model abstractions over the API,
50
+ does not handle redirects, multipart uploads, building authentication headers,
51
+ transparent HTTP caching, URL parsing, session cookie handling,
52
+ content or charset decoding, handling JSON, environment based configuration
53
+ defaults, or any of that Jazz.
54
+
55
+ Some things HTTP Core does do:
56
+
57
+ * Sending HTTP requests.
58
+ * Thread-safe / task-safe connection pooling.
59
+ * HTTP(S) proxy & SOCKS proxy support.
60
+ * Supports HTTP/1.1 and HTTP/2.
61
+ * Provides both sync and async interfaces.
62
+ * Async backend support for `asyncio` and `trio`.
63
+
64
+ ## Requirements
65
+
66
+ Python 3.8+
67
+
68
+ ## Installation
69
+
70
+ For HTTP/1.1 only support, install with:
71
+
72
+ ```shell
73
+ $ pip install httpcore
74
+ ```
75
+
76
+ There are also a number of optional extras available...
77
+
78
+ ```shell
79
+ $ pip install httpcore['asyncio,trio,http2,socks']
80
+ ```
81
+
82
+ ## Sending requests
83
+
84
+ Send an HTTP request:
85
+
86
+ ```python
87
+ import httpcore
88
+
89
+ response = httpcore.request("GET", "https://www.example.com/")
90
+
91
+ print(response)
92
+ # <Response [200]>
93
+ print(response.status)
94
+ # 200
95
+ print(response.headers)
96
+ # [(b'Accept-Ranges', b'bytes'), (b'Age', b'557328'), (b'Cache-Control', b'max-age=604800'), ...]
97
+ print(response.content)
98
+ # b'<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>\n\n<meta charset="utf-8"/>\n ...'
99
+ ```
100
+
101
+ The top-level `httpcore.request()` function is provided for convenience. In practice whenever you're working with `httpcore` you'll want to use the connection pooling functionality that it provides.
102
+
103
+ ```python
104
+ import httpcore
105
+
106
+ http = httpcore.ConnectionPool()
107
+ response = http.request("GET", "https://www.example.com/")
108
+ ```
109
+
110
+ Once you're ready to get going, [head over to the documentation](https://www.encode.io/httpcore/).
111
+
112
+ ## Motivation
113
+
114
+ You *probably* don't want to be using HTTP Core directly. It might make sense if
115
+ you're writing something like a proxy service in Python, and you just want
116
+ something at the lowest possible level, but more typically you'll want to use
117
+ a higher level client library, such as `httpx`.
118
+
119
+ The motivation for `httpcore` is:
120
+
121
+ * To provide a reusable low-level client library, that other packages can then build on top of.
122
+ * To provide a *really clear interface split* between the networking code and client logic,
123
+ so that each is easier to understand and reason about in isolation.
124
+
125
+ ## Dependencies
126
+
127
+ The `httpcore` package has the following dependencies...
128
+
129
+ * `h11`
130
+ * `certifi`
131
+
132
+ And the following optional extras...
133
+
134
+ * `anyio` - Required by `pip install httpcore['asyncio']`.
135
+ * `trio` - Required by `pip install httpcore['trio']`.
136
+ * `h2` - Required by `pip install httpcore['http2']`.
137
+ * `socksio` - Required by `pip install httpcore['socks']`.
138
+
139
+ ## Versioning
140
+
141
+ We use [SEMVER for our versioning policy](https://semver.org/).
142
+
143
+ For changes between package versions please see our [project changelog](CHANGELOG.md).
144
+
145
+ We recommend pinning your requirements either the most current major version, or a more specific version range:
146
+
147
+ ```python
148
+ pip install 'httpcore==1.*'
149
+ ```
150
+ # Changelog
151
+
152
+ All notable changes to this project will be documented in this file.
153
+
154
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
155
+
156
+ ## Version 1.0.9 (April 24th, 2025)
157
+
158
+ - Resolve https://github.com/advisories/GHSA-vqfr-h8mv-ghfj with h11 dependency update. (#1008)
159
+
160
+ ## Version 1.0.8 (April 11th, 2025)
161
+
162
+ - Fix `AttributeError` when importing on Python 3.14. (#1005)
163
+
164
+ ## Version 1.0.7 (November 15th, 2024)
165
+
166
+ - Support `proxy=…` configuration on `ConnectionPool()`. (#974)
167
+
168
+ ## Version 1.0.6 (October 1st, 2024)
169
+
170
+ - Relax `trio` dependency pinning. (#956)
171
+ - Handle `trio` raising `NotImplementedError` on unsupported platforms. (#955)
172
+ - Handle mapping `ssl.SSLError` to `httpcore.ConnectError`. (#918)
173
+
174
+ ## 1.0.5 (March 27th, 2024)
175
+
176
+ - Handle `EndOfStream` exception for anyio backend. (#899)
177
+ - Allow trio `0.25.*` series in package dependancies. (#903)
178
+
179
+ ## 1.0.4 (February 21st, 2024)
180
+
181
+ - Add `target` request extension. (#888)
182
+ - Fix support for connection `Upgrade` and `CONNECT` when some data in the stream has been read. (#882)
183
+
184
+ ## 1.0.3 (February 13th, 2024)
185
+
186
+ - Fix support for async cancellations. (#880)
187
+ - Fix trace extension when used with socks proxy. (#849)
188
+ - Fix SSL context for connections using the "wss" scheme (#869)
189
+
190
+ ## 1.0.2 (November 10th, 2023)
191
+
192
+ - Fix `float("inf")` timeouts in `Event.wait` function. (#846)
193
+
194
+ ## 1.0.1 (November 3rd, 2023)
195
+
196
+ - Fix pool timeout to account for the total time spent retrying. (#823)
197
+ - Raise a neater RuntimeError when the correct async deps are not installed. (#826)
198
+ - Add support for synchronous TLS-in-TLS streams. (#840)
199
+
200
+ ## 1.0.0 (October 6th, 2023)
201
+
202
+ From version 1.0 our async support is now optional, as the package has minimal dependencies by default.
203
+
204
+ For async support use either `pip install 'httpcore[asyncio]'` or `pip install 'httpcore[trio]'`.
205
+
206
+ The project versioning policy is now explicitly governed by SEMVER. See https://semver.org/.
207
+
208
+ - Async support becomes fully optional. (#809)
209
+ - Add support for Python 3.12. (#807)
210
+
211
+ ## 0.18.0 (September 8th, 2023)
212
+
213
+ - Add support for HTTPS proxies. (#745, #786)
214
+ - Drop Python 3.7 support. (#727)
215
+ - Handle `sni_hostname` extension with SOCKS proxy. (#774)
216
+ - Handle HTTP/1.1 half-closed connections gracefully. (#641)
217
+ - Change the type of `Extensions` from `Mapping[Str, Any]` to `MutableMapping[Str, Any]`. (#762)
218
+
219
+ ## 0.17.3 (July 5th, 2023)
220
+
221
+ - Support async cancellations, ensuring that the connection pool is left in a clean state when cancellations occur. (#726)
222
+ - The networking backend interface has [been added to the public API](https://www.encode.io/httpcore/network-backends). Some classes which were previously private implementation detail are now part of the top-level public API. (#699)
223
+ - Graceful handling of HTTP/2 GoAway frames, with requests being transparently retried on a new connection. (#730)
224
+ - Add exceptions when a synchronous `trace callback` is passed to an asynchronous request or an asynchronous `trace callback` is passed to a synchronous request. (#717)
225
+ - Drop Python 3.7 support. (#727)
226
+
227
+ ## 0.17.2 (May 23th, 2023)
228
+
229
+ - Add `socket_options` argument to `ConnectionPool` and `HTTProxy` classes. (#668)
230
+ - Improve logging with per-module logger names. (#690)
231
+ - Add `sni_hostname` request extension. (#696)
232
+ - Resolve race condition during import of `anyio` package. (#692)
233
+ - Enable TCP_NODELAY for all synchronous sockets. (#651)
234
+
235
+ ## 0.17.1 (May 17th, 2023)
236
+
237
+ - If 'retries' is set, then allow retries if an SSL handshake error occurs. (#669)
238
+ - Improve correctness of tracebacks on network exceptions, by raising properly chained exceptions. (#678)
239
+ - Prevent connection-hanging behaviour when HTTP/2 connections are closed by a server-sent 'GoAway' frame. (#679)
240
+ - Fix edge-case exception when removing requests from the connection pool. (#680)
241
+ - Fix pool timeout edge-case. (#688)
242
+
243
+ ## 0.17.0 (March 16th, 2023)
244
+
245
+ - Add DEBUG level logging. (#648)
246
+ - Respect HTTP/2 max concurrent streams when settings updates are sent by server. (#652)
247
+ - Increase the allowable HTTP header size to 100kB. (#647)
248
+ - Add `retries` option to SOCKS proxy classes. (#643)
249
+
250
+ ## 0.16.3 (December 20th, 2022)
251
+
252
+ - Allow `ws` and `wss` schemes. Allows us to properly support websocket upgrade connections. (#625)
253
+ - Forwarding HTTP proxies use a connection-per-remote-host. Required by some proxy implementations. (#637)
254
+ - Don't raise `RuntimeError` when closing a connection pool with active connections. Removes some error cases when cancellations are used. (#631)
255
+ - Lazy import `anyio`, so that it's no longer a hard dependancy, and isn't imported if unused. (#639)
256
+
257
+ ## 0.16.2 (November 25th, 2022)
258
+
259
+ - Revert 'Fix async cancellation behaviour', which introduced race conditions. (#627)
260
+ - Raise `RuntimeError` if attempting to us UNIX domain sockets on Windows. (#619)
261
+
262
+ ## 0.16.1 (November 17th, 2022)
263
+
264
+ - Fix HTTP/1.1 interim informational responses, such as "100 Continue". (#605)
265
+
266
+ ## 0.16.0 (October 11th, 2022)
267
+
268
+ - Support HTTP/1.1 informational responses. (#581)
269
+ - Fix async cancellation behaviour. (#580)
270
+ - Support `h11` 0.14. (#579)
271
+
272
+ ## 0.15.0 (May 17th, 2022)
273
+
274
+ - Drop Python 3.6 support (#535)
275
+ - Ensure HTTP proxy CONNECT requests include `timeout` configuration. (#506)
276
+ - Switch to explicit `typing.Optional` for type hints. (#513)
277
+ - For `trio` map OSError exceptions to `ConnectError`. (#543)
278
+
279
+ ## 0.14.7 (February 4th, 2022)
280
+
281
+ - Requests which raise a PoolTimeout need to be removed from the pool queue. (#502)
282
+ - Fix AttributeError that happened when Socks5Connection were terminated. (#501)
283
+
284
+ ## 0.14.6 (February 1st, 2022)
285
+
286
+ - Fix SOCKS support for `http://` URLs. (#492)
287
+ - Resolve race condition around exceptions during streaming a response. (#491)
288
+
289
+ ## 0.14.5 (January 18th, 2022)
290
+
291
+ - SOCKS proxy support. (#478)
292
+ - Add proxy_auth argument to HTTPProxy. (#481)
293
+ - Improve error message on 'RemoteProtocolError' exception when server disconnects without sending a response. (#479)
294
+
295
+ ## 0.14.4 (January 5th, 2022)
296
+
297
+ - Support HTTP/2 on HTTPS tunnelling proxies. (#468)
298
+ - Fix proxy headers missing on HTTP forwarding. (#456)
299
+ - Only instantiate SSL context if required. (#457)
300
+ - More robust HTTP/2 handling. (#253, #439, #440, #441)
301
+
302
+ ## 0.14.3 (November 17th, 2021)
303
+
304
+ - Fix race condition when removing closed connections from the pool. (#437)
305
+
306
+ ## 0.14.2 (November 16th, 2021)
307
+
308
+ - Failed connections no longer remain in the pool. (Pull #433)
309
+
310
+ ## 0.14.1 (November 12th, 2021)
311
+
312
+ - `max_connections` becomes optional. (Pull #429)
313
+ - `certifi` is now included in the install dependancies. (Pull #428)
314
+ - `h2` is now strictly optional. (Pull #428)
315
+
316
+ ## 0.14.0 (November 11th, 2021)
317
+
318
+ The 0.14 release is a complete reworking of `httpcore`, comprehensively addressing some underlying issues in the connection pooling, as well as substantially redesigning the API to be more user friendly.
319
+
320
+ Some of the lower-level API design also makes the components more easily testable in isolation, and the package now has 100% test coverage.
321
+
322
+ See [discussion #419](https://github.com/encode/httpcore/discussions/419) for a little more background.
323
+
324
+ There's some other neat bits in there too, such as the "trace" extension, which gives a hook into inspecting the internal events that occur during the request/response cycle. This extension is needed for the HTTPX cli, in order to...
325
+
326
+ * Log the point at which the connection is established, and the IP/port on which it is made.
327
+ * Determine if the outgoing request should log as HTTP/1.1 or HTTP/2, rather than having to assume it's HTTP/2 if the --http2 flag was passed. (Which may not actually be true.)
328
+ * Log SSL version info / certificate info.
329
+
330
+ Note that `curio` support is not currently available in 0.14.0. If you're using `httpcore` with `curio` please get in touch, so we can assess if we ought to prioritize it as a feature or not.
331
+
332
+ ## 0.13.7 (September 13th, 2021)
333
+
334
+ - Fix broken error messaging when URL scheme is missing, or a non HTTP(S) scheme is used. (Pull #403)
335
+
336
+ ## 0.13.6 (June 15th, 2021)
337
+
338
+ ### Fixed
339
+
340
+ - Close sockets when read or write timeouts occur. (Pull #365)
341
+
342
+ ## 0.13.5 (June 14th, 2021)
343
+
344
+ ### Fixed
345
+
346
+ - Resolved niggles with AnyIO EOF behaviours. (Pull #358, #362)
347
+
348
+ ## 0.13.4 (June 9th, 2021)
349
+
350
+ ### Added
351
+
352
+ - Improved error messaging when URL scheme is missing, or a non HTTP(S) scheme is used. (Pull #354)
353
+
354
+ ### Fixed
355
+
356
+ - Switched to `anyio` as the default backend implementation when running with `asyncio`. Resolves some awkward [TLS timeout issues](https://github.com/encode/httpx/discussions/1511).
357
+
358
+ ## 0.13.3 (May 6th, 2021)
359
+
360
+ ### Added
361
+
362
+ - Support HTTP/2 prior knowledge, using `httpcore.SyncConnectionPool(http1=False)`. (Pull #333)
363
+
364
+ ### Fixed
365
+
366
+ - Handle cases where environment does not provide `select.poll` support. (Pull #331)
367
+
368
+ ## 0.13.2 (April 29th, 2021)
369
+
370
+ ### Added
371
+
372
+ - Improve error message for specific case of `RemoteProtocolError` where server disconnects without sending a response. (Pull #313)
373
+
374
+ ## 0.13.1 (April 28th, 2021)
375
+
376
+ ### Fixed
377
+
378
+ - More resiliant testing for closed connections. (Pull #311)
379
+ - Don't raise exceptions on ungraceful connection closes. (Pull #310)
380
+
381
+ ## 0.13.0 (April 21st, 2021)
382
+
383
+ The 0.13 release updates the core API in order to match the HTTPX Transport API,
384
+ introduced in HTTPX 0.18 onwards.
385
+
386
+ An example of making requests with the new interface is:
387
+
388
+ ```python
389
+ with httpcore.SyncConnectionPool() as http:
390
+ status_code, headers, stream, extensions = http.handle_request(
391
+ method=b'GET',
392
+ url=(b'https', b'example.org', 443, b'/'),
393
+ headers=[(b'host', b'example.org'), (b'user-agent', b'httpcore')]
394
+ stream=httpcore.ByteStream(b''),
395
+ extensions={}
396
+ )
397
+ body = stream.read()
398
+ print(status_code, body)
399
+ ```
400
+
401
+ ### Changed
402
+
403
+ - The `.request()` method is now `handle_request()`. (Pull #296)
404
+ - The `.arequest()` method is now `.handle_async_request()`. (Pull #296)
405
+ - The `headers` argument is no longer optional. (Pull #296)
406
+ - The `stream` argument is no longer optional. (Pull #296)
407
+ - The `ext` argument is now named `extensions`, and is no longer optional. (Pull #296)
408
+ - The `"reason"` extension keyword is now named `"reason_phrase"`. (Pull #296)
409
+ - The `"reason_phrase"` and `"http_version"` extensions now use byte strings for their values. (Pull #296)
410
+ - The `httpcore.PlainByteStream()` class becomes `httpcore.ByteStream()`. (Pull #296)
411
+
412
+ ### Added
413
+
414
+ - Streams now support a `.read()` interface. (Pull #296)
415
+
416
+ ### Fixed
417
+
418
+ - Task cancellation no longer leaks connections from the connection pool. (Pull #305)
419
+
420
+ ## 0.12.3 (December 7th, 2020)
421
+
422
+ ### Fixed
423
+
424
+ - Abort SSL connections on close rather than waiting for remote EOF when using `asyncio`. (Pull #167)
425
+ - Fix exception raised in case of connect timeouts when using the `anyio` backend. (Pull #236)
426
+ - Fix `Host` header precedence for `:authority` in HTTP/2. (Pull #241, #243)
427
+ - Handle extra edge case when detecting for socket readability when using `asyncio`. (Pull #242, #244)
428
+ - Fix `asyncio` SSL warning when using proxy tunneling. (Pull #249)
429
+
430
+ ## 0.12.2 (November 20th, 2020)
431
+
432
+ ### Fixed
433
+
434
+ - Properly wrap connect errors on the asyncio backend. (Pull #235)
435
+ - Fix `ImportError` occurring on Python 3.9 when using the HTTP/1.1 sync client in a multithreaded context. (Pull #237)
436
+
437
+ ## 0.12.1 (November 7th, 2020)
438
+
439
+ ### Added
440
+
441
+ - Add connect retries. (Pull #221)
442
+
443
+ ### Fixed
444
+
445
+ - Tweak detection of dropped connections, resolving an issue with open files limits on Linux. (Pull #185)
446
+ - Avoid leaking connections when establishing an HTTP tunnel to a proxy has failed. (Pull #223)
447
+ - Properly wrap OS errors when using `trio`. (Pull #225)
448
+
449
+ ## 0.12.0 (October 6th, 2020)
450
+
451
+ ### Changed
452
+
453
+ - HTTP header casing is now preserved, rather than always sent in lowercase. (#216 and python-hyper/h11#104)
454
+
455
+ ### Added
456
+
457
+ - Add Python 3.9 to officially supported versions.
458
+
459
+ ### Fixed
460
+
461
+ - Gracefully handle a stdlib asyncio bug when a connection is closed while it is in a paused-for-reading state. (#201)
462
+
463
+ ## 0.11.1 (September 28nd, 2020)
464
+
465
+ ### Fixed
466
+
467
+ - Add await to async semaphore release() coroutine (#197)
468
+ - Drop incorrect curio classifier (#192)
469
+
470
+ ## 0.11.0 (September 22nd, 2020)
471
+
472
+ The Transport API with 0.11.0 has a couple of significant changes.
473
+
474
+ Firstly we've moved changed the request interface in order to allow extensions, which will later enable us to support features
475
+ such as trailing headers, HTTP/2 server push, and CONNECT/Upgrade connections.
476
+
477
+ The interface changes from:
478
+
479
+ ```python
480
+ def request(method, url, headers, stream, timeout):
481
+ return (http_version, status_code, reason, headers, stream)
482
+ ```
483
+
484
+ To instead including an optional dictionary of extensions on the request and response:
485
+
486
+ ```python
487
+ def request(method, url, headers, stream, ext):
488
+ return (status_code, headers, stream, ext)
489
+ ```
490
+
491
+ Having an open-ended extensions point will allow us to add later support for various optional features, that wouldn't otherwise be supported without these API changes.
492
+
493
+ In particular:
494
+
495
+ * Trailing headers support.
496
+ * HTTP/2 Server Push
497
+ * sendfile.
498
+ * Exposing raw connection on CONNECT, Upgrade, HTTP/2 bi-di streaming.
499
+ * Exposing debug information out of the API, including template name, template context.
500
+
501
+ Currently extensions are limited to:
502
+
503
+ * request: `timeout` - Optional. Timeout dictionary.
504
+ * response: `http_version` - Optional. Include the HTTP version used on the response.
505
+ * response: `reason` - Optional. Include the reason phrase used on the response. Only valid with HTTP/1.*.
506
+
507
+ See https://github.com/encode/httpx/issues/1274#issuecomment-694884553 for the history behind this.
508
+
509
+ Secondly, the async version of `request` is now namespaced as `arequest`.
510
+
511
+ This allows concrete transports to support both sync and async implementations on the same class.
512
+
513
+ ### Added
514
+
515
+ - Add curio support. (Pull #168)
516
+ - Add anyio support, with `backend="anyio"`. (Pull #169)
517
+
518
+ ### Changed
519
+
520
+ - Update the Transport API to use 'ext' for optional extensions. (Pull #190)
521
+ - Update the Transport API to use `.request` and `.arequest` so implementations can support both sync and async. (Pull #189)
522
+
523
+ ## 0.10.2 (August 20th, 2020)
524
+
525
+ ### Added
526
+
527
+ - Added Unix Domain Socket support. (Pull #139)
528
+
529
+ ### Fixed
530
+
531
+ - Always include the port on proxy CONNECT requests. (Pull #154)
532
+ - Fix `max_keepalive_connections` configuration. (Pull #153)
533
+ - Fixes behaviour in HTTP/1.1 where server disconnects can be used to signal the end of the response body. (Pull #164)
534
+
535
+ ## 0.10.1 (August 7th, 2020)
536
+
537
+ - Include `max_keepalive_connections` on `AsyncHTTPProxy`/`SyncHTTPProxy` classes.
538
+
539
+ ## 0.10.0 (August 7th, 2020)
540
+
541
+ The most notable change in the 0.10.0 release is that HTTP/2 support is now fully optional.
542
+
543
+ Use either `pip install httpcore` for HTTP/1.1 support only, or `pip install httpcore[http2]` for HTTP/1.1 and HTTP/2 support.
544
+
545
+ ### Added
546
+
547
+ - HTTP/2 support becomes optional. (Pull #121, #130)
548
+ - Add `local_address=...` support. (Pull #100, #134)
549
+ - Add `PlainByteStream`, `IteratorByteStream`, `AsyncIteratorByteStream`. The `AsyncByteSteam` and `SyncByteStream` classes are now pure interface classes. (#133)
550
+ - Add `LocalProtocolError`, `RemoteProtocolError` exceptions. (Pull #129)
551
+ - Add `UnsupportedProtocol` exception. (Pull #128)
552
+ - Add `.get_connection_info()` method. (Pull #102, #137)
553
+ - Add better TRACE logs. (Pull #101)
554
+
555
+ ### Changed
556
+
557
+ - `max_keepalive` is deprecated in favour of `max_keepalive_connections`. (Pull #140)
558
+
559
+ ### Fixed
560
+
561
+ - Improve handling of server disconnects. (Pull #112)
562
+
563
+ ## 0.9.1 (May 27th, 2020)
564
+
565
+ ### Fixed
566
+
567
+ - Proper host resolution for sync case, including IPv6 support. (Pull #97)
568
+ - Close outstanding connections when connection pool is closed. (Pull #98)
569
+
570
+ ## 0.9.0 (May 21th, 2020)
571
+
572
+ ### Changed
573
+
574
+ - URL port becomes an `Optional[int]` instead of `int`. (Pull #92)
575
+
576
+ ### Fixed
577
+
578
+ - Honor HTTP/2 max concurrent streams settings. (Pull #89, #90)
579
+ - Remove incorrect debug log. (Pull #83)
580
+
581
+ ## 0.8.4 (May 11th, 2020)
582
+
583
+ ### Added
584
+
585
+ - Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables
586
+ and TRACE level logging. (Pull #79)
587
+
588
+ ### Fixed
589
+
590
+ - Reuse of connections on HTTP/2 in close concurrency situations. (Pull #81)
591
+
592
+ ## 0.8.3 (May 6rd, 2020)
593
+
594
+ ### Fixed
595
+
596
+ - Include `Host` and `Accept` headers on proxy "CONNECT" requests.
597
+ - De-duplicate any headers also contained in proxy_headers.
598
+ - HTTP/2 flag not being passed down to proxy connections.
599
+
600
+ ## 0.8.2 (May 3rd, 2020)
601
+
602
+ ### Fixed
603
+
604
+ - Fix connections using proxy forwarding requests not being added to the
605
+ connection pool properly. (Pull #70)
606
+
607
+ ## 0.8.1 (April 30th, 2020)
608
+
609
+ ### Changed
610
+
611
+ - Allow inherintance of both `httpcore.AsyncByteStream`, `httpcore.SyncByteStream` without type conflicts.
612
+
613
+ ## 0.8.0 (April 30th, 2020)
614
+
615
+ ### Fixed
616
+
617
+ - Fixed tunnel proxy support.
618
+
619
+ ### Added
620
+
621
+ - New `TimeoutException` base class.
622
+
623
+ ## 0.7.0 (March 5th, 2020)
624
+
625
+ - First integration with HTTPX.
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/RECORD ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ httpcore-1.0.9.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
2
+ httpcore-1.0.9.dist-info/METADATA,sha256=_i1P2mGZEol4d54M8n88BFxTGGP83Zh-rMdPOhjUHCE,21529
3
+ httpcore-1.0.9.dist-info/RECORD,,
4
+ httpcore-1.0.9.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ httpcore-1.0.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
6
+ httpcore-1.0.9.dist-info/licenses/LICENSE.md,sha256=_ctZFUx0y6uhahEkL3dAvqnyPW_rVUeRfYxflKgDkqU,1518
7
+ httpcore/__init__.py,sha256=9kT_kqChCCJUTHww24ZmR_ezcdbpRYWksD-gYNzkZP8,3445
8
+ httpcore/_api.py,sha256=unZmeDschBWCGCPCwkS3Wot9euK6bg_kKxLtGTxw214,3146
9
+ httpcore/_async/__init__.py,sha256=EWdl2v4thnAHzJpqjU4h2a8DUiGAvNiWrkii9pfhTf0,1221
10
+ httpcore/_async/connection.py,sha256=6OcPXqMEfc0BU38_-iHUNDd1vKSTc2UVT09XqNb_BOk,8449
11
+ httpcore/_async/connection_pool.py,sha256=DOIQ2s2ZCf9qfwxhzMprTPLqCL8OxGXiKF6qRHxvVyY,17307
12
+ httpcore/_async/http11.py,sha256=-qM9bV7PjSQF5vxs37-eUXOIFwbIjPcZbNliuX9TtBw,13880
13
+ httpcore/_async/http2.py,sha256=azX1fcmtXaIwjputFlZ4vd92J8xwjGOa9ax9QIv4394,23936
14
+ httpcore/_async/http_proxy.py,sha256=2zVkrlv-Ds-rWGaqaXlrhEJiAQFPo23BT3Gq_sWoBXU,14701
15
+ httpcore/_async/interfaces.py,sha256=jTiaWL83pgpGC9ziv90ZfwaKNMmHwmOalzaKiuTxATo,4455
16
+ httpcore/_async/socks_proxy.py,sha256=lLKgLlggPfhFlqi0ODeBkOWvt9CghBBUyqsnsU1tx6Q,13841
17
+ httpcore/_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ httpcore/_backends/anyio.py,sha256=x8PgEhXRC8bVqsdzk_YJx8Y6d9Tub06CuUSwnbmtqoY,5252
19
+ httpcore/_backends/auto.py,sha256=zO136PKZmsaTDK-HRk84eA-MUg8_2wJf4NvmK432Aio,1662
20
+ httpcore/_backends/base.py,sha256=aShgRdZnMmRhFWHetjumlM73f8Kz1YOAyCUP_4kHslA,3042
21
+ httpcore/_backends/mock.py,sha256=er9T436uSe7NLrfiLa4x6Nuqg5ivQ693CxWYCWsgbH4,4077
22
+ httpcore/_backends/sync.py,sha256=bhE4d9iK9Umxdsdsgm2EfKnXaBms2WggGYU-7jmUujU,7977
23
+ httpcore/_backends/trio.py,sha256=LHu4_Mr5MswQmmT3yE4oLgf9b_JJfeVS4BjDxeJc7Ro,5996
24
+ httpcore/_exceptions.py,sha256=looCKga3_YVYu3s-d3L9RMPRJyhsY7fiuuGxvkOD0c0,1184
25
+ httpcore/_models.py,sha256=IO2CcXcdpovRcLTdGFGB6RyBZdEm2h_TOmoCc4rEKho,17623
26
+ httpcore/_ssl.py,sha256=srqmSNU4iOUvWF-SrJvb8G_YEbHFELOXQOwdDIBTS9c,187
27
+ httpcore/_sync/__init__.py,sha256=JBDIgXt5la1LCJ1sLQeKhjKFpLnpNr8Svs6z2ni3fgg,1141
28
+ httpcore/_sync/connection.py,sha256=9exGOb3PB-Mp2T1-sckSeL2t-tJ_9-NXomV8ihmWCgU,8238
29
+ httpcore/_sync/connection_pool.py,sha256=a-T8LTsUxc7r0Ww1atfHSDoWPjQ0fA8Ul7S3-F0Mj70,16955
30
+ httpcore/_sync/http11.py,sha256=IFobD1Md5JFlJGKWnh1_Q3epikUryI8qo09v8MiJIEA,13476
31
+ httpcore/_sync/http2.py,sha256=AxU4yhcq68Bn5vqdJYtiXKYUj7nvhYbxz3v4rT4xnvA,23400
32
+ httpcore/_sync/http_proxy.py,sha256=_al_6crKuEZu2wyvu493RZImJdBJnj5oGKNjLOJL2Zo,14463
33
+ httpcore/_sync/interfaces.py,sha256=snXON42vUDHO5JBJvo8D4VWk2Wat44z2OXXHDrjbl94,4344
34
+ httpcore/_sync/socks_proxy.py,sha256=zegZW9Snqj2_992DFJa8_CppOVBkVL4AgwduRkStakQ,13614
35
+ httpcore/_synchronization.py,sha256=zSi13mAColBnknjZBknUC6hKNDQT4C6ijnezZ-r0T2s,9434
36
+ httpcore/_trace.py,sha256=ck6ZoIzYTkdNAIfq5MGeKqBXDtqjOX-qfYwmZFbrGco,3952
37
+ httpcore/_utils.py,sha256=_RLgXYOAYC350ikALV59GZ68IJrdocRZxPs9PjmzdFY,1537
38
+ httpcore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/REQUESTED ADDED
File without changes
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/WHEEL ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.27.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
.venv/lib/python3.11/site-packages/httpcore-1.0.9.dist-info/licenses/LICENSE.md ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright © 2020, [Encode OSS Ltd](https://www.encode.io/).
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the copyright holder nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (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.
.venv/lib/python3.11/site-packages/httpcore/__init__.py ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ._api import request, stream
2
+ from ._async import (
3
+ AsyncConnectionInterface,
4
+ AsyncConnectionPool,
5
+ AsyncHTTP2Connection,
6
+ AsyncHTTP11Connection,
7
+ AsyncHTTPConnection,
8
+ AsyncHTTPProxy,
9
+ AsyncSOCKSProxy,
10
+ )
11
+ from ._backends.base import (
12
+ SOCKET_OPTION,
13
+ AsyncNetworkBackend,
14
+ AsyncNetworkStream,
15
+ NetworkBackend,
16
+ NetworkStream,
17
+ )
18
+ from ._backends.mock import AsyncMockBackend, AsyncMockStream, MockBackend, MockStream
19
+ from ._backends.sync import SyncBackend
20
+ from ._exceptions import (
21
+ ConnectError,
22
+ ConnectionNotAvailable,
23
+ ConnectTimeout,
24
+ LocalProtocolError,
25
+ NetworkError,
26
+ PoolTimeout,
27
+ ProtocolError,
28
+ ProxyError,
29
+ ReadError,
30
+ ReadTimeout,
31
+ RemoteProtocolError,
32
+ TimeoutException,
33
+ UnsupportedProtocol,
34
+ WriteError,
35
+ WriteTimeout,
36
+ )
37
+ from ._models import URL, Origin, Proxy, Request, Response
38
+ from ._ssl import default_ssl_context
39
+ from ._sync import (
40
+ ConnectionInterface,
41
+ ConnectionPool,
42
+ HTTP2Connection,
43
+ HTTP11Connection,
44
+ HTTPConnection,
45
+ HTTPProxy,
46
+ SOCKSProxy,
47
+ )
48
+
49
+ # The 'httpcore.AnyIOBackend' class is conditional on 'anyio' being installed.
50
+ try:
51
+ from ._backends.anyio import AnyIOBackend
52
+ except ImportError: # pragma: nocover
53
+
54
+ class AnyIOBackend: # type: ignore
55
+ def __init__(self, *args, **kwargs): # type: ignore
56
+ msg = (
57
+ "Attempted to use 'httpcore.AnyIOBackend' but 'anyio' is not installed."
58
+ )
59
+ raise RuntimeError(msg)
60
+
61
+
62
+ # The 'httpcore.TrioBackend' class is conditional on 'trio' being installed.
63
+ try:
64
+ from ._backends.trio import TrioBackend
65
+ except ImportError: # pragma: nocover
66
+
67
+ class TrioBackend: # type: ignore
68
+ def __init__(self, *args, **kwargs): # type: ignore
69
+ msg = "Attempted to use 'httpcore.TrioBackend' but 'trio' is not installed."
70
+ raise RuntimeError(msg)
71
+
72
+
73
+ __all__ = [
74
+ # top-level requests
75
+ "request",
76
+ "stream",
77
+ # models
78
+ "Origin",
79
+ "URL",
80
+ "Request",
81
+ "Response",
82
+ "Proxy",
83
+ # async
84
+ "AsyncHTTPConnection",
85
+ "AsyncConnectionPool",
86
+ "AsyncHTTPProxy",
87
+ "AsyncHTTP11Connection",
88
+ "AsyncHTTP2Connection",
89
+ "AsyncConnectionInterface",
90
+ "AsyncSOCKSProxy",
91
+ # sync
92
+ "HTTPConnection",
93
+ "ConnectionPool",
94
+ "HTTPProxy",
95
+ "HTTP11Connection",
96
+ "HTTP2Connection",
97
+ "ConnectionInterface",
98
+ "SOCKSProxy",
99
+ # network backends, implementations
100
+ "SyncBackend",
101
+ "AnyIOBackend",
102
+ "TrioBackend",
103
+ # network backends, mock implementations
104
+ "AsyncMockBackend",
105
+ "AsyncMockStream",
106
+ "MockBackend",
107
+ "MockStream",
108
+ # network backends, interface
109
+ "AsyncNetworkStream",
110
+ "AsyncNetworkBackend",
111
+ "NetworkStream",
112
+ "NetworkBackend",
113
+ # util
114
+ "default_ssl_context",
115
+ "SOCKET_OPTION",
116
+ # exceptions
117
+ "ConnectionNotAvailable",
118
+ "ProxyError",
119
+ "ProtocolError",
120
+ "LocalProtocolError",
121
+ "RemoteProtocolError",
122
+ "UnsupportedProtocol",
123
+ "TimeoutException",
124
+ "PoolTimeout",
125
+ "ConnectTimeout",
126
+ "ReadTimeout",
127
+ "WriteTimeout",
128
+ "NetworkError",
129
+ "ConnectError",
130
+ "ReadError",
131
+ "WriteError",
132
+ ]
133
+
134
+ __version__ = "1.0.9"
135
+
136
+
137
+ __locals = locals()
138
+ for __name in __all__:
139
+ # Exclude SOCKET_OPTION, it causes AttributeError on Python 3.14
140
+ if not __name.startswith(("__", "SOCKET_OPTION")):
141
+ setattr(__locals[__name], "__module__", "httpcore") # noqa
.venv/lib/python3.11/site-packages/httpcore/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (3.95 kB). View file
 
.venv/lib/python3.11/site-packages/httpcore/__pycache__/_api.cpython-311.pyc ADDED
Binary file (4.11 kB). View file
 
.venv/lib/python3.11/site-packages/httpcore/__pycache__/_exceptions.cpython-311.pyc ADDED
Binary file (3.83 kB). View file
 
.venv/lib/python3.11/site-packages/httpcore/__pycache__/_models.cpython-311.pyc ADDED
Binary file (24.6 kB). View file
 
.venv/lib/python3.11/site-packages/httpcore/__pycache__/_ssl.cpython-311.pyc ADDED
Binary file (658 Bytes). View file