koichi12 commited on
Commit
581a426
·
verified ·
1 Parent(s): 8dc9b8f

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc +0 -0
  2. tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/_identifier.py +6 -0
  3. tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/async_utils.py +84 -0
  4. tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/constants.py +20 -0
  5. tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/ext.py +869 -0
  6. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/METADATA +35 -0
  7. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/RECORD +17 -0
  8. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/WHEEL +5 -0
  9. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/METADATA +35 -0
  10. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/RECORD +113 -0
  11. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/WHEEL +5 -0
  12. tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/top_level.txt +1 -0
  13. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip-24.3.1.dist-info/RECORD +853 -0
  14. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip-24.3.1.dist-info/WHEEL +5 -0
  15. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__init__.py +18 -0
  16. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc +0 -0
  17. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc +0 -0
  18. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/build_env.py +319 -0
  19. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py +21 -0
  20. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc +0 -0
  21. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc +0 -0
  22. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc +0 -0
  23. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/base.py +53 -0
  24. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py +29 -0
  25. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py +158 -0
  26. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py +42 -0
  27. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/index/collector.py +494 -0
  28. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc +0 -0
  29. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc +0 -0
  30. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc +0 -0
  31. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc +0 -0
  32. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc +0 -0
  33. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc +0 -0
  34. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py +138 -0
  35. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py +37 -0
  36. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc +0 -0
  37. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc +0 -0
  38. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc +0 -0
  39. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc +0 -0
  40. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc +0 -0
  41. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/constructors.py +560 -0
  42. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py +82 -0
  43. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py +633 -0
  44. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py +0 -0
  45. tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  46. tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/autograd.cpython-311.pyc +0 -0
  47. tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/lazy.cpython-311.pyc +0 -0
  48. tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/structured.cpython-311.pyc +0 -0
  49. tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/translate.cpython-311.pyc +0 -0
  50. tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/functionalization.py +199 -0
tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/__pycache__/visitor.cpython-311.pyc ADDED
Binary file (5.73 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/_identifier.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ # generated by scripts/generate_identifier_pattern.py
4
+ pattern = re.compile(
5
+ r"[\w·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఄా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳷-᳹᷀-᷹᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𐴤-𐽆𐴧-𐽐𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑄴𑅅𑅆𑅳𑆀-𑆂𑆳-𑇀𑇉-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌻𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑑞𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑠬-𑠺𑨁-𑨊𑨳-𑨹𑨻-𑨾𑩇𑩑-𑩛𑪊-𑪙𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𑴱-𑴶𑴺𑴼𑴽𑴿-𑵅𑵇𑶊-𑶎𑶐𑶑𑶓-𑶗𑻳-𑻶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯]+" # noqa: B950
6
+ )
tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/async_utils.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import inspect
2
+ import typing as t
3
+ from functools import WRAPPER_ASSIGNMENTS
4
+ from functools import wraps
5
+
6
+ from .utils import _PassArg
7
+ from .utils import pass_eval_context
8
+
9
+ V = t.TypeVar("V")
10
+
11
+
12
+ def async_variant(normal_func): # type: ignore
13
+ def decorator(async_func): # type: ignore
14
+ pass_arg = _PassArg.from_obj(normal_func)
15
+ need_eval_context = pass_arg is None
16
+
17
+ if pass_arg is _PassArg.environment:
18
+
19
+ def is_async(args: t.Any) -> bool:
20
+ return t.cast(bool, args[0].is_async)
21
+
22
+ else:
23
+
24
+ def is_async(args: t.Any) -> bool:
25
+ return t.cast(bool, args[0].environment.is_async)
26
+
27
+ # Take the doc and annotations from the sync function, but the
28
+ # name from the async function. Pallets-Sphinx-Themes
29
+ # build_function_directive expects __wrapped__ to point to the
30
+ # sync function.
31
+ async_func_attrs = ("__module__", "__name__", "__qualname__")
32
+ normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs))
33
+
34
+ @wraps(normal_func, assigned=normal_func_attrs)
35
+ @wraps(async_func, assigned=async_func_attrs, updated=())
36
+ def wrapper(*args, **kwargs): # type: ignore
37
+ b = is_async(args)
38
+
39
+ if need_eval_context:
40
+ args = args[1:]
41
+
42
+ if b:
43
+ return async_func(*args, **kwargs)
44
+
45
+ return normal_func(*args, **kwargs)
46
+
47
+ if need_eval_context:
48
+ wrapper = pass_eval_context(wrapper)
49
+
50
+ wrapper.jinja_async_variant = True
51
+ return wrapper
52
+
53
+ return decorator
54
+
55
+
56
+ _common_primitives = {int, float, bool, str, list, dict, tuple, type(None)}
57
+
58
+
59
+ async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V":
60
+ # Avoid a costly call to isawaitable
61
+ if type(value) in _common_primitives:
62
+ return t.cast("V", value)
63
+
64
+ if inspect.isawaitable(value):
65
+ return await t.cast("t.Awaitable[V]", value)
66
+
67
+ return t.cast("V", value)
68
+
69
+
70
+ async def auto_aiter(
71
+ iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]",
72
+ ) -> "t.AsyncIterator[V]":
73
+ if hasattr(iterable, "__aiter__"):
74
+ async for item in t.cast("t.AsyncIterable[V]", iterable):
75
+ yield item
76
+ else:
77
+ for item in iterable:
78
+ yield item
79
+
80
+
81
+ async def auto_to_list(
82
+ value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]",
83
+ ) -> t.List["V"]:
84
+ return [x async for x in auto_aiter(value)]
tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/constants.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #: list of lorem ipsum words used by the lipsum() helper function
2
+ LOREM_IPSUM_WORDS = """\
3
+ a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at
4
+ auctor augue bibendum blandit class commodo condimentum congue consectetuer
5
+ consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus
6
+ diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend
7
+ elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames
8
+ faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac
9
+ hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum
10
+ justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem
11
+ luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie
12
+ mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non
13
+ nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque
14
+ penatibus per pharetra phasellus placerat platea porta porttitor posuere
15
+ potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus
16
+ ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit
17
+ sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor
18
+ tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices
19
+ ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus
20
+ viverra volutpat vulputate"""
tuning-competition-baseline/.venv/lib/python3.11/site-packages/jinja2/ext.py ADDED
@@ -0,0 +1,869 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Extension API for adding custom tags and behavior."""
2
+ import pprint
3
+ import re
4
+ import typing as t
5
+
6
+ from markupsafe import Markup
7
+
8
+ from . import defaults
9
+ from . import nodes
10
+ from .environment import Environment
11
+ from .exceptions import TemplateAssertionError
12
+ from .exceptions import TemplateSyntaxError
13
+ from .runtime import concat # type: ignore
14
+ from .runtime import Context
15
+ from .runtime import Undefined
16
+ from .utils import import_string
17
+ from .utils import pass_context
18
+
19
+ if t.TYPE_CHECKING:
20
+ import typing_extensions as te
21
+ from .lexer import Token
22
+ from .lexer import TokenStream
23
+ from .parser import Parser
24
+
25
+ class _TranslationsBasic(te.Protocol):
26
+ def gettext(self, message: str) -> str:
27
+ ...
28
+
29
+ def ngettext(self, singular: str, plural: str, n: int) -> str:
30
+ pass
31
+
32
+ class _TranslationsContext(_TranslationsBasic):
33
+ def pgettext(self, context: str, message: str) -> str:
34
+ ...
35
+
36
+ def npgettext(self, context: str, singular: str, plural: str, n: int) -> str:
37
+ ...
38
+
39
+ _SupportedTranslations = t.Union[_TranslationsBasic, _TranslationsContext]
40
+
41
+
42
+ # I18N functions available in Jinja templates. If the I18N library
43
+ # provides ugettext, it will be assigned to gettext.
44
+ GETTEXT_FUNCTIONS: t.Tuple[str, ...] = (
45
+ "_",
46
+ "gettext",
47
+ "ngettext",
48
+ "pgettext",
49
+ "npgettext",
50
+ )
51
+ _ws_re = re.compile(r"\s*\n\s*")
52
+
53
+
54
+ class Extension:
55
+ """Extensions can be used to add extra functionality to the Jinja template
56
+ system at the parser level. Custom extensions are bound to an environment
57
+ but may not store environment specific data on `self`. The reason for
58
+ this is that an extension can be bound to another environment (for
59
+ overlays) by creating a copy and reassigning the `environment` attribute.
60
+
61
+ As extensions are created by the environment they cannot accept any
62
+ arguments for configuration. One may want to work around that by using
63
+ a factory function, but that is not possible as extensions are identified
64
+ by their import name. The correct way to configure the extension is
65
+ storing the configuration values on the environment. Because this way the
66
+ environment ends up acting as central configuration storage the
67
+ attributes may clash which is why extensions have to ensure that the names
68
+ they choose for configuration are not too generic. ``prefix`` for example
69
+ is a terrible name, ``fragment_cache_prefix`` on the other hand is a good
70
+ name as includes the name of the extension (fragment cache).
71
+ """
72
+
73
+ identifier: t.ClassVar[str]
74
+
75
+ def __init_subclass__(cls) -> None:
76
+ cls.identifier = f"{cls.__module__}.{cls.__name__}"
77
+
78
+ #: if this extension parses this is the list of tags it's listening to.
79
+ tags: t.Set[str] = set()
80
+
81
+ #: the priority of that extension. This is especially useful for
82
+ #: extensions that preprocess values. A lower value means higher
83
+ #: priority.
84
+ #:
85
+ #: .. versionadded:: 2.4
86
+ priority = 100
87
+
88
+ def __init__(self, environment: Environment) -> None:
89
+ self.environment = environment
90
+
91
+ def bind(self, environment: Environment) -> "Extension":
92
+ """Create a copy of this extension bound to another environment."""
93
+ rv = object.__new__(self.__class__)
94
+ rv.__dict__.update(self.__dict__)
95
+ rv.environment = environment
96
+ return rv
97
+
98
+ def preprocess(
99
+ self, source: str, name: t.Optional[str], filename: t.Optional[str] = None
100
+ ) -> str:
101
+ """This method is called before the actual lexing and can be used to
102
+ preprocess the source. The `filename` is optional. The return value
103
+ must be the preprocessed source.
104
+ """
105
+ return source
106
+
107
+ def filter_stream(
108
+ self, stream: "TokenStream"
109
+ ) -> t.Union["TokenStream", t.Iterable["Token"]]:
110
+ """It's passed a :class:`~jinja2.lexer.TokenStream` that can be used
111
+ to filter tokens returned. This method has to return an iterable of
112
+ :class:`~jinja2.lexer.Token`\\s, but it doesn't have to return a
113
+ :class:`~jinja2.lexer.TokenStream`.
114
+ """
115
+ return stream
116
+
117
+ def parse(self, parser: "Parser") -> t.Union[nodes.Node, t.List[nodes.Node]]:
118
+ """If any of the :attr:`tags` matched this method is called with the
119
+ parser as first argument. The token the parser stream is pointing at
120
+ is the name token that matched. This method has to return one or a
121
+ list of multiple nodes.
122
+ """
123
+ raise NotImplementedError()
124
+
125
+ def attr(
126
+ self, name: str, lineno: t.Optional[int] = None
127
+ ) -> nodes.ExtensionAttribute:
128
+ """Return an attribute node for the current extension. This is useful
129
+ to pass constants on extensions to generated template code.
130
+
131
+ ::
132
+
133
+ self.attr('_my_attribute', lineno=lineno)
134
+ """
135
+ return nodes.ExtensionAttribute(self.identifier, name, lineno=lineno)
136
+
137
+ def call_method(
138
+ self,
139
+ name: str,
140
+ args: t.Optional[t.List[nodes.Expr]] = None,
141
+ kwargs: t.Optional[t.List[nodes.Keyword]] = None,
142
+ dyn_args: t.Optional[nodes.Expr] = None,
143
+ dyn_kwargs: t.Optional[nodes.Expr] = None,
144
+ lineno: t.Optional[int] = None,
145
+ ) -> nodes.Call:
146
+ """Call a method of the extension. This is a shortcut for
147
+ :meth:`attr` + :class:`jinja2.nodes.Call`.
148
+ """
149
+ if args is None:
150
+ args = []
151
+ if kwargs is None:
152
+ kwargs = []
153
+ return nodes.Call(
154
+ self.attr(name, lineno=lineno),
155
+ args,
156
+ kwargs,
157
+ dyn_args,
158
+ dyn_kwargs,
159
+ lineno=lineno,
160
+ )
161
+
162
+
163
+ @pass_context
164
+ def _gettext_alias(
165
+ __context: Context, *args: t.Any, **kwargs: t.Any
166
+ ) -> t.Union[t.Any, Undefined]:
167
+ return __context.call(__context.resolve("gettext"), *args, **kwargs)
168
+
169
+
170
+ def _make_new_gettext(func: t.Callable[[str], str]) -> t.Callable[..., str]:
171
+ @pass_context
172
+ def gettext(__context: Context, __string: str, **variables: t.Any) -> str:
173
+ rv = __context.call(func, __string)
174
+ if __context.eval_ctx.autoescape:
175
+ rv = Markup(rv)
176
+ # Always treat as a format string, even if there are no
177
+ # variables. This makes translation strings more consistent
178
+ # and predictable. This requires escaping
179
+ return rv % variables # type: ignore
180
+
181
+ return gettext
182
+
183
+
184
+ def _make_new_ngettext(func: t.Callable[[str, str, int], str]) -> t.Callable[..., str]:
185
+ @pass_context
186
+ def ngettext(
187
+ __context: Context,
188
+ __singular: str,
189
+ __plural: str,
190
+ __num: int,
191
+ **variables: t.Any,
192
+ ) -> str:
193
+ variables.setdefault("num", __num)
194
+ rv = __context.call(func, __singular, __plural, __num)
195
+ if __context.eval_ctx.autoescape:
196
+ rv = Markup(rv)
197
+ # Always treat as a format string, see gettext comment above.
198
+ return rv % variables # type: ignore
199
+
200
+ return ngettext
201
+
202
+
203
+ def _make_new_pgettext(func: t.Callable[[str, str], str]) -> t.Callable[..., str]:
204
+ @pass_context
205
+ def pgettext(
206
+ __context: Context, __string_ctx: str, __string: str, **variables: t.Any
207
+ ) -> str:
208
+ variables.setdefault("context", __string_ctx)
209
+ rv = __context.call(func, __string_ctx, __string)
210
+
211
+ if __context.eval_ctx.autoescape:
212
+ rv = Markup(rv)
213
+
214
+ # Always treat as a format string, see gettext comment above.
215
+ return rv % variables # type: ignore
216
+
217
+ return pgettext
218
+
219
+
220
+ def _make_new_npgettext(
221
+ func: t.Callable[[str, str, str, int], str]
222
+ ) -> t.Callable[..., str]:
223
+ @pass_context
224
+ def npgettext(
225
+ __context: Context,
226
+ __string_ctx: str,
227
+ __singular: str,
228
+ __plural: str,
229
+ __num: int,
230
+ **variables: t.Any,
231
+ ) -> str:
232
+ variables.setdefault("context", __string_ctx)
233
+ variables.setdefault("num", __num)
234
+ rv = __context.call(func, __string_ctx, __singular, __plural, __num)
235
+
236
+ if __context.eval_ctx.autoescape:
237
+ rv = Markup(rv)
238
+
239
+ # Always treat as a format string, see gettext comment above.
240
+ return rv % variables # type: ignore
241
+
242
+ return npgettext
243
+
244
+
245
+ class InternationalizationExtension(Extension):
246
+ """This extension adds gettext support to Jinja."""
247
+
248
+ tags = {"trans"}
249
+
250
+ # TODO: the i18n extension is currently reevaluating values in a few
251
+ # situations. Take this example:
252
+ # {% trans count=something() %}{{ count }} foo{% pluralize
253
+ # %}{{ count }} fooss{% endtrans %}
254
+ # something is called twice here. One time for the gettext value and
255
+ # the other time for the n-parameter of the ngettext function.
256
+
257
+ def __init__(self, environment: Environment) -> None:
258
+ super().__init__(environment)
259
+ environment.globals["_"] = _gettext_alias
260
+ environment.extend(
261
+ install_gettext_translations=self._install,
262
+ install_null_translations=self._install_null,
263
+ install_gettext_callables=self._install_callables,
264
+ uninstall_gettext_translations=self._uninstall,
265
+ extract_translations=self._extract,
266
+ newstyle_gettext=False,
267
+ )
268
+
269
+ def _install(
270
+ self, translations: "_SupportedTranslations", newstyle: t.Optional[bool] = None
271
+ ) -> None:
272
+ # ugettext and ungettext are preferred in case the I18N library
273
+ # is providing compatibility with older Python versions.
274
+ gettext = getattr(translations, "ugettext", None)
275
+ if gettext is None:
276
+ gettext = translations.gettext
277
+ ngettext = getattr(translations, "ungettext", None)
278
+ if ngettext is None:
279
+ ngettext = translations.ngettext
280
+
281
+ pgettext = getattr(translations, "pgettext", None)
282
+ npgettext = getattr(translations, "npgettext", None)
283
+ self._install_callables(
284
+ gettext, ngettext, newstyle=newstyle, pgettext=pgettext, npgettext=npgettext
285
+ )
286
+
287
+ def _install_null(self, newstyle: t.Optional[bool] = None) -> None:
288
+ import gettext
289
+
290
+ translations = gettext.NullTranslations()
291
+
292
+ if hasattr(translations, "pgettext"):
293
+ # Python < 3.8
294
+ pgettext = translations.pgettext
295
+ else:
296
+
297
+ def pgettext(c: str, s: str) -> str:
298
+ return s
299
+
300
+ if hasattr(translations, "npgettext"):
301
+ npgettext = translations.npgettext
302
+ else:
303
+
304
+ def npgettext(c: str, s: str, p: str, n: int) -> str:
305
+ return s if n == 1 else p
306
+
307
+ self._install_callables(
308
+ gettext=translations.gettext,
309
+ ngettext=translations.ngettext,
310
+ newstyle=newstyle,
311
+ pgettext=pgettext,
312
+ npgettext=npgettext,
313
+ )
314
+
315
+ def _install_callables(
316
+ self,
317
+ gettext: t.Callable[[str], str],
318
+ ngettext: t.Callable[[str, str, int], str],
319
+ newstyle: t.Optional[bool] = None,
320
+ pgettext: t.Optional[t.Callable[[str, str], str]] = None,
321
+ npgettext: t.Optional[t.Callable[[str, str, str, int], str]] = None,
322
+ ) -> None:
323
+ if newstyle is not None:
324
+ self.environment.newstyle_gettext = newstyle # type: ignore
325
+ if self.environment.newstyle_gettext: # type: ignore
326
+ gettext = _make_new_gettext(gettext)
327
+ ngettext = _make_new_ngettext(ngettext)
328
+
329
+ if pgettext is not None:
330
+ pgettext = _make_new_pgettext(pgettext)
331
+
332
+ if npgettext is not None:
333
+ npgettext = _make_new_npgettext(npgettext)
334
+
335
+ self.environment.globals.update(
336
+ gettext=gettext, ngettext=ngettext, pgettext=pgettext, npgettext=npgettext
337
+ )
338
+
339
+ def _uninstall(self, translations: "_SupportedTranslations") -> None:
340
+ for key in ("gettext", "ngettext", "pgettext", "npgettext"):
341
+ self.environment.globals.pop(key, None)
342
+
343
+ def _extract(
344
+ self,
345
+ source: t.Union[str, nodes.Template],
346
+ gettext_functions: t.Sequence[str] = GETTEXT_FUNCTIONS,
347
+ ) -> t.Iterator[
348
+ t.Tuple[int, str, t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]]]
349
+ ]:
350
+ if isinstance(source, str):
351
+ source = self.environment.parse(source)
352
+ return extract_from_ast(source, gettext_functions)
353
+
354
+ def parse(self, parser: "Parser") -> t.Union[nodes.Node, t.List[nodes.Node]]:
355
+ """Parse a translatable tag."""
356
+ lineno = next(parser.stream).lineno
357
+
358
+ context = None
359
+ context_token = parser.stream.next_if("string")
360
+
361
+ if context_token is not None:
362
+ context = context_token.value
363
+
364
+ # find all the variables referenced. Additionally a variable can be
365
+ # defined in the body of the trans block too, but this is checked at
366
+ # a later state.
367
+ plural_expr: t.Optional[nodes.Expr] = None
368
+ plural_expr_assignment: t.Optional[nodes.Assign] = None
369
+ num_called_num = False
370
+ variables: t.Dict[str, nodes.Expr] = {}
371
+ trimmed = None
372
+ while parser.stream.current.type != "block_end":
373
+ if variables:
374
+ parser.stream.expect("comma")
375
+
376
+ # skip colon for python compatibility
377
+ if parser.stream.skip_if("colon"):
378
+ break
379
+
380
+ token = parser.stream.expect("name")
381
+ if token.value in variables:
382
+ parser.fail(
383
+ f"translatable variable {token.value!r} defined twice.",
384
+ token.lineno,
385
+ exc=TemplateAssertionError,
386
+ )
387
+
388
+ # expressions
389
+ if parser.stream.current.type == "assign":
390
+ next(parser.stream)
391
+ variables[token.value] = var = parser.parse_expression()
392
+ elif trimmed is None and token.value in ("trimmed", "notrimmed"):
393
+ trimmed = token.value == "trimmed"
394
+ continue
395
+ else:
396
+ variables[token.value] = var = nodes.Name(token.value, "load")
397
+
398
+ if plural_expr is None:
399
+ if isinstance(var, nodes.Call):
400
+ plural_expr = nodes.Name("_trans", "load")
401
+ variables[token.value] = plural_expr
402
+ plural_expr_assignment = nodes.Assign(
403
+ nodes.Name("_trans", "store"), var
404
+ )
405
+ else:
406
+ plural_expr = var
407
+ num_called_num = token.value == "num"
408
+
409
+ parser.stream.expect("block_end")
410
+
411
+ plural = None
412
+ have_plural = False
413
+ referenced = set()
414
+
415
+ # now parse until endtrans or pluralize
416
+ singular_names, singular = self._parse_block(parser, True)
417
+ if singular_names:
418
+ referenced.update(singular_names)
419
+ if plural_expr is None:
420
+ plural_expr = nodes.Name(singular_names[0], "load")
421
+ num_called_num = singular_names[0] == "num"
422
+
423
+ # if we have a pluralize block, we parse that too
424
+ if parser.stream.current.test("name:pluralize"):
425
+ have_plural = True
426
+ next(parser.stream)
427
+ if parser.stream.current.type != "block_end":
428
+ token = parser.stream.expect("name")
429
+ if token.value not in variables:
430
+ parser.fail(
431
+ f"unknown variable {token.value!r} for pluralization",
432
+ token.lineno,
433
+ exc=TemplateAssertionError,
434
+ )
435
+ plural_expr = variables[token.value]
436
+ num_called_num = token.value == "num"
437
+ parser.stream.expect("block_end")
438
+ plural_names, plural = self._parse_block(parser, False)
439
+ next(parser.stream)
440
+ referenced.update(plural_names)
441
+ else:
442
+ next(parser.stream)
443
+
444
+ # register free names as simple name expressions
445
+ for name in referenced:
446
+ if name not in variables:
447
+ variables[name] = nodes.Name(name, "load")
448
+
449
+ if not have_plural:
450
+ plural_expr = None
451
+ elif plural_expr is None:
452
+ parser.fail("pluralize without variables", lineno)
453
+
454
+ if trimmed is None:
455
+ trimmed = self.environment.policies["ext.i18n.trimmed"]
456
+ if trimmed:
457
+ singular = self._trim_whitespace(singular)
458
+ if plural:
459
+ plural = self._trim_whitespace(plural)
460
+
461
+ node = self._make_node(
462
+ singular,
463
+ plural,
464
+ context,
465
+ variables,
466
+ plural_expr,
467
+ bool(referenced),
468
+ num_called_num and have_plural,
469
+ )
470
+ node.set_lineno(lineno)
471
+ if plural_expr_assignment is not None:
472
+ return [plural_expr_assignment, node]
473
+ else:
474
+ return node
475
+
476
+ def _trim_whitespace(self, string: str, _ws_re: t.Pattern[str] = _ws_re) -> str:
477
+ return _ws_re.sub(" ", string.strip())
478
+
479
+ def _parse_block(
480
+ self, parser: "Parser", allow_pluralize: bool
481
+ ) -> t.Tuple[t.List[str], str]:
482
+ """Parse until the next block tag with a given name."""
483
+ referenced = []
484
+ buf = []
485
+
486
+ while True:
487
+ if parser.stream.current.type == "data":
488
+ buf.append(parser.stream.current.value.replace("%", "%%"))
489
+ next(parser.stream)
490
+ elif parser.stream.current.type == "variable_begin":
491
+ next(parser.stream)
492
+ name = parser.stream.expect("name").value
493
+ referenced.append(name)
494
+ buf.append(f"%({name})s")
495
+ parser.stream.expect("variable_end")
496
+ elif parser.stream.current.type == "block_begin":
497
+ next(parser.stream)
498
+ block_name = (
499
+ parser.stream.current.value
500
+ if parser.stream.current.type == "name"
501
+ else None
502
+ )
503
+ if block_name == "endtrans":
504
+ break
505
+ elif block_name == "pluralize":
506
+ if allow_pluralize:
507
+ break
508
+ parser.fail(
509
+ "a translatable section can have only one pluralize section"
510
+ )
511
+ elif block_name == "trans":
512
+ parser.fail(
513
+ "trans blocks can't be nested; did you mean `endtrans`?"
514
+ )
515
+ parser.fail(
516
+ f"control structures in translatable sections are not allowed; "
517
+ f"saw `{block_name}`"
518
+ )
519
+ elif parser.stream.eos:
520
+ parser.fail("unclosed translation block")
521
+ else:
522
+ raise RuntimeError("internal parser error")
523
+
524
+ return referenced, concat(buf)
525
+
526
+ def _make_node(
527
+ self,
528
+ singular: str,
529
+ plural: t.Optional[str],
530
+ context: t.Optional[str],
531
+ variables: t.Dict[str, nodes.Expr],
532
+ plural_expr: t.Optional[nodes.Expr],
533
+ vars_referenced: bool,
534
+ num_called_num: bool,
535
+ ) -> nodes.Output:
536
+ """Generates a useful node from the data provided."""
537
+ newstyle = self.environment.newstyle_gettext # type: ignore
538
+ node: nodes.Expr
539
+
540
+ # no variables referenced? no need to escape for old style
541
+ # gettext invocations only if there are vars.
542
+ if not vars_referenced and not newstyle:
543
+ singular = singular.replace("%%", "%")
544
+ if plural:
545
+ plural = plural.replace("%%", "%")
546
+
547
+ func_name = "gettext"
548
+ func_args: t.List[nodes.Expr] = [nodes.Const(singular)]
549
+
550
+ if context is not None:
551
+ func_args.insert(0, nodes.Const(context))
552
+ func_name = f"p{func_name}"
553
+
554
+ if plural_expr is not None:
555
+ func_name = f"n{func_name}"
556
+ func_args.extend((nodes.Const(plural), plural_expr))
557
+
558
+ node = nodes.Call(nodes.Name(func_name, "load"), func_args, [], None, None)
559
+
560
+ # in case newstyle gettext is used, the method is powerful
561
+ # enough to handle the variable expansion and autoescape
562
+ # handling itself
563
+ if newstyle:
564
+ for key, value in variables.items():
565
+ # the function adds that later anyways in case num was
566
+ # called num, so just skip it.
567
+ if num_called_num and key == "num":
568
+ continue
569
+ node.kwargs.append(nodes.Keyword(key, value))
570
+
571
+ # otherwise do that here
572
+ else:
573
+ # mark the return value as safe if we are in an
574
+ # environment with autoescaping turned on
575
+ node = nodes.MarkSafeIfAutoescape(node)
576
+ if variables:
577
+ node = nodes.Mod(
578
+ node,
579
+ nodes.Dict(
580
+ [
581
+ nodes.Pair(nodes.Const(key), value)
582
+ for key, value in variables.items()
583
+ ]
584
+ ),
585
+ )
586
+ return nodes.Output([node])
587
+
588
+
589
+ class ExprStmtExtension(Extension):
590
+ """Adds a `do` tag to Jinja that works like the print statement just
591
+ that it doesn't print the return value.
592
+ """
593
+
594
+ tags = {"do"}
595
+
596
+ def parse(self, parser: "Parser") -> nodes.ExprStmt:
597
+ node = nodes.ExprStmt(lineno=next(parser.stream).lineno)
598
+ node.node = parser.parse_tuple()
599
+ return node
600
+
601
+
602
+ class LoopControlExtension(Extension):
603
+ """Adds break and continue to the template engine."""
604
+
605
+ tags = {"break", "continue"}
606
+
607
+ def parse(self, parser: "Parser") -> t.Union[nodes.Break, nodes.Continue]:
608
+ token = next(parser.stream)
609
+ if token.value == "break":
610
+ return nodes.Break(lineno=token.lineno)
611
+ return nodes.Continue(lineno=token.lineno)
612
+
613
+
614
+ class DebugExtension(Extension):
615
+ """A ``{% debug %}`` tag that dumps the available variables,
616
+ filters, and tests.
617
+
618
+ .. code-block:: html+jinja
619
+
620
+ <pre>{% debug %}</pre>
621
+
622
+ .. code-block:: text
623
+
624
+ {'context': {'cycler': <class 'jinja2.utils.Cycler'>,
625
+ ...,
626
+ 'namespace': <class 'jinja2.utils.Namespace'>},
627
+ 'filters': ['abs', 'attr', 'batch', 'capitalize', 'center', 'count', 'd',
628
+ ..., 'urlencode', 'urlize', 'wordcount', 'wordwrap', 'xmlattr'],
629
+ 'tests': ['!=', '<', '<=', '==', '>', '>=', 'callable', 'defined',
630
+ ..., 'odd', 'sameas', 'sequence', 'string', 'undefined', 'upper']}
631
+
632
+ .. versionadded:: 2.11.0
633
+ """
634
+
635
+ tags = {"debug"}
636
+
637
+ def parse(self, parser: "Parser") -> nodes.Output:
638
+ lineno = parser.stream.expect("name:debug").lineno
639
+ context = nodes.ContextReference()
640
+ result = self.call_method("_render", [context], lineno=lineno)
641
+ return nodes.Output([result], lineno=lineno)
642
+
643
+ def _render(self, context: Context) -> str:
644
+ result = {
645
+ "context": context.get_all(),
646
+ "filters": sorted(self.environment.filters.keys()),
647
+ "tests": sorted(self.environment.tests.keys()),
648
+ }
649
+
650
+ # Set the depth since the intent is to show the top few names.
651
+ return pprint.pformat(result, depth=3, compact=True)
652
+
653
+
654
+ def extract_from_ast(
655
+ ast: nodes.Template,
656
+ gettext_functions: t.Sequence[str] = GETTEXT_FUNCTIONS,
657
+ babel_style: bool = True,
658
+ ) -> t.Iterator[
659
+ t.Tuple[int, str, t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]]]
660
+ ]:
661
+ """Extract localizable strings from the given template node. Per
662
+ default this function returns matches in babel style that means non string
663
+ parameters as well as keyword arguments are returned as `None`. This
664
+ allows Babel to figure out what you really meant if you are using
665
+ gettext functions that allow keyword arguments for placeholder expansion.
666
+ If you don't want that behavior set the `babel_style` parameter to `False`
667
+ which causes only strings to be returned and parameters are always stored
668
+ in tuples. As a consequence invalid gettext calls (calls without a single
669
+ string parameter or string parameters after non-string parameters) are
670
+ skipped.
671
+
672
+ This example explains the behavior:
673
+
674
+ >>> from jinja2 import Environment
675
+ >>> env = Environment()
676
+ >>> node = env.parse('{{ (_("foo"), _(), ngettext("foo", "bar", 42)) }}')
677
+ >>> list(extract_from_ast(node))
678
+ [(1, '_', 'foo'), (1, '_', ()), (1, 'ngettext', ('foo', 'bar', None))]
679
+ >>> list(extract_from_ast(node, babel_style=False))
680
+ [(1, '_', ('foo',)), (1, 'ngettext', ('foo', 'bar'))]
681
+
682
+ For every string found this function yields a ``(lineno, function,
683
+ message)`` tuple, where:
684
+
685
+ * ``lineno`` is the number of the line on which the string was found,
686
+ * ``function`` is the name of the ``gettext`` function used (if the
687
+ string was extracted from embedded Python code), and
688
+ * ``message`` is the string, or a tuple of strings for functions
689
+ with multiple string arguments.
690
+
691
+ This extraction function operates on the AST and is because of that unable
692
+ to extract any comments. For comment support you have to use the babel
693
+ extraction interface or extract comments yourself.
694
+ """
695
+ out: t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]]
696
+
697
+ for node in ast.find_all(nodes.Call):
698
+ if (
699
+ not isinstance(node.node, nodes.Name)
700
+ or node.node.name not in gettext_functions
701
+ ):
702
+ continue
703
+
704
+ strings: t.List[t.Optional[str]] = []
705
+
706
+ for arg in node.args:
707
+ if isinstance(arg, nodes.Const) and isinstance(arg.value, str):
708
+ strings.append(arg.value)
709
+ else:
710
+ strings.append(None)
711
+
712
+ for _ in node.kwargs:
713
+ strings.append(None)
714
+ if node.dyn_args is not None:
715
+ strings.append(None)
716
+ if node.dyn_kwargs is not None:
717
+ strings.append(None)
718
+
719
+ if not babel_style:
720
+ out = tuple(x for x in strings if x is not None)
721
+
722
+ if not out:
723
+ continue
724
+ else:
725
+ if len(strings) == 1:
726
+ out = strings[0]
727
+ else:
728
+ out = tuple(strings)
729
+
730
+ yield node.lineno, node.node.name, out
731
+
732
+
733
+ class _CommentFinder:
734
+ """Helper class to find comments in a token stream. Can only
735
+ find comments for gettext calls forwards. Once the comment
736
+ from line 4 is found, a comment for line 1 will not return a
737
+ usable value.
738
+ """
739
+
740
+ def __init__(
741
+ self, tokens: t.Sequence[t.Tuple[int, str, str]], comment_tags: t.Sequence[str]
742
+ ) -> None:
743
+ self.tokens = tokens
744
+ self.comment_tags = comment_tags
745
+ self.offset = 0
746
+ self.last_lineno = 0
747
+
748
+ def find_backwards(self, offset: int) -> t.List[str]:
749
+ try:
750
+ for _, token_type, token_value in reversed(
751
+ self.tokens[self.offset : offset]
752
+ ):
753
+ if token_type in ("comment", "linecomment"):
754
+ try:
755
+ prefix, comment = token_value.split(None, 1)
756
+ except ValueError:
757
+ continue
758
+ if prefix in self.comment_tags:
759
+ return [comment.rstrip()]
760
+ return []
761
+ finally:
762
+ self.offset = offset
763
+
764
+ def find_comments(self, lineno: int) -> t.List[str]:
765
+ if not self.comment_tags or self.last_lineno > lineno:
766
+ return []
767
+ for idx, (token_lineno, _, _) in enumerate(self.tokens[self.offset :]):
768
+ if token_lineno > lineno:
769
+ return self.find_backwards(self.offset + idx)
770
+ return self.find_backwards(len(self.tokens))
771
+
772
+
773
+ def babel_extract(
774
+ fileobj: t.BinaryIO,
775
+ keywords: t.Sequence[str],
776
+ comment_tags: t.Sequence[str],
777
+ options: t.Dict[str, t.Any],
778
+ ) -> t.Iterator[
779
+ t.Tuple[
780
+ int, str, t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]], t.List[str]
781
+ ]
782
+ ]:
783
+ """Babel extraction method for Jinja templates.
784
+
785
+ .. versionchanged:: 2.3
786
+ Basic support for translation comments was added. If `comment_tags`
787
+ is now set to a list of keywords for extraction, the extractor will
788
+ try to find the best preceding comment that begins with one of the
789
+ keywords. For best results, make sure to not have more than one
790
+ gettext call in one line of code and the matching comment in the
791
+ same line or the line before.
792
+
793
+ .. versionchanged:: 2.5.1
794
+ The `newstyle_gettext` flag can be set to `True` to enable newstyle
795
+ gettext calls.
796
+
797
+ .. versionchanged:: 2.7
798
+ A `silent` option can now be provided. If set to `False` template
799
+ syntax errors are propagated instead of being ignored.
800
+
801
+ :param fileobj: the file-like object the messages should be extracted from
802
+ :param keywords: a list of keywords (i.e. function names) that should be
803
+ recognized as translation functions
804
+ :param comment_tags: a list of translator tags to search for and include
805
+ in the results.
806
+ :param options: a dictionary of additional options (optional)
807
+ :return: an iterator over ``(lineno, funcname, message, comments)`` tuples.
808
+ (comments will be empty currently)
809
+ """
810
+ extensions: t.Dict[t.Type[Extension], None] = {}
811
+
812
+ for extension_name in options.get("extensions", "").split(","):
813
+ extension_name = extension_name.strip()
814
+
815
+ if not extension_name:
816
+ continue
817
+
818
+ extensions[import_string(extension_name)] = None
819
+
820
+ if InternationalizationExtension not in extensions:
821
+ extensions[InternationalizationExtension] = None
822
+
823
+ def getbool(options: t.Mapping[str, str], key: str, default: bool = False) -> bool:
824
+ return options.get(key, str(default)).lower() in {"1", "on", "yes", "true"}
825
+
826
+ silent = getbool(options, "silent", True)
827
+ environment = Environment(
828
+ options.get("block_start_string", defaults.BLOCK_START_STRING),
829
+ options.get("block_end_string", defaults.BLOCK_END_STRING),
830
+ options.get("variable_start_string", defaults.VARIABLE_START_STRING),
831
+ options.get("variable_end_string", defaults.VARIABLE_END_STRING),
832
+ options.get("comment_start_string", defaults.COMMENT_START_STRING),
833
+ options.get("comment_end_string", defaults.COMMENT_END_STRING),
834
+ options.get("line_statement_prefix") or defaults.LINE_STATEMENT_PREFIX,
835
+ options.get("line_comment_prefix") or defaults.LINE_COMMENT_PREFIX,
836
+ getbool(options, "trim_blocks", defaults.TRIM_BLOCKS),
837
+ getbool(options, "lstrip_blocks", defaults.LSTRIP_BLOCKS),
838
+ defaults.NEWLINE_SEQUENCE,
839
+ getbool(options, "keep_trailing_newline", defaults.KEEP_TRAILING_NEWLINE),
840
+ tuple(extensions),
841
+ cache_size=0,
842
+ auto_reload=False,
843
+ )
844
+
845
+ if getbool(options, "trimmed"):
846
+ environment.policies["ext.i18n.trimmed"] = True
847
+ if getbool(options, "newstyle_gettext"):
848
+ environment.newstyle_gettext = True # type: ignore
849
+
850
+ source = fileobj.read().decode(options.get("encoding", "utf-8"))
851
+ try:
852
+ node = environment.parse(source)
853
+ tokens = list(environment.lex(environment.preprocess(source)))
854
+ except TemplateSyntaxError:
855
+ if not silent:
856
+ raise
857
+ # skip templates with syntax errors
858
+ return
859
+
860
+ finder = _CommentFinder(tokens, comment_tags)
861
+ for lineno, func, message in extract_from_ast(node, keywords):
862
+ yield lineno, func, message, finder.find_comments(lineno)
863
+
864
+
865
+ #: nicer import names
866
+ i18n = InternationalizationExtension
867
+ do = ExprStmtExtension
868
+ loopcontrols = LoopControlExtension
869
+ debug = DebugExtension
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/METADATA ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: nvidia-cuda-nvrtc-cu11
3
+ Version: 11.8.89
4
+ Summary: NVRTC native runtime libraries
5
+ Home-page: https://developer.nvidia.com/cuda-zone
6
+ Author: Nvidia CUDA Installer Team
7
+ Author-email: cuda_installer@nvidia.com
8
+ License: NVIDIA Proprietary Software
9
+ Keywords: cuda,nvidia,runtime,machine learning,deep learning
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Education
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: Other/Proprietary License
15
+ Classifier: Natural Language :: English
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.5
18
+ Classifier: Programming Language :: Python :: 3.6
19
+ Classifier: Programming Language :: Python :: 3.7
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 :: Only
25
+ Classifier: Topic :: Scientific/Engineering
26
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
27
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
28
+ Classifier: Topic :: Software Development
29
+ Classifier: Topic :: Software Development :: Libraries
30
+ Classifier: Operating System :: Microsoft :: Windows
31
+ Classifier: Operating System :: POSIX :: Linux
32
+ Requires-Python: >=3
33
+ License-File: License.txt
34
+
35
+ NVRTC native runtime libraries
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/RECORD ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ nvidia/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ nvidia/__pycache__/__init__.cpython-311.pyc,,
3
+ nvidia/cuda_nvrtc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nvidia/cuda_nvrtc/__pycache__/__init__.cpython-311.pyc,,
5
+ nvidia/cuda_nvrtc/include/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ nvidia/cuda_nvrtc/include/__pycache__/__init__.cpython-311.pyc,,
7
+ nvidia/cuda_nvrtc/include/nvrtc.h,sha256=2zGRW1F9jfYLybqdwM5RxJ7EZP5aZzcgBGcsqlbbvKs,30224
8
+ nvidia/cuda_nvrtc/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ nvidia/cuda_nvrtc/lib/__pycache__/__init__.cpython-311.pyc,,
10
+ nvidia/cuda_nvrtc/lib/libnvrtc-builtins.so.11.8,sha256=LcS_aHA06J4RfvgvswApHkgzMZotR3IgBdQO6vuv2q8,7718792
11
+ nvidia/cuda_nvrtc/lib/libnvrtc.so.11.2,sha256=7kQLGF-PYX64mMgB2ZXw3hwj-IxkSUMd9Ldl8K2UUYY,54417560
12
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
13
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/License.txt,sha256=rW9YU_ugyg0VnQ9Y1JrkmDDC-Mk_epJki5zpCttMbM0,59262
14
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/METADATA,sha256=92p07kziEfXp2nmuS7oNyZWr7U8iI5jesbRmd4nAfyc,1506
15
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/RECORD,,
16
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/WHEEL,sha256=-kQi_VMfvRQozZJT7HUPMfY-5vLo0LVTmAylNJ3Ft98,106
17
+ nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/top_level.txt,sha256=fTkAtiFuL16nUrB9ytDDtpytz2t0B4NvYTnRzwAhO14,7
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_nvrtc_cu11-11.8.89.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.37.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-manylinux1_x86_64
5
+
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/METADATA ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: nvidia-cuda-runtime-cu11
3
+ Version: 11.8.89
4
+ Summary: CUDA Runtime native Libraries
5
+ Home-page: https://developer.nvidia.com/cuda-zone
6
+ Author: Nvidia CUDA Installer Team
7
+ Author-email: cuda_installer@nvidia.com
8
+ License: NVIDIA Proprietary Software
9
+ Keywords: cuda,nvidia,runtime,machine learning,deep learning
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Education
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: Other/Proprietary License
15
+ Classifier: Natural Language :: English
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.5
18
+ Classifier: Programming Language :: Python :: 3.6
19
+ Classifier: Programming Language :: Python :: 3.7
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 :: Only
25
+ Classifier: Topic :: Scientific/Engineering
26
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
27
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
28
+ Classifier: Topic :: Software Development
29
+ Classifier: Topic :: Software Development :: Libraries
30
+ Classifier: Operating System :: Microsoft :: Windows
31
+ Classifier: Operating System :: POSIX :: Linux
32
+ Requires-Python: >=3
33
+ License-File: License.txt
34
+
35
+ CUDA Runtime native Libraries
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/RECORD ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ nvidia/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ nvidia/__pycache__/__init__.cpython-311.pyc,,
3
+ nvidia/cuda_runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nvidia/cuda_runtime/__pycache__/__init__.cpython-311.pyc,,
5
+ nvidia/cuda_runtime/include/CL/cl.h,sha256=2OqunnI7w8LfRaaOIvwUJOxJ2jEpN_r4DZeQMSvH0I8,77430
6
+ nvidia/cuda_runtime/include/CL/cl.hpp,sha256=q9H85bvcgom7daYH3L1VuQvsvKTnDfnUgyrXyuoBrkM,281251
7
+ nvidia/cuda_runtime/include/CL/cl_egl.h,sha256=HhpFYMrMx3Eaz9NthvSQRexd1BZO7_cmiu-2_-60qMM,4516
8
+ nvidia/cuda_runtime/include/CL/cl_ext.h,sha256=uCwdMHbAcXR3RbLL7THhLpf9Rbp7ZaUpUcKXI1nAsCo,46988
9
+ nvidia/cuda_runtime/include/CL/cl_gl.h,sha256=Z0tbd-ONmjrt-2_RM-qzAWOsMoxmXaiGaaqcN6yfTqI,6436
10
+ nvidia/cuda_runtime/include/CL/cl_gl_ext.h,sha256=aCqqMA6lFPwIrRRcjlVmsLVmJXzALpvBv6i_0D1Zt2s,1326
11
+ nvidia/cuda_runtime/include/CL/cl_platform.h,sha256=xXjdIuQZf2UlLr9p4l6oHul-AYNxoTpz1dDOqNf6uws,44584
12
+ nvidia/cuda_runtime/include/CL/opencl.h,sha256=GwpOnqK_M5StKmfug1_dEgQs1r3XWL8uxLvr6YVORYg,1132
13
+ nvidia/cuda_runtime/include/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ nvidia/cuda_runtime/include/__pycache__/__init__.cpython-311.pyc,,
15
+ nvidia/cuda_runtime/include/builtin_types.h,sha256=JxT9Vf2q2snxTBOL9ACzNmYzTWACO2VOVUu1KdFt7_g,3150
16
+ nvidia/cuda_runtime/include/channel_descriptor.h,sha256=eAVB1Q5coPEy0F-yDdhoDH9l7B9rk5Dcp0eyKVMNEwk,22595
17
+ nvidia/cuda_runtime/include/common_functions.h,sha256=22LTZRVcPZzEH6MJda7nNMCvMgIjSTe0OKR7sEQj6kc,3410
18
+ nvidia/cuda_runtime/include/cooperative_groups.h,sha256=ffMJKQI2MYQYMKidiAEOwYVTA9RaYcOsR441Vj6Gw_w,66376
19
+ nvidia/cuda_runtime/include/cooperative_groups/details/async.h,sha256=xsEHCZP3nuEY3l2p8SU2d1226XiXumUvDP_Gyh8PdVY,19122
20
+ nvidia/cuda_runtime/include/cooperative_groups/details/coalesced_reduce.h,sha256=vWv1tyxMjSMM2Oc0SdxXhCug_PwaBM6u8iMLjKyeqjE,4561
21
+ nvidia/cuda_runtime/include/cooperative_groups/details/coalesced_scan.h,sha256=DfZv5d5W0XJv-tZVhgrIdjLjs6aCx_u0oy1lDIpjo1Q,7314
22
+ nvidia/cuda_runtime/include/cooperative_groups/details/driver_abi.h,sha256=v-ZUb4UgGKJk6NR2WCWHD3x_42y-togI1urFn70Gi-g,3964
23
+ nvidia/cuda_runtime/include/cooperative_groups/details/functional.h,sha256=k5kSXKm8oV5o0zPAb5UUBUNx6K9biylBML2U1DofOL8,8503
24
+ nvidia/cuda_runtime/include/cooperative_groups/details/helpers.h,sha256=6dJzOEpvm_xJB9UM7jaWEZkZ2WU_40zU1qmH0UInz-g,27207
25
+ nvidia/cuda_runtime/include/cooperative_groups/details/info.h,sha256=UzPdCvuGmFbTzUdPHFmr2LZ0dQf8AjccAqscmC4RoIc,11936
26
+ nvidia/cuda_runtime/include/cooperative_groups/details/partitioning.h,sha256=8hCh6F8sfkyfRgMirC37Nqv-b-gIY3A_J0eMYqmD2zU,6001
27
+ nvidia/cuda_runtime/include/cooperative_groups/details/reduce.h,sha256=TdlPyPNXTRyS1UIZSp9E98zImo-CDnmXL7F5uuzXxzk,22399
28
+ nvidia/cuda_runtime/include/cooperative_groups/details/scan.h,sha256=hxWd_yNk2AE5UXBBJ9GJH7wg0sgT_V4sQLToi1C4Q00,17421
29
+ nvidia/cuda_runtime/include/cooperative_groups/details/sync.h,sha256=djyXsKuJTax1vTnG5oKPYkRu8nM6o2OJO9F_WIYJNzk,10218
30
+ nvidia/cuda_runtime/include/cooperative_groups/memcpy_async.h,sha256=erOIHuObdfxRhBWfrXE3wsZF4B2GUuqwzQrsPwKPpbg,2960
31
+ nvidia/cuda_runtime/include/cooperative_groups/reduce.h,sha256=B0hgDkqM-6ueqTTgb3b34A0RH4vGz8mBf5e2jT1dJ1o,2949
32
+ nvidia/cuda_runtime/include/cooperative_groups/scan.h,sha256=2EU6T5cWNwftm2B7FicV31PojoI61yo5fHXGRYkGk40,2940
33
+ nvidia/cuda_runtime/include/cuComplex.h,sha256=WpcgpaiPhU_o9sTPMcNTEZuyXDIc8x3sz4dUWSztL2g,12186
34
+ nvidia/cuda_runtime/include/cuda.h,sha256=swpKhNoL1tA0kz_EMJVaRkMrIZ0aYfmph1sx6LBJTBI,840786
35
+ nvidia/cuda_runtime/include/cudaEGL.h,sha256=_CwaQ4cEP1vfNyBSSd5qFxznPCYOovF6Cpj-QWSIBq4,39544
36
+ nvidia/cuda_runtime/include/cudaEGLTypedefs.h,sha256=xF_FAN1Kar9oyHJ3cCU7jztTpxX8WylpiuYyYpGGHek,5645
37
+ nvidia/cuda_runtime/include/cudaGL.h,sha256=UDArZVtTx1rphzLuTNkpidx27prdTUv_l6dXCFfkBYc,22401
38
+ nvidia/cuda_runtime/include/cudaGLTypedefs.h,sha256=dClpQI-LuXgF9rPSBsj7OkIg8g_fXDjT0hLZS8TGpOg,6576
39
+ nvidia/cuda_runtime/include/cudaProfilerTypedefs.h,sha256=F2aWLIKv_AhNbxNOaZVcRsxIh0kuscnV8UMWWxkBAlY,3297
40
+ nvidia/cuda_runtime/include/cudaTypedefs.h,sha256=RuI5ctirdk7qJ0MKkYD3pVCAPR4Ax7pBqKw8T4C1jt0,93945
41
+ nvidia/cuda_runtime/include/cudaVDPAU.h,sha256=Np7Nc2Wjaz--hkpbhW6f9aapr-NbcPDAgkot0sJerco,12694
42
+ nvidia/cuda_runtime/include/cudaVDPAUTypedefs.h,sha256=wz8nyOUdwM9mH9JO3QZW-A9dyxt-IufSX7nggSXpCNs,4144
43
+ nvidia/cuda_runtime/include/cuda_awbarrier.h,sha256=LO5WG2CO22kiwgaae5timQ_5u3sJn1H9tyLnWPP6vUw,7600
44
+ nvidia/cuda_runtime/include/cuda_awbarrier_helpers.h,sha256=vFyH7n9Mnt78Z8vG7DQCxa1MAelyBVmhCPdqCfkNOiI,12227
45
+ nvidia/cuda_runtime/include/cuda_awbarrier_primitives.h,sha256=XIkzEZynW8_aDlv-VGOy4ufoTMYntu8CmGSQKq6wv0g,3993
46
+ nvidia/cuda_runtime/include/cuda_bf16.h,sha256=CuV1113z4--_QPdDH1eVgGgBbl_TuSv3mvUAQPqgjxU,139379
47
+ nvidia/cuda_runtime/include/cuda_bf16.hpp,sha256=YYVqbWfqs4DiodvN36GnRoqkNEAyW8MIAVF6NeUcCW0,101353
48
+ nvidia/cuda_runtime/include/cuda_device_runtime_api.h,sha256=YGdzDamS_Fa0zAIawbnNMNwyz6XX9SKJ_rdAnmoEOzc,16574
49
+ nvidia/cuda_runtime/include/cuda_egl_interop.h,sha256=PNWYns30MIytJQHSOh7UbZYlaTX5e0bavzK14tde_C8,37109
50
+ nvidia/cuda_runtime/include/cuda_fp16.h,sha256=33O6OVdPNxXlObODyIibl0c5cue1AHRg0gZ8i1boilo,132563
51
+ nvidia/cuda_runtime/include/cuda_fp16.hpp,sha256=-UjvMb2L2gFHperdhxmOoutEL5GA0Uf5wmRvfYMqyKA,93580
52
+ nvidia/cuda_runtime/include/cuda_fp8.h,sha256=W_1NkOLgNvcxnxRfpmrwgLZIE2PmYREhWv2wohJ0JCk,13358
53
+ nvidia/cuda_runtime/include/cuda_fp8.hpp,sha256=Ph12HdUf-Mt7t1f6RZOReWPGeqN6OeQMKJuBuE5Avsk,56491
54
+ nvidia/cuda_runtime/include/cuda_gl_interop.h,sha256=pBQlAyGKIDmhV33GlBd58Wr4Ej96gTJYJtegddE5S00,18961
55
+ nvidia/cuda_runtime/include/cuda_occupancy.h,sha256=Kr9HyOe-hlRjBAzbINwUYkNgbbIgIjuvKs09UZhMYQo,67179
56
+ nvidia/cuda_runtime/include/cuda_pipeline.h,sha256=0enXG49wN4JajlQi3ahbp2ei_ufTY_Mznic7zfWmKHM,8130
57
+ nvidia/cuda_runtime/include/cuda_pipeline_helpers.h,sha256=FplUvNDL0sk0S0C-cTNmEo-NnueU3jvV1TUdKYjN24c,13828
58
+ nvidia/cuda_runtime/include/cuda_pipeline_primitives.h,sha256=FnJJtuV6rHr6LgL56XDwilcSbFr6W1Hj6mf1AJaMI20,8675
59
+ nvidia/cuda_runtime/include/cuda_runtime.h,sha256=_HEZG1eaHioSl9sxNnOsbRJraBVFdq_5SGOfK1HXtOo,113013
60
+ nvidia/cuda_runtime/include/cuda_runtime_api.h,sha256=hSshhlXKw6Vrp_wy84ydh5EOhfw24DTpgZ7iffT-e-s,569590
61
+ nvidia/cuda_runtime/include/cuda_surface_types.h,sha256=5NdWqB9RlbdWwbIy7lQvrMROt09RrZdmVGP52mcjVkY,4276
62
+ nvidia/cuda_runtime/include/cuda_texture_types.h,sha256=e95H37q_Y02876PJS2HFccs49_5XoAabkWxi3KqI8-0,4781
63
+ nvidia/cuda_runtime/include/cuda_vdpau_interop.h,sha256=O2HI8-3zT9W1lIF4IajpOFbF1ABXtizQyUeVFovPQ-g,7631
64
+ nvidia/cuda_runtime/include/cudart_platform.h,sha256=YN6sKhB0b9w5tGX1IYL7ulJVPrWAiX9A44qLv4EtW5Q,2717
65
+ nvidia/cuda_runtime/include/device_atomic_functions.h,sha256=krPIx_BVDjRoAlLKlAgpjxrpXPcFmIjGx32X0MMEj3s,11359
66
+ nvidia/cuda_runtime/include/device_atomic_functions.hpp,sha256=_UsoVsyP7U-9CUUCbC1QLw6IbFFkKzxk458vLbAXzOY,8149
67
+ nvidia/cuda_runtime/include/device_double_functions.h,sha256=KUxId5Z1fx8SWfLRTxPD7RB-zN7zslzb4n7JaJLfL3I,3452
68
+ nvidia/cuda_runtime/include/device_functions.h,sha256=bWSrhTYE9NQlss7xMSMEVusvto9j2fgUDXWVH2W_cOA,3410
69
+ nvidia/cuda_runtime/include/device_launch_parameters.h,sha256=H1_CC-vvAaS26ys4XsTFkMgTxUTciAjdjswjizkisvQ,3846
70
+ nvidia/cuda_runtime/include/device_types.h,sha256=2LFxoZBJPoA5V0H1EbKTEaXDi3GDJPtzOPdRHDaucIQ,3588
71
+ nvidia/cuda_runtime/include/driver_functions.h,sha256=cN3IjRAz2Mj2Pj35SyxJIkZNDDusnJqaqzBdMzpQKbA,4625
72
+ nvidia/cuda_runtime/include/driver_types.h,sha256=akxjeSPFYbryk_0iBfipSRafuF91-OdGva-t8EvRCyw,141075
73
+ nvidia/cuda_runtime/include/host_config.h,sha256=BscH_GazAZbbotddVzL5RmafbQ-QjRx8f-I1O01IBW8,3380
74
+ nvidia/cuda_runtime/include/host_defines.h,sha256=bBQwQF5C1N1c2qpLV56g1c-weu9Ysgz-gIf2Kn3uz_A,3386
75
+ nvidia/cuda_runtime/include/library_types.h,sha256=yJvoLFw5oBdRqkQgEhIaX-stsMGlxQW9sZoJ4vbQHwI,4766
76
+ nvidia/cuda_runtime/include/math_constants.h,sha256=cV6hAyQe8X7f7MBtaKjjIJq3BycOUDp6I5cizJX5HLw,7608
77
+ nvidia/cuda_runtime/include/math_functions.h,sha256=5XcC6j-fJKttvhwc4hZNoLHNw808a2ZYIOtZ7ry7yd0,3398
78
+ nvidia/cuda_runtime/include/mma.h,sha256=IY_VenxuEncwGq92MhrWUb-Xswh0ekAXLy9Rbxhxa2Y,2932
79
+ nvidia/cuda_runtime/include/sm_20_atomic_functions.h,sha256=5MEzDxmh1n6-GW0jUpJTg9TwYGmut90x3XaKSj_btOo,4342
80
+ nvidia/cuda_runtime/include/sm_20_atomic_functions.hpp,sha256=Cx__BPJKUPeG5qMxZs9ztfIyqWqt0wZDZi4V_5EV4LQ,3929
81
+ nvidia/cuda_runtime/include/sm_20_intrinsics.h,sha256=tVfZqjKaVuVVip0Wz26ucrjhSTote3CnhUQBvfQdVEQ,50660
82
+ nvidia/cuda_runtime/include/sm_20_intrinsics.hpp,sha256=BhEBuXSKBsNGJDBJDtYL0cGRI3wX_w_OIgA5D-YxIWk,7694
83
+ nvidia/cuda_runtime/include/sm_30_intrinsics.h,sha256=QPK_qWRrRJhID4T81cK0l5V86rwkDOVVxFfwyXcyhno,15845
84
+ nvidia/cuda_runtime/include/sm_30_intrinsics.hpp,sha256=s50XwwWIHBhOEnln-KbCW4ObuiYFkzwzdCjSUaYchfY,24480
85
+ nvidia/cuda_runtime/include/sm_32_atomic_functions.h,sha256=5R7T1MjFDQG6IRApz06UDhhQWW3GtaK5jPiJs3gB4Eg,6540
86
+ nvidia/cuda_runtime/include/sm_32_atomic_functions.hpp,sha256=YDveVhaTYKo2WcAhHS8Cbvj5cIi-lcM5YlneVeEjPE4,5377
87
+ nvidia/cuda_runtime/include/sm_32_intrinsics.h,sha256=-nLnJz2dczMLqBxxs610KPQgVOlceuehqlDc7TqhbGI,33197
88
+ nvidia/cuda_runtime/include/sm_32_intrinsics.hpp,sha256=ThPZXghlPZexJUHha8XKnVIKVHeNKVf4GRnrT4kXKm8,70577
89
+ nvidia/cuda_runtime/include/sm_35_atomic_functions.h,sha256=a3XoEsKRCEOf0Q_5Y__rMfmC4pScv4VkUggVgVJVn44,2909
90
+ nvidia/cuda_runtime/include/sm_35_intrinsics.h,sha256=BEiPNO03ZSv5XtMMul5jiTH4oLWlOu3CYkIAgrWslnk,2952
91
+ nvidia/cuda_runtime/include/sm_60_atomic_functions.h,sha256=itW16w99dHIX1h8326fJvf1M0O2YDtFeVKehhtaWWHk,20606
92
+ nvidia/cuda_runtime/include/sm_60_atomic_functions.hpp,sha256=KUhC8VemPcWLCh67xTtv1vOFUIY1cj7wFPnlApfgqd8,15057
93
+ nvidia/cuda_runtime/include/sm_61_intrinsics.h,sha256=tKqN3jCsLBo3YiiEJ7BtAAgnLPJfJqyVjQF9VUVD5tg,5991
94
+ nvidia/cuda_runtime/include/sm_61_intrinsics.hpp,sha256=77N6vZcAtjtq8Ewipa8ZZ7Ydth1KJ-K4ka_8VPgXuts,6748
95
+ nvidia/cuda_runtime/include/surface_functions.h,sha256=O_WV4xsP5G0_9rPs3G7UFKNFQnz9vIJNhNpTMoVNnKI,19773
96
+ nvidia/cuda_runtime/include/surface_indirect_functions.h,sha256=2CEpbKJ1IQACGa4_wIFhskqOceKuoNYYFU9Sv9bWvPk,11930
97
+ nvidia/cuda_runtime/include/surface_types.h,sha256=q_PY3EiCxB-KchtfAB2JQ8DeVFO2CEBJcZQdixqA2D0,4653
98
+ nvidia/cuda_runtime/include/texture_fetch_functions.h,sha256=MEVQSiGWB2diMjZVNBS4G-QALS146Wj_e8Tjel7UqNQ,32714
99
+ nvidia/cuda_runtime/include/texture_indirect_functions.h,sha256=rTw_uCKT2p3dPJp9Mff4SjALuXsuC5x2w3g7YgyIlWM,23039
100
+ nvidia/cuda_runtime/include/texture_types.h,sha256=nfNPS9qNp-PPDVwlS1uM42hvj3R7lt5NuTworBstymw,9058
101
+ nvidia/cuda_runtime/include/vector_functions.h,sha256=R5plWOkFciltO_AS5if8NcmsgDp3cFNq6zFFDd3oofk,7847
102
+ nvidia/cuda_runtime/include/vector_functions.hpp,sha256=afXhNSd3LFTZo96EPtesTLfvxd4nTmLVzgkj967rTRg,10060
103
+ nvidia/cuda_runtime/include/vector_types.h,sha256=ruVFRp8RioWR9mrvLXX9S15ZSJ97wqTjA8ORCJKKzOQ,13206
104
+ nvidia/cuda_runtime/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
+ nvidia/cuda_runtime/lib/__pycache__/__init__.cpython-311.pyc,,
106
+ nvidia/cuda_runtime/lib/libOpenCL.so.1,sha256=FVLsRLRp2nLlhaKax_0qqY1_mbk2K3-489yy1rYD0_s,30856
107
+ nvidia/cuda_runtime/lib/libcudart.so.11.0,sha256=0NpBrhMjz07rYQEj1p13FBJM_l6_zE5F8CuRDlHFfuY,679264
108
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
109
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/License.txt,sha256=rW9YU_ugyg0VnQ9Y1JrkmDDC-Mk_epJki5zpCttMbM0,59262
110
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/METADATA,sha256=YQ1ja7ng9blOtTnQfqjlHmSyDqk2KxUlJcxItX9tU6Y,1506
111
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/RECORD,,
112
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/WHEEL,sha256=-kQi_VMfvRQozZJT7HUPMfY-5vLo0LVTmAylNJ3Ft98,106
113
+ nvidia_cuda_runtime_cu11-11.8.89.dist-info/top_level.txt,sha256=fTkAtiFuL16nUrB9ytDDtpytz2t0B4NvYTnRzwAhO14,7
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.37.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-manylinux1_x86_64
5
+
tuning-competition-baseline/.venv/lib/python3.11/site-packages/nvidia_cuda_runtime_cu11-11.8.89.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ nvidia
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip-24.3.1.dist-info/RECORD ADDED
@@ -0,0 +1,853 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../../bin/pip,sha256=4AtP-3E6RwrI_be51XSXwxRGhxhML-HR3h9VZHLjcu4,270
2
+ ../../../bin/pip3,sha256=4AtP-3E6RwrI_be51XSXwxRGhxhML-HR3h9VZHLjcu4,270
3
+ ../../../bin/pip3.11,sha256=4AtP-3E6RwrI_be51XSXwxRGhxhML-HR3h9VZHLjcu4,270
4
+ pip-24.3.1.dist-info/AUTHORS.txt,sha256=Cbb630k8EL9FkBzX9Vpi6hpYWrLSlh08eXodL5u0eLI,10925
5
+ pip-24.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
6
+ pip-24.3.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
7
+ pip-24.3.1.dist-info/METADATA,sha256=V8iCNK1GYbC82PWsLMsASDh9AO4veocRlM4Pn9q2KFI,3677
8
+ pip-24.3.1.dist-info/RECORD,,
9
+ pip-24.3.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ pip-24.3.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
11
+ pip-24.3.1.dist-info/entry_points.txt,sha256=eeIjuzfnfR2PrhbjnbzFU6MnSS70kZLxwaHHq6M-bD0,87
12
+ pip-24.3.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
13
+ pip/__init__.py,sha256=faXY_neeYrA_88plEhkyhwAaYeds7wu5U1iGwP24J0s,357
14
+ pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854
15
+ pip/__pip-runner__.py,sha256=cPPWuJ6NK_k-GzfvlejLFgwzmYUROmpAR6QC3Q-vkXQ,1450
16
+ pip/__pycache__/__init__.cpython-311.pyc,,
17
+ pip/__pycache__/__main__.cpython-311.pyc,,
18
+ pip/__pycache__/__pip-runner__.cpython-311.pyc,,
19
+ pip/_internal/__init__.py,sha256=MfcoOluDZ8QMCFYal04IqOJ9q6m2V7a0aOsnI-WOxUo,513
20
+ pip/_internal/__pycache__/__init__.cpython-311.pyc,,
21
+ pip/_internal/__pycache__/build_env.cpython-311.pyc,,
22
+ pip/_internal/__pycache__/cache.cpython-311.pyc,,
23
+ pip/_internal/__pycache__/configuration.cpython-311.pyc,,
24
+ pip/_internal/__pycache__/exceptions.cpython-311.pyc,,
25
+ pip/_internal/__pycache__/main.cpython-311.pyc,,
26
+ pip/_internal/__pycache__/pyproject.cpython-311.pyc,,
27
+ pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc,,
28
+ pip/_internal/__pycache__/wheel_builder.cpython-311.pyc,,
29
+ pip/_internal/build_env.py,sha256=wsTPOWyPTKvUREUcO585OU01kbQufpdigY8fVHv3WIw,10584
30
+ pip/_internal/cache.py,sha256=Jb698p5PNigRtpW5o26wQNkkUv4MnQ94mc471wL63A0,10369
31
+ pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132
32
+ pip/_internal/cli/__pycache__/__init__.cpython-311.pyc,,
33
+ pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc,,
34
+ pip/_internal/cli/__pycache__/base_command.cpython-311.pyc,,
35
+ pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc,,
36
+ pip/_internal/cli/__pycache__/command_context.cpython-311.pyc,,
37
+ pip/_internal/cli/__pycache__/index_command.cpython-311.pyc,,
38
+ pip/_internal/cli/__pycache__/main.cpython-311.pyc,,
39
+ pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc,,
40
+ pip/_internal/cli/__pycache__/parser.cpython-311.pyc,,
41
+ pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc,,
42
+ pip/_internal/cli/__pycache__/req_command.cpython-311.pyc,,
43
+ pip/_internal/cli/__pycache__/spinners.cpython-311.pyc,,
44
+ pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc,,
45
+ pip/_internal/cli/autocompletion.py,sha256=Lli3Mr6aDNu7ZkJJFFvwD2-hFxNI6Avz8OwMyS5TVrs,6865
46
+ pip/_internal/cli/base_command.py,sha256=F8nUcSM-Y-MQljJUe724-yxmc5viFXHyM_zH70NmIh4,8289
47
+ pip/_internal/cli/cmdoptions.py,sha256=mDqBr0d0hoztbRJs-PWtcKpqNAc7khU6ZpoesZKocT8,30110
48
+ pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774
49
+ pip/_internal/cli/index_command.py,sha256=-0oPTruZGkLSMrWDleZ6UtcKP3G-SImRRuhH0RfVE3o,5631
50
+ pip/_internal/cli/main.py,sha256=BDZef-bWe9g9Jpr4OVs4dDf-845HJsKw835T7AqEnAc,2817
51
+ pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338
52
+ pip/_internal/cli/parser.py,sha256=VCMtduzECUV87KaHNu-xJ-wLNL82yT3x16V4XBxOAqI,10825
53
+ pip/_internal/cli/progress_bars.py,sha256=VgydyqjZvfhqpuNcFDn00QNuA9GxRe9CKrRG8jhPuKU,2723
54
+ pip/_internal/cli/req_command.py,sha256=DqeFhmUMs6o6Ev8qawAcOoYNdAZsfyKS0MZI5jsJYwQ,12250
55
+ pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118
56
+ pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
57
+ pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882
58
+ pip/_internal/commands/__pycache__/__init__.cpython-311.pyc,,
59
+ pip/_internal/commands/__pycache__/cache.cpython-311.pyc,,
60
+ pip/_internal/commands/__pycache__/check.cpython-311.pyc,,
61
+ pip/_internal/commands/__pycache__/completion.cpython-311.pyc,,
62
+ pip/_internal/commands/__pycache__/configuration.cpython-311.pyc,,
63
+ pip/_internal/commands/__pycache__/debug.cpython-311.pyc,,
64
+ pip/_internal/commands/__pycache__/download.cpython-311.pyc,,
65
+ pip/_internal/commands/__pycache__/freeze.cpython-311.pyc,,
66
+ pip/_internal/commands/__pycache__/hash.cpython-311.pyc,,
67
+ pip/_internal/commands/__pycache__/help.cpython-311.pyc,,
68
+ pip/_internal/commands/__pycache__/index.cpython-311.pyc,,
69
+ pip/_internal/commands/__pycache__/inspect.cpython-311.pyc,,
70
+ pip/_internal/commands/__pycache__/install.cpython-311.pyc,,
71
+ pip/_internal/commands/__pycache__/list.cpython-311.pyc,,
72
+ pip/_internal/commands/__pycache__/search.cpython-311.pyc,,
73
+ pip/_internal/commands/__pycache__/show.cpython-311.pyc,,
74
+ pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc,,
75
+ pip/_internal/commands/__pycache__/wheel.cpython-311.pyc,,
76
+ pip/_internal/commands/cache.py,sha256=xg76_ZFEBC6zoQ3gXLRfMZJft4z2a0RwH4GEFZC6nnU,7944
77
+ pip/_internal/commands/check.py,sha256=Hr_4eiMd9cgVDgEvjtIdw915NmL7ROIWW8enkr8slPQ,2268
78
+ pip/_internal/commands/completion.py,sha256=HT4lD0bgsflHq2IDgYfiEdp7IGGtE7s6MgI3xn0VQEw,4287
79
+ pip/_internal/commands/configuration.py,sha256=n98enwp6y0b5G6fiRQjaZo43FlJKYve_daMhN-4BRNc,9766
80
+ pip/_internal/commands/debug.py,sha256=DNDRgE9YsKrbYzU0s3VKi8rHtKF4X13CJ_br_8PUXO0,6797
81
+ pip/_internal/commands/download.py,sha256=0qB0nys6ZEPsog451lDsjL5Bx7Z97t-B80oFZKhpzKM,5273
82
+ pip/_internal/commands/freeze.py,sha256=2Vt72BYTSm9rzue6d8dNzt8idxWK4Db6Hd-anq7GQ80,3203
83
+ pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703
84
+ pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132
85
+ pip/_internal/commands/index.py,sha256=RAXxmJwFhVb5S1BYzb5ifX3sn9Na8v2CCVYwSMP8pao,4731
86
+ pip/_internal/commands/inspect.py,sha256=PGrY9TRTRCM3y5Ml8Bdk8DEOXquWRfscr4DRo1LOTPc,3189
87
+ pip/_internal/commands/install.py,sha256=iqesiLIZc6Op9uihMQFYRhAA2DQRZUxbM4z1BwXoFls,29428
88
+ pip/_internal/commands/list.py,sha256=oiIzSjLP6__d7dIS3q0Xb5ywsaOThBWRqMyjjKzkPdM,12769
89
+ pip/_internal/commands/search.py,sha256=fWkUQVx_gm8ebbFAlCgqtxKXT9rNahpJ-BI__3HNZpg,5626
90
+ pip/_internal/commands/show.py,sha256=IG9L5uo8w6UA4tI_IlmaxLCoNKPa5JNJCljj3NWs0OE,7507
91
+ pip/_internal/commands/uninstall.py,sha256=7pOR7enK76gimyxQbzxcG1OsyLXL3DvX939xmM8Fvtg,3892
92
+ pip/_internal/commands/wheel.py,sha256=eJRhr_qoNNxWAkkdJCNiQM7CXd4E1_YyQhsqJnBPGGg,6414
93
+ pip/_internal/configuration.py,sha256=XkAiBS0hpzsM-LF0Qu5hvPWO_Bs67-oQKRYFBuMbESs,14006
94
+ pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
95
+ pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc,,
96
+ pip/_internal/distributions/__pycache__/base.cpython-311.pyc,,
97
+ pip/_internal/distributions/__pycache__/installed.cpython-311.pyc,,
98
+ pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc,,
99
+ pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc,,
100
+ pip/_internal/distributions/base.py,sha256=QeB9qvKXDIjLdPBDE5fMgpfGqMMCr-govnuoQnGuiF8,1783
101
+ pip/_internal/distributions/installed.py,sha256=QinHFbWAQ8oE0pbD8MFZWkwlnfU1QYTccA1vnhrlYOU,842
102
+ pip/_internal/distributions/sdist.py,sha256=PlcP4a6-R6c98XnOM-b6Lkb3rsvh9iG4ok8shaanrzs,6751
103
+ pip/_internal/distributions/wheel.py,sha256=THBYfnv7VVt8mYhMYUtH13S1E7FDwtDyDfmUcl8ai0E,1317
104
+ pip/_internal/exceptions.py,sha256=2_byISIv3kSnI_9T-Esfxrt0LnTRgcUHyxu0twsHjQY,26481
105
+ pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30
106
+ pip/_internal/index/__pycache__/__init__.cpython-311.pyc,,
107
+ pip/_internal/index/__pycache__/collector.cpython-311.pyc,,
108
+ pip/_internal/index/__pycache__/package_finder.cpython-311.pyc,,
109
+ pip/_internal/index/__pycache__/sources.cpython-311.pyc,,
110
+ pip/_internal/index/collector.py,sha256=RdPO0JLAlmyBWPAWYHPyRoGjz3GNAeTngCNkbGey_mE,16265
111
+ pip/_internal/index/package_finder.py,sha256=yRC4xsyudwKnNoU6IXvNoyqYo5ScT7lB6Wa-z2eh7cs,37666
112
+ pip/_internal/index/sources.py,sha256=lPBLK5Xiy8Q6IQMio26Wl7ocfZOKkgGklIBNyUJ23fI,8632
113
+ pip/_internal/locations/__init__.py,sha256=UaAxeZ_f93FyouuFf4p7SXYF-4WstXuEvd3LbmPCAno,14925
114
+ pip/_internal/locations/__pycache__/__init__.cpython-311.pyc,,
115
+ pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc,,
116
+ pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc,,
117
+ pip/_internal/locations/__pycache__/base.cpython-311.pyc,,
118
+ pip/_internal/locations/_distutils.py,sha256=x6nyVLj7X11Y4khIdf-mFlxMl2FWadtVEgeb8upc_WI,6013
119
+ pip/_internal/locations/_sysconfig.py,sha256=IGzds60qsFneRogC-oeBaY7bEh3lPt_v47kMJChQXsU,7724
120
+ pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556
121
+ pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340
122
+ pip/_internal/metadata/__init__.py,sha256=9pU3W3s-6HtjFuYhWcLTYVmSaziklPv7k2x8p7X1GmA,4339
123
+ pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc,,
124
+ pip/_internal/metadata/__pycache__/_json.cpython-311.pyc,,
125
+ pip/_internal/metadata/__pycache__/base.cpython-311.pyc,,
126
+ pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc,,
127
+ pip/_internal/metadata/_json.py,sha256=P0cAJrH_mtmMZvlZ16ZXm_-izA4lpr5wy08laICuiaA,2644
128
+ pip/_internal/metadata/base.py,sha256=ft0K5XNgI4ETqZnRv2-CtvgYiMOMAeGMAzxT-f6VLJA,25298
129
+ pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135
130
+ pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc,,
131
+ pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc,,
132
+ pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc,,
133
+ pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc,,
134
+ pip/_internal/metadata/importlib/_compat.py,sha256=c6av8sP8BBjAZuFSJow1iWfygUXNM3xRTCn5nqw6B9M,2796
135
+ pip/_internal/metadata/importlib/_dists.py,sha256=anh0mLI-FYRPUhAdipd0Va3YJJc6HelCKQ0bFhY10a0,8017
136
+ pip/_internal/metadata/importlib/_envs.py,sha256=UUB980XSrDWrMpQ1_G45i0r8Hqlg_tg3IPQ63mEqbNc,7431
137
+ pip/_internal/metadata/pkg_resources.py,sha256=U07ETAINSGeSRBfWUG93E4tZZbaW_f7PGzEqZN0hulc,10542
138
+ pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63
139
+ pip/_internal/models/__pycache__/__init__.cpython-311.pyc,,
140
+ pip/_internal/models/__pycache__/candidate.cpython-311.pyc,,
141
+ pip/_internal/models/__pycache__/direct_url.cpython-311.pyc,,
142
+ pip/_internal/models/__pycache__/format_control.cpython-311.pyc,,
143
+ pip/_internal/models/__pycache__/index.cpython-311.pyc,,
144
+ pip/_internal/models/__pycache__/installation_report.cpython-311.pyc,,
145
+ pip/_internal/models/__pycache__/link.cpython-311.pyc,,
146
+ pip/_internal/models/__pycache__/scheme.cpython-311.pyc,,
147
+ pip/_internal/models/__pycache__/search_scope.cpython-311.pyc,,
148
+ pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc,,
149
+ pip/_internal/models/__pycache__/target_python.cpython-311.pyc,,
150
+ pip/_internal/models/__pycache__/wheel.cpython-311.pyc,,
151
+ pip/_internal/models/candidate.py,sha256=zzgFRuw_kWPjKpGw7LC0ZUMD2CQ2EberUIYs8izjdCA,753
152
+ pip/_internal/models/direct_url.py,sha256=uBtY2HHd3TO9cKQJWh0ThvE5FRr-MWRYChRU4IG9HZE,6578
153
+ pip/_internal/models/format_control.py,sha256=wtsQqSK9HaUiNxQEuB-C62eVimw6G4_VQFxV9-_KDBE,2486
154
+ pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
155
+ pip/_internal/models/installation_report.py,sha256=zRVZoaz-2vsrezj_H3hLOhMZCK9c7TbzWgC-jOalD00,2818
156
+ pip/_internal/models/link.py,sha256=jHax9O-9zlSzEwjBCDkx0OXjKXwBDwOuPwn-PsR8dCs,21034
157
+ pip/_internal/models/scheme.py,sha256=PakmHJM3e8OOWSZFtfz1Az7f1meONJnkGuQxFlt3wBE,575
158
+ pip/_internal/models/search_scope.py,sha256=67NEnsYY84784S-MM7ekQuo9KXLH-7MzFntXjapvAo0,4531
159
+ pip/_internal/models/selection_prefs.py,sha256=qaFfDs3ciqoXPg6xx45N1jPLqccLJw4N0s4P0PyHTQ8,2015
160
+ pip/_internal/models/target_python.py,sha256=2XaH2rZ5ZF-K5wcJbEMGEl7SqrTToDDNkrtQ2v_v_-Q,4271
161
+ pip/_internal/models/wheel.py,sha256=G7dND_s4ebPkEL7RJ1qCY0QhUUWIIK6AnjWgRATF5no,4539
162
+ pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50
163
+ pip/_internal/network/__pycache__/__init__.cpython-311.pyc,,
164
+ pip/_internal/network/__pycache__/auth.cpython-311.pyc,,
165
+ pip/_internal/network/__pycache__/cache.cpython-311.pyc,,
166
+ pip/_internal/network/__pycache__/download.cpython-311.pyc,,
167
+ pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc,,
168
+ pip/_internal/network/__pycache__/session.cpython-311.pyc,,
169
+ pip/_internal/network/__pycache__/utils.cpython-311.pyc,,
170
+ pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc,,
171
+ pip/_internal/network/auth.py,sha256=D4gASjUrqoDFlSt6gQ767KAAjv6PUyJU0puDlhXNVRE,20809
172
+ pip/_internal/network/cache.py,sha256=48A971qCzKNFvkb57uGEk7-0xaqPS0HWj2711QNTxkU,3935
173
+ pip/_internal/network/download.py,sha256=FLOP29dPYECBiAi7eEjvAbNkyzaKNqbyjOT2m8HPW8U,6048
174
+ pip/_internal/network/lazy_wheel.py,sha256=PBdoMoNQQIA84Fhgne38jWF52W4x_KtsHjxgv4dkRKA,7622
175
+ pip/_internal/network/session.py,sha256=XmanBKjVwPFmh1iJ58q6TDh9xabH37gREuQJ_feuZGA,18741
176
+ pip/_internal/network/utils.py,sha256=Inaxel-NxBu4PQWkjyErdnfewsFCcgHph7dzR1-FboY,4088
177
+ pip/_internal/network/xmlrpc.py,sha256=sAxzOacJ-N1NXGPvap9jC3zuYWSnnv3GXtgR2-E2APA,1838
178
+ pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
+ pip/_internal/operations/__pycache__/__init__.cpython-311.pyc,,
180
+ pip/_internal/operations/__pycache__/check.cpython-311.pyc,,
181
+ pip/_internal/operations/__pycache__/freeze.cpython-311.pyc,,
182
+ pip/_internal/operations/__pycache__/prepare.cpython-311.pyc,,
183
+ pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
+ pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc,,
185
+ pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc,,
186
+ pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc,,
187
+ pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc,,
188
+ pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc,,
189
+ pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc,,
190
+ pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc,,
191
+ pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc,,
192
+ pip/_internal/operations/build/build_tracker.py,sha256=-ARW_TcjHCOX7D2NUOGntB4Fgc6b4aolsXkAK6BWL7w,4774
193
+ pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422
194
+ pip/_internal/operations/build/metadata_editable.py,sha256=VLL7LvntKE8qxdhUdEJhcotFzUsOSI8NNS043xULKew,1474
195
+ pip/_internal/operations/build/metadata_legacy.py,sha256=8i6i1QZX9m_lKPStEFsHKM0MT4a-CD408JOw99daLmo,2190
196
+ pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075
197
+ pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417
198
+ pip/_internal/operations/build/wheel_legacy.py,sha256=K-6kNhmj-1xDF45ny1yheMerF0ui4EoQCLzEoHh6-tc,3045
199
+ pip/_internal/operations/check.py,sha256=L24vRL8VWbyywdoeAhM89WCd8zLTnjIbULlKelUgIec,5912
200
+ pip/_internal/operations/freeze.py,sha256=V59yEyCSz_YhZuhH09-6aV_zvYBMrS_IxFFNqn2QzlA,9864
201
+ pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51
202
+ pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc,,
203
+ pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc,,
204
+ pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc,,
205
+ pip/_internal/operations/install/editable_legacy.py,sha256=PoEsNEPGbIZ2yQphPsmYTKLOCMs4gv5OcCdzW124NcA,1283
206
+ pip/_internal/operations/install/wheel.py,sha256=X5Iz9yUg5LlK5VNQ9g2ikc6dcRu8EPi_SUi5iuEDRgo,27615
207
+ pip/_internal/operations/prepare.py,sha256=joWJwPkuqGscQgVNImLK71e9hRapwKvRCM8HclysmvU,28118
208
+ pip/_internal/pyproject.py,sha256=rw4fwlptDp1hZgYoplwbAGwWA32sWQkp7ysf8Ju6iXc,7287
209
+ pip/_internal/req/__init__.py,sha256=HxBFtZy_BbCclLgr26waMtpzYdO5T3vxePvpGAXSt5s,2653
210
+ pip/_internal/req/__pycache__/__init__.cpython-311.pyc,,
211
+ pip/_internal/req/__pycache__/constructors.cpython-311.pyc,,
212
+ pip/_internal/req/__pycache__/req_file.cpython-311.pyc,,
213
+ pip/_internal/req/__pycache__/req_install.cpython-311.pyc,,
214
+ pip/_internal/req/__pycache__/req_set.cpython-311.pyc,,
215
+ pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc,,
216
+ pip/_internal/req/constructors.py,sha256=v1qzCN1mIldwx-nCrPc8JO4lxkm3Fv8M5RWvt8LISjc,18430
217
+ pip/_internal/req/req_file.py,sha256=gOOJTzL-mDRPcQhjwqjDrjn4V-3rK9TnEFnU3v8RA4Q,18752
218
+ pip/_internal/req/req_install.py,sha256=yhT98NGDoAEk03jznTJnYCznzhiMEEA2ocgsUG_dcNU,35788
219
+ pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858
220
+ pip/_internal/req/req_uninstall.py,sha256=qzDIxJo-OETWqGais7tSMCDcWbATYABT-Tid3ityF0s,23853
221
+ pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
+ pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc,,
223
+ pip/_internal/resolution/__pycache__/base.cpython-311.pyc,,
224
+ pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583
225
+ pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
+ pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc,,
227
+ pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc,,
228
+ pip/_internal/resolution/legacy/resolver.py,sha256=3HZiJBRd1FTN6jQpI4qRO8-TbLYeIbUTS6PFvXnXs2w,24068
229
+ pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
+ pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc,,
231
+ pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc,,
232
+ pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc,,
233
+ pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc,,
234
+ pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc,,
235
+ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc,,
236
+ pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc,,
237
+ pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc,,
238
+ pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc,,
239
+ pip/_internal/resolution/resolvelib/base.py,sha256=DCf669FsqyQY5uqXeePDHQY1e4QO-pBzWH8O0s9-K94,5023
240
+ pip/_internal/resolution/resolvelib/candidates.py,sha256=5UZ1upNnmqsP-nmEZaDYxaBgCoejw_e2WVGmmAvBxXc,20001
241
+ pip/_internal/resolution/resolvelib/factory.py,sha256=511CaUR41LqjALuFafLVfx15WRvMhxYTdjQCoSvp4gw,32661
242
+ pip/_internal/resolution/resolvelib/found_candidates.py,sha256=9hrTyQqFvl9I7Tji79F1AxHv39Qh1rkJ_7deSHSMfQc,6383
243
+ pip/_internal/resolution/resolvelib/provider.py,sha256=bcsFnYvlmtB80cwVdW1fIwgol8ZNr1f1VHyRTkz47SM,9935
244
+ pip/_internal/resolution/resolvelib/reporter.py,sha256=00JtoXEkTlw0-rl_sl54d71avwOsJHt9GGHcrj5Sza0,3168
245
+ pip/_internal/resolution/resolvelib/requirements.py,sha256=7JG4Z72e5Yk4vU0S5ulGvbqTy4FMQGYhY5zQhX9zTtY,8065
246
+ pip/_internal/resolution/resolvelib/resolver.py,sha256=nLJOsVMEVi2gQUVJoUFKMZAeu2f7GRMjGMvNSWyz0Bc,12592
247
+ pip/_internal/self_outdated_check.py,sha256=pkjQixuWyQ1vrVxZAaYD6SSHgXuFUnHZybXEWTkh0S0,8145
248
+ pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
+ pip/_internal/utils/__pycache__/__init__.cpython-311.pyc,,
250
+ pip/_internal/utils/__pycache__/_jaraco_text.cpython-311.pyc,,
251
+ pip/_internal/utils/__pycache__/_log.cpython-311.pyc,,
252
+ pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc,,
253
+ pip/_internal/utils/__pycache__/compat.cpython-311.pyc,,
254
+ pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc,,
255
+ pip/_internal/utils/__pycache__/datetime.cpython-311.pyc,,
256
+ pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc,,
257
+ pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc,,
258
+ pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc,,
259
+ pip/_internal/utils/__pycache__/encoding.cpython-311.pyc,,
260
+ pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc,,
261
+ pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc,,
262
+ pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc,,
263
+ pip/_internal/utils/__pycache__/glibc.cpython-311.pyc,,
264
+ pip/_internal/utils/__pycache__/hashes.cpython-311.pyc,,
265
+ pip/_internal/utils/__pycache__/logging.cpython-311.pyc,,
266
+ pip/_internal/utils/__pycache__/misc.cpython-311.pyc,,
267
+ pip/_internal/utils/__pycache__/packaging.cpython-311.pyc,,
268
+ pip/_internal/utils/__pycache__/retry.cpython-311.pyc,,
269
+ pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc,,
270
+ pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc,,
271
+ pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc,,
272
+ pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc,,
273
+ pip/_internal/utils/__pycache__/urls.cpython-311.pyc,,
274
+ pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc,,
275
+ pip/_internal/utils/__pycache__/wheel.cpython-311.pyc,,
276
+ pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350
277
+ pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
278
+ pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665
279
+ pip/_internal/utils/compat.py,sha256=ckkFveBiYQjRWjkNsajt_oWPS57tJvE8XxoC4OIYgCY,2399
280
+ pip/_internal/utils/compatibility_tags.py,sha256=OWq5axHpW-MEEPztGdvgADrgJPAcV9a88Rxm4Z8VBs8,6272
281
+ pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242
282
+ pip/_internal/utils/deprecation.py,sha256=k7Qg_UBAaaTdyq82YVARA6D7RmcGTXGv7fnfcgigj4Q,3707
283
+ pip/_internal/utils/direct_url_helpers.py,sha256=r2MRtkVDACv9AGqYODBUC9CjwgtsUU1s68hmgfCJMtA,3196
284
+ pip/_internal/utils/egg_link.py,sha256=0FePZoUYKv4RGQ2t6x7w5Z427wbA_Uo3WZnAkrgsuqo,2463
285
+ pip/_internal/utils/encoding.py,sha256=qqsXDtiwMIjXMEiIVSaOjwH5YmirCaK-dIzb6-XJsL0,1169
286
+ pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064
287
+ pip/_internal/utils/filesystem.py,sha256=ajvA-q4ocliW9kPp8Yquh-4vssXbu-UKbo5FV9V4X64,4950
288
+ pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716
289
+ pip/_internal/utils/glibc.py,sha256=vUkWq_1pJuzcYNcGKLlQmABoUiisK8noYY1yc8Wq4w4,3734
290
+ pip/_internal/utils/hashes.py,sha256=XGGLL0AG8-RhWnyz87xF6MFZ--BKadHU35D47eApCKI,4972
291
+ pip/_internal/utils/logging.py,sha256=7BFKB1uFjdxD5crM-GtwA5T2qjbQ2LPD-gJDuJeDNTg,11606
292
+ pip/_internal/utils/misc.py,sha256=NRV0_2fFhzy1jhvInSBv4dqCmTwct8PV7Kp0m-BPRGM,23530
293
+ pip/_internal/utils/packaging.py,sha256=iI3LH43lVNR4hWBOqF6lFsZq4aycb2j0UcHlmDmcqUg,2109
294
+ pip/_internal/utils/retry.py,sha256=mhFbykXjhTnZfgzeuy-vl9c8nECnYn_CMtwNJX2tYzQ,1392
295
+ pip/_internal/utils/setuptools_build.py,sha256=ouXpud-jeS8xPyTPsXJ-m34NPvK5os45otAzdSV_IJE,4435
296
+ pip/_internal/utils/subprocess.py,sha256=EsvqSRiSMHF98T8Txmu6NLU3U--MpTTQjtNgKP0P--M,8988
297
+ pip/_internal/utils/temp_dir.py,sha256=5qOXe8M4JeY6vaFQM867d5zkp1bSwMZ-KT5jymmP0Zg,9310
298
+ pip/_internal/utils/unpacking.py,sha256=eyDkSsk4nW8ZfiSjNzJduCznpHyaGHVv3ak_LMGsiEM,11951
299
+ pip/_internal/utils/urls.py,sha256=qceSOZb5lbNDrHNsv7_S4L4Ytszja5NwPKUMnZHbYnM,1599
300
+ pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456
301
+ pip/_internal/utils/wheel.py,sha256=b442jkydFHjXzDy6cMR7MpzWBJ1Q82hR5F33cmcHV3g,4494
302
+ pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
303
+ pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc,,
304
+ pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc,,
305
+ pip/_internal/vcs/__pycache__/git.cpython-311.pyc,,
306
+ pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc,,
307
+ pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc,,
308
+ pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc,,
309
+ pip/_internal/vcs/bazaar.py,sha256=EKStcQaKpNu0NK4p5Q10Oc4xb3DUxFw024XrJy40bFQ,3528
310
+ pip/_internal/vcs/git.py,sha256=3tpc9LQA_J4IVW5r5NvWaaSeDzcmJOrSFZN0J8vIKfU,18177
311
+ pip/_internal/vcs/mercurial.py,sha256=oULOhzJ2Uie-06d1omkL-_Gc6meGaUkyogvqG9ZCyPs,5249
312
+ pip/_internal/vcs/subversion.py,sha256=ddTugHBqHzV3ebKlU5QXHPN4gUqlyXbOx8q8NgXKvs8,11735
313
+ pip/_internal/vcs/versioncontrol.py,sha256=cvf_-hnTAjQLXJ3d17FMNhQfcO1AcKWUF10tfrYyP-c,22440
314
+ pip/_internal/wheel_builder.py,sha256=DL3A8LKeRj_ACp11WS5wSgASgPFqeyAeXJKdXfmaWXU,11799
315
+ pip/_vendor/__init__.py,sha256=JYuAXvClhInxIrA2FTp5p-uuWVL7WV6-vEpTs46-Qh4,4873
316
+ pip/_vendor/__pycache__/__init__.cpython-311.pyc,,
317
+ pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc,,
318
+ pip/_vendor/cachecontrol/__init__.py,sha256=GiYoagwPEiJ_xR_lbwWGaoCiPtF_rz4isjfjdDAgHU4,676
319
+ pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc,,
320
+ pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc,,
321
+ pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc,,
322
+ pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc,,
323
+ pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc,,
324
+ pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc,,
325
+ pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc,,
326
+ pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc,,
327
+ pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc,,
328
+ pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737
329
+ pip/_vendor/cachecontrol/adapter.py,sha256=fByO_Pd_EOemjWbuocvBWdN85xT0q_TBm2lxS6vD4fk,6355
330
+ pip/_vendor/cachecontrol/cache.py,sha256=OTQj72tUf8C1uEgczdl3Gc8vkldSzsTITKtDGKMx4z8,1952
331
+ pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303
332
+ pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc,,
333
+ pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc,,
334
+ pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc,,
335
+ pip/_vendor/cachecontrol/caches/file_cache.py,sha256=9AlmmTJc6cslb6k5z_6q0sGPHVrMj8zv-uWy-simmfE,5406
336
+ pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386
337
+ pip/_vendor/cachecontrol/controller.py,sha256=o-ejGJlBmpKK8QQLyTPJj0t7siU8XVHXuV8MCybCxQ8,18575
338
+ pip/_vendor/cachecontrol/filewrapper.py,sha256=STttGmIPBvZzt2b51dUOwoWX5crcMCpKZOisM3f5BNc,4292
339
+ pip/_vendor/cachecontrol/heuristics.py,sha256=IYe4QmHERWsMvtxNrp920WeaIsaTTyqLB14DSheSbtY,4834
340
+ pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
+ pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163
342
+ pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417
343
+ pip/_vendor/certifi/__init__.py,sha256=p_GYZrjUwPBUhpLlCZoGb0miKBKSqDAyZC5DvIuqbHQ,94
344
+ pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
345
+ pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc,,
346
+ pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc,,
347
+ pip/_vendor/certifi/__pycache__/core.cpython-311.pyc,,
348
+ pip/_vendor/certifi/cacert.pem,sha256=lO3rZukXdPyuk6BWUJFOKQliWaXH6HGh9l1GGrUgG0c,299427
349
+ pip/_vendor/certifi/core.py,sha256=2SRT5rIcQChFDbe37BQa-kULxAgJ8qN6l1jfqTp4HIs,4486
350
+ pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
+ pip/_vendor/distlib/__init__.py,sha256=dcwgYGYGQqAEawBXPDtIx80DO_3cOmFv8HTc8JMzknQ,625
352
+ pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc,,
353
+ pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc,,
354
+ pip/_vendor/distlib/__pycache__/database.cpython-311.pyc,,
355
+ pip/_vendor/distlib/__pycache__/index.cpython-311.pyc,,
356
+ pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc,,
357
+ pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc,,
358
+ pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc,,
359
+ pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc,,
360
+ pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc,,
361
+ pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc,,
362
+ pip/_vendor/distlib/__pycache__/util.cpython-311.pyc,,
363
+ pip/_vendor/distlib/__pycache__/version.cpython-311.pyc,,
364
+ pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc,,
365
+ pip/_vendor/distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467
366
+ pip/_vendor/distlib/database.py,sha256=mHy_LxiXIsIVRb-T0-idBrVLw3Ffij5teHCpbjmJ9YU,51160
367
+ pip/_vendor/distlib/index.py,sha256=lTbw268rRhj8dw1sib3VZ_0EhSGgoJO3FKJzSFMOaeA,20797
368
+ pip/_vendor/distlib/locators.py,sha256=oBeAZpFuPQSY09MgNnLfQGGAXXvVO96BFpZyKMuK4tM,51026
369
+ pip/_vendor/distlib/manifest.py,sha256=3qfmAmVwxRqU1o23AlfXrQGZzh6g_GGzTAP_Hb9C5zQ,14168
370
+ pip/_vendor/distlib/markers.py,sha256=X6sDvkFGcYS8gUW8hfsWuKEKAqhQZAJ7iXOMLxRYjYk,5164
371
+ pip/_vendor/distlib/metadata.py,sha256=zil3sg2EUfLXVigljY2d_03IJt-JSs7nX-73fECMX2s,38724
372
+ pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820
373
+ pip/_vendor/distlib/scripts.py,sha256=BJliaDAZaVB7WAkwokgC3HXwLD2iWiHaVI50H7C6eG8,18608
374
+ pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792
375
+ pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784
376
+ pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032
377
+ pip/_vendor/distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682
378
+ pip/_vendor/distlib/version.py,sha256=s5VIs8wBn0fxzGxWM_aA2ZZyx525HcZbMvcTlTyZ3Rg,23727
379
+ pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648
380
+ pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448
381
+ pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888
382
+ pip/_vendor/distlib/wheel.py,sha256=DFIVguEQHCdxnSdAO0dfFsgMcvVZitg7bCOuLwZ7A_s,43979
383
+ pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981
384
+ pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64
385
+ pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc,,
386
+ pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc,,
387
+ pip/_vendor/distro/__pycache__/distro.cpython-311.pyc,,
388
+ pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430
389
+ pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
+ pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849
391
+ pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc,,
392
+ pip/_vendor/idna/__pycache__/codec.cpython-311.pyc,,
393
+ pip/_vendor/idna/__pycache__/compat.cpython-311.pyc,,
394
+ pip/_vendor/idna/__pycache__/core.cpython-311.pyc,,
395
+ pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc,,
396
+ pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc,,
397
+ pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc,,
398
+ pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc,,
399
+ pip/_vendor/idna/codec.py,sha256=PS6m-XmdST7Wj7J7ulRMakPDt5EBJyYrT3CPtjh-7t4,3426
400
+ pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321
401
+ pip/_vendor/idna/core.py,sha256=lyhpoe2vulEaB_65xhXmoKgO-xUqFDvcwxu5hpNNO4E,12663
402
+ pip/_vendor/idna/idnadata.py,sha256=dqRwytzkjIHMBa2R1lYvHDwACenZPt8eGVu1Y8UBE-E,78320
403
+ pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881
404
+ pip/_vendor/idna/package_data.py,sha256=Tkt0KnIeyIlnHddOaz9WSkkislNgokJAuE-p5GorMqo,21
405
+ pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
406
+ pip/_vendor/idna/uts46data.py,sha256=1KuksWqLuccPXm2uyRVkhfiFLNIhM_H2m4azCcnOqEU,206503
407
+ pip/_vendor/msgpack/__init__.py,sha256=gsMP7JTECZNUSjvOyIbdhNOkpB9Z8BcGwabVGY2UcdQ,1077
408
+ pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc,,
409
+ pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc,,
410
+ pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc,,
411
+ pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc,,
412
+ pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
413
+ pip/_vendor/msgpack/ext.py,sha256=fKp00BqDLjUtZnPd70Llr138zk8JsCuSpJkkZ5S4dt8,5629
414
+ pip/_vendor/msgpack/fallback.py,sha256=wdUWJkWX2gzfRW9BBCTOuIE1Wvrf5PtBtR8ZtY7G_EE,33175
415
+ pip/_vendor/packaging/__init__.py,sha256=dtw2bNmWCQ9WnMoK3bk_elL1svSlikXtLpZhCFIB9SE,496
416
+ pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc,,
417
+ pip/_vendor/packaging/__pycache__/_elffile.cpython-311.pyc,,
418
+ pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc,,
419
+ pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc,,
420
+ pip/_vendor/packaging/__pycache__/_parser.cpython-311.pyc,,
421
+ pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc,,
422
+ pip/_vendor/packaging/__pycache__/_tokenizer.cpython-311.pyc,,
423
+ pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc,,
424
+ pip/_vendor/packaging/__pycache__/metadata.cpython-311.pyc,,
425
+ pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc,,
426
+ pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc,,
427
+ pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc,,
428
+ pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc,,
429
+ pip/_vendor/packaging/__pycache__/version.cpython-311.pyc,,
430
+ pip/_vendor/packaging/_elffile.py,sha256=_LcJW4YNKywYsl4169B2ukKRqwxjxst_8H0FRVQKlz8,3282
431
+ pip/_vendor/packaging/_manylinux.py,sha256=Xo4V0PZz8sbuVCbTni0t1CR0AHeir_7ib4lTmV8scD4,9586
432
+ pip/_vendor/packaging/_musllinux.py,sha256=p9ZqNYiOItGee8KcZFeHF_YcdhVwGHdK6r-8lgixvGQ,2694
433
+ pip/_vendor/packaging/_parser.py,sha256=s_TvTvDNK0NrM2QB3VKThdWFM4Nc0P6JnkObkl3MjpM,10236
434
+ pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
435
+ pip/_vendor/packaging/_tokenizer.py,sha256=J6v5H7Jzvb-g81xp_2QACKwO7LxHQA6ikryMU7zXwN8,5273
436
+ pip/_vendor/packaging/markers.py,sha256=dWKSqn5Sp-jDmOG-W3GfLHKjwhf1IsznbT71VlBoB5M,10671
437
+ pip/_vendor/packaging/metadata.py,sha256=KINuSkJ12u-SyoKNTy_pHNGAfMUtxNvZ53qA1zAKcKI,32349
438
+ pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
439
+ pip/_vendor/packaging/requirements.py,sha256=gYyRSAdbrIyKDY66ugIDUQjRMvxkH2ALioTmX3tnL6o,2947
440
+ pip/_vendor/packaging/specifiers.py,sha256=HfGgfNJRvrzC759gnnoojHyiWs_DYmcw5PEh5jHH-YE,39738
441
+ pip/_vendor/packaging/tags.py,sha256=Fo6_cit95-7QfcMb16XtI7AUiSMgdwA_hCO_9lV2pz4,21388
442
+ pip/_vendor/packaging/utils.py,sha256=NAdYUwnlAOpkat_RthavX8a07YuVxgGL_vwrx73GSDM,5287
443
+ pip/_vendor/packaging/version.py,sha256=wE4sSVlF-d1H6HFC1vszEe35CwTig_fh4HHIFg95hFE,16210
444
+ pip/_vendor/pkg_resources/__init__.py,sha256=jrhDRbOubP74QuPXxd7U7Po42PH2l-LZ2XfcO7llpZ4,124463
445
+ pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc,,
446
+ pip/_vendor/platformdirs/__init__.py,sha256=FTA6LGNm40GwNZt3gG3uLAacWvf2E_2HTmH0rAALGR8,22285
447
+ pip/_vendor/platformdirs/__main__.py,sha256=jBJ8zb7Mpx5ebcqF83xrpO94MaeCpNGHVf9cvDN2JLg,1505
448
+ pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc,,
449
+ pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc,,
450
+ pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc,,
451
+ pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc,,
452
+ pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc,,
453
+ pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc,,
454
+ pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc,,
455
+ pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc,,
456
+ pip/_vendor/platformdirs/android.py,sha256=xZXY9Jd46WOsxT2U6-5HsNtDZ-IQqxcEUrBLl3hYk4o,9016
457
+ pip/_vendor/platformdirs/api.py,sha256=QBYdUac2eC521ek_y53uD1Dcq-lJX8IgSRVd4InC6uc,8996
458
+ pip/_vendor/platformdirs/macos.py,sha256=wftsbsvq6nZ0WORXSiCrZNkRHz_WKuktl0a6mC7MFkI,5580
459
+ pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
460
+ pip/_vendor/platformdirs/unix.py,sha256=Cci9Wqt35dAMsg6HT9nRGHSBW5obb0pR3AE1JJnsCXg,10643
461
+ pip/_vendor/platformdirs/version.py,sha256=r7F76tZRjgQKzrpx_I0_ZMQOMU-PS7eGnHD7zEK3KB0,411
462
+ pip/_vendor/platformdirs/windows.py,sha256=IFpiohUBwxPtCzlyKwNtxyW4Jk8haa6W8o59mfrDXVo,10125
463
+ pip/_vendor/pygments/__init__.py,sha256=7N1oiaWulw_nCsTY4EEixYLz15pWY5u4uPAFFi-ielU,2983
464
+ pip/_vendor/pygments/__main__.py,sha256=isIhBxLg65nLlXukG4VkMuPfNdd7gFzTZ_R_z3Q8diY,353
465
+ pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc,,
466
+ pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc,,
467
+ pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc,,
468
+ pip/_vendor/pygments/__pycache__/console.cpython-311.pyc,,
469
+ pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc,,
470
+ pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc,,
471
+ pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc,,
472
+ pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc,,
473
+ pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc,,
474
+ pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc,,
475
+ pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc,,
476
+ pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc,,
477
+ pip/_vendor/pygments/__pycache__/style.cpython-311.pyc,,
478
+ pip/_vendor/pygments/__pycache__/token.cpython-311.pyc,,
479
+ pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc,,
480
+ pip/_vendor/pygments/__pycache__/util.cpython-311.pyc,,
481
+ pip/_vendor/pygments/cmdline.py,sha256=LIVzmAunlk9sRJJp54O4KRy9GDIN4Wu13v9p9QzfGPM,23656
482
+ pip/_vendor/pygments/console.py,sha256=yhP9UsLAVmWKVQf2446JJewkA7AiXeeTf4Ieg3Oi2fU,1718
483
+ pip/_vendor/pygments/filter.py,sha256=_ADNPCskD8_GmodHi6_LoVgPU3Zh336aBCT5cOeTMs0,1910
484
+ pip/_vendor/pygments/filters/__init__.py,sha256=RdedK2KWKXlKwR7cvkfr3NUj9YiZQgMgilRMFUg2jPA,40392
485
+ pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc,,
486
+ pip/_vendor/pygments/formatter.py,sha256=jDWBTndlBH2Z5IYZFVDnP0qn1CaTQjTWt7iAGtCnJEg,4390
487
+ pip/_vendor/pygments/formatters/__init__.py,sha256=8No-NUs8rBTSSBJIv4hSEQt2M0cFB4hwAT0snVc2QGE,5385
488
+ pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc,,
489
+ pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc,,
490
+ pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc,,
491
+ pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc,,
492
+ pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc,,
493
+ pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc,,
494
+ pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc,,
495
+ pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc,,
496
+ pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc,,
497
+ pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc,,
498
+ pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc,,
499
+ pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc,,
500
+ pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc,,
501
+ pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc,,
502
+ pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176
503
+ pip/_vendor/pygments/formatters/bbcode.py,sha256=3JQLI45tcrQ_kRUMjuab6C7Hb0XUsbVWqqbSn9cMjkI,3320
504
+ pip/_vendor/pygments/formatters/groff.py,sha256=M39k0PaSSZRnxWjqBSVPkF0mu1-Vr7bm6RsFvs-CNN4,5106
505
+ pip/_vendor/pygments/formatters/html.py,sha256=SE2jc3YCqbMS3rZW9EAmDlAUhdVxJ52gA4dileEvCGU,35669
506
+ pip/_vendor/pygments/formatters/img.py,sha256=MwA4xWPLOwh6j7Yc6oHzjuqSPt0M1fh5r-5BTIIUfsU,23287
507
+ pip/_vendor/pygments/formatters/irc.py,sha256=dp1Z0l_ObJ5NFh9MhqLGg5ptG5hgJqedT2Vkutt9v0M,4981
508
+ pip/_vendor/pygments/formatters/latex.py,sha256=XMmhOCqUKDBQtG5mGJNAFYxApqaC5puo5cMmPfK3944,19306
509
+ pip/_vendor/pygments/formatters/other.py,sha256=56PMJOliin-rAUdnRM0i1wsV1GdUPd_dvQq0_UPfF9c,5034
510
+ pip/_vendor/pygments/formatters/pangomarkup.py,sha256=y16U00aVYYEFpeCfGXlYBSMacG425CbfoG8oKbKegIg,2218
511
+ pip/_vendor/pygments/formatters/rtf.py,sha256=ZT90dmcKyJboIB0mArhL7IhE467GXRN0G7QAUgG03To,11957
512
+ pip/_vendor/pygments/formatters/svg.py,sha256=KKsiophPupHuxm0So-MsbQEWOT54IAiSF7hZPmxtKXE,7174
513
+ pip/_vendor/pygments/formatters/terminal.py,sha256=AojNG4MlKq2L6IsC_VnXHu4AbHCBn9Otog6u45XvxeI,4674
514
+ pip/_vendor/pygments/formatters/terminal256.py,sha256=kGkNUVo3FpwjytIDS0if79EuUoroAprcWt3igrcIqT0,11753
515
+ pip/_vendor/pygments/lexer.py,sha256=TYHDt___gNW4axTl2zvPZff-VQi8fPaIh5OKRcVSjUM,35349
516
+ pip/_vendor/pygments/lexers/__init__.py,sha256=pIlxyQJuu_syh9lE080cq8ceVbEVcKp0osAFU5fawJU,12115
517
+ pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc,,
518
+ pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc,,
519
+ pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc,,
520
+ pip/_vendor/pygments/lexers/_mapping.py,sha256=61-h3zr103m01OS5BUq_AfUiL9YI06Ves9ipQ7k4vr4,76097
521
+ pip/_vendor/pygments/lexers/python.py,sha256=2J_YJrPTr_A6fJY_qKiKv0GpgPwHMrlMSeo59qN3fe4,53687
522
+ pip/_vendor/pygments/modeline.py,sha256=gtRYZBS-CKOCDXHhGZqApboHBaZwGH8gznN3O6nuxj4,1005
523
+ pip/_vendor/pygments/plugin.py,sha256=ioeJ3QeoJ-UQhZpY9JL7vbxsTVuwwM7BCu-Jb8nN0AU,1891
524
+ pip/_vendor/pygments/regexopt.py,sha256=Hky4EB13rIXEHQUNkwmCrYqtIlnXDehNR3MztafZ43w,3072
525
+ pip/_vendor/pygments/scanner.py,sha256=NDy3ofK_fHRFK4hIDvxpamG871aewqcsIb6sgTi7Fhk,3092
526
+ pip/_vendor/pygments/sphinxext.py,sha256=iOptJBcqOGPwMEJ2p70PvwpZPIGdvdZ8dxvq6kzxDgA,7981
527
+ pip/_vendor/pygments/style.py,sha256=rSCZWFpg1_DwFMXDU0nEVmAcBHpuQGf9RxvOPPQvKLQ,6420
528
+ pip/_vendor/pygments/styles/__init__.py,sha256=qUk6_1z5KmT8EdJFZYgESmG6P_HJF_2vVrDD7HSCGYY,2042
529
+ pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc,,
530
+ pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-311.pyc,,
531
+ pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312
532
+ pip/_vendor/pygments/token.py,sha256=qZwT7LSPy5YBY3JgDjut642CCy7JdQzAfmqD9NmT5j0,6226
533
+ pip/_vendor/pygments/unistring.py,sha256=p5c1i-HhoIhWemy9CUsaN9o39oomYHNxXll0Xfw6tEA,63208
534
+ pip/_vendor/pygments/util.py,sha256=2tj2nS1X9_OpcuSjf8dOET2bDVZhs8cEKd_uT6-Fgg8,10031
535
+ pip/_vendor/pyproject_hooks/__init__.py,sha256=kCehmy0UaBa9oVMD7ZIZrnswfnP3LXZ5lvnNJAL5JBM,491
536
+ pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-311.pyc,,
537
+ pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-311.pyc,,
538
+ pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-311.pyc,,
539
+ pip/_vendor/pyproject_hooks/_compat.py,sha256=by6evrYnqkisiM-MQcvOKs5bgDMzlOSgZqRHNqf04zE,138
540
+ pip/_vendor/pyproject_hooks/_impl.py,sha256=61GJxzQip0IInhuO69ZI5GbNQ82XEDUB_1Gg5_KtUoc,11920
541
+ pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=9gQATptbFkelkIy0OfWFEACzqxXJMQDWCH9rBOAZVwQ,546
542
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-311.pyc,,
543
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-311.pyc,,
544
+ pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=m2b34c917IW5o-Q_6TYIHlsK9lSUlNiyrITTUH_zwew,10927
545
+ pip/_vendor/requests/__init__.py,sha256=HlB_HzhrzGtfD_aaYUwUh1zWXLZ75_YCLyit75d0Vz8,5057
546
+ pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc,,
547
+ pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc,,
548
+ pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc,,
549
+ pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc,,
550
+ pip/_vendor/requests/__pycache__/api.cpython-311.pyc,,
551
+ pip/_vendor/requests/__pycache__/auth.cpython-311.pyc,,
552
+ pip/_vendor/requests/__pycache__/certs.cpython-311.pyc,,
553
+ pip/_vendor/requests/__pycache__/compat.cpython-311.pyc,,
554
+ pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc,,
555
+ pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc,,
556
+ pip/_vendor/requests/__pycache__/help.cpython-311.pyc,,
557
+ pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc,,
558
+ pip/_vendor/requests/__pycache__/models.cpython-311.pyc,,
559
+ pip/_vendor/requests/__pycache__/packages.cpython-311.pyc,,
560
+ pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc,,
561
+ pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc,,
562
+ pip/_vendor/requests/__pycache__/structures.cpython-311.pyc,,
563
+ pip/_vendor/requests/__pycache__/utils.cpython-311.pyc,,
564
+ pip/_vendor/requests/__version__.py,sha256=FVfglgZmNQnmYPXpOohDU58F5EUb_-VnSTaAesS187g,435
565
+ pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495
566
+ pip/_vendor/requests/adapters.py,sha256=J7VeVxKBvawbtlX2DERVo05J9BXTcWYLMHNd1Baa-bk,27607
567
+ pip/_vendor/requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449
568
+ pip/_vendor/requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186
569
+ pip/_vendor/requests/certs.py,sha256=PVPooB0jP5hkZEULSCwC074532UFbR2Ptgu0I5zwmCs,575
570
+ pip/_vendor/requests/compat.py,sha256=Mo9f9xZpefod8Zm-n9_StJcVTmwSukXR2p3IQyyVXvU,1485
571
+ pip/_vendor/requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590
572
+ pip/_vendor/requests/exceptions.py,sha256=D1wqzYWne1mS2rU43tP9CeN1G7QAy7eqL9o1god6Ejw,4272
573
+ pip/_vendor/requests/help.py,sha256=hRKaf9u0G7fdwrqMHtF3oG16RKktRf6KiwtSq2Fo1_0,3813
574
+ pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733
575
+ pip/_vendor/requests/models.py,sha256=x4K4CmH-lC0l2Kb-iPfMN4dRXxHEcbOaEWBL_i09AwI,35483
576
+ pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057
577
+ pip/_vendor/requests/sessions.py,sha256=ykTI8UWGSltOfH07HKollH7kTBGw4WhiBVaQGmckTw4,30495
578
+ pip/_vendor/requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322
579
+ pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912
580
+ pip/_vendor/requests/utils.py,sha256=L79vnFbzJ3SFLKtJwpoWe41Tozi3RlZv94pY1TFIyow,33631
581
+ pip/_vendor/resolvelib/__init__.py,sha256=h509TdEcpb5-44JonaU3ex2TM15GVBLjM9CNCPwnTTs,537
582
+ pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc,,
583
+ pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc,,
584
+ pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc,,
585
+ pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc,,
586
+ pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc,,
587
+ pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
588
+ pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc,,
589
+ pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc,,
590
+ pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156
591
+ pip/_vendor/resolvelib/providers.py,sha256=fuuvVrCetu5gsxPB43ERyjfO8aReS3rFQHpDgiItbs4,5871
592
+ pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
593
+ pip/_vendor/resolvelib/reporters.py,sha256=TSbRmWzTc26w0ggsV1bxVpeWDB8QNIre6twYl7GIZBE,1601
594
+ pip/_vendor/resolvelib/resolvers.py,sha256=G8rsLZSq64g5VmIq-lB7UcIJ1gjAxIQJmTF4REZleQ0,20511
595
+ pip/_vendor/resolvelib/structs.py,sha256=0_1_XO8z_CLhegP3Vpf9VJ3zJcfLm0NOHRM-i0Ykz3o,4963
596
+ pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090
597
+ pip/_vendor/rich/__main__.py,sha256=eO7Cq8JnrgG8zVoeImiAs92q3hXNMIfp0w5lMsO7Q2Y,8477
598
+ pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc,,
599
+ pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc,,
600
+ pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc,,
601
+ pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc,,
602
+ pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc,,
603
+ pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc,,
604
+ pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc,,
605
+ pip/_vendor/rich/__pycache__/_fileno.cpython-311.pyc,,
606
+ pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc,,
607
+ pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc,,
608
+ pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc,,
609
+ pip/_vendor/rich/__pycache__/_null_file.cpython-311.pyc,,
610
+ pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc,,
611
+ pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc,,
612
+ pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc,,
613
+ pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc,,
614
+ pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc,,
615
+ pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc,,
616
+ pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc,,
617
+ pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc,,
618
+ pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc,,
619
+ pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc,,
620
+ pip/_vendor/rich/__pycache__/abc.cpython-311.pyc,,
621
+ pip/_vendor/rich/__pycache__/align.cpython-311.pyc,,
622
+ pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc,,
623
+ pip/_vendor/rich/__pycache__/bar.cpython-311.pyc,,
624
+ pip/_vendor/rich/__pycache__/box.cpython-311.pyc,,
625
+ pip/_vendor/rich/__pycache__/cells.cpython-311.pyc,,
626
+ pip/_vendor/rich/__pycache__/color.cpython-311.pyc,,
627
+ pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc,,
628
+ pip/_vendor/rich/__pycache__/columns.cpython-311.pyc,,
629
+ pip/_vendor/rich/__pycache__/console.cpython-311.pyc,,
630
+ pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc,,
631
+ pip/_vendor/rich/__pycache__/containers.cpython-311.pyc,,
632
+ pip/_vendor/rich/__pycache__/control.cpython-311.pyc,,
633
+ pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc,,
634
+ pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc,,
635
+ pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc,,
636
+ pip/_vendor/rich/__pycache__/errors.cpython-311.pyc,,
637
+ pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc,,
638
+ pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc,,
639
+ pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc,,
640
+ pip/_vendor/rich/__pycache__/json.cpython-311.pyc,,
641
+ pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc,,
642
+ pip/_vendor/rich/__pycache__/layout.cpython-311.pyc,,
643
+ pip/_vendor/rich/__pycache__/live.cpython-311.pyc,,
644
+ pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc,,
645
+ pip/_vendor/rich/__pycache__/logging.cpython-311.pyc,,
646
+ pip/_vendor/rich/__pycache__/markup.cpython-311.pyc,,
647
+ pip/_vendor/rich/__pycache__/measure.cpython-311.pyc,,
648
+ pip/_vendor/rich/__pycache__/padding.cpython-311.pyc,,
649
+ pip/_vendor/rich/__pycache__/pager.cpython-311.pyc,,
650
+ pip/_vendor/rich/__pycache__/palette.cpython-311.pyc,,
651
+ pip/_vendor/rich/__pycache__/panel.cpython-311.pyc,,
652
+ pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc,,
653
+ pip/_vendor/rich/__pycache__/progress.cpython-311.pyc,,
654
+ pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc,,
655
+ pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc,,
656
+ pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc,,
657
+ pip/_vendor/rich/__pycache__/region.cpython-311.pyc,,
658
+ pip/_vendor/rich/__pycache__/repr.cpython-311.pyc,,
659
+ pip/_vendor/rich/__pycache__/rule.cpython-311.pyc,,
660
+ pip/_vendor/rich/__pycache__/scope.cpython-311.pyc,,
661
+ pip/_vendor/rich/__pycache__/screen.cpython-311.pyc,,
662
+ pip/_vendor/rich/__pycache__/segment.cpython-311.pyc,,
663
+ pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc,,
664
+ pip/_vendor/rich/__pycache__/status.cpython-311.pyc,,
665
+ pip/_vendor/rich/__pycache__/style.cpython-311.pyc,,
666
+ pip/_vendor/rich/__pycache__/styled.cpython-311.pyc,,
667
+ pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc,,
668
+ pip/_vendor/rich/__pycache__/table.cpython-311.pyc,,
669
+ pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc,,
670
+ pip/_vendor/rich/__pycache__/text.cpython-311.pyc,,
671
+ pip/_vendor/rich/__pycache__/theme.cpython-311.pyc,,
672
+ pip/_vendor/rich/__pycache__/themes.cpython-311.pyc,,
673
+ pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc,,
674
+ pip/_vendor/rich/__pycache__/tree.cpython-311.pyc,,
675
+ pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209
676
+ pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
677
+ pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
678
+ pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128
679
+ pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
680
+ pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799
681
+ pip/_vendor/rich/_inspect.py,sha256=oZJGw31e64dwXSCmrDnvZbwVb1ZKhWfU8wI3VWohjJk,9695
682
+ pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
683
+ pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
684
+ pip/_vendor/rich/_null_file.py,sha256=tGSXk_v-IZmbj1GAzHit8A3kYIQMiCpVsCFfsC-_KJ4,1387
685
+ pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
686
+ pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
687
+ pip/_vendor/rich/_ratio.py,sha256=Zt58apszI6hAAcXPpgdWKpu3c31UBWebOeR4mbyptvU,5471
688
+ pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919
689
+ pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
690
+ pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
691
+ pip/_vendor/rich/_win32_console.py,sha256=P0vxI2fcndym1UU1S37XAzQzQnkyY7YqAKmxm24_gug,22820
692
+ pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925
693
+ pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783
694
+ pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404
695
+ pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
696
+ pip/_vendor/rich/align.py,sha256=sCUkisXkQfoq-IQPyBELfJ8l7LihZJX3HbH8K7Cie-M,10368
697
+ pip/_vendor/rich/ansi.py,sha256=iD6532QYqnBm6hADulKjrV8l8kFJ-9fEVooHJHH3hMg,6906
698
+ pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263
699
+ pip/_vendor/rich/box.py,sha256=nr5fYIUghB_iUCEq6y0Z3LlCT8gFPDrzN9u2kn7tJl4,10831
700
+ pip/_vendor/rich/cells.py,sha256=aMmGK4BjXhgE6_JF1ZEGmW3O7mKkE8g84vUnj4Et4To,4780
701
+ pip/_vendor/rich/color.py,sha256=bCRATVdRe5IClJ6Hl62de2PKQ_U4i2MZ4ugjUEg7Tao,18223
702
+ pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
703
+ pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
704
+ pip/_vendor/rich/console.py,sha256=deFZIubq2M9A2MCsKFAsFQlWDvcOMsGuUA07QkOaHIw,99173
705
+ pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
706
+ pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502
707
+ pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630
708
+ pip/_vendor/rich/default_styles.py,sha256=-Fe318kMVI_IwciK5POpThcO0-9DYJ67TZAN6DlmlmM,8082
709
+ pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972
710
+ pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501
711
+ pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
712
+ pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683
713
+ pip/_vendor/rich/filesize.py,sha256=9fTLAPCAwHmBXdRv7KZU194jSgNrRb6Wx7RIoBgqeKY,2508
714
+ pip/_vendor/rich/highlighter.py,sha256=6ZAjUcNhBRajBCo9umFUclyi2xL0-55JL7S0vYGUJu4,9585
715
+ pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031
716
+ pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252
717
+ pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004
718
+ pip/_vendor/rich/live.py,sha256=vUcnJV2LMSK3sQNaILbm0-_B8BpAeiHfcQMAMLfpRe0,14271
719
+ pip/_vendor/rich/live_render.py,sha256=zJtB471jGziBtEwxc54x12wEQtH4BuQr1SA8v9kU82w,3666
720
+ pip/_vendor/rich/logging.py,sha256=uB-cB-3Q4bmXDLLpbOWkmFviw-Fde39zyMV6tKJ2WHQ,11903
721
+ pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451
722
+ pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305
723
+ pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970
724
+ pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828
725
+ pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
726
+ pip/_vendor/rich/panel.py,sha256=2Fd1V7e1kHxlPFIusoHY5T7-Cs0RpkrihgVG9ZVqJ4g,10705
727
+ pip/_vendor/rich/pretty.py,sha256=5oIHP_CGWnHEnD0zMdW5qfGC5kHqIKn7zH_eC4crULE,35848
728
+ pip/_vendor/rich/progress.py,sha256=P02xi7T2Ua3qq17o83bkshe4c0v_45cg8VyTj6US6Vg,59715
729
+ pip/_vendor/rich/progress_bar.py,sha256=L4jw8E6Qb_x-jhOrLVhkuMaPmiAhFIl8jHQbWFrKuR8,8164
730
+ pip/_vendor/rich/prompt.py,sha256=wdOn2X8XTJKnLnlw6PoMY7xG4iUPp3ezt4O5gqvpV-E,11304
731
+ pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391
732
+ pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
733
+ pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
734
+ pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431
735
+ pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602
736
+ pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843
737
+ pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
738
+ pip/_vendor/rich/segment.py,sha256=hU1ueeXqI6YeFa08K9DAjlF2QLxcJY9pwZx7RsXavlk,24246
739
+ pip/_vendor/rich/spinner.py,sha256=15koCmF0DQeD8-k28Lpt6X_zJQUlzEhgo_6A6uy47lc,4339
740
+ pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424
741
+ pip/_vendor/rich/style.py,sha256=3hiocH_4N8vwRm3-8yFWzM7tSwjjEven69XqWasSQwM,27073
742
+ pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
743
+ pip/_vendor/rich/syntax.py,sha256=TnZDuOD4DeHFbkaVEAji1gf8qgAlMU9Boe_GksMGCkk,35475
744
+ pip/_vendor/rich/table.py,sha256=nGEvAZHF4dy1vT9h9Gj9O5qhSQO3ODAxJv0RY1vnIB8,39680
745
+ pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370
746
+ pip/_vendor/rich/text.py,sha256=5rQ3zvNrg5UZKNLecbh7fiw9v3HeFulNVtRY_CBDjjE,47312
747
+ pip/_vendor/rich/theme.py,sha256=belFJogzA0W0HysQabKaHOc3RWH2ko3fQAJhoN-AFdo,3777
748
+ pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
749
+ pip/_vendor/rich/traceback.py,sha256=CUpxYLjQWIb6vQQ6O72X0hvDV6caryGqU6UweHgOyCY,29601
750
+ pip/_vendor/rich/tree.py,sha256=meAOUU6sYnoBEOX2ILrPLY9k5bWrWNQKkaiEFvHinXM,9167
751
+ pip/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396
752
+ pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc,,
753
+ pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc,,
754
+ pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc,,
755
+ pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc,,
756
+ pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633
757
+ pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943
758
+ pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
759
+ pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
760
+ pip/_vendor/truststore/__init__.py,sha256=WIDeyzWm7EVX44g354M25vpRXbeY1lsPH6EmUJUcq4o,1264
761
+ pip/_vendor/truststore/__pycache__/__init__.cpython-311.pyc,,
762
+ pip/_vendor/truststore/__pycache__/_api.cpython-311.pyc,,
763
+ pip/_vendor/truststore/__pycache__/_macos.cpython-311.pyc,,
764
+ pip/_vendor/truststore/__pycache__/_openssl.cpython-311.pyc,,
765
+ pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-311.pyc,,
766
+ pip/_vendor/truststore/__pycache__/_windows.cpython-311.pyc,,
767
+ pip/_vendor/truststore/_api.py,sha256=GeXRNTlxPZ3kif4kNoh6JY0oE4QRzTGcgXr6l_X_Gk0,10555
768
+ pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503
769
+ pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324
770
+ pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130
771
+ pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993
772
+ pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
773
+ pip/_vendor/typing_extensions.py,sha256=78hFl0HpDY-ylHUVCnWdU5nTHxUP2-S-3wEZk6CQmLk,134499
774
+ pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
775
+ pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc,,
776
+ pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc,,
777
+ pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc,,
778
+ pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc,,
779
+ pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc,,
780
+ pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc,,
781
+ pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc,,
782
+ pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc,,
783
+ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc,,
784
+ pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc,,
785
+ pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc,,
786
+ pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372
787
+ pip/_vendor/urllib3/_version.py,sha256=t9wGB6ooOTXXgiY66K1m6BZS1CJyXHAU8EoWDTe6Shk,64
788
+ pip/_vendor/urllib3/connection.py,sha256=ttIA909BrbTUzwkqEe_TzZVh4JOOj7g61Ysei2mrwGg,20314
789
+ pip/_vendor/urllib3/connectionpool.py,sha256=e2eiAwNbFNCKxj4bwDKNK-w7HIdSz3OmMxU_TIt-evQ,40408
790
+ pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
791
+ pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc,,
792
+ pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc,,
793
+ pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc,,
794
+ pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc,,
795
+ pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc,,
796
+ pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc,,
797
+ pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc,,
798
+ pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
799
+ pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
800
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc,,
801
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc,,
802
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc,,
803
+ pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
804
+ pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
805
+ pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036
806
+ pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528
807
+ pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081
808
+ pip/_vendor/urllib3/contrib/securetransport.py,sha256=Fef1IIUUFHqpevzXiDPbIGkDKchY2FVKeVeLGR1Qq3g,34446
809
+ pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
810
+ pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
811
+ pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
812
+ pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
813
+ pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
814
+ pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc,,
815
+ pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc,,
816
+ pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
817
+ pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc,,
818
+ pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc,,
819
+ pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-311.pyc,,
820
+ pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
821
+ pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
822
+ pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
823
+ pip/_vendor/urllib3/poolmanager.py,sha256=aWyhXRtNO4JUnCSVVqKTKQd8EXTvUm1VN9pgs2bcONo,19990
824
+ pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
825
+ pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641
826
+ pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
827
+ pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc,,
828
+ pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc,,
829
+ pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc,,
830
+ pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc,,
831
+ pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc,,
832
+ pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc,,
833
+ pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc,,
834
+ pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc,,
835
+ pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc,,
836
+ pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc,,
837
+ pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc,,
838
+ pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc,,
839
+ pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc,,
840
+ pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
841
+ pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
842
+ pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
843
+ pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997
844
+ pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
845
+ pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050
846
+ pip/_vendor/urllib3/util/ssl_.py,sha256=QDuuTxPSCj1rYtZ4xpD7Ux-r20TD50aHyqKyhQ7Bq4A,17460
847
+ pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
848
+ pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
849
+ pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
850
+ pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296
851
+ pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
852
+ pip/_vendor/vendor.txt,sha256=43152uDtpsunEE29vmLqqKZUosdrbvzIFkzscLB55Cg,332
853
+ pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip-24.3.1.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.2.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__init__.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ from pip._internal.utils import _log
4
+
5
+ # init_logging() must be called before any call to logging.getLogger()
6
+ # which happens at import of most modules.
7
+ _log.init_logging()
8
+
9
+
10
+ def main(args: Optional[List[str]] = None) -> int:
11
+ """This is preserved for old console scripts that may still be referencing
12
+ it.
13
+
14
+ For additional details, see https://github.com/pypa/pip/issues/7498.
15
+ """
16
+ from pip._internal.utils.entrypoints import _wrapper
17
+
18
+ return _wrapper(args)
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__pycache__/main.cpython-311.pyc ADDED
Binary file (776 Bytes). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-311.pyc ADDED
Binary file (15.2 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/build_env.py ADDED
@@ -0,0 +1,319 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Build Environment used for isolation during sdist building
2
+ """
3
+
4
+ import logging
5
+ import os
6
+ import pathlib
7
+ import site
8
+ import sys
9
+ import textwrap
10
+ from collections import OrderedDict
11
+ from types import TracebackType
12
+ from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type, Union
13
+
14
+ from pip._vendor.certifi import where
15
+ from pip._vendor.packaging.version import Version
16
+
17
+ from pip import __file__ as pip_location
18
+ from pip._internal.cli.spinners import open_spinner
19
+ from pip._internal.locations import get_platlib, get_purelib, get_scheme
20
+ from pip._internal.metadata import get_default_environment, get_environment
21
+ from pip._internal.utils.logging import VERBOSE
22
+ from pip._internal.utils.packaging import get_requirement
23
+ from pip._internal.utils.subprocess import call_subprocess
24
+ from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
25
+
26
+ if TYPE_CHECKING:
27
+ from pip._internal.index.package_finder import PackageFinder
28
+
29
+ logger = logging.getLogger(__name__)
30
+
31
+
32
+ def _dedup(a: str, b: str) -> Union[Tuple[str], Tuple[str, str]]:
33
+ return (a, b) if a != b else (a,)
34
+
35
+
36
+ class _Prefix:
37
+ def __init__(self, path: str) -> None:
38
+ self.path = path
39
+ self.setup = False
40
+ scheme = get_scheme("", prefix=path)
41
+ self.bin_dir = scheme.scripts
42
+ self.lib_dirs = _dedup(scheme.purelib, scheme.platlib)
43
+
44
+
45
+ def get_runnable_pip() -> str:
46
+ """Get a file to pass to a Python executable, to run the currently-running pip.
47
+
48
+ This is used to run a pip subprocess, for installing requirements into the build
49
+ environment.
50
+ """
51
+ source = pathlib.Path(pip_location).resolve().parent
52
+
53
+ if not source.is_dir():
54
+ # This would happen if someone is using pip from inside a zip file. In that
55
+ # case, we can use that directly.
56
+ return str(source)
57
+
58
+ return os.fsdecode(source / "__pip-runner__.py")
59
+
60
+
61
+ def _get_system_sitepackages() -> Set[str]:
62
+ """Get system site packages
63
+
64
+ Usually from site.getsitepackages,
65
+ but fallback on `get_purelib()/get_platlib()` if unavailable
66
+ (e.g. in a virtualenv created by virtualenv<20)
67
+
68
+ Returns normalized set of strings.
69
+ """
70
+ if hasattr(site, "getsitepackages"):
71
+ system_sites = site.getsitepackages()
72
+ else:
73
+ # virtualenv < 20 overwrites site.py without getsitepackages
74
+ # fallback on get_purelib/get_platlib.
75
+ # this is known to miss things, but shouldn't in the cases
76
+ # where getsitepackages() has been removed (inside a virtualenv)
77
+ system_sites = [get_purelib(), get_platlib()]
78
+ return {os.path.normcase(path) for path in system_sites}
79
+
80
+
81
+ class BuildEnvironment:
82
+ """Creates and manages an isolated environment to install build deps"""
83
+
84
+ def __init__(self) -> None:
85
+ temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True)
86
+
87
+ self._prefixes = OrderedDict(
88
+ (name, _Prefix(os.path.join(temp_dir.path, name)))
89
+ for name in ("normal", "overlay")
90
+ )
91
+
92
+ self._bin_dirs: List[str] = []
93
+ self._lib_dirs: List[str] = []
94
+ for prefix in reversed(list(self._prefixes.values())):
95
+ self._bin_dirs.append(prefix.bin_dir)
96
+ self._lib_dirs.extend(prefix.lib_dirs)
97
+
98
+ # Customize site to:
99
+ # - ensure .pth files are honored
100
+ # - prevent access to system site packages
101
+ system_sites = _get_system_sitepackages()
102
+
103
+ self._site_dir = os.path.join(temp_dir.path, "site")
104
+ if not os.path.exists(self._site_dir):
105
+ os.mkdir(self._site_dir)
106
+ with open(
107
+ os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8"
108
+ ) as fp:
109
+ fp.write(
110
+ textwrap.dedent(
111
+ """
112
+ import os, site, sys
113
+
114
+ # First, drop system-sites related paths.
115
+ original_sys_path = sys.path[:]
116
+ known_paths = set()
117
+ for path in {system_sites!r}:
118
+ site.addsitedir(path, known_paths=known_paths)
119
+ system_paths = set(
120
+ os.path.normcase(path)
121
+ for path in sys.path[len(original_sys_path):]
122
+ )
123
+ original_sys_path = [
124
+ path for path in original_sys_path
125
+ if os.path.normcase(path) not in system_paths
126
+ ]
127
+ sys.path = original_sys_path
128
+
129
+ # Second, add lib directories.
130
+ # ensuring .pth file are processed.
131
+ for path in {lib_dirs!r}:
132
+ assert not path in sys.path
133
+ site.addsitedir(path)
134
+ """
135
+ ).format(system_sites=system_sites, lib_dirs=self._lib_dirs)
136
+ )
137
+
138
+ def __enter__(self) -> None:
139
+ self._save_env = {
140
+ name: os.environ.get(name, None)
141
+ for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH")
142
+ }
143
+
144
+ path = self._bin_dirs[:]
145
+ old_path = self._save_env["PATH"]
146
+ if old_path:
147
+ path.extend(old_path.split(os.pathsep))
148
+
149
+ pythonpath = [self._site_dir]
150
+
151
+ os.environ.update(
152
+ {
153
+ "PATH": os.pathsep.join(path),
154
+ "PYTHONNOUSERSITE": "1",
155
+ "PYTHONPATH": os.pathsep.join(pythonpath),
156
+ }
157
+ )
158
+
159
+ def __exit__(
160
+ self,
161
+ exc_type: Optional[Type[BaseException]],
162
+ exc_val: Optional[BaseException],
163
+ exc_tb: Optional[TracebackType],
164
+ ) -> None:
165
+ for varname, old_value in self._save_env.items():
166
+ if old_value is None:
167
+ os.environ.pop(varname, None)
168
+ else:
169
+ os.environ[varname] = old_value
170
+
171
+ def check_requirements(
172
+ self, reqs: Iterable[str]
173
+ ) -> Tuple[Set[Tuple[str, str]], Set[str]]:
174
+ """Return 2 sets:
175
+ - conflicting requirements: set of (installed, wanted) reqs tuples
176
+ - missing requirements: set of reqs
177
+ """
178
+ missing = set()
179
+ conflicting = set()
180
+ if reqs:
181
+ env = (
182
+ get_environment(self._lib_dirs)
183
+ if hasattr(self, "_lib_dirs")
184
+ else get_default_environment()
185
+ )
186
+ for req_str in reqs:
187
+ req = get_requirement(req_str)
188
+ # We're explicitly evaluating with an empty extra value, since build
189
+ # environments are not provided any mechanism to select specific extras.
190
+ if req.marker is not None and not req.marker.evaluate({"extra": ""}):
191
+ continue
192
+ dist = env.get_distribution(req.name)
193
+ if not dist:
194
+ missing.add(req_str)
195
+ continue
196
+ if isinstance(dist.version, Version):
197
+ installed_req_str = f"{req.name}=={dist.version}"
198
+ else:
199
+ installed_req_str = f"{req.name}==={dist.version}"
200
+ if not req.specifier.contains(dist.version, prereleases=True):
201
+ conflicting.add((installed_req_str, req_str))
202
+ # FIXME: Consider direct URL?
203
+ return conflicting, missing
204
+
205
+ def install_requirements(
206
+ self,
207
+ finder: "PackageFinder",
208
+ requirements: Iterable[str],
209
+ prefix_as_string: str,
210
+ *,
211
+ kind: str,
212
+ ) -> None:
213
+ prefix = self._prefixes[prefix_as_string]
214
+ assert not prefix.setup
215
+ prefix.setup = True
216
+ if not requirements:
217
+ return
218
+ self._install_requirements(
219
+ get_runnable_pip(),
220
+ finder,
221
+ requirements,
222
+ prefix,
223
+ kind=kind,
224
+ )
225
+
226
+ @staticmethod
227
+ def _install_requirements(
228
+ pip_runnable: str,
229
+ finder: "PackageFinder",
230
+ requirements: Iterable[str],
231
+ prefix: _Prefix,
232
+ *,
233
+ kind: str,
234
+ ) -> None:
235
+ args: List[str] = [
236
+ sys.executable,
237
+ pip_runnable,
238
+ "install",
239
+ "--ignore-installed",
240
+ "--no-user",
241
+ "--prefix",
242
+ prefix.path,
243
+ "--no-warn-script-location",
244
+ "--disable-pip-version-check",
245
+ # The prefix specified two lines above, thus
246
+ # target from config file or env var should be ignored
247
+ "--target",
248
+ "",
249
+ ]
250
+ if logger.getEffectiveLevel() <= logging.DEBUG:
251
+ args.append("-vv")
252
+ elif logger.getEffectiveLevel() <= VERBOSE:
253
+ args.append("-v")
254
+ for format_control in ("no_binary", "only_binary"):
255
+ formats = getattr(finder.format_control, format_control)
256
+ args.extend(
257
+ (
258
+ "--" + format_control.replace("_", "-"),
259
+ ",".join(sorted(formats or {":none:"})),
260
+ )
261
+ )
262
+
263
+ index_urls = finder.index_urls
264
+ if index_urls:
265
+ args.extend(["-i", index_urls[0]])
266
+ for extra_index in index_urls[1:]:
267
+ args.extend(["--extra-index-url", extra_index])
268
+ else:
269
+ args.append("--no-index")
270
+ for link in finder.find_links:
271
+ args.extend(["--find-links", link])
272
+
273
+ for host in finder.trusted_hosts:
274
+ args.extend(["--trusted-host", host])
275
+ if finder.allow_all_prereleases:
276
+ args.append("--pre")
277
+ if finder.prefer_binary:
278
+ args.append("--prefer-binary")
279
+ args.append("--")
280
+ args.extend(requirements)
281
+ extra_environ = {"_PIP_STANDALONE_CERT": where()}
282
+ with open_spinner(f"Installing {kind}") as spinner:
283
+ call_subprocess(
284
+ args,
285
+ command_desc=f"pip subprocess to install {kind}",
286
+ spinner=spinner,
287
+ extra_environ=extra_environ,
288
+ )
289
+
290
+
291
+ class NoOpBuildEnvironment(BuildEnvironment):
292
+ """A no-op drop-in replacement for BuildEnvironment"""
293
+
294
+ def __init__(self) -> None:
295
+ pass
296
+
297
+ def __enter__(self) -> None:
298
+ pass
299
+
300
+ def __exit__(
301
+ self,
302
+ exc_type: Optional[Type[BaseException]],
303
+ exc_val: Optional[BaseException],
304
+ exc_tb: Optional[TracebackType],
305
+ ) -> None:
306
+ pass
307
+
308
+ def cleanup(self) -> None:
309
+ pass
310
+
311
+ def install_requirements(
312
+ self,
313
+ finder: "PackageFinder",
314
+ requirements: Iterable[str],
315
+ prefix_as_string: str,
316
+ *,
317
+ kind: str,
318
+ ) -> None:
319
+ raise NotImplementedError()
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__init__.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pip._internal.distributions.base import AbstractDistribution
2
+ from pip._internal.distributions.sdist import SourceDistribution
3
+ from pip._internal.distributions.wheel import WheelDistribution
4
+ from pip._internal.req.req_install import InstallRequirement
5
+
6
+
7
+ def make_distribution_for_install_requirement(
8
+ install_req: InstallRequirement,
9
+ ) -> AbstractDistribution:
10
+ """Returns a Distribution for the given InstallRequirement"""
11
+ # Editable requirements will always be source distributions. They use the
12
+ # legacy logic until we create a modern standard for them.
13
+ if install_req.editable:
14
+ return SourceDistribution(install_req)
15
+
16
+ # If it's a wheel, it's a WheelDistribution
17
+ if install_req.is_wheel:
18
+ return WheelDistribution(install_req)
19
+
20
+ # Otherwise, a SourceDistribution
21
+ return SourceDistribution(install_req)
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-311.pyc ADDED
Binary file (1.87 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc ADDED
Binary file (9.38 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc ADDED
Binary file (2.51 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/base.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import abc
2
+ from typing import TYPE_CHECKING, Optional
3
+
4
+ from pip._internal.metadata.base import BaseDistribution
5
+ from pip._internal.req import InstallRequirement
6
+
7
+ if TYPE_CHECKING:
8
+ from pip._internal.index.package_finder import PackageFinder
9
+
10
+
11
+ class AbstractDistribution(metaclass=abc.ABCMeta):
12
+ """A base class for handling installable artifacts.
13
+
14
+ The requirements for anything installable are as follows:
15
+
16
+ - we must be able to determine the requirement name
17
+ (or we can't correctly handle the non-upgrade case).
18
+
19
+ - for packages with setup requirements, we must also be able
20
+ to determine their requirements without installing additional
21
+ packages (for the same reason as run-time dependencies)
22
+
23
+ - we must be able to create a Distribution object exposing the
24
+ above metadata.
25
+
26
+ - if we need to do work in the build tracker, we must be able to generate a unique
27
+ string to identify the requirement in the build tracker.
28
+ """
29
+
30
+ def __init__(self, req: InstallRequirement) -> None:
31
+ super().__init__()
32
+ self.req = req
33
+
34
+ @abc.abstractproperty
35
+ def build_tracker_id(self) -> Optional[str]:
36
+ """A string that uniquely identifies this requirement to the build tracker.
37
+
38
+ If None, then this dist has no work to do in the build tracker, and
39
+ ``.prepare_distribution_metadata()`` will not be called."""
40
+ raise NotImplementedError()
41
+
42
+ @abc.abstractmethod
43
+ def get_metadata_distribution(self) -> BaseDistribution:
44
+ raise NotImplementedError()
45
+
46
+ @abc.abstractmethod
47
+ def prepare_distribution_metadata(
48
+ self,
49
+ finder: "PackageFinder",
50
+ build_isolation: bool,
51
+ check_build_deps: bool,
52
+ ) -> None:
53
+ raise NotImplementedError()
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/installed.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Optional
2
+
3
+ from pip._internal.distributions.base import AbstractDistribution
4
+ from pip._internal.index.package_finder import PackageFinder
5
+ from pip._internal.metadata import BaseDistribution
6
+
7
+
8
+ class InstalledDistribution(AbstractDistribution):
9
+ """Represents an installed package.
10
+
11
+ This does not need any preparation as the required information has already
12
+ been computed.
13
+ """
14
+
15
+ @property
16
+ def build_tracker_id(self) -> Optional[str]:
17
+ return None
18
+
19
+ def get_metadata_distribution(self) -> BaseDistribution:
20
+ assert self.req.satisfied_by is not None, "not actually installed"
21
+ return self.req.satisfied_by
22
+
23
+ def prepare_distribution_metadata(
24
+ self,
25
+ finder: PackageFinder,
26
+ build_isolation: bool,
27
+ check_build_deps: bool,
28
+ ) -> None:
29
+ pass
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/sdist.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from typing import TYPE_CHECKING, Iterable, Optional, Set, Tuple
3
+
4
+ from pip._internal.build_env import BuildEnvironment
5
+ from pip._internal.distributions.base import AbstractDistribution
6
+ from pip._internal.exceptions import InstallationError
7
+ from pip._internal.metadata import BaseDistribution
8
+ from pip._internal.utils.subprocess import runner_with_spinner_message
9
+
10
+ if TYPE_CHECKING:
11
+ from pip._internal.index.package_finder import PackageFinder
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class SourceDistribution(AbstractDistribution):
17
+ """Represents a source distribution.
18
+
19
+ The preparation step for these needs metadata for the packages to be
20
+ generated, either using PEP 517 or using the legacy `setup.py egg_info`.
21
+ """
22
+
23
+ @property
24
+ def build_tracker_id(self) -> Optional[str]:
25
+ """Identify this requirement uniquely by its link."""
26
+ assert self.req.link
27
+ return self.req.link.url_without_fragment
28
+
29
+ def get_metadata_distribution(self) -> BaseDistribution:
30
+ return self.req.get_dist()
31
+
32
+ def prepare_distribution_metadata(
33
+ self,
34
+ finder: "PackageFinder",
35
+ build_isolation: bool,
36
+ check_build_deps: bool,
37
+ ) -> None:
38
+ # Load pyproject.toml, to determine whether PEP 517 is to be used
39
+ self.req.load_pyproject_toml()
40
+
41
+ # Set up the build isolation, if this requirement should be isolated
42
+ should_isolate = self.req.use_pep517 and build_isolation
43
+ if should_isolate:
44
+ # Setup an isolated environment and install the build backend static
45
+ # requirements in it.
46
+ self._prepare_build_backend(finder)
47
+ # Check that if the requirement is editable, it either supports PEP 660 or
48
+ # has a setup.py or a setup.cfg. This cannot be done earlier because we need
49
+ # to setup the build backend to verify it supports build_editable, nor can
50
+ # it be done later, because we want to avoid installing build requirements
51
+ # needlessly. Doing it here also works around setuptools generating
52
+ # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory
53
+ # without setup.py nor setup.cfg.
54
+ self.req.isolated_editable_sanity_check()
55
+ # Install the dynamic build requirements.
56
+ self._install_build_reqs(finder)
57
+ # Check if the current environment provides build dependencies
58
+ should_check_deps = self.req.use_pep517 and check_build_deps
59
+ if should_check_deps:
60
+ pyproject_requires = self.req.pyproject_requires
61
+ assert pyproject_requires is not None
62
+ conflicting, missing = self.req.build_env.check_requirements(
63
+ pyproject_requires
64
+ )
65
+ if conflicting:
66
+ self._raise_conflicts("the backend dependencies", conflicting)
67
+ if missing:
68
+ self._raise_missing_reqs(missing)
69
+ self.req.prepare_metadata()
70
+
71
+ def _prepare_build_backend(self, finder: "PackageFinder") -> None:
72
+ # Isolate in a BuildEnvironment and install the build-time
73
+ # requirements.
74
+ pyproject_requires = self.req.pyproject_requires
75
+ assert pyproject_requires is not None
76
+
77
+ self.req.build_env = BuildEnvironment()
78
+ self.req.build_env.install_requirements(
79
+ finder, pyproject_requires, "overlay", kind="build dependencies"
80
+ )
81
+ conflicting, missing = self.req.build_env.check_requirements(
82
+ self.req.requirements_to_check
83
+ )
84
+ if conflicting:
85
+ self._raise_conflicts("PEP 517/518 supported requirements", conflicting)
86
+ if missing:
87
+ logger.warning(
88
+ "Missing build requirements in pyproject.toml for %s.",
89
+ self.req,
90
+ )
91
+ logger.warning(
92
+ "The project does not specify a build backend, and "
93
+ "pip cannot fall back to setuptools without %s.",
94
+ " and ".join(map(repr, sorted(missing))),
95
+ )
96
+
97
+ def _get_build_requires_wheel(self) -> Iterable[str]:
98
+ with self.req.build_env:
99
+ runner = runner_with_spinner_message("Getting requirements to build wheel")
100
+ backend = self.req.pep517_backend
101
+ assert backend is not None
102
+ with backend.subprocess_runner(runner):
103
+ return backend.get_requires_for_build_wheel()
104
+
105
+ def _get_build_requires_editable(self) -> Iterable[str]:
106
+ with self.req.build_env:
107
+ runner = runner_with_spinner_message(
108
+ "Getting requirements to build editable"
109
+ )
110
+ backend = self.req.pep517_backend
111
+ assert backend is not None
112
+ with backend.subprocess_runner(runner):
113
+ return backend.get_requires_for_build_editable()
114
+
115
+ def _install_build_reqs(self, finder: "PackageFinder") -> None:
116
+ # Install any extra build dependencies that the backend requests.
117
+ # This must be done in a second pass, as the pyproject.toml
118
+ # dependencies must be installed before we can call the backend.
119
+ if (
120
+ self.req.editable
121
+ and self.req.permit_editable_wheels
122
+ and self.req.supports_pyproject_editable
123
+ ):
124
+ build_reqs = self._get_build_requires_editable()
125
+ else:
126
+ build_reqs = self._get_build_requires_wheel()
127
+ conflicting, missing = self.req.build_env.check_requirements(build_reqs)
128
+ if conflicting:
129
+ self._raise_conflicts("the backend dependencies", conflicting)
130
+ self.req.build_env.install_requirements(
131
+ finder, missing, "normal", kind="backend dependencies"
132
+ )
133
+
134
+ def _raise_conflicts(
135
+ self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]]
136
+ ) -> None:
137
+ format_string = (
138
+ "Some build dependencies for {requirement} "
139
+ "conflict with {conflicting_with}: {description}."
140
+ )
141
+ error_message = format_string.format(
142
+ requirement=self.req,
143
+ conflicting_with=conflicting_with,
144
+ description=", ".join(
145
+ f"{installed} is incompatible with {wanted}"
146
+ for installed, wanted in sorted(conflicting_reqs)
147
+ ),
148
+ )
149
+ raise InstallationError(error_message)
150
+
151
+ def _raise_missing_reqs(self, missing: Set[str]) -> None:
152
+ format_string = (
153
+ "Some build dependencies for {requirement} are missing: {missing}."
154
+ )
155
+ error_message = format_string.format(
156
+ requirement=self.req, missing=", ".join(map(repr, sorted(missing)))
157
+ )
158
+ raise InstallationError(error_message)
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/distributions/wheel.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import TYPE_CHECKING, Optional
2
+
3
+ from pip._vendor.packaging.utils import canonicalize_name
4
+
5
+ from pip._internal.distributions.base import AbstractDistribution
6
+ from pip._internal.metadata import (
7
+ BaseDistribution,
8
+ FilesystemWheel,
9
+ get_wheel_distribution,
10
+ )
11
+
12
+ if TYPE_CHECKING:
13
+ from pip._internal.index.package_finder import PackageFinder
14
+
15
+
16
+ class WheelDistribution(AbstractDistribution):
17
+ """Represents a wheel distribution.
18
+
19
+ This does not need any preparation as wheels can be directly unpacked.
20
+ """
21
+
22
+ @property
23
+ def build_tracker_id(self) -> Optional[str]:
24
+ return None
25
+
26
+ def get_metadata_distribution(self) -> BaseDistribution:
27
+ """Loads the metadata from the wheel file into memory and returns a
28
+ Distribution that uses it, not relying on the wheel file or
29
+ requirement.
30
+ """
31
+ assert self.req.local_file_path, "Set as part of preparation during download"
32
+ assert self.req.name, "Wheels are never unnamed"
33
+ wheel = FilesystemWheel(self.req.local_file_path)
34
+ return get_wheel_distribution(wheel, canonicalize_name(self.req.name))
35
+
36
+ def prepare_distribution_metadata(
37
+ self,
38
+ finder: "PackageFinder",
39
+ build_isolation: bool,
40
+ check_build_deps: bool,
41
+ ) -> None:
42
+ pass
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/index/collector.py ADDED
@@ -0,0 +1,494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ The main purpose of this module is to expose LinkCollector.collect_sources().
3
+ """
4
+
5
+ import collections
6
+ import email.message
7
+ import functools
8
+ import itertools
9
+ import json
10
+ import logging
11
+ import os
12
+ import urllib.parse
13
+ import urllib.request
14
+ from dataclasses import dataclass
15
+ from html.parser import HTMLParser
16
+ from optparse import Values
17
+ from typing import (
18
+ Callable,
19
+ Dict,
20
+ Iterable,
21
+ List,
22
+ MutableMapping,
23
+ NamedTuple,
24
+ Optional,
25
+ Protocol,
26
+ Sequence,
27
+ Tuple,
28
+ Union,
29
+ )
30
+
31
+ from pip._vendor import requests
32
+ from pip._vendor.requests import Response
33
+ from pip._vendor.requests.exceptions import RetryError, SSLError
34
+
35
+ from pip._internal.exceptions import NetworkConnectionError
36
+ from pip._internal.models.link import Link
37
+ from pip._internal.models.search_scope import SearchScope
38
+ from pip._internal.network.session import PipSession
39
+ from pip._internal.network.utils import raise_for_status
40
+ from pip._internal.utils.filetypes import is_archive_file
41
+ from pip._internal.utils.misc import redact_auth_from_url
42
+ from pip._internal.vcs import vcs
43
+
44
+ from .sources import CandidatesFromPage, LinkSource, build_source
45
+
46
+ logger = logging.getLogger(__name__)
47
+
48
+ ResponseHeaders = MutableMapping[str, str]
49
+
50
+
51
+ def _match_vcs_scheme(url: str) -> Optional[str]:
52
+ """Look for VCS schemes in the URL.
53
+
54
+ Returns the matched VCS scheme, or None if there's no match.
55
+ """
56
+ for scheme in vcs.schemes:
57
+ if url.lower().startswith(scheme) and url[len(scheme)] in "+:":
58
+ return scheme
59
+ return None
60
+
61
+
62
+ class _NotAPIContent(Exception):
63
+ def __init__(self, content_type: str, request_desc: str) -> None:
64
+ super().__init__(content_type, request_desc)
65
+ self.content_type = content_type
66
+ self.request_desc = request_desc
67
+
68
+
69
+ def _ensure_api_header(response: Response) -> None:
70
+ """
71
+ Check the Content-Type header to ensure the response contains a Simple
72
+ API Response.
73
+
74
+ Raises `_NotAPIContent` if the content type is not a valid content-type.
75
+ """
76
+ content_type = response.headers.get("Content-Type", "Unknown")
77
+
78
+ content_type_l = content_type.lower()
79
+ if content_type_l.startswith(
80
+ (
81
+ "text/html",
82
+ "application/vnd.pypi.simple.v1+html",
83
+ "application/vnd.pypi.simple.v1+json",
84
+ )
85
+ ):
86
+ return
87
+
88
+ raise _NotAPIContent(content_type, response.request.method)
89
+
90
+
91
+ class _NotHTTP(Exception):
92
+ pass
93
+
94
+
95
+ def _ensure_api_response(url: str, session: PipSession) -> None:
96
+ """
97
+ Send a HEAD request to the URL, and ensure the response contains a simple
98
+ API Response.
99
+
100
+ Raises `_NotHTTP` if the URL is not available for a HEAD request, or
101
+ `_NotAPIContent` if the content type is not a valid content type.
102
+ """
103
+ scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)
104
+ if scheme not in {"http", "https"}:
105
+ raise _NotHTTP()
106
+
107
+ resp = session.head(url, allow_redirects=True)
108
+ raise_for_status(resp)
109
+
110
+ _ensure_api_header(resp)
111
+
112
+
113
+ def _get_simple_response(url: str, session: PipSession) -> Response:
114
+ """Access an Simple API response with GET, and return the response.
115
+
116
+ This consists of three parts:
117
+
118
+ 1. If the URL looks suspiciously like an archive, send a HEAD first to
119
+ check the Content-Type is HTML or Simple API, to avoid downloading a
120
+ large file. Raise `_NotHTTP` if the content type cannot be determined, or
121
+ `_NotAPIContent` if it is not HTML or a Simple API.
122
+ 2. Actually perform the request. Raise HTTP exceptions on network failures.
123
+ 3. Check the Content-Type header to make sure we got a Simple API response,
124
+ and raise `_NotAPIContent` otherwise.
125
+ """
126
+ if is_archive_file(Link(url).filename):
127
+ _ensure_api_response(url, session=session)
128
+
129
+ logger.debug("Getting page %s", redact_auth_from_url(url))
130
+
131
+ resp = session.get(
132
+ url,
133
+ headers={
134
+ "Accept": ", ".join(
135
+ [
136
+ "application/vnd.pypi.simple.v1+json",
137
+ "application/vnd.pypi.simple.v1+html; q=0.1",
138
+ "text/html; q=0.01",
139
+ ]
140
+ ),
141
+ # We don't want to blindly returned cached data for
142
+ # /simple/, because authors generally expecting that
143
+ # twine upload && pip install will function, but if
144
+ # they've done a pip install in the last ~10 minutes
145
+ # it won't. Thus by setting this to zero we will not
146
+ # blindly use any cached data, however the benefit of
147
+ # using max-age=0 instead of no-cache, is that we will
148
+ # still support conditional requests, so we will still
149
+ # minimize traffic sent in cases where the page hasn't
150
+ # changed at all, we will just always incur the round
151
+ # trip for the conditional GET now instead of only
152
+ # once per 10 minutes.
153
+ # For more information, please see pypa/pip#5670.
154
+ "Cache-Control": "max-age=0",
155
+ },
156
+ )
157
+ raise_for_status(resp)
158
+
159
+ # The check for archives above only works if the url ends with
160
+ # something that looks like an archive. However that is not a
161
+ # requirement of an url. Unless we issue a HEAD request on every
162
+ # url we cannot know ahead of time for sure if something is a
163
+ # Simple API response or not. However we can check after we've
164
+ # downloaded it.
165
+ _ensure_api_header(resp)
166
+
167
+ logger.debug(
168
+ "Fetched page %s as %s",
169
+ redact_auth_from_url(url),
170
+ resp.headers.get("Content-Type", "Unknown"),
171
+ )
172
+
173
+ return resp
174
+
175
+
176
+ def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]:
177
+ """Determine if we have any encoding information in our headers."""
178
+ if headers and "Content-Type" in headers:
179
+ m = email.message.Message()
180
+ m["content-type"] = headers["Content-Type"]
181
+ charset = m.get_param("charset")
182
+ if charset:
183
+ return str(charset)
184
+ return None
185
+
186
+
187
+ class CacheablePageContent:
188
+ def __init__(self, page: "IndexContent") -> None:
189
+ assert page.cache_link_parsing
190
+ self.page = page
191
+
192
+ def __eq__(self, other: object) -> bool:
193
+ return isinstance(other, type(self)) and self.page.url == other.page.url
194
+
195
+ def __hash__(self) -> int:
196
+ return hash(self.page.url)
197
+
198
+
199
+ class ParseLinks(Protocol):
200
+ def __call__(self, page: "IndexContent") -> Iterable[Link]: ...
201
+
202
+
203
+ def with_cached_index_content(fn: ParseLinks) -> ParseLinks:
204
+ """
205
+ Given a function that parses an Iterable[Link] from an IndexContent, cache the
206
+ function's result (keyed by CacheablePageContent), unless the IndexContent
207
+ `page` has `page.cache_link_parsing == False`.
208
+ """
209
+
210
+ @functools.lru_cache(maxsize=None)
211
+ def wrapper(cacheable_page: CacheablePageContent) -> List[Link]:
212
+ return list(fn(cacheable_page.page))
213
+
214
+ @functools.wraps(fn)
215
+ def wrapper_wrapper(page: "IndexContent") -> List[Link]:
216
+ if page.cache_link_parsing:
217
+ return wrapper(CacheablePageContent(page))
218
+ return list(fn(page))
219
+
220
+ return wrapper_wrapper
221
+
222
+
223
+ @with_cached_index_content
224
+ def parse_links(page: "IndexContent") -> Iterable[Link]:
225
+ """
226
+ Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
227
+ """
228
+
229
+ content_type_l = page.content_type.lower()
230
+ if content_type_l.startswith("application/vnd.pypi.simple.v1+json"):
231
+ data = json.loads(page.content)
232
+ for file in data.get("files", []):
233
+ link = Link.from_json(file, page.url)
234
+ if link is None:
235
+ continue
236
+ yield link
237
+ return
238
+
239
+ parser = HTMLLinkParser(page.url)
240
+ encoding = page.encoding or "utf-8"
241
+ parser.feed(page.content.decode(encoding))
242
+
243
+ url = page.url
244
+ base_url = parser.base_url or url
245
+ for anchor in parser.anchors:
246
+ link = Link.from_element(anchor, page_url=url, base_url=base_url)
247
+ if link is None:
248
+ continue
249
+ yield link
250
+
251
+
252
+ @dataclass(frozen=True)
253
+ class IndexContent:
254
+ """Represents one response (or page), along with its URL.
255
+
256
+ :param encoding: the encoding to decode the given content.
257
+ :param url: the URL from which the HTML was downloaded.
258
+ :param cache_link_parsing: whether links parsed from this page's url
259
+ should be cached. PyPI index urls should
260
+ have this set to False, for example.
261
+ """
262
+
263
+ content: bytes
264
+ content_type: str
265
+ encoding: Optional[str]
266
+ url: str
267
+ cache_link_parsing: bool = True
268
+
269
+ def __str__(self) -> str:
270
+ return redact_auth_from_url(self.url)
271
+
272
+
273
+ class HTMLLinkParser(HTMLParser):
274
+ """
275
+ HTMLParser that keeps the first base HREF and a list of all anchor
276
+ elements' attributes.
277
+ """
278
+
279
+ def __init__(self, url: str) -> None:
280
+ super().__init__(convert_charrefs=True)
281
+
282
+ self.url: str = url
283
+ self.base_url: Optional[str] = None
284
+ self.anchors: List[Dict[str, Optional[str]]] = []
285
+
286
+ def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None:
287
+ if tag == "base" and self.base_url is None:
288
+ href = self.get_href(attrs)
289
+ if href is not None:
290
+ self.base_url = href
291
+ elif tag == "a":
292
+ self.anchors.append(dict(attrs))
293
+
294
+ def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]:
295
+ for name, value in attrs:
296
+ if name == "href":
297
+ return value
298
+ return None
299
+
300
+
301
+ def _handle_get_simple_fail(
302
+ link: Link,
303
+ reason: Union[str, Exception],
304
+ meth: Optional[Callable[..., None]] = None,
305
+ ) -> None:
306
+ if meth is None:
307
+ meth = logger.debug
308
+ meth("Could not fetch URL %s: %s - skipping", link, reason)
309
+
310
+
311
+ def _make_index_content(
312
+ response: Response, cache_link_parsing: bool = True
313
+ ) -> IndexContent:
314
+ encoding = _get_encoding_from_headers(response.headers)
315
+ return IndexContent(
316
+ response.content,
317
+ response.headers["Content-Type"],
318
+ encoding=encoding,
319
+ url=response.url,
320
+ cache_link_parsing=cache_link_parsing,
321
+ )
322
+
323
+
324
+ def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]:
325
+ url = link.url.split("#", 1)[0]
326
+
327
+ # Check for VCS schemes that do not support lookup as web pages.
328
+ vcs_scheme = _match_vcs_scheme(url)
329
+ if vcs_scheme:
330
+ logger.warning(
331
+ "Cannot look at %s URL %s because it does not support lookup as web pages.",
332
+ vcs_scheme,
333
+ link,
334
+ )
335
+ return None
336
+
337
+ # Tack index.html onto file:// URLs that point to directories
338
+ scheme, _, path, _, _, _ = urllib.parse.urlparse(url)
339
+ if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)):
340
+ # add trailing slash if not present so urljoin doesn't trim
341
+ # final segment
342
+ if not url.endswith("/"):
343
+ url += "/"
344
+ # TODO: In the future, it would be nice if pip supported PEP 691
345
+ # style responses in the file:// URLs, however there's no
346
+ # standard file extension for application/vnd.pypi.simple.v1+json
347
+ # so we'll need to come up with something on our own.
348
+ url = urllib.parse.urljoin(url, "index.html")
349
+ logger.debug(" file: URL is directory, getting %s", url)
350
+
351
+ try:
352
+ resp = _get_simple_response(url, session=session)
353
+ except _NotHTTP:
354
+ logger.warning(
355
+ "Skipping page %s because it looks like an archive, and cannot "
356
+ "be checked by a HTTP HEAD request.",
357
+ link,
358
+ )
359
+ except _NotAPIContent as exc:
360
+ logger.warning(
361
+ "Skipping page %s because the %s request got Content-Type: %s. "
362
+ "The only supported Content-Types are application/vnd.pypi.simple.v1+json, "
363
+ "application/vnd.pypi.simple.v1+html, and text/html",
364
+ link,
365
+ exc.request_desc,
366
+ exc.content_type,
367
+ )
368
+ except NetworkConnectionError as exc:
369
+ _handle_get_simple_fail(link, exc)
370
+ except RetryError as exc:
371
+ _handle_get_simple_fail(link, exc)
372
+ except SSLError as exc:
373
+ reason = "There was a problem confirming the ssl certificate: "
374
+ reason += str(exc)
375
+ _handle_get_simple_fail(link, reason, meth=logger.info)
376
+ except requests.ConnectionError as exc:
377
+ _handle_get_simple_fail(link, f"connection error: {exc}")
378
+ except requests.Timeout:
379
+ _handle_get_simple_fail(link, "timed out")
380
+ else:
381
+ return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing)
382
+ return None
383
+
384
+
385
+ class CollectedSources(NamedTuple):
386
+ find_links: Sequence[Optional[LinkSource]]
387
+ index_urls: Sequence[Optional[LinkSource]]
388
+
389
+
390
+ class LinkCollector:
391
+ """
392
+ Responsible for collecting Link objects from all configured locations,
393
+ making network requests as needed.
394
+
395
+ The class's main method is its collect_sources() method.
396
+ """
397
+
398
+ def __init__(
399
+ self,
400
+ session: PipSession,
401
+ search_scope: SearchScope,
402
+ ) -> None:
403
+ self.search_scope = search_scope
404
+ self.session = session
405
+
406
+ @classmethod
407
+ def create(
408
+ cls,
409
+ session: PipSession,
410
+ options: Values,
411
+ suppress_no_index: bool = False,
412
+ ) -> "LinkCollector":
413
+ """
414
+ :param session: The Session to use to make requests.
415
+ :param suppress_no_index: Whether to ignore the --no-index option
416
+ when constructing the SearchScope object.
417
+ """
418
+ index_urls = [options.index_url] + options.extra_index_urls
419
+ if options.no_index and not suppress_no_index:
420
+ logger.debug(
421
+ "Ignoring indexes: %s",
422
+ ",".join(redact_auth_from_url(url) for url in index_urls),
423
+ )
424
+ index_urls = []
425
+
426
+ # Make sure find_links is a list before passing to create().
427
+ find_links = options.find_links or []
428
+
429
+ search_scope = SearchScope.create(
430
+ find_links=find_links,
431
+ index_urls=index_urls,
432
+ no_index=options.no_index,
433
+ )
434
+ link_collector = LinkCollector(
435
+ session=session,
436
+ search_scope=search_scope,
437
+ )
438
+ return link_collector
439
+
440
+ @property
441
+ def find_links(self) -> List[str]:
442
+ return self.search_scope.find_links
443
+
444
+ def fetch_response(self, location: Link) -> Optional[IndexContent]:
445
+ """
446
+ Fetch an HTML page containing package links.
447
+ """
448
+ return _get_index_content(location, session=self.session)
449
+
450
+ def collect_sources(
451
+ self,
452
+ project_name: str,
453
+ candidates_from_page: CandidatesFromPage,
454
+ ) -> CollectedSources:
455
+ # The OrderedDict calls deduplicate sources by URL.
456
+ index_url_sources = collections.OrderedDict(
457
+ build_source(
458
+ loc,
459
+ candidates_from_page=candidates_from_page,
460
+ page_validator=self.session.is_secure_origin,
461
+ expand_dir=False,
462
+ cache_link_parsing=False,
463
+ project_name=project_name,
464
+ )
465
+ for loc in self.search_scope.get_index_urls_locations(project_name)
466
+ ).values()
467
+ find_links_sources = collections.OrderedDict(
468
+ build_source(
469
+ loc,
470
+ candidates_from_page=candidates_from_page,
471
+ page_validator=self.session.is_secure_origin,
472
+ expand_dir=True,
473
+ cache_link_parsing=True,
474
+ project_name=project_name,
475
+ )
476
+ for loc in self.find_links
477
+ ).values()
478
+
479
+ if logger.isEnabledFor(logging.DEBUG):
480
+ lines = [
481
+ f"* {s.link}"
482
+ for s in itertools.chain(find_links_sources, index_url_sources)
483
+ if s is not None and s.link is not None
484
+ ]
485
+ lines = [
486
+ f"{len(lines)} location(s) to search "
487
+ f"for versions of {project_name}:"
488
+ ] + lines
489
+ logger.debug("\n".join(lines))
490
+
491
+ return CollectedSources(
492
+ find_links=list(find_links_sources),
493
+ index_urls=list(index_url_sources),
494
+ )
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (225 Bytes). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-311.pyc ADDED
Binary file (28 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (231 Bytes). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc ADDED
Binary file (2.3 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc ADDED
Binary file (2.34 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc ADDED
Binary file (1.97 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import contextlib
2
+ import hashlib
3
+ import logging
4
+ import os
5
+ from types import TracebackType
6
+ from typing import Dict, Generator, Optional, Type, Union
7
+
8
+ from pip._internal.req.req_install import InstallRequirement
9
+ from pip._internal.utils.temp_dir import TempDirectory
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ @contextlib.contextmanager
15
+ def update_env_context_manager(**changes: str) -> Generator[None, None, None]:
16
+ target = os.environ
17
+
18
+ # Save values from the target and change them.
19
+ non_existent_marker = object()
20
+ saved_values: Dict[str, Union[object, str]] = {}
21
+ for name, new_value in changes.items():
22
+ try:
23
+ saved_values[name] = target[name]
24
+ except KeyError:
25
+ saved_values[name] = non_existent_marker
26
+ target[name] = new_value
27
+
28
+ try:
29
+ yield
30
+ finally:
31
+ # Restore original values in the target.
32
+ for name, original_value in saved_values.items():
33
+ if original_value is non_existent_marker:
34
+ del target[name]
35
+ else:
36
+ assert isinstance(original_value, str) # for mypy
37
+ target[name] = original_value
38
+
39
+
40
+ @contextlib.contextmanager
41
+ def get_build_tracker() -> Generator["BuildTracker", None, None]:
42
+ root = os.environ.get("PIP_BUILD_TRACKER")
43
+ with contextlib.ExitStack() as ctx:
44
+ if root is None:
45
+ root = ctx.enter_context(TempDirectory(kind="build-tracker")).path
46
+ ctx.enter_context(update_env_context_manager(PIP_BUILD_TRACKER=root))
47
+ logger.debug("Initialized build tracking at %s", root)
48
+
49
+ with BuildTracker(root) as tracker:
50
+ yield tracker
51
+
52
+
53
+ class TrackerId(str):
54
+ """Uniquely identifying string provided to the build tracker."""
55
+
56
+
57
+ class BuildTracker:
58
+ """Ensure that an sdist cannot request itself as a setup requirement.
59
+
60
+ When an sdist is prepared, it identifies its setup requirements in the
61
+ context of ``BuildTracker.track()``. If a requirement shows up recursively, this
62
+ raises an exception.
63
+
64
+ This stops fork bombs embedded in malicious packages."""
65
+
66
+ def __init__(self, root: str) -> None:
67
+ self._root = root
68
+ self._entries: Dict[TrackerId, InstallRequirement] = {}
69
+ logger.debug("Created build tracker: %s", self._root)
70
+
71
+ def __enter__(self) -> "BuildTracker":
72
+ logger.debug("Entered build tracker: %s", self._root)
73
+ return self
74
+
75
+ def __exit__(
76
+ self,
77
+ exc_type: Optional[Type[BaseException]],
78
+ exc_val: Optional[BaseException],
79
+ exc_tb: Optional[TracebackType],
80
+ ) -> None:
81
+ self.cleanup()
82
+
83
+ def _entry_path(self, key: TrackerId) -> str:
84
+ hashed = hashlib.sha224(key.encode()).hexdigest()
85
+ return os.path.join(self._root, hashed)
86
+
87
+ def add(self, req: InstallRequirement, key: TrackerId) -> None:
88
+ """Add an InstallRequirement to build tracking."""
89
+
90
+ # Get the file to write information about this requirement.
91
+ entry_path = self._entry_path(key)
92
+
93
+ # Try reading from the file. If it exists and can be read from, a build
94
+ # is already in progress, so a LookupError is raised.
95
+ try:
96
+ with open(entry_path) as fp:
97
+ contents = fp.read()
98
+ except FileNotFoundError:
99
+ pass
100
+ else:
101
+ message = f"{req.link} is already being built: {contents}"
102
+ raise LookupError(message)
103
+
104
+ # If we're here, req should really not be building already.
105
+ assert key not in self._entries
106
+
107
+ # Start tracking this requirement.
108
+ with open(entry_path, "w", encoding="utf-8") as fp:
109
+ fp.write(str(req))
110
+ self._entries[key] = req
111
+
112
+ logger.debug("Added %s to build tracker %r", req, self._root)
113
+
114
+ def remove(self, req: InstallRequirement, key: TrackerId) -> None:
115
+ """Remove an InstallRequirement from build tracking."""
116
+
117
+ # Delete the created file and the corresponding entry.
118
+ os.unlink(self._entry_path(key))
119
+ del self._entries[key]
120
+
121
+ logger.debug("Removed %s from build tracker %r", req, self._root)
122
+
123
+ def cleanup(self) -> None:
124
+ for key, req in list(self._entries.items()):
125
+ self.remove(req, key)
126
+
127
+ logger.debug("Removed build tracker: %r", self._root)
128
+
129
+ @contextlib.contextmanager
130
+ def track(self, req: InstallRequirement, key: str) -> Generator[None, None, None]:
131
+ """Ensure that `key` cannot install itself as a setup requirement.
132
+
133
+ :raises LookupError: If `key` was already provided in a parent invocation of
134
+ the context introduced by this method."""
135
+ tracker_id = TrackerId(key)
136
+ self.add(req, tracker_id)
137
+ yield
138
+ self.remove(req, tracker_id)
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/operations/build/wheel.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import os
3
+ from typing import Optional
4
+
5
+ from pip._vendor.pyproject_hooks import BuildBackendHookCaller
6
+
7
+ from pip._internal.utils.subprocess import runner_with_spinner_message
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ def build_wheel_pep517(
13
+ name: str,
14
+ backend: BuildBackendHookCaller,
15
+ metadata_directory: str,
16
+ tempd: str,
17
+ ) -> Optional[str]:
18
+ """Build one InstallRequirement using the PEP 517 build process.
19
+
20
+ Returns path to wheel if successfully built. Otherwise, returns None.
21
+ """
22
+ assert metadata_directory is not None
23
+ try:
24
+ logger.debug("Destination directory: %s", tempd)
25
+
26
+ runner = runner_with_spinner_message(
27
+ f"Building wheel for {name} (pyproject.toml)"
28
+ )
29
+ with backend.subprocess_runner(runner):
30
+ wheel_name = backend.build_wheel(
31
+ tempd,
32
+ metadata_directory=metadata_directory,
33
+ )
34
+ except Exception:
35
+ logger.error("Failed building wheel for %s", name)
36
+ return None
37
+ return os.path.join(tempd, wheel_name)
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/constructors.cpython-311.pyc ADDED
Binary file (23.1 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_file.cpython-311.pyc ADDED
Binary file (23.9 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_install.cpython-311.pyc ADDED
Binary file (40.4 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_set.cpython-311.pyc ADDED
Binary file (6.03 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc ADDED
Binary file (36.7 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/constructors.py ADDED
@@ -0,0 +1,560 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Backing implementation for InstallRequirement's various constructors
2
+
3
+ The idea here is that these formed a major chunk of InstallRequirement's size
4
+ so, moving them and support code dedicated to them outside of that class
5
+ helps creates for better understandability for the rest of the code.
6
+
7
+ These are meant to be used elsewhere within pip to create instances of
8
+ InstallRequirement.
9
+ """
10
+
11
+ import copy
12
+ import logging
13
+ import os
14
+ import re
15
+ from dataclasses import dataclass
16
+ from typing import Collection, Dict, List, Optional, Set, Tuple, Union
17
+
18
+ from pip._vendor.packaging.markers import Marker
19
+ from pip._vendor.packaging.requirements import InvalidRequirement, Requirement
20
+ from pip._vendor.packaging.specifiers import Specifier
21
+
22
+ from pip._internal.exceptions import InstallationError
23
+ from pip._internal.models.index import PyPI, TestPyPI
24
+ from pip._internal.models.link import Link
25
+ from pip._internal.models.wheel import Wheel
26
+ from pip._internal.req.req_file import ParsedRequirement
27
+ from pip._internal.req.req_install import InstallRequirement
28
+ from pip._internal.utils.filetypes import is_archive_file
29
+ from pip._internal.utils.misc import is_installable_dir
30
+ from pip._internal.utils.packaging import get_requirement
31
+ from pip._internal.utils.urls import path_to_url
32
+ from pip._internal.vcs import is_url, vcs
33
+
34
+ __all__ = [
35
+ "install_req_from_editable",
36
+ "install_req_from_line",
37
+ "parse_editable",
38
+ ]
39
+
40
+ logger = logging.getLogger(__name__)
41
+ operators = Specifier._operators.keys()
42
+
43
+
44
+ def _strip_extras(path: str) -> Tuple[str, Optional[str]]:
45
+ m = re.match(r"^(.+)(\[[^\]]+\])$", path)
46
+ extras = None
47
+ if m:
48
+ path_no_extras = m.group(1)
49
+ extras = m.group(2)
50
+ else:
51
+ path_no_extras = path
52
+
53
+ return path_no_extras, extras
54
+
55
+
56
+ def convert_extras(extras: Optional[str]) -> Set[str]:
57
+ if not extras:
58
+ return set()
59
+ return get_requirement("placeholder" + extras.lower()).extras
60
+
61
+
62
+ def _set_requirement_extras(req: Requirement, new_extras: Set[str]) -> Requirement:
63
+ """
64
+ Returns a new requirement based on the given one, with the supplied extras. If the
65
+ given requirement already has extras those are replaced (or dropped if no new extras
66
+ are given).
67
+ """
68
+ match: Optional[re.Match[str]] = re.fullmatch(
69
+ # see https://peps.python.org/pep-0508/#complete-grammar
70
+ r"([\w\t .-]+)(\[[^\]]*\])?(.*)",
71
+ str(req),
72
+ flags=re.ASCII,
73
+ )
74
+ # ireq.req is a valid requirement so the regex should always match
75
+ assert (
76
+ match is not None
77
+ ), f"regex match on requirement {req} failed, this should never happen"
78
+ pre: Optional[str] = match.group(1)
79
+ post: Optional[str] = match.group(3)
80
+ assert (
81
+ pre is not None and post is not None
82
+ ), f"regex group selection for requirement {req} failed, this should never happen"
83
+ extras: str = "[{}]".format(",".join(sorted(new_extras)) if new_extras else "")
84
+ return get_requirement(f"{pre}{extras}{post}")
85
+
86
+
87
+ def parse_editable(editable_req: str) -> Tuple[Optional[str], str, Set[str]]:
88
+ """Parses an editable requirement into:
89
+ - a requirement name
90
+ - an URL
91
+ - extras
92
+ - editable options
93
+ Accepted requirements:
94
+ svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir
95
+ .[some_extra]
96
+ """
97
+
98
+ url = editable_req
99
+
100
+ # If a file path is specified with extras, strip off the extras.
101
+ url_no_extras, extras = _strip_extras(url)
102
+
103
+ if os.path.isdir(url_no_extras):
104
+ # Treating it as code that has already been checked out
105
+ url_no_extras = path_to_url(url_no_extras)
106
+
107
+ if url_no_extras.lower().startswith("file:"):
108
+ package_name = Link(url_no_extras).egg_fragment
109
+ if extras:
110
+ return (
111
+ package_name,
112
+ url_no_extras,
113
+ get_requirement("placeholder" + extras.lower()).extras,
114
+ )
115
+ else:
116
+ return package_name, url_no_extras, set()
117
+
118
+ for version_control in vcs:
119
+ if url.lower().startswith(f"{version_control}:"):
120
+ url = f"{version_control}+{url}"
121
+ break
122
+
123
+ link = Link(url)
124
+
125
+ if not link.is_vcs:
126
+ backends = ", ".join(vcs.all_schemes)
127
+ raise InstallationError(
128
+ f"{editable_req} is not a valid editable requirement. "
129
+ f"It should either be a path to a local project or a VCS URL "
130
+ f"(beginning with {backends})."
131
+ )
132
+
133
+ package_name = link.egg_fragment
134
+ if not package_name:
135
+ raise InstallationError(
136
+ f"Could not detect requirement name for '{editable_req}', "
137
+ "please specify one with #egg=your_package_name"
138
+ )
139
+ return package_name, url, set()
140
+
141
+
142
+ def check_first_requirement_in_file(filename: str) -> None:
143
+ """Check if file is parsable as a requirements file.
144
+
145
+ This is heavily based on ``pkg_resources.parse_requirements``, but
146
+ simplified to just check the first meaningful line.
147
+
148
+ :raises InvalidRequirement: If the first meaningful line cannot be parsed
149
+ as an requirement.
150
+ """
151
+ with open(filename, encoding="utf-8", errors="ignore") as f:
152
+ # Create a steppable iterator, so we can handle \-continuations.
153
+ lines = (
154
+ line
155
+ for line in (line.strip() for line in f)
156
+ if line and not line.startswith("#") # Skip blank lines/comments.
157
+ )
158
+
159
+ for line in lines:
160
+ # Drop comments -- a hash without a space may be in a URL.
161
+ if " #" in line:
162
+ line = line[: line.find(" #")]
163
+ # If there is a line continuation, drop it, and append the next line.
164
+ if line.endswith("\\"):
165
+ line = line[:-2].strip() + next(lines, "")
166
+ get_requirement(line)
167
+ return
168
+
169
+
170
+ def deduce_helpful_msg(req: str) -> str:
171
+ """Returns helpful msg in case requirements file does not exist,
172
+ or cannot be parsed.
173
+
174
+ :params req: Requirements file path
175
+ """
176
+ if not os.path.exists(req):
177
+ return f" File '{req}' does not exist."
178
+ msg = " The path does exist. "
179
+ # Try to parse and check if it is a requirements file.
180
+ try:
181
+ check_first_requirement_in_file(req)
182
+ except InvalidRequirement:
183
+ logger.debug("Cannot parse '%s' as requirements file", req)
184
+ else:
185
+ msg += (
186
+ f"The argument you provided "
187
+ f"({req}) appears to be a"
188
+ f" requirements file. If that is the"
189
+ f" case, use the '-r' flag to install"
190
+ f" the packages specified within it."
191
+ )
192
+ return msg
193
+
194
+
195
+ @dataclass(frozen=True)
196
+ class RequirementParts:
197
+ requirement: Optional[Requirement]
198
+ link: Optional[Link]
199
+ markers: Optional[Marker]
200
+ extras: Set[str]
201
+
202
+
203
+ def parse_req_from_editable(editable_req: str) -> RequirementParts:
204
+ name, url, extras_override = parse_editable(editable_req)
205
+
206
+ if name is not None:
207
+ try:
208
+ req: Optional[Requirement] = get_requirement(name)
209
+ except InvalidRequirement as exc:
210
+ raise InstallationError(f"Invalid requirement: {name!r}: {exc}")
211
+ else:
212
+ req = None
213
+
214
+ link = Link(url)
215
+
216
+ return RequirementParts(req, link, None, extras_override)
217
+
218
+
219
+ # ---- The actual constructors follow ----
220
+
221
+
222
+ def install_req_from_editable(
223
+ editable_req: str,
224
+ comes_from: Optional[Union[InstallRequirement, str]] = None,
225
+ *,
226
+ use_pep517: Optional[bool] = None,
227
+ isolated: bool = False,
228
+ global_options: Optional[List[str]] = None,
229
+ hash_options: Optional[Dict[str, List[str]]] = None,
230
+ constraint: bool = False,
231
+ user_supplied: bool = False,
232
+ permit_editable_wheels: bool = False,
233
+ config_settings: Optional[Dict[str, Union[str, List[str]]]] = None,
234
+ ) -> InstallRequirement:
235
+ parts = parse_req_from_editable(editable_req)
236
+
237
+ return InstallRequirement(
238
+ parts.requirement,
239
+ comes_from=comes_from,
240
+ user_supplied=user_supplied,
241
+ editable=True,
242
+ permit_editable_wheels=permit_editable_wheels,
243
+ link=parts.link,
244
+ constraint=constraint,
245
+ use_pep517=use_pep517,
246
+ isolated=isolated,
247
+ global_options=global_options,
248
+ hash_options=hash_options,
249
+ config_settings=config_settings,
250
+ extras=parts.extras,
251
+ )
252
+
253
+
254
+ def _looks_like_path(name: str) -> bool:
255
+ """Checks whether the string "looks like" a path on the filesystem.
256
+
257
+ This does not check whether the target actually exists, only judge from the
258
+ appearance.
259
+
260
+ Returns true if any of the following conditions is true:
261
+ * a path separator is found (either os.path.sep or os.path.altsep);
262
+ * a dot is found (which represents the current directory).
263
+ """
264
+ if os.path.sep in name:
265
+ return True
266
+ if os.path.altsep is not None and os.path.altsep in name:
267
+ return True
268
+ if name.startswith("."):
269
+ return True
270
+ return False
271
+
272
+
273
+ def _get_url_from_path(path: str, name: str) -> Optional[str]:
274
+ """
275
+ First, it checks whether a provided path is an installable directory. If it
276
+ is, returns the path.
277
+
278
+ If false, check if the path is an archive file (such as a .whl).
279
+ The function checks if the path is a file. If false, if the path has
280
+ an @, it will treat it as a PEP 440 URL requirement and return the path.
281
+ """
282
+ if _looks_like_path(name) and os.path.isdir(path):
283
+ if is_installable_dir(path):
284
+ return path_to_url(path)
285
+ # TODO: The is_installable_dir test here might not be necessary
286
+ # now that it is done in load_pyproject_toml too.
287
+ raise InstallationError(
288
+ f"Directory {name!r} is not installable. Neither 'setup.py' "
289
+ "nor 'pyproject.toml' found."
290
+ )
291
+ if not is_archive_file(path):
292
+ return None
293
+ if os.path.isfile(path):
294
+ return path_to_url(path)
295
+ urlreq_parts = name.split("@", 1)
296
+ if len(urlreq_parts) >= 2 and not _looks_like_path(urlreq_parts[0]):
297
+ # If the path contains '@' and the part before it does not look
298
+ # like a path, try to treat it as a PEP 440 URL req instead.
299
+ return None
300
+ logger.warning(
301
+ "Requirement %r looks like a filename, but the file does not exist",
302
+ name,
303
+ )
304
+ return path_to_url(path)
305
+
306
+
307
+ def parse_req_from_line(name: str, line_source: Optional[str]) -> RequirementParts:
308
+ if is_url(name):
309
+ marker_sep = "; "
310
+ else:
311
+ marker_sep = ";"
312
+ if marker_sep in name:
313
+ name, markers_as_string = name.split(marker_sep, 1)
314
+ markers_as_string = markers_as_string.strip()
315
+ if not markers_as_string:
316
+ markers = None
317
+ else:
318
+ markers = Marker(markers_as_string)
319
+ else:
320
+ markers = None
321
+ name = name.strip()
322
+ req_as_string = None
323
+ path = os.path.normpath(os.path.abspath(name))
324
+ link = None
325
+ extras_as_string = None
326
+
327
+ if is_url(name):
328
+ link = Link(name)
329
+ else:
330
+ p, extras_as_string = _strip_extras(path)
331
+ url = _get_url_from_path(p, name)
332
+ if url is not None:
333
+ link = Link(url)
334
+
335
+ # it's a local file, dir, or url
336
+ if link:
337
+ # Handle relative file URLs
338
+ if link.scheme == "file" and re.search(r"\.\./", link.url):
339
+ link = Link(path_to_url(os.path.normpath(os.path.abspath(link.path))))
340
+ # wheel file
341
+ if link.is_wheel:
342
+ wheel = Wheel(link.filename) # can raise InvalidWheelFilename
343
+ req_as_string = f"{wheel.name}=={wheel.version}"
344
+ else:
345
+ # set the req to the egg fragment. when it's not there, this
346
+ # will become an 'unnamed' requirement
347
+ req_as_string = link.egg_fragment
348
+
349
+ # a requirement specifier
350
+ else:
351
+ req_as_string = name
352
+
353
+ extras = convert_extras(extras_as_string)
354
+
355
+ def with_source(text: str) -> str:
356
+ if not line_source:
357
+ return text
358
+ return f"{text} (from {line_source})"
359
+
360
+ def _parse_req_string(req_as_string: str) -> Requirement:
361
+ try:
362
+ return get_requirement(req_as_string)
363
+ except InvalidRequirement as exc:
364
+ if os.path.sep in req_as_string:
365
+ add_msg = "It looks like a path."
366
+ add_msg += deduce_helpful_msg(req_as_string)
367
+ elif "=" in req_as_string and not any(
368
+ op in req_as_string for op in operators
369
+ ):
370
+ add_msg = "= is not a valid operator. Did you mean == ?"
371
+ else:
372
+ add_msg = ""
373
+ msg = with_source(f"Invalid requirement: {req_as_string!r}: {exc}")
374
+ if add_msg:
375
+ msg += f"\nHint: {add_msg}"
376
+ raise InstallationError(msg)
377
+
378
+ if req_as_string is not None:
379
+ req: Optional[Requirement] = _parse_req_string(req_as_string)
380
+ else:
381
+ req = None
382
+
383
+ return RequirementParts(req, link, markers, extras)
384
+
385
+
386
+ def install_req_from_line(
387
+ name: str,
388
+ comes_from: Optional[Union[str, InstallRequirement]] = None,
389
+ *,
390
+ use_pep517: Optional[bool] = None,
391
+ isolated: bool = False,
392
+ global_options: Optional[List[str]] = None,
393
+ hash_options: Optional[Dict[str, List[str]]] = None,
394
+ constraint: bool = False,
395
+ line_source: Optional[str] = None,
396
+ user_supplied: bool = False,
397
+ config_settings: Optional[Dict[str, Union[str, List[str]]]] = None,
398
+ ) -> InstallRequirement:
399
+ """Creates an InstallRequirement from a name, which might be a
400
+ requirement, directory containing 'setup.py', filename, or URL.
401
+
402
+ :param line_source: An optional string describing where the line is from,
403
+ for logging purposes in case of an error.
404
+ """
405
+ parts = parse_req_from_line(name, line_source)
406
+
407
+ return InstallRequirement(
408
+ parts.requirement,
409
+ comes_from,
410
+ link=parts.link,
411
+ markers=parts.markers,
412
+ use_pep517=use_pep517,
413
+ isolated=isolated,
414
+ global_options=global_options,
415
+ hash_options=hash_options,
416
+ config_settings=config_settings,
417
+ constraint=constraint,
418
+ extras=parts.extras,
419
+ user_supplied=user_supplied,
420
+ )
421
+
422
+
423
+ def install_req_from_req_string(
424
+ req_string: str,
425
+ comes_from: Optional[InstallRequirement] = None,
426
+ isolated: bool = False,
427
+ use_pep517: Optional[bool] = None,
428
+ user_supplied: bool = False,
429
+ ) -> InstallRequirement:
430
+ try:
431
+ req = get_requirement(req_string)
432
+ except InvalidRequirement as exc:
433
+ raise InstallationError(f"Invalid requirement: {req_string!r}: {exc}")
434
+
435
+ domains_not_allowed = [
436
+ PyPI.file_storage_domain,
437
+ TestPyPI.file_storage_domain,
438
+ ]
439
+ if (
440
+ req.url
441
+ and comes_from
442
+ and comes_from.link
443
+ and comes_from.link.netloc in domains_not_allowed
444
+ ):
445
+ # Explicitly disallow pypi packages that depend on external urls
446
+ raise InstallationError(
447
+ "Packages installed from PyPI cannot depend on packages "
448
+ "which are not also hosted on PyPI.\n"
449
+ f"{comes_from.name} depends on {req} "
450
+ )
451
+
452
+ return InstallRequirement(
453
+ req,
454
+ comes_from,
455
+ isolated=isolated,
456
+ use_pep517=use_pep517,
457
+ user_supplied=user_supplied,
458
+ )
459
+
460
+
461
+ def install_req_from_parsed_requirement(
462
+ parsed_req: ParsedRequirement,
463
+ isolated: bool = False,
464
+ use_pep517: Optional[bool] = None,
465
+ user_supplied: bool = False,
466
+ config_settings: Optional[Dict[str, Union[str, List[str]]]] = None,
467
+ ) -> InstallRequirement:
468
+ if parsed_req.is_editable:
469
+ req = install_req_from_editable(
470
+ parsed_req.requirement,
471
+ comes_from=parsed_req.comes_from,
472
+ use_pep517=use_pep517,
473
+ constraint=parsed_req.constraint,
474
+ isolated=isolated,
475
+ user_supplied=user_supplied,
476
+ config_settings=config_settings,
477
+ )
478
+
479
+ else:
480
+ req = install_req_from_line(
481
+ parsed_req.requirement,
482
+ comes_from=parsed_req.comes_from,
483
+ use_pep517=use_pep517,
484
+ isolated=isolated,
485
+ global_options=(
486
+ parsed_req.options.get("global_options", [])
487
+ if parsed_req.options
488
+ else []
489
+ ),
490
+ hash_options=(
491
+ parsed_req.options.get("hashes", {}) if parsed_req.options else {}
492
+ ),
493
+ constraint=parsed_req.constraint,
494
+ line_source=parsed_req.line_source,
495
+ user_supplied=user_supplied,
496
+ config_settings=config_settings,
497
+ )
498
+ return req
499
+
500
+
501
+ def install_req_from_link_and_ireq(
502
+ link: Link, ireq: InstallRequirement
503
+ ) -> InstallRequirement:
504
+ return InstallRequirement(
505
+ req=ireq.req,
506
+ comes_from=ireq.comes_from,
507
+ editable=ireq.editable,
508
+ link=link,
509
+ markers=ireq.markers,
510
+ use_pep517=ireq.use_pep517,
511
+ isolated=ireq.isolated,
512
+ global_options=ireq.global_options,
513
+ hash_options=ireq.hash_options,
514
+ config_settings=ireq.config_settings,
515
+ user_supplied=ireq.user_supplied,
516
+ )
517
+
518
+
519
+ def install_req_drop_extras(ireq: InstallRequirement) -> InstallRequirement:
520
+ """
521
+ Creates a new InstallationRequirement using the given template but without
522
+ any extras. Sets the original requirement as the new one's parent
523
+ (comes_from).
524
+ """
525
+ return InstallRequirement(
526
+ req=(
527
+ _set_requirement_extras(ireq.req, set()) if ireq.req is not None else None
528
+ ),
529
+ comes_from=ireq,
530
+ editable=ireq.editable,
531
+ link=ireq.link,
532
+ markers=ireq.markers,
533
+ use_pep517=ireq.use_pep517,
534
+ isolated=ireq.isolated,
535
+ global_options=ireq.global_options,
536
+ hash_options=ireq.hash_options,
537
+ constraint=ireq.constraint,
538
+ extras=[],
539
+ config_settings=ireq.config_settings,
540
+ user_supplied=ireq.user_supplied,
541
+ permit_editable_wheels=ireq.permit_editable_wheels,
542
+ )
543
+
544
+
545
+ def install_req_extend_extras(
546
+ ireq: InstallRequirement,
547
+ extras: Collection[str],
548
+ ) -> InstallRequirement:
549
+ """
550
+ Returns a copy of an installation requirement with some additional extras.
551
+ Makes a shallow copy of the ireq object.
552
+ """
553
+ result = copy.copy(ireq)
554
+ result.extras = {*ireq.extras, *extras}
555
+ result.req = (
556
+ _set_requirement_extras(ireq.req, result.extras)
557
+ if ireq.req is not None
558
+ else None
559
+ )
560
+ return result
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/req_set.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from collections import OrderedDict
3
+ from typing import Dict, List
4
+
5
+ from pip._vendor.packaging.utils import canonicalize_name
6
+
7
+ from pip._internal.req.req_install import InstallRequirement
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class RequirementSet:
13
+ def __init__(self, check_supported_wheels: bool = True) -> None:
14
+ """Create a RequirementSet."""
15
+
16
+ self.requirements: Dict[str, InstallRequirement] = OrderedDict()
17
+ self.check_supported_wheels = check_supported_wheels
18
+
19
+ self.unnamed_requirements: List[InstallRequirement] = []
20
+
21
+ def __str__(self) -> str:
22
+ requirements = sorted(
23
+ (req for req in self.requirements.values() if not req.comes_from),
24
+ key=lambda req: canonicalize_name(req.name or ""),
25
+ )
26
+ return " ".join(str(req.req) for req in requirements)
27
+
28
+ def __repr__(self) -> str:
29
+ requirements = sorted(
30
+ self.requirements.values(),
31
+ key=lambda req: canonicalize_name(req.name or ""),
32
+ )
33
+
34
+ format_string = "<{classname} object; {count} requirement(s): {reqs}>"
35
+ return format_string.format(
36
+ classname=self.__class__.__name__,
37
+ count=len(requirements),
38
+ reqs=", ".join(str(req.req) for req in requirements),
39
+ )
40
+
41
+ def add_unnamed_requirement(self, install_req: InstallRequirement) -> None:
42
+ assert not install_req.name
43
+ self.unnamed_requirements.append(install_req)
44
+
45
+ def add_named_requirement(self, install_req: InstallRequirement) -> None:
46
+ assert install_req.name
47
+
48
+ project_name = canonicalize_name(install_req.name)
49
+ self.requirements[project_name] = install_req
50
+
51
+ def has_requirement(self, name: str) -> bool:
52
+ project_name = canonicalize_name(name)
53
+
54
+ return (
55
+ project_name in self.requirements
56
+ and not self.requirements[project_name].constraint
57
+ )
58
+
59
+ def get_requirement(self, name: str) -> InstallRequirement:
60
+ project_name = canonicalize_name(name)
61
+
62
+ if project_name in self.requirements:
63
+ return self.requirements[project_name]
64
+
65
+ raise KeyError(f"No project with the name {name!r}")
66
+
67
+ @property
68
+ def all_requirements(self) -> List[InstallRequirement]:
69
+ return self.unnamed_requirements + list(self.requirements.values())
70
+
71
+ @property
72
+ def requirements_to_install(self) -> List[InstallRequirement]:
73
+ """Return the list of requirements that need to be installed.
74
+
75
+ TODO remove this property together with the legacy resolver, since the new
76
+ resolver only returns requirements that need to be installed.
77
+ """
78
+ return [
79
+ install_req
80
+ for install_req in self.all_requirements
81
+ if not install_req.constraint and not install_req.satisfied_by
82
+ ]
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py ADDED
@@ -0,0 +1,633 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import functools
2
+ import os
3
+ import sys
4
+ import sysconfig
5
+ from importlib.util import cache_from_source
6
+ from typing import Any, Callable, Dict, Generator, Iterable, List, Optional, Set, Tuple
7
+
8
+ from pip._internal.exceptions import LegacyDistutilsInstall, UninstallMissingRecord
9
+ from pip._internal.locations import get_bin_prefix, get_bin_user
10
+ from pip._internal.metadata import BaseDistribution
11
+ from pip._internal.utils.compat import WINDOWS
12
+ from pip._internal.utils.egg_link import egg_link_path_from_location
13
+ from pip._internal.utils.logging import getLogger, indent_log
14
+ from pip._internal.utils.misc import ask, normalize_path, renames, rmtree
15
+ from pip._internal.utils.temp_dir import AdjacentTempDirectory, TempDirectory
16
+ from pip._internal.utils.virtualenv import running_under_virtualenv
17
+
18
+ logger = getLogger(__name__)
19
+
20
+
21
+ def _script_names(
22
+ bin_dir: str, script_name: str, is_gui: bool
23
+ ) -> Generator[str, None, None]:
24
+ """Create the fully qualified name of the files created by
25
+ {console,gui}_scripts for the given ``dist``.
26
+ Returns the list of file names
27
+ """
28
+ exe_name = os.path.join(bin_dir, script_name)
29
+ yield exe_name
30
+ if not WINDOWS:
31
+ return
32
+ yield f"{exe_name}.exe"
33
+ yield f"{exe_name}.exe.manifest"
34
+ if is_gui:
35
+ yield f"{exe_name}-script.pyw"
36
+ else:
37
+ yield f"{exe_name}-script.py"
38
+
39
+
40
+ def _unique(
41
+ fn: Callable[..., Generator[Any, None, None]]
42
+ ) -> Callable[..., Generator[Any, None, None]]:
43
+ @functools.wraps(fn)
44
+ def unique(*args: Any, **kw: Any) -> Generator[Any, None, None]:
45
+ seen: Set[Any] = set()
46
+ for item in fn(*args, **kw):
47
+ if item not in seen:
48
+ seen.add(item)
49
+ yield item
50
+
51
+ return unique
52
+
53
+
54
+ @_unique
55
+ def uninstallation_paths(dist: BaseDistribution) -> Generator[str, None, None]:
56
+ """
57
+ Yield all the uninstallation paths for dist based on RECORD-without-.py[co]
58
+
59
+ Yield paths to all the files in RECORD. For each .py file in RECORD, add
60
+ the .pyc and .pyo in the same directory.
61
+
62
+ UninstallPathSet.add() takes care of the __pycache__ .py[co].
63
+
64
+ If RECORD is not found, raises an error,
65
+ with possible information from the INSTALLER file.
66
+
67
+ https://packaging.python.org/specifications/recording-installed-packages/
68
+ """
69
+ location = dist.location
70
+ assert location is not None, "not installed"
71
+
72
+ entries = dist.iter_declared_entries()
73
+ if entries is None:
74
+ raise UninstallMissingRecord(distribution=dist)
75
+
76
+ for entry in entries:
77
+ path = os.path.join(location, entry)
78
+ yield path
79
+ if path.endswith(".py"):
80
+ dn, fn = os.path.split(path)
81
+ base = fn[:-3]
82
+ path = os.path.join(dn, base + ".pyc")
83
+ yield path
84
+ path = os.path.join(dn, base + ".pyo")
85
+ yield path
86
+
87
+
88
+ def compact(paths: Iterable[str]) -> Set[str]:
89
+ """Compact a path set to contain the minimal number of paths
90
+ necessary to contain all paths in the set. If /a/path/ and
91
+ /a/path/to/a/file.txt are both in the set, leave only the
92
+ shorter path."""
93
+
94
+ sep = os.path.sep
95
+ short_paths: Set[str] = set()
96
+ for path in sorted(paths, key=len):
97
+ should_skip = any(
98
+ path.startswith(shortpath.rstrip("*"))
99
+ and path[len(shortpath.rstrip("*").rstrip(sep))] == sep
100
+ for shortpath in short_paths
101
+ )
102
+ if not should_skip:
103
+ short_paths.add(path)
104
+ return short_paths
105
+
106
+
107
+ def compress_for_rename(paths: Iterable[str]) -> Set[str]:
108
+ """Returns a set containing the paths that need to be renamed.
109
+
110
+ This set may include directories when the original sequence of paths
111
+ included every file on disk.
112
+ """
113
+ case_map = {os.path.normcase(p): p for p in paths}
114
+ remaining = set(case_map)
115
+ unchecked = sorted({os.path.split(p)[0] for p in case_map.values()}, key=len)
116
+ wildcards: Set[str] = set()
117
+
118
+ def norm_join(*a: str) -> str:
119
+ return os.path.normcase(os.path.join(*a))
120
+
121
+ for root in unchecked:
122
+ if any(os.path.normcase(root).startswith(w) for w in wildcards):
123
+ # This directory has already been handled.
124
+ continue
125
+
126
+ all_files: Set[str] = set()
127
+ all_subdirs: Set[str] = set()
128
+ for dirname, subdirs, files in os.walk(root):
129
+ all_subdirs.update(norm_join(root, dirname, d) for d in subdirs)
130
+ all_files.update(norm_join(root, dirname, f) for f in files)
131
+ # If all the files we found are in our remaining set of files to
132
+ # remove, then remove them from the latter set and add a wildcard
133
+ # for the directory.
134
+ if not (all_files - remaining):
135
+ remaining.difference_update(all_files)
136
+ wildcards.add(root + os.sep)
137
+
138
+ return set(map(case_map.__getitem__, remaining)) | wildcards
139
+
140
+
141
+ def compress_for_output_listing(paths: Iterable[str]) -> Tuple[Set[str], Set[str]]:
142
+ """Returns a tuple of 2 sets of which paths to display to user
143
+
144
+ The first set contains paths that would be deleted. Files of a package
145
+ are not added and the top-level directory of the package has a '*' added
146
+ at the end - to signify that all it's contents are removed.
147
+
148
+ The second set contains files that would have been skipped in the above
149
+ folders.
150
+ """
151
+
152
+ will_remove = set(paths)
153
+ will_skip = set()
154
+
155
+ # Determine folders and files
156
+ folders = set()
157
+ files = set()
158
+ for path in will_remove:
159
+ if path.endswith(".pyc"):
160
+ continue
161
+ if path.endswith("__init__.py") or ".dist-info" in path:
162
+ folders.add(os.path.dirname(path))
163
+ files.add(path)
164
+
165
+ _normcased_files = set(map(os.path.normcase, files))
166
+
167
+ folders = compact(folders)
168
+
169
+ # This walks the tree using os.walk to not miss extra folders
170
+ # that might get added.
171
+ for folder in folders:
172
+ for dirpath, _, dirfiles in os.walk(folder):
173
+ for fname in dirfiles:
174
+ if fname.endswith(".pyc"):
175
+ continue
176
+
177
+ file_ = os.path.join(dirpath, fname)
178
+ if (
179
+ os.path.isfile(file_)
180
+ and os.path.normcase(file_) not in _normcased_files
181
+ ):
182
+ # We are skipping this file. Add it to the set.
183
+ will_skip.add(file_)
184
+
185
+ will_remove = files | {os.path.join(folder, "*") for folder in folders}
186
+
187
+ return will_remove, will_skip
188
+
189
+
190
+ class StashedUninstallPathSet:
191
+ """A set of file rename operations to stash files while
192
+ tentatively uninstalling them."""
193
+
194
+ def __init__(self) -> None:
195
+ # Mapping from source file root to [Adjacent]TempDirectory
196
+ # for files under that directory.
197
+ self._save_dirs: Dict[str, TempDirectory] = {}
198
+ # (old path, new path) tuples for each move that may need
199
+ # to be undone.
200
+ self._moves: List[Tuple[str, str]] = []
201
+
202
+ def _get_directory_stash(self, path: str) -> str:
203
+ """Stashes a directory.
204
+
205
+ Directories are stashed adjacent to their original location if
206
+ possible, or else moved/copied into the user's temp dir."""
207
+
208
+ try:
209
+ save_dir: TempDirectory = AdjacentTempDirectory(path)
210
+ except OSError:
211
+ save_dir = TempDirectory(kind="uninstall")
212
+ self._save_dirs[os.path.normcase(path)] = save_dir
213
+
214
+ return save_dir.path
215
+
216
+ def _get_file_stash(self, path: str) -> str:
217
+ """Stashes a file.
218
+
219
+ If no root has been provided, one will be created for the directory
220
+ in the user's temp directory."""
221
+ path = os.path.normcase(path)
222
+ head, old_head = os.path.dirname(path), None
223
+ save_dir = None
224
+
225
+ while head != old_head:
226
+ try:
227
+ save_dir = self._save_dirs[head]
228
+ break
229
+ except KeyError:
230
+ pass
231
+ head, old_head = os.path.dirname(head), head
232
+ else:
233
+ # Did not find any suitable root
234
+ head = os.path.dirname(path)
235
+ save_dir = TempDirectory(kind="uninstall")
236
+ self._save_dirs[head] = save_dir
237
+
238
+ relpath = os.path.relpath(path, head)
239
+ if relpath and relpath != os.path.curdir:
240
+ return os.path.join(save_dir.path, relpath)
241
+ return save_dir.path
242
+
243
+ def stash(self, path: str) -> str:
244
+ """Stashes the directory or file and returns its new location.
245
+ Handle symlinks as files to avoid modifying the symlink targets.
246
+ """
247
+ path_is_dir = os.path.isdir(path) and not os.path.islink(path)
248
+ if path_is_dir:
249
+ new_path = self._get_directory_stash(path)
250
+ else:
251
+ new_path = self._get_file_stash(path)
252
+
253
+ self._moves.append((path, new_path))
254
+ if path_is_dir and os.path.isdir(new_path):
255
+ # If we're moving a directory, we need to
256
+ # remove the destination first or else it will be
257
+ # moved to inside the existing directory.
258
+ # We just created new_path ourselves, so it will
259
+ # be removable.
260
+ os.rmdir(new_path)
261
+ renames(path, new_path)
262
+ return new_path
263
+
264
+ def commit(self) -> None:
265
+ """Commits the uninstall by removing stashed files."""
266
+ for save_dir in self._save_dirs.values():
267
+ save_dir.cleanup()
268
+ self._moves = []
269
+ self._save_dirs = {}
270
+
271
+ def rollback(self) -> None:
272
+ """Undoes the uninstall by moving stashed files back."""
273
+ for p in self._moves:
274
+ logger.info("Moving to %s\n from %s", *p)
275
+
276
+ for new_path, path in self._moves:
277
+ try:
278
+ logger.debug("Replacing %s from %s", new_path, path)
279
+ if os.path.isfile(new_path) or os.path.islink(new_path):
280
+ os.unlink(new_path)
281
+ elif os.path.isdir(new_path):
282
+ rmtree(new_path)
283
+ renames(path, new_path)
284
+ except OSError as ex:
285
+ logger.error("Failed to restore %s", new_path)
286
+ logger.debug("Exception: %s", ex)
287
+
288
+ self.commit()
289
+
290
+ @property
291
+ def can_rollback(self) -> bool:
292
+ return bool(self._moves)
293
+
294
+
295
+ class UninstallPathSet:
296
+ """A set of file paths to be removed in the uninstallation of a
297
+ requirement."""
298
+
299
+ def __init__(self, dist: BaseDistribution) -> None:
300
+ self._paths: Set[str] = set()
301
+ self._refuse: Set[str] = set()
302
+ self._pth: Dict[str, UninstallPthEntries] = {}
303
+ self._dist = dist
304
+ self._moved_paths = StashedUninstallPathSet()
305
+ # Create local cache of normalize_path results. Creating an UninstallPathSet
306
+ # can result in hundreds/thousands of redundant calls to normalize_path with
307
+ # the same args, which hurts performance.
308
+ self._normalize_path_cached = functools.lru_cache(normalize_path)
309
+
310
+ def _permitted(self, path: str) -> bool:
311
+ """
312
+ Return True if the given path is one we are permitted to
313
+ remove/modify, False otherwise.
314
+
315
+ """
316
+ # aka is_local, but caching normalized sys.prefix
317
+ if not running_under_virtualenv():
318
+ return True
319
+ return path.startswith(self._normalize_path_cached(sys.prefix))
320
+
321
+ def add(self, path: str) -> None:
322
+ head, tail = os.path.split(path)
323
+
324
+ # we normalize the head to resolve parent directory symlinks, but not
325
+ # the tail, since we only want to uninstall symlinks, not their targets
326
+ path = os.path.join(self._normalize_path_cached(head), os.path.normcase(tail))
327
+
328
+ if not os.path.exists(path):
329
+ return
330
+ if self._permitted(path):
331
+ self._paths.add(path)
332
+ else:
333
+ self._refuse.add(path)
334
+
335
+ # __pycache__ files can show up after 'installed-files.txt' is created,
336
+ # due to imports
337
+ if os.path.splitext(path)[1] == ".py":
338
+ self.add(cache_from_source(path))
339
+
340
+ def add_pth(self, pth_file: str, entry: str) -> None:
341
+ pth_file = self._normalize_path_cached(pth_file)
342
+ if self._permitted(pth_file):
343
+ if pth_file not in self._pth:
344
+ self._pth[pth_file] = UninstallPthEntries(pth_file)
345
+ self._pth[pth_file].add(entry)
346
+ else:
347
+ self._refuse.add(pth_file)
348
+
349
+ def remove(self, auto_confirm: bool = False, verbose: bool = False) -> None:
350
+ """Remove paths in ``self._paths`` with confirmation (unless
351
+ ``auto_confirm`` is True)."""
352
+
353
+ if not self._paths:
354
+ logger.info(
355
+ "Can't uninstall '%s'. No files were found to uninstall.",
356
+ self._dist.raw_name,
357
+ )
358
+ return
359
+
360
+ dist_name_version = f"{self._dist.raw_name}-{self._dist.raw_version}"
361
+ logger.info("Uninstalling %s:", dist_name_version)
362
+
363
+ with indent_log():
364
+ if auto_confirm or self._allowed_to_proceed(verbose):
365
+ moved = self._moved_paths
366
+
367
+ for_rename = compress_for_rename(self._paths)
368
+
369
+ for path in sorted(compact(for_rename)):
370
+ moved.stash(path)
371
+ logger.verbose("Removing file or directory %s", path)
372
+
373
+ for pth in self._pth.values():
374
+ pth.remove()
375
+
376
+ logger.info("Successfully uninstalled %s", dist_name_version)
377
+
378
+ def _allowed_to_proceed(self, verbose: bool) -> bool:
379
+ """Display which files would be deleted and prompt for confirmation"""
380
+
381
+ def _display(msg: str, paths: Iterable[str]) -> None:
382
+ if not paths:
383
+ return
384
+
385
+ logger.info(msg)
386
+ with indent_log():
387
+ for path in sorted(compact(paths)):
388
+ logger.info(path)
389
+
390
+ if not verbose:
391
+ will_remove, will_skip = compress_for_output_listing(self._paths)
392
+ else:
393
+ # In verbose mode, display all the files that are going to be
394
+ # deleted.
395
+ will_remove = set(self._paths)
396
+ will_skip = set()
397
+
398
+ _display("Would remove:", will_remove)
399
+ _display("Would not remove (might be manually added):", will_skip)
400
+ _display("Would not remove (outside of prefix):", self._refuse)
401
+ if verbose:
402
+ _display("Will actually move:", compress_for_rename(self._paths))
403
+
404
+ return ask("Proceed (Y/n)? ", ("y", "n", "")) != "n"
405
+
406
+ def rollback(self) -> None:
407
+ """Rollback the changes previously made by remove()."""
408
+ if not self._moved_paths.can_rollback:
409
+ logger.error(
410
+ "Can't roll back %s; was not uninstalled",
411
+ self._dist.raw_name,
412
+ )
413
+ return
414
+ logger.info("Rolling back uninstall of %s", self._dist.raw_name)
415
+ self._moved_paths.rollback()
416
+ for pth in self._pth.values():
417
+ pth.rollback()
418
+
419
+ def commit(self) -> None:
420
+ """Remove temporary save dir: rollback will no longer be possible."""
421
+ self._moved_paths.commit()
422
+
423
+ @classmethod
424
+ def from_dist(cls, dist: BaseDistribution) -> "UninstallPathSet":
425
+ dist_location = dist.location
426
+ info_location = dist.info_location
427
+ if dist_location is None:
428
+ logger.info(
429
+ "Not uninstalling %s since it is not installed",
430
+ dist.canonical_name,
431
+ )
432
+ return cls(dist)
433
+
434
+ normalized_dist_location = normalize_path(dist_location)
435
+ if not dist.local:
436
+ logger.info(
437
+ "Not uninstalling %s at %s, outside environment %s",
438
+ dist.canonical_name,
439
+ normalized_dist_location,
440
+ sys.prefix,
441
+ )
442
+ return cls(dist)
443
+
444
+ if normalized_dist_location in {
445
+ p
446
+ for p in {sysconfig.get_path("stdlib"), sysconfig.get_path("platstdlib")}
447
+ if p
448
+ }:
449
+ logger.info(
450
+ "Not uninstalling %s at %s, as it is in the standard library.",
451
+ dist.canonical_name,
452
+ normalized_dist_location,
453
+ )
454
+ return cls(dist)
455
+
456
+ paths_to_remove = cls(dist)
457
+ develop_egg_link = egg_link_path_from_location(dist.raw_name)
458
+
459
+ # Distribution is installed with metadata in a "flat" .egg-info
460
+ # directory. This means it is not a modern .dist-info installation, an
461
+ # egg, or legacy editable.
462
+ setuptools_flat_installation = (
463
+ dist.installed_with_setuptools_egg_info
464
+ and info_location is not None
465
+ and os.path.exists(info_location)
466
+ # If dist is editable and the location points to a ``.egg-info``,
467
+ # we are in fact in the legacy editable case.
468
+ and not info_location.endswith(f"{dist.setuptools_filename}.egg-info")
469
+ )
470
+
471
+ # Uninstall cases order do matter as in the case of 2 installs of the
472
+ # same package, pip needs to uninstall the currently detected version
473
+ if setuptools_flat_installation:
474
+ if info_location is not None:
475
+ paths_to_remove.add(info_location)
476
+ installed_files = dist.iter_declared_entries()
477
+ if installed_files is not None:
478
+ for installed_file in installed_files:
479
+ paths_to_remove.add(os.path.join(dist_location, installed_file))
480
+ # FIXME: need a test for this elif block
481
+ # occurs with --single-version-externally-managed/--record outside
482
+ # of pip
483
+ elif dist.is_file("top_level.txt"):
484
+ try:
485
+ namespace_packages = dist.read_text("namespace_packages.txt")
486
+ except FileNotFoundError:
487
+ namespaces = []
488
+ else:
489
+ namespaces = namespace_packages.splitlines(keepends=False)
490
+ for top_level_pkg in [
491
+ p
492
+ for p in dist.read_text("top_level.txt").splitlines()
493
+ if p and p not in namespaces
494
+ ]:
495
+ path = os.path.join(dist_location, top_level_pkg)
496
+ paths_to_remove.add(path)
497
+ paths_to_remove.add(f"{path}.py")
498
+ paths_to_remove.add(f"{path}.pyc")
499
+ paths_to_remove.add(f"{path}.pyo")
500
+
501
+ elif dist.installed_by_distutils:
502
+ raise LegacyDistutilsInstall(distribution=dist)
503
+
504
+ elif dist.installed_as_egg:
505
+ # package installed by easy_install
506
+ # We cannot match on dist.egg_name because it can slightly vary
507
+ # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg
508
+ paths_to_remove.add(dist_location)
509
+ easy_install_egg = os.path.split(dist_location)[1]
510
+ easy_install_pth = os.path.join(
511
+ os.path.dirname(dist_location),
512
+ "easy-install.pth",
513
+ )
514
+ paths_to_remove.add_pth(easy_install_pth, "./" + easy_install_egg)
515
+
516
+ elif dist.installed_with_dist_info:
517
+ for path in uninstallation_paths(dist):
518
+ paths_to_remove.add(path)
519
+
520
+ elif develop_egg_link:
521
+ # PEP 660 modern editable is handled in the ``.dist-info`` case
522
+ # above, so this only covers the setuptools-style editable.
523
+ with open(develop_egg_link) as fh:
524
+ link_pointer = os.path.normcase(fh.readline().strip())
525
+ normalized_link_pointer = paths_to_remove._normalize_path_cached(
526
+ link_pointer
527
+ )
528
+ assert os.path.samefile(
529
+ normalized_link_pointer, normalized_dist_location
530
+ ), (
531
+ f"Egg-link {develop_egg_link} (to {link_pointer}) does not match "
532
+ f"installed location of {dist.raw_name} (at {dist_location})"
533
+ )
534
+ paths_to_remove.add(develop_egg_link)
535
+ easy_install_pth = os.path.join(
536
+ os.path.dirname(develop_egg_link), "easy-install.pth"
537
+ )
538
+ paths_to_remove.add_pth(easy_install_pth, dist_location)
539
+
540
+ else:
541
+ logger.debug(
542
+ "Not sure how to uninstall: %s - Check: %s",
543
+ dist,
544
+ dist_location,
545
+ )
546
+
547
+ if dist.in_usersite:
548
+ bin_dir = get_bin_user()
549
+ else:
550
+ bin_dir = get_bin_prefix()
551
+
552
+ # find distutils scripts= scripts
553
+ try:
554
+ for script in dist.iter_distutils_script_names():
555
+ paths_to_remove.add(os.path.join(bin_dir, script))
556
+ if WINDOWS:
557
+ paths_to_remove.add(os.path.join(bin_dir, f"{script}.bat"))
558
+ except (FileNotFoundError, NotADirectoryError):
559
+ pass
560
+
561
+ # find console_scripts and gui_scripts
562
+ def iter_scripts_to_remove(
563
+ dist: BaseDistribution,
564
+ bin_dir: str,
565
+ ) -> Generator[str, None, None]:
566
+ for entry_point in dist.iter_entry_points():
567
+ if entry_point.group == "console_scripts":
568
+ yield from _script_names(bin_dir, entry_point.name, False)
569
+ elif entry_point.group == "gui_scripts":
570
+ yield from _script_names(bin_dir, entry_point.name, True)
571
+
572
+ for s in iter_scripts_to_remove(dist, bin_dir):
573
+ paths_to_remove.add(s)
574
+
575
+ return paths_to_remove
576
+
577
+
578
+ class UninstallPthEntries:
579
+ def __init__(self, pth_file: str) -> None:
580
+ self.file = pth_file
581
+ self.entries: Set[str] = set()
582
+ self._saved_lines: Optional[List[bytes]] = None
583
+
584
+ def add(self, entry: str) -> None:
585
+ entry = os.path.normcase(entry)
586
+ # On Windows, os.path.normcase converts the entry to use
587
+ # backslashes. This is correct for entries that describe absolute
588
+ # paths outside of site-packages, but all the others use forward
589
+ # slashes.
590
+ # os.path.splitdrive is used instead of os.path.isabs because isabs
591
+ # treats non-absolute paths with drive letter markings like c:foo\bar
592
+ # as absolute paths. It also does not recognize UNC paths if they don't
593
+ # have more than "\\sever\share". Valid examples: "\\server\share\" or
594
+ # "\\server\share\folder".
595
+ if WINDOWS and not os.path.splitdrive(entry)[0]:
596
+ entry = entry.replace("\\", "/")
597
+ self.entries.add(entry)
598
+
599
+ def remove(self) -> None:
600
+ logger.verbose("Removing pth entries from %s:", self.file)
601
+
602
+ # If the file doesn't exist, log a warning and return
603
+ if not os.path.isfile(self.file):
604
+ logger.warning("Cannot remove entries from nonexistent file %s", self.file)
605
+ return
606
+ with open(self.file, "rb") as fh:
607
+ # windows uses '\r\n' with py3k, but uses '\n' with py2.x
608
+ lines = fh.readlines()
609
+ self._saved_lines = lines
610
+ if any(b"\r\n" in line for line in lines):
611
+ endline = "\r\n"
612
+ else:
613
+ endline = "\n"
614
+ # handle missing trailing newline
615
+ if lines and not lines[-1].endswith(endline.encode("utf-8")):
616
+ lines[-1] = lines[-1] + endline.encode("utf-8")
617
+ for entry in self.entries:
618
+ try:
619
+ logger.verbose("Removing entry: %s", entry)
620
+ lines.remove((entry + endline).encode("utf-8"))
621
+ except ValueError:
622
+ pass
623
+ with open(self.file, "wb") as fh:
624
+ fh.writelines(lines)
625
+
626
+ def rollback(self) -> bool:
627
+ if self._saved_lines is None:
628
+ logger.error("Cannot roll back changes to %s, none were made", self.file)
629
+ return False
630
+ logger.debug("Rolling %s back to previous state", self.file)
631
+ with open(self.file, "wb") as fh:
632
+ fh.writelines(self._saved_lines)
633
+ return True
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/resolution/__init__.py ADDED
File without changes
tuning-competition-baseline/.venv/lib/python3.11/site-packages/pip/_internal/resolution/legacy/__init__.py ADDED
File without changes
tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/autograd.cpython-311.pyc ADDED
Binary file (31.8 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/lazy.cpython-311.pyc ADDED
Binary file (20 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/structured.cpython-311.pyc ADDED
Binary file (7.85 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/__pycache__/translate.cpython-311.pyc ADDED
Binary file (18.4 kB). View file
 
tuning-competition-baseline/.venv/lib/python3.11/site-packages/torchgen/api/functionalization.py ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ from torchgen.api import dispatcher
4
+ from torchgen.api.types import (
5
+ BaseCppType,
6
+ BaseCType,
7
+ Binding,
8
+ boolT,
9
+ ConstRefCType,
10
+ CType,
11
+ longT,
12
+ NamedCType,
13
+ tensorT,
14
+ )
15
+ from torchgen.model import (
16
+ Argument,
17
+ BaseTy,
18
+ BaseType,
19
+ FunctionSchema,
20
+ NativeFunction,
21
+ NativeFunctionsViewGroup,
22
+ )
23
+
24
+
25
+ # This file describes the translation of JIT schema to API's used
26
+ # when creating view lambdas that are used by the functionalization pass.
27
+ # There are two types of lambdas: forward lambdas and reverse lambdas.
28
+ # These API's mostly follow the dispatcher API, with a few quirks:
29
+ # - The lambda capture has to convert reference types to value types
30
+ # - While the forward lambda just directly calls into the at::_ops API
31
+ # (following the dispatcher convention), the logic here for the reverse lambda
32
+ # is responsible for generating both the call-site, and the declarations
33
+ # (which are implemented manually in the at::functionalization::impl namespace).
34
+
35
+ # The lambdas generated for each view op in the functionalization pass are of the form
36
+ # [capture_arguments](outer_arguments) -> returns_type {
37
+ # return name(inner_arguments);
38
+ # }
39
+
40
+ # Define some specific lambda input arguments.
41
+ base_binding = Binding(
42
+ name="base",
43
+ nctype=NamedCType(name="base", type=ConstRefCType(BaseCType(tensorT))),
44
+ argument=Argument(
45
+ name="base", type=BaseType(BaseTy.Tensor), default=None, annotation=None
46
+ ),
47
+ default=None,
48
+ )
49
+ mutated_view_binding = Binding(
50
+ name="mutated_view",
51
+ nctype=NamedCType(name="mutated_view", type=ConstRefCType(BaseCType(tensorT))),
52
+ argument=Argument(
53
+ name="base", type=BaseType(BaseTy.Tensor), default=None, annotation=None
54
+ ),
55
+ default=None,
56
+ )
57
+ mutated_view_idx_binding = Binding(
58
+ name="mutated_view_idx",
59
+ nctype=NamedCType(name="mutated_view_idx", type=BaseCType(longT)),
60
+ argument=Argument(
61
+ name="base", type=BaseType(BaseTy.Tensor), default=None, annotation=None
62
+ ),
63
+ default=None,
64
+ )
65
+ reapply_views_binding = Binding(
66
+ name="reapply_views",
67
+ nctype=NamedCType(name="reapply_views", type=BaseCType(boolT)),
68
+ argument=Argument(
69
+ name="reapply_views", type=BaseType(BaseTy.bool), default=None, annotation=None
70
+ ),
71
+ default=None,
72
+ )
73
+
74
+ InverseReturnModeT = BaseCppType("at::functionalization", "InverseReturnMode")
75
+ inverse_return_mode_binding = Binding(
76
+ name="inverse_return_mode",
77
+ nctype=NamedCType(name="inverse_return_mode", type=BaseCType(InverseReturnModeT)),
78
+ argument=Argument(
79
+ name="inverse_return_mode",
80
+ # NB: not actually a bool but it doesn't matter because this isn't used
81
+ type=BaseType(BaseTy.bool),
82
+ default=None,
83
+ annotation=None,
84
+ ),
85
+ default=None,
86
+ )
87
+
88
+
89
+ # The lambda capture itself doesn't have a name.
90
+ # The name returned here corresponds to the name of the inner function called by the lambda.
91
+ def name(
92
+ g: NativeFunctionsViewGroup,
93
+ *,
94
+ is_reverse: bool,
95
+ include_namespace: bool,
96
+ reapply_views: Optional[bool] = None,
97
+ ) -> str:
98
+ if reapply_views is None:
99
+ # reapply_views is only important for the fwd lambda,
100
+ # since we always plumb the runtime "reapply_views" argument into the reverse function.
101
+ assert is_reverse
102
+ if is_reverse:
103
+ return reverse_name(g.view, include_namespace)
104
+ # in the forward case, we just directly call into the at::_ops API (so we always need the namespace)
105
+ assert include_namespace
106
+ assert g.view_copy is not None
107
+ api_name = (
108
+ g.view.func.name.unambiguous_name()
109
+ if reapply_views
110
+ else g.view_copy.func.name.unambiguous_name()
111
+ )
112
+ return f"at::_ops::{api_name}::call"
113
+
114
+
115
+ def reverse_name(f: NativeFunction, include_namespace: bool) -> str:
116
+ # for the reverse: we plumb the "reapply_views" flag into that function and support
117
+ # both copy and non-copy variants. (We could avoid doing that, but that would require
118
+ # writing out twice as many view inverse functions).
119
+ api_name = f.func.name.unambiguous_name()
120
+ # in the reverse case, we codegen both the call-sites (which need the full namespace) and the declarations (which don't)
121
+ if include_namespace:
122
+ return f"at::functionalization::FunctionalInverses::{api_name}_inverse"
123
+ else:
124
+ return f"{api_name}_inverse"
125
+
126
+
127
+ def capture_arguments(func: FunctionSchema, *, is_reverse: bool) -> List[Binding]:
128
+ # capture arguments include all arguments except `self`.
129
+ # Importantly, they don't include any C++ reference types (or else we'll get a dangling reference in the capture),
130
+ # So any reference types (IntArrayRef) need to be converted to value types (vector<int64_t>)
131
+ args = func.arguments.flat_all
132
+ assert args[0].type == BaseType(BaseTy.Tensor)
133
+ non_self_args = args[1:]
134
+ non_self_value_bindings = [
135
+ dispatcher.argument(a, remove_non_owning_ref_types=True) for a in non_self_args
136
+ ]
137
+
138
+ all_bindings = [
139
+ inverse_return_mode_binding if is_reverse else reapply_views_binding
140
+ ]
141
+ all_bindings.extend(non_self_value_bindings)
142
+ return all_bindings
143
+
144
+
145
+ def returns_type(func: FunctionSchema) -> CType:
146
+ # Assertion: all view ops return tensor-like outputs
147
+ assert len(func.returns) >= 1
148
+ for ret in func.returns:
149
+ assert ret.type.is_tensor_like()
150
+ # However, the return type of the lambda is always an individual tensor.
151
+ # For multi-tensor outputs, each tensor needs to be tracked individually.
152
+ return BaseCType(tensorT)
153
+
154
+
155
+ def outer_arguments(*, is_reverse: bool) -> List[Binding]:
156
+ if is_reverse:
157
+ return [base_binding, mutated_view_binding, mutated_view_idx_binding]
158
+ else:
159
+ return [base_binding, mutated_view_idx_binding]
160
+
161
+
162
+ def inner_call_index(func: FunctionSchema) -> Optional[Binding]:
163
+ # For view ops that return multiple tensors (like `split`), we generate a separate lambda for each output.
164
+ # When we replay a view op that returns multiple tensors, we need to index into the output appropriately
165
+ if len(func.returns) > 1 or (
166
+ len(func.returns) == 1 and func.returns[0].type.is_list_like()
167
+ ):
168
+ return mutated_view_idx_binding
169
+ return None
170
+
171
+
172
+ def inner_arguments(func: FunctionSchema, is_reverse: bool) -> List[Binding]:
173
+ args = func.arguments.flat_all
174
+ assert args[0].type == BaseType(BaseTy.Tensor)
175
+ non_self_args = args[1:]
176
+ # The forward lambda calls the at::_ops API, while the reverse lambda calls the view inverse API.
177
+ # Both of these follow the dispatcher API.
178
+ non_self_bindings = [dispatcher.argument(a) for a in non_self_args]
179
+ if not is_reverse:
180
+ # the forward lambda swaps out the original tensor argument with the lambd arg "base"
181
+ return [base_binding] + non_self_bindings
182
+ else:
183
+ # the reverse lambda does the same, but with an additional "mutated_view" arg
184
+ # additionally, we have a calling convention: for view ops that return multiple tensor outputs
185
+ # their corresponding view_inverse function takes in an additional index argument.
186
+ index_binding = inner_call_index(func)
187
+ if index_binding is not None:
188
+ return [
189
+ base_binding,
190
+ mutated_view_binding,
191
+ inverse_return_mode_binding,
192
+ index_binding,
193
+ ] + non_self_bindings
194
+ else:
195
+ return [
196
+ base_binding,
197
+ mutated_view_binding,
198
+ inverse_return_mode_binding,
199
+ ] + non_self_bindings