ldbg 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ldbg-0.1.0 → ldbg-0.1.2}/PKG-INFO +22 -16
- {ldbg-0.1.0 → ldbg-0.1.2}/README.md +20 -14
- {ldbg-0.1.0 → ldbg-0.1.2}/pyproject.toml +2 -3
- {ldbg-0.1.0 → ldbg-0.1.2}/src/ldbg/ldbg.py +113 -49
- {ldbg-0.1.0 → ldbg-0.1.2}/tests/test_ldbg.py +30 -10
- {ldbg-0.1.0 → ldbg-0.1.2}/uv.lock +128 -163
- {ldbg-0.1.0 → ldbg-0.1.2}/.gitignore +0 -0
- {ldbg-0.1.0 → ldbg-0.1.2}/.python-version +0 -0
- {ldbg-0.1.0 → ldbg-0.1.2}/src/ldbg/__init__.py +0 -0
- {ldbg-0.1.0 → ldbg-0.1.2}/src/ldbg/py.typed +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ldbg
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.2
|
4
4
|
Summary: Add your description here
|
5
5
|
Author-email: Arthur Masson <arthur.masson@inria.fr>
|
6
|
-
Requires-Python: >=3.
|
6
|
+
Requires-Python: >=3.10
|
7
7
|
Requires-Dist: openai>=1.107.3
|
8
8
|
Description-Content-Type: text/markdown
|
9
9
|
|
@@ -11,25 +11,40 @@ Description-Content-Type: text/markdown
|
|
11
11
|
|
12
12
|
### A Minimal Python Library to debug with LLMs
|
13
13
|
|
14
|
-
|
14
|
+
Ldbg enables to use natural-language prompts while debugging. Prompts are augmented with your current stack, variables, and source context.
|
15
|
+
It is like [ShellGPT](https://github.com/TheR1D/shell_gpt) but for pdb, ipdb, Jupyter, the VS Code Debug Console, etc.
|
15
16
|
|
16
17
|
DO NOT USE THIS LIBRARY
|
17
18
|
|
18
19
|
> “AI everywhere is rocket engines on a skateboard: a thrill that ends in wreckage. The planet pays in energy and emissions, and we pay in something subtler — the slow atrophy of our own intelligence, left idle while the machines do the heavy lifting.” ChatGPT
|
19
20
|
|
21
|
+
Here is [CJ Reynolds](https://www.youtube.com/watch?v=0ZUkQF6boNg) point of view:
|
22
|
+
|
23
|
+
> I used to enjoy programming. Now, my days are typically spent going back and forth with an LLM and pretty often yelling at it… And part of enjoying programming for me was enjoying the little wins, right? You would work really hard to make something… or to figure something out. And once you figured it out, you'd have that little win. You'd get that dopamine hit and you'd feel good about yourself and you could keep going. I don't get that when I'm using LLMs to write code. Once it's figured something out, I don't feel like I did any work to get there. And then I'm just mad that it's doing the wrong thing. And then we go through this back and forth cycle and it's not fun.
|
24
|
+
|
20
25
|
## Features
|
21
26
|
|
22
27
|
- 🐍 Generate Python debug commands from natural-language instructions.
|
23
28
|
- 🔍 Context-aware: prompt auto-includes call stack, local/global variable previews, current function - source, and nearby code.
|
24
|
-
- ⚡ Works like an AI-augmented pdb: just ask what you want to inspect.
|
25
29
|
- 🤖 Supports OpenRouter
|
26
30
|
|
31
|
+
**NOTE**: In VS Code, you enter the function the Debug Console, and get the output in the terminal ; so put both tabs (Debug Console and Terminal) side to side.
|
32
|
+
|
27
33
|
## Installation
|
28
34
|
|
29
|
-
`pip install ldbg`
|
35
|
+
`uv add ldbg`, `pixi add --pypi ldbg` or `pip install ldbg`
|
30
36
|
|
31
37
|
## Quick Start
|
32
38
|
|
39
|
+
### Example natural-language prompts
|
40
|
+
|
41
|
+
- "Describe my numpy arrays"
|
42
|
+
- "plot my_data['b'] as a histogram"
|
43
|
+
- "give me an example pandas dataframe about employees"
|
44
|
+
- "generate a 3x12x16 example Pillow image from a numpy array"
|
45
|
+
- "convert this Pillow image to grayscale"
|
46
|
+
- "open this 'image.ome.tiff' with bioio"
|
47
|
+
|
33
48
|
### Example Session
|
34
49
|
|
35
50
|
```python
|
@@ -43,13 +58,13 @@ The model "gpt-5-mini-2025-08-07" says:
|
|
43
58
|
|
44
59
|
unknown_data is an numpy array which can be described with the following pandas code:
|
45
60
|
|
46
|
-
```
|
61
|
+
```
|
47
62
|
pandas.DataFrame(unknown_data).describe()
|
48
63
|
```
|
49
64
|
|
50
65
|
Note: you can use numpy.set_printoptions (or a library like numpyprint) to pretty print your array:
|
51
66
|
|
52
|
-
```
|
67
|
+
```
|
53
68
|
with np.printoptions(precision=2, suppress=True, threshold=5):
|
54
69
|
unknown_data
|
55
70
|
```
|
@@ -95,15 +110,6 @@ Would you like to execute the following code block:
|
|
95
110
|
...
|
96
111
|
```
|
97
112
|
|
98
|
-
### Example natural-language prompts
|
99
|
-
|
100
|
-
- "Describe my numpy arrays"
|
101
|
-
- "plot my_data['b'] as a histogram"
|
102
|
-
- "give me an example pandas dataframe about employees"
|
103
|
-
- "generate a 3x10x12 numpy array which will be used as an example image"
|
104
|
-
- "convert this Pillow image to grayscale"
|
105
|
-
- "open this 'image.ome.tiff' with bioio"
|
106
|
-
|
107
113
|
## Configuration
|
108
114
|
|
109
115
|
By default, llm-debug uses the OpenAI client. So it reads the [OPENAI_API_KEY environment variable](https://platform.openai.com/docs/quickstart).
|
@@ -2,25 +2,40 @@
|
|
2
2
|
|
3
3
|
### A Minimal Python Library to debug with LLMs
|
4
4
|
|
5
|
-
|
5
|
+
Ldbg enables to use natural-language prompts while debugging. Prompts are augmented with your current stack, variables, and source context.
|
6
|
+
It is like [ShellGPT](https://github.com/TheR1D/shell_gpt) but for pdb, ipdb, Jupyter, the VS Code Debug Console, etc.
|
6
7
|
|
7
8
|
DO NOT USE THIS LIBRARY
|
8
9
|
|
9
10
|
> “AI everywhere is rocket engines on a skateboard: a thrill that ends in wreckage. The planet pays in energy and emissions, and we pay in something subtler — the slow atrophy of our own intelligence, left idle while the machines do the heavy lifting.” ChatGPT
|
10
11
|
|
12
|
+
Here is [CJ Reynolds](https://www.youtube.com/watch?v=0ZUkQF6boNg) point of view:
|
13
|
+
|
14
|
+
> I used to enjoy programming. Now, my days are typically spent going back and forth with an LLM and pretty often yelling at it… And part of enjoying programming for me was enjoying the little wins, right? You would work really hard to make something… or to figure something out. And once you figured it out, you'd have that little win. You'd get that dopamine hit and you'd feel good about yourself and you could keep going. I don't get that when I'm using LLMs to write code. Once it's figured something out, I don't feel like I did any work to get there. And then I'm just mad that it's doing the wrong thing. And then we go through this back and forth cycle and it's not fun.
|
15
|
+
|
11
16
|
## Features
|
12
17
|
|
13
18
|
- 🐍 Generate Python debug commands from natural-language instructions.
|
14
19
|
- 🔍 Context-aware: prompt auto-includes call stack, local/global variable previews, current function - source, and nearby code.
|
15
|
-
- ⚡ Works like an AI-augmented pdb: just ask what you want to inspect.
|
16
20
|
- 🤖 Supports OpenRouter
|
17
21
|
|
22
|
+
**NOTE**: In VS Code, you enter the function the Debug Console, and get the output in the terminal ; so put both tabs (Debug Console and Terminal) side to side.
|
23
|
+
|
18
24
|
## Installation
|
19
25
|
|
20
|
-
`pip install ldbg`
|
26
|
+
`uv add ldbg`, `pixi add --pypi ldbg` or `pip install ldbg`
|
21
27
|
|
22
28
|
## Quick Start
|
23
29
|
|
30
|
+
### Example natural-language prompts
|
31
|
+
|
32
|
+
- "Describe my numpy arrays"
|
33
|
+
- "plot my_data['b'] as a histogram"
|
34
|
+
- "give me an example pandas dataframe about employees"
|
35
|
+
- "generate a 3x12x16 example Pillow image from a numpy array"
|
36
|
+
- "convert this Pillow image to grayscale"
|
37
|
+
- "open this 'image.ome.tiff' with bioio"
|
38
|
+
|
24
39
|
### Example Session
|
25
40
|
|
26
41
|
```python
|
@@ -34,13 +49,13 @@ The model "gpt-5-mini-2025-08-07" says:
|
|
34
49
|
|
35
50
|
unknown_data is an numpy array which can be described with the following pandas code:
|
36
51
|
|
37
|
-
```
|
52
|
+
```
|
38
53
|
pandas.DataFrame(unknown_data).describe()
|
39
54
|
```
|
40
55
|
|
41
56
|
Note: you can use numpy.set_printoptions (or a library like numpyprint) to pretty print your array:
|
42
57
|
|
43
|
-
```
|
58
|
+
```
|
44
59
|
with np.printoptions(precision=2, suppress=True, threshold=5):
|
45
60
|
unknown_data
|
46
61
|
```
|
@@ -86,15 +101,6 @@ Would you like to execute the following code block:
|
|
86
101
|
...
|
87
102
|
```
|
88
103
|
|
89
|
-
### Example natural-language prompts
|
90
|
-
|
91
|
-
- "Describe my numpy arrays"
|
92
|
-
- "plot my_data['b'] as a histogram"
|
93
|
-
- "give me an example pandas dataframe about employees"
|
94
|
-
- "generate a 3x10x12 numpy array which will be used as an example image"
|
95
|
-
- "convert this Pillow image to grayscale"
|
96
|
-
- "open this 'image.ome.tiff' with bioio"
|
97
|
-
|
98
104
|
## Configuration
|
99
105
|
|
100
106
|
By default, llm-debug uses the OpenAI client. So it reads the [OPENAI_API_KEY environment variable](https://platform.openai.com/docs/quickstart).
|
@@ -1,12 +1,12 @@
|
|
1
1
|
[project]
|
2
2
|
name = "ldbg"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.2"
|
4
4
|
description = "Add your description here"
|
5
5
|
readme = "README.md"
|
6
6
|
authors = [
|
7
7
|
{ name = "Arthur Masson", email = "arthur.masson@inria.fr" }
|
8
8
|
]
|
9
|
-
requires-python = ">=3.
|
9
|
+
requires-python = ">=3.10"
|
10
10
|
dependencies = [
|
11
11
|
"openai>=1.107.3",
|
12
12
|
]
|
@@ -17,7 +17,6 @@ build-backend = "hatchling.build"
|
|
17
17
|
|
18
18
|
[dependency-groups]
|
19
19
|
dev = [
|
20
|
-
"ipython>=9.5.0",
|
21
20
|
"pytest>=8.4.2",
|
22
21
|
"ruff>=0.14.0",
|
23
22
|
]
|
@@ -1,18 +1,25 @@
|
|
1
1
|
import inspect
|
2
|
+
import linecache
|
2
3
|
import re
|
3
4
|
import textwrap
|
5
|
+
import time
|
4
6
|
import traceback
|
5
|
-
import linecache
|
6
7
|
import os
|
8
|
+
import sys
|
7
9
|
import pprint
|
8
10
|
from types import FrameType
|
9
11
|
from typing import cast
|
10
12
|
|
11
13
|
from openai import OpenAI
|
12
14
|
|
13
|
-
LENGTH_MAX =
|
15
|
+
LENGTH_MAX = 50000
|
14
16
|
CODE_BLOCK_REGEX = r"```(?:[\w+-]*)\n(.*?)```"
|
15
17
|
|
18
|
+
# Message in one line since the Debug Console shows the raw string
|
19
|
+
VSCODE_WARNING_MESSAGE = """It seems you are on VS Code. The answers will be printed in the Terminal while your inputs are made from the Debug Console. For optimal use, display the Debug Console and Terminal side-by-side. This message will be shown only once. Call the ldbg.gc() function again to make your request to the LLM."""
|
20
|
+
|
21
|
+
display_vscode_warning = any("debugpy" in mod for mod in sys.modules)
|
22
|
+
|
16
23
|
if "OPENROUTER_API_KEY" in os.environ:
|
17
24
|
client = OpenAI(
|
18
25
|
base_url="https://openrouter.ai/api/v1",
|
@@ -27,30 +34,47 @@ def extract_code_blocks(markdown_text: str):
|
|
27
34
|
return pattern.findall(markdown_text)
|
28
35
|
|
29
36
|
|
30
|
-
def execute_code_block(code: str):
|
31
|
-
exec(code,
|
37
|
+
def execute_code_block(code: str, locals: dict):
|
38
|
+
exec(code, locals)
|
32
39
|
|
33
40
|
|
34
|
-
def execute_blocks(markdown_text: str | None) -> None:
|
41
|
+
def execute_blocks(markdown_text: str | None, locals: dict) -> None:
|
35
42
|
"""
|
36
43
|
Extract the code blocks in the markdown and ask user if he wants to execute them
|
37
44
|
"""
|
38
45
|
if markdown_text is None:
|
39
46
|
return
|
40
47
|
blocks = extract_code_blocks(markdown_text)
|
41
|
-
for block in blocks:
|
42
|
-
print("
|
48
|
+
for n, block in enumerate(blocks):
|
49
|
+
print("\n\nWould you like to execute the following code block:\n")
|
43
50
|
print(textwrap.indent(block, " "))
|
44
|
-
|
45
|
-
|
46
|
-
|
51
|
+
while True:
|
52
|
+
before_input_time = time.time()
|
53
|
+
confirm = input("(y/n)").lower()
|
54
|
+
after_input_time = time.time()
|
55
|
+
if after_input_time - before_input_time < 0.5:
|
56
|
+
print(
|
57
|
+
f'Discard answer "{confirm}" since it is likely from a previous keyboard stroke. Please wait at least 0.5s to read the code and answer safely.'
|
58
|
+
)
|
59
|
+
continue
|
60
|
+
if confirm.lower() in ["yes", "y"]:
|
61
|
+
print(f"\nExecuting block {n}...\n\n")
|
62
|
+
execute_code_block(block, locals)
|
63
|
+
print("\n\n\nExecution done.")
|
64
|
+
break
|
65
|
+
if any("debugpy" in mod for mod in sys.modules):
|
66
|
+
print("\nReturn to the Debug Console to get more help.")
|
67
|
+
|
68
|
+
|
69
|
+
def indent(text, prefix=" " * 4):
|
70
|
+
return textwrap.indent(text, prefix)
|
47
71
|
|
48
72
|
|
49
73
|
def generate_commands(
|
50
74
|
prompt: str,
|
51
75
|
frame=None,
|
52
76
|
model="gpt-5-mini-2025-08-07",
|
53
|
-
print_prompt=
|
77
|
+
print_prompt=False,
|
54
78
|
length_max=LENGTH_MAX,
|
55
79
|
context="",
|
56
80
|
):
|
@@ -105,38 +129,80 @@ def generate_commands(
|
|
105
129
|
|
106
130
|
<<< user enters n
|
107
131
|
"""
|
132
|
+
|
133
|
+
global display_vscode_warning
|
134
|
+
if display_vscode_warning:
|
135
|
+
display_vscode_warning = False
|
136
|
+
return VSCODE_WARNING_MESSAGE
|
137
|
+
|
138
|
+
frame_info = None
|
108
139
|
if frame is None:
|
109
|
-
|
140
|
+
frame_info = next(
|
141
|
+
fi
|
142
|
+
for fi in inspect.stack()
|
143
|
+
if "/.vscode/extensions/" not in fi.filename
|
144
|
+
and "<string>" not in fi.filename
|
145
|
+
and not (
|
146
|
+
fi.filename.endswith("ldbg.py") and fi.function == "generate_commands"
|
147
|
+
)
|
148
|
+
)
|
149
|
+
|
150
|
+
frame: FrameType = cast(FrameType, frame_info.frame)
|
110
151
|
|
111
152
|
# Locals & globals preview
|
112
|
-
|
113
|
-
:
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
153
|
+
filtered_locals = {
|
154
|
+
key: value
|
155
|
+
for key, value in frame.f_locals.items()
|
156
|
+
if key not in ["__builtin__", "__builtins__"]
|
157
|
+
}
|
158
|
+
|
159
|
+
locals_preview = pprint.pformat(filtered_locals)
|
160
|
+
if len(locals_preview) > length_max:
|
161
|
+
locals_preview = (
|
162
|
+
locals_preview[:length_max]
|
163
|
+
+ f" ... \nLocal variables are truncated because it is too long (more than {length_max} characters)!"
|
164
|
+
)
|
165
|
+
|
166
|
+
# globals_preview = pprint.pformat(frame.f_globals)[
|
167
|
+
# :length_max
|
168
|
+
# ]
|
118
169
|
|
119
170
|
# Traceback / call stack
|
120
171
|
stack_summary = traceback.format_stack(frame)
|
121
|
-
stack_text = "".join(stack_summary[-
|
172
|
+
stack_text = "".join(stack_summary[-20:]) # limit to avoid overload
|
122
173
|
|
123
174
|
# Current function source
|
124
175
|
try:
|
125
176
|
source_lines, start_line = inspect.getsourcelines(frame)
|
126
|
-
|
177
|
+
sources_lines_with_line_numbers = source_lines.copy()
|
178
|
+
|
179
|
+
for i, line in enumerate(source_lines):
|
180
|
+
prefix = "→ " if i + start_line == frame.f_lineno else " "
|
181
|
+
sources_lines_with_line_numbers[i] = (
|
182
|
+
f"{prefix}{i + start_line:4d}: {line.rstrip()}"
|
183
|
+
)
|
184
|
+
|
185
|
+
func_source = "".join(sources_lines_with_line_numbers)
|
127
186
|
except (OSError, TypeError):
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
187
|
+
try:
|
188
|
+
# fallback: print nearby lines from the source file
|
189
|
+
filename = frame.f_code.co_filename
|
190
|
+
start = frame.f_code.co_firstlineno
|
191
|
+
lines = linecache.getlines(filename)
|
192
|
+
func_source = "".join(lines[max(0, start - 5) : start + 200])
|
193
|
+
except Exception:
|
194
|
+
func_source = "<source unavailable>"
|
195
|
+
|
196
|
+
additional_context = textwrap.dedent(
|
197
|
+
f"""
|
198
|
+
Additional context:
|
199
|
+
{indent(context)}
|
200
|
+
|
201
|
+
===================================
|
202
|
+
"""
|
203
|
+
if context is not None and len(context) > 0
|
204
|
+
else ""
|
205
|
+
)
|
140
206
|
|
141
207
|
# ldbg.generate_commands({prompt}, model={model}, code_only={code_only}, print_prompt={print_prompt}, print_answer={print_answer}, length_max={length_max})
|
142
208
|
context = textwrap.dedent(f"""
|
@@ -145,23 +211,21 @@ def generate_commands(
|
|
145
211
|
|
146
212
|
The user just ran `import ldbg; ldbg.gc({prompt}, model={model})` to ask you some help (gc stands for generate commands).
|
147
213
|
|
148
|
-
Local variables
|
149
|
-
|
214
|
+
Local variables (`locals = pprint.pformat(inspect.currentframe().f_locals)`):
|
215
|
+
{indent(locals_preview)}
|
150
216
|
|
151
|
-
|
152
|
-
{globals_preview}
|
217
|
+
===================================
|
153
218
|
|
154
219
|
Current call stack (traceback):
|
155
|
-
|
220
|
+
{indent(stack_text)}
|
156
221
|
|
157
|
-
|
158
|
-
{func_source}
|
222
|
+
===================================
|
159
223
|
|
160
|
-
|
161
|
-
|
224
|
+
Current function source:
|
225
|
+
{indent(func_source)}
|
162
226
|
|
163
|
-
|
164
|
-
{
|
227
|
+
===================================
|
228
|
+
{additional_context}
|
165
229
|
|
166
230
|
If you need more context, a more detailed view of the local variables or the content of a source file,
|
167
231
|
tell the user the commands he should run to print the details you need.
|
@@ -258,7 +322,7 @@ def generate_commands(
|
|
258
322
|
pandas.DataFrame(unknown_data).describe()
|
259
323
|
```
|
260
324
|
|
261
|
-
You could also use numpy.set_printoptions (or a library like numpyprint) to pretty print your array:
|
325
|
+
You could also use `numpy.set_printoptions` (or a library like numpyprint) to pretty print your array:
|
262
326
|
|
263
327
|
```
|
264
328
|
with np.printoptions(precision=2, suppress=True, threshold=5):
|
@@ -266,14 +330,14 @@ def generate_commands(
|
|
266
330
|
```
|
267
331
|
|
268
332
|
Always put the code to execute in triple backticks code blocks.
|
269
|
-
Provide
|
333
|
+
Provide short and concise answers and code.
|
270
334
|
""")
|
271
335
|
|
272
336
|
if print_prompt:
|
273
337
|
print("System prompt:")
|
274
338
|
print(context)
|
275
|
-
|
276
|
-
|
339
|
+
|
340
|
+
print(f'\n\nAsking {model} "{prompt}"...\n')
|
277
341
|
|
278
342
|
resp = client.chat.completions.create(
|
279
343
|
model=model,
|
@@ -292,10 +356,10 @@ def generate_commands(
|
|
292
356
|
if response is None:
|
293
357
|
return
|
294
358
|
|
295
|
-
print(f"Model {model} says
|
359
|
+
print(f"Model {model} says:\n")
|
296
360
|
print(textwrap.indent(response, " "))
|
297
361
|
|
298
|
-
execute_blocks(response)
|
362
|
+
execute_blocks(response, frame.f_locals)
|
299
363
|
|
300
364
|
return
|
301
365
|
|
@@ -19,14 +19,14 @@ def test_extract_code_blocks_multiple_blocks():
|
|
19
19
|
|
20
20
|
def test_execute_code_block_prints_output(capsys):
|
21
21
|
# execute_code_block uses exec(..., {}) so it runs in an empty namespace.
|
22
|
-
ldbg.execute_code_block("print('hi from code block')")
|
22
|
+
ldbg.execute_code_block("print('hi from code block')", locals())
|
23
23
|
captured = capsys.readouterr()
|
24
24
|
assert "hi from code block" in captured.out
|
25
25
|
|
26
26
|
|
27
27
|
def test_execute_blocks_none_does_nothing(capsys):
|
28
28
|
# Should not raise and should not print anything
|
29
|
-
ldbg.execute_blocks(None)
|
29
|
+
ldbg.execute_blocks(None, locals())
|
30
30
|
captured = capsys.readouterr()
|
31
31
|
assert captured.out == ""
|
32
32
|
|
@@ -36,15 +36,22 @@ def test_execute_blocks_user_confirms_exec(monkeypatch, capsys):
|
|
36
36
|
md = "Some text\n```\nprint('ran')\n```\n"
|
37
37
|
# Simulate user input 'y'
|
38
38
|
monkeypatch.setattr(builtins, "input", lambda prompt="": "y")
|
39
|
+
# Simulate enough time passing (>0.5s) between prompt and input to bypass safety gate
|
40
|
+
t = {"val": 0.0}
|
41
|
+
def fake_time():
|
42
|
+
t["val"] += 1.0
|
43
|
+
return t["val"]
|
44
|
+
monkeypatch.setattr(ldbg.time, "time", fake_time)
|
45
|
+
|
39
46
|
executed = {"called": False, "code": None}
|
40
47
|
|
41
|
-
def fake_exec_block(code):
|
48
|
+
def fake_exec_block(code, locals):
|
42
49
|
executed["called"] = True
|
43
50
|
executed["code"] = code
|
44
51
|
|
45
52
|
monkeypatch.setattr(ldbg, "execute_code_block", fake_exec_block)
|
46
53
|
|
47
|
-
ldbg.execute_blocks(md)
|
54
|
+
ldbg.execute_blocks(md, locals())
|
48
55
|
|
49
56
|
captured = capsys.readouterr()
|
50
57
|
# We expect to have been prompted and the code executed
|
@@ -57,13 +64,20 @@ def test_execute_blocks_user_declines(monkeypatch, capsys):
|
|
57
64
|
md = "```\nprint('should_not_run')\n```"
|
58
65
|
# Simulate user input 'n'
|
59
66
|
monkeypatch.setattr(builtins, "input", lambda prompt="": "n")
|
67
|
+
# Simulate enough time passing (>0.5s) between prompt and input to bypass safety gate
|
68
|
+
t = {"val": 0.0}
|
69
|
+
def fake_time():
|
70
|
+
t["val"] += 1.0
|
71
|
+
return t["val"]
|
72
|
+
monkeypatch.setattr(ldbg.time, "time", fake_time)
|
73
|
+
|
60
74
|
executed = {"called": False}
|
61
75
|
|
62
76
|
monkeypatch.setattr(
|
63
77
|
ldbg, "execute_code_block", lambda code: executed.update(called=True)
|
64
78
|
)
|
65
79
|
|
66
|
-
ldbg.execute_blocks(md)
|
80
|
+
ldbg.execute_blocks(md, locals())
|
67
81
|
captured = capsys.readouterr()
|
68
82
|
assert "Would you like to execute the following code block:" in captured.out
|
69
83
|
assert executed.get("called") is not True
|
@@ -72,8 +86,8 @@ def test_execute_blocks_user_declines(monkeypatch, capsys):
|
|
72
86
|
def test_generate_commands_calls_api_and_forwards_response(monkeypatch, capsys):
|
73
87
|
"""
|
74
88
|
Ensure generate_commands:
|
75
|
-
- prints the system
|
76
|
-
- calls the client.chat.completions.create API
|
89
|
+
- prints the system prompt when print_prompt=True
|
90
|
+
- calls the client.chat.completions.create API (mocked)
|
77
91
|
- prints the model response and passes it to execute_blocks
|
78
92
|
"""
|
79
93
|
# Create a fake response text that contains a code block
|
@@ -96,20 +110,23 @@ def test_generate_commands_calls_api_and_forwards_response(monkeypatch, capsys):
|
|
96
110
|
monkeypatch.setattr(ldbg.client.chat.completions, "create", fake_create)
|
97
111
|
|
98
112
|
# Patch execute_blocks to capture what is passed
|
99
|
-
def fake_execute_blocks(resp_text):
|
113
|
+
def fake_execute_blocks(resp_text, locals):
|
100
114
|
called["passed_response"] = resp_text
|
101
115
|
|
102
116
|
monkeypatch.setattr(ldbg, "execute_blocks", fake_execute_blocks)
|
103
117
|
|
118
|
+
# Ensure the function does not early-return due to VSCode warning
|
119
|
+
monkeypatch.setattr(ldbg, "display_vscode_warning", False)
|
120
|
+
|
104
121
|
# Call generate_commands from a real frame (the test's current frame) to let it build context
|
105
122
|
frame = inspect.currentframe()
|
106
123
|
# Run function
|
107
124
|
ldbg.generate_commands("describe unknown_data", frame=frame, print_prompt=True)
|
108
125
|
|
109
126
|
captured = capsys.readouterr()
|
110
|
-
# Confirm we printed the System prompt and
|
127
|
+
# Confirm we printed the System prompt and the asking line
|
111
128
|
assert "System prompt:" in captured.out
|
112
|
-
assert "
|
129
|
+
assert 'Asking gpt-5-mini-2025-08-07 "describe unknown_data"...' in captured.out
|
113
130
|
|
114
131
|
# Confirm the API stub was called and execute_blocks got the model response
|
115
132
|
assert called["create_called"] is True
|
@@ -134,6 +151,9 @@ def test_generate_commands_handles_none_response(monkeypatch, capsys):
|
|
134
151
|
lambda t: (_ for _ in ()).throw(AssertionError("should not be called")),
|
135
152
|
)
|
136
153
|
|
154
|
+
# Ensure the function does not early-return due to VSCode warning
|
155
|
+
monkeypatch.setattr(ldbg, "display_vscode_warning", False)
|
156
|
+
|
137
157
|
# Call - should not raise
|
138
158
|
ldbg.generate_commands(
|
139
159
|
"any prompt", frame=inspect.currentframe(), print_prompt=False
|
@@ -1,6 +1,6 @@
|
|
1
1
|
version = 1
|
2
2
|
revision = 3
|
3
|
-
requires-python = ">=3.
|
3
|
+
requires-python = ">=3.10"
|
4
4
|
|
5
5
|
[[package]]
|
6
6
|
name = "annotated-types"
|
@@ -16,6 +16,7 @@ name = "anyio"
|
|
16
16
|
version = "4.11.0"
|
17
17
|
source = { registry = "https://pypi.org/simple" }
|
18
18
|
dependencies = [
|
19
|
+
{ name = "exceptiongroup", marker = "python_full_version < '3.11'" },
|
19
20
|
{ name = "idna" },
|
20
21
|
{ name = "sniffio" },
|
21
22
|
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
@@ -25,15 +26,6 @@ wheels = [
|
|
25
26
|
{ url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" },
|
26
27
|
]
|
27
28
|
|
28
|
-
[[package]]
|
29
|
-
name = "asttokens"
|
30
|
-
version = "3.0.0"
|
31
|
-
source = { registry = "https://pypi.org/simple" }
|
32
|
-
sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" }
|
33
|
-
wheels = [
|
34
|
-
{ url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" },
|
35
|
-
]
|
36
|
-
|
37
29
|
[[package]]
|
38
30
|
name = "certifi"
|
39
31
|
version = "2025.10.5"
|
@@ -52,15 +44,6 @@ wheels = [
|
|
52
44
|
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
|
53
45
|
]
|
54
46
|
|
55
|
-
[[package]]
|
56
|
-
name = "decorator"
|
57
|
-
version = "5.2.1"
|
58
|
-
source = { registry = "https://pypi.org/simple" }
|
59
|
-
sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" }
|
60
|
-
wheels = [
|
61
|
-
{ url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" },
|
62
|
-
]
|
63
|
-
|
64
47
|
[[package]]
|
65
48
|
name = "distro"
|
66
49
|
version = "1.9.0"
|
@@ -71,12 +54,15 @@ wheels = [
|
|
71
54
|
]
|
72
55
|
|
73
56
|
[[package]]
|
74
|
-
name = "
|
75
|
-
version = "
|
57
|
+
name = "exceptiongroup"
|
58
|
+
version = "1.3.0"
|
76
59
|
source = { registry = "https://pypi.org/simple" }
|
77
|
-
|
60
|
+
dependencies = [
|
61
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
62
|
+
]
|
63
|
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
|
78
64
|
wheels = [
|
79
|
-
{ url = "https://files.pythonhosted.org/packages/
|
65
|
+
{ url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" },
|
80
66
|
]
|
81
67
|
|
82
68
|
[[package]]
|
@@ -134,57 +120,36 @@ wheels = [
|
|
134
120
|
{ url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" },
|
135
121
|
]
|
136
122
|
|
137
|
-
[[package]]
|
138
|
-
name = "ipython"
|
139
|
-
version = "9.6.0"
|
140
|
-
source = { registry = "https://pypi.org/simple" }
|
141
|
-
dependencies = [
|
142
|
-
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
143
|
-
{ name = "decorator" },
|
144
|
-
{ name = "ipython-pygments-lexers" },
|
145
|
-
{ name = "jedi" },
|
146
|
-
{ name = "matplotlib-inline" },
|
147
|
-
{ name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
|
148
|
-
{ name = "prompt-toolkit" },
|
149
|
-
{ name = "pygments" },
|
150
|
-
{ name = "stack-data" },
|
151
|
-
{ name = "traitlets" },
|
152
|
-
]
|
153
|
-
sdist = { url = "https://files.pythonhosted.org/packages/2a/34/29b18c62e39ee2f7a6a3bba7efd952729d8aadd45ca17efc34453b717665/ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731", size = 4396932, upload-time = "2025-09-29T10:55:53.948Z" }
|
154
|
-
wheels = [
|
155
|
-
{ url = "https://files.pythonhosted.org/packages/48/c5/d5e07995077e48220269c28a221e168c91123ad5ceee44d548f54a057fc0/ipython-9.6.0-py3-none-any.whl", hash = "sha256:5f77efafc886d2f023442479b8149e7d86547ad0a979e9da9f045d252f648196", size = 616170, upload-time = "2025-09-29T10:55:47.676Z" },
|
156
|
-
]
|
157
|
-
|
158
|
-
[[package]]
|
159
|
-
name = "ipython-pygments-lexers"
|
160
|
-
version = "1.1.1"
|
161
|
-
source = { registry = "https://pypi.org/simple" }
|
162
|
-
dependencies = [
|
163
|
-
{ name = "pygments" },
|
164
|
-
]
|
165
|
-
sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" }
|
166
|
-
wheels = [
|
167
|
-
{ url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" },
|
168
|
-
]
|
169
|
-
|
170
|
-
[[package]]
|
171
|
-
name = "jedi"
|
172
|
-
version = "0.19.2"
|
173
|
-
source = { registry = "https://pypi.org/simple" }
|
174
|
-
dependencies = [
|
175
|
-
{ name = "parso" },
|
176
|
-
]
|
177
|
-
sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" }
|
178
|
-
wheels = [
|
179
|
-
{ url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" },
|
180
|
-
]
|
181
|
-
|
182
123
|
[[package]]
|
183
124
|
name = "jiter"
|
184
125
|
version = "0.11.0"
|
185
126
|
source = { registry = "https://pypi.org/simple" }
|
186
127
|
sdist = { url = "https://files.pythonhosted.org/packages/9d/c0/a3bb4cc13aced219dd18191ea66e874266bd8aa7b96744e495e1c733aa2d/jiter-0.11.0.tar.gz", hash = "sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4", size = 167094, upload-time = "2025-09-15T09:20:38.212Z" }
|
187
128
|
wheels = [
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/25/21/7dd1235a19e26979be6098e87e4cced2e061752f3a40a17bbce6dea7fae1/jiter-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3893ce831e1c0094a83eeaf56c635a167d6fa8cc14393cc14298fd6fdc2a2449", size = 309875, upload-time = "2025-09-15T09:18:48.41Z" },
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/71/f9/462b54708aa85b135733ccba70529dd68a18511bf367a87c5fd28676c841/jiter-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:25c625b9b61b5a8725267fdf867ef2e51b429687f6a4eef211f4612e95607179", size = 316505, upload-time = "2025-09-15T09:18:51.057Z" },
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/bd/40/14e2eeaac6a47bff27d213834795472355fd39769272eb53cb7aa83d5aa8/jiter-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4ca85fb6a62cf72e1c7f5e34ddef1b660ce4ed0886ec94a1ef9777d35eaa1f", size = 337613, upload-time = "2025-09-15T09:18:52.358Z" },
|
132
|
+
{ url = "https://files.pythonhosted.org/packages/d3/ed/a5f1f8419c92b150a7c7fb5ccba1fb1e192887ad713d780e70874f0ce996/jiter-0.11.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:572208127034725e79c28437b82414028c3562335f2b4f451d98136d0fc5f9cd", size = 361438, upload-time = "2025-09-15T09:18:54.637Z" },
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/dd/f5/70682c023dfcdd463a53faf5d30205a7d99c51d70d3e303c932d0936e5a2/jiter-0.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494ba627c7f550ad3dabb21862864b8f2216098dc18ff62f37b37796f2f7c325", size = 486180, upload-time = "2025-09-15T09:18:56.158Z" },
|
134
|
+
{ url = "https://files.pythonhosted.org/packages/7c/39/020d08cbab4eab48142ad88b837c41eb08a15c0767fdb7c0d3265128a44b/jiter-0.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8da18a99f58bca3ecc2d2bba99cac000a924e115b6c4f0a2b98f752b6fbf39a", size = 376681, upload-time = "2025-09-15T09:18:57.553Z" },
|
135
|
+
{ url = "https://files.pythonhosted.org/packages/52/10/b86733f6e594cf51dd142f37c602d8df87c554c5844958deaab0de30eb5d/jiter-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ffd3b0fff3fabbb02cc09910c08144db6bb5697a98d227a074401e01ee63dd", size = 348685, upload-time = "2025-09-15T09:18:59.208Z" },
|
136
|
+
{ url = "https://files.pythonhosted.org/packages/fb/ee/8861665e83a9e703aa5f65fddddb6225428e163e6b0baa95a7f9a8fb9aae/jiter-0.11.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8fe6530aa738a4f7d4e4702aa8f9581425d04036a5f9e25af65ebe1f708f23be", size = 385573, upload-time = "2025-09-15T09:19:00.593Z" },
|
137
|
+
{ url = "https://files.pythonhosted.org/packages/25/74/05afec03600951f128293813b5a208c9ba1bf587c57a344c05a42a69e1b1/jiter-0.11.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e35d66681c133a03d7e974e7eedae89720fe8ca3bd09f01a4909b86a8adf31f5", size = 516669, upload-time = "2025-09-15T09:19:02.369Z" },
|
138
|
+
{ url = "https://files.pythonhosted.org/packages/93/d1/2e5bfe147cfbc2a5eef7f73eb75dc5c6669da4fa10fc7937181d93af9495/jiter-0.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c59459beca2fbc9718b6f1acb7bfb59ebc3eb4294fa4d40e9cb679dafdcc6c60", size = 508767, upload-time = "2025-09-15T09:19:04.011Z" },
|
139
|
+
{ url = "https://files.pythonhosted.org/packages/87/50/597f71307e10426b5c082fd05d38c615ddbdd08c3348d8502963307f0652/jiter-0.11.0-cp310-cp310-win32.whl", hash = "sha256:b7b0178417b0dcfc5f259edbc6db2b1f5896093ed9035ee7bab0f2be8854726d", size = 205476, upload-time = "2025-09-15T09:19:05.594Z" },
|
140
|
+
{ url = "https://files.pythonhosted.org/packages/c7/86/1e5214b3272e311754da26e63edec93a183811d4fc2e0118addec365df8b/jiter-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:11df2bf99fb4754abddd7f5d940a48e51f9d11624d6313ca4314145fcad347f0", size = 204708, upload-time = "2025-09-15T09:19:06.955Z" },
|
141
|
+
{ url = "https://files.pythonhosted.org/packages/38/55/a69fefeef09c2eaabae44b935a1aa81517e49639c0a0c25d861cb18cd7ac/jiter-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222", size = 309503, upload-time = "2025-09-15T09:19:08.191Z" },
|
142
|
+
{ url = "https://files.pythonhosted.org/packages/bd/d5/a6aba9e6551f32f9c127184f398208e4eddb96c59ac065c8a92056089d28/jiter-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d", size = 317688, upload-time = "2025-09-15T09:19:09.918Z" },
|
143
|
+
{ url = "https://files.pythonhosted.org/packages/bb/f3/5e86f57c1883971cdc8535d0429c2787bf734840a231da30a3be12850562/jiter-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7", size = 337418, upload-time = "2025-09-15T09:19:11.078Z" },
|
144
|
+
{ url = "https://files.pythonhosted.org/packages/5e/4f/a71d8a24c2a70664970574a8e0b766663f5ef788f7fe1cc20ee0c016d488/jiter-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d", size = 361423, upload-time = "2025-09-15T09:19:13.286Z" },
|
145
|
+
{ url = "https://files.pythonhosted.org/packages/8f/e5/b09076f4e7fd9471b91e16f9f3dc7330b161b738f3b39b2c37054a36e26a/jiter-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09", size = 486367, upload-time = "2025-09-15T09:19:14.546Z" },
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/fb/f1/98cb3a36f5e62f80cd860f0179f948d9eab5a316d55d3e1bab98d9767af5/jiter-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789", size = 376335, upload-time = "2025-09-15T09:19:15.939Z" },
|
147
|
+
{ url = "https://files.pythonhosted.org/packages/9f/d8/ec74886497ea393c29dbd7651ddecc1899e86404a6b1f84a3ddab0ab59fd/jiter-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347", size = 348981, upload-time = "2025-09-15T09:19:17.568Z" },
|
148
|
+
{ url = "https://files.pythonhosted.org/packages/24/93/d22ad7fa3b86ade66c86153ceea73094fc2af8b20c59cb7fceab9fea4704/jiter-0.11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648", size = 385797, upload-time = "2025-09-15T09:19:19.121Z" },
|
149
|
+
{ url = "https://files.pythonhosted.org/packages/c8/bd/e25ff4a4df226e9b885f7cb01ee4b9dc74e3000e612d6f723860d71a1f34/jiter-0.11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4", size = 516597, upload-time = "2025-09-15T09:19:20.301Z" },
|
150
|
+
{ url = "https://files.pythonhosted.org/packages/be/fb/beda613db7d93ffa2fdd2683f90f2f5dce8daf4bc2d0d2829e7de35308c6/jiter-0.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1", size = 508853, upload-time = "2025-09-15T09:19:22.075Z" },
|
151
|
+
{ url = "https://files.pythonhosted.org/packages/20/64/c5b0d93490634e41e38e2a15de5d54fdbd2c9f64a19abb0f95305b63373c/jiter-0.11.0-cp311-cp311-win32.whl", hash = "sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982", size = 205140, upload-time = "2025-09-15T09:19:23.351Z" },
|
152
|
+
{ url = "https://files.pythonhosted.org/packages/a1/e6/c347c0e6f5796e97d4356b7e5ff0ce336498b7f4ef848fae621a56f1ccf3/jiter-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7", size = 204311, upload-time = "2025-09-15T09:19:24.591Z" },
|
188
153
|
{ url = "https://files.pythonhosted.org/packages/ba/b5/3009b112b8f673e568ef79af9863d8309a15f0a8cdcc06ed6092051f377e/jiter-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada", size = 305510, upload-time = "2025-09-15T09:19:25.893Z" },
|
189
154
|
{ url = "https://files.pythonhosted.org/packages/fe/82/15514244e03b9e71e086bbe2a6de3e4616b48f07d5f834200c873956fb8c/jiter-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99", size = 316521, upload-time = "2025-09-15T09:19:27.525Z" },
|
190
155
|
{ url = "https://files.pythonhosted.org/packages/92/94/7a2e905f40ad2d6d660e00b68d818f9e29fb87ffe82774f06191e93cbe4a/jiter-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6", size = 338214, upload-time = "2025-09-15T09:19:28.727Z" },
|
@@ -225,11 +190,12 @@ wheels = [
|
|
225
190
|
{ url = "https://files.pythonhosted.org/packages/90/33/396083357d51d7ff0f9805852c288af47480d30dd31d8abc74909b020761/jiter-0.11.0-cp314-cp314-win32.whl", hash = "sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2", size = 205802, upload-time = "2025-09-15T09:20:17.661Z" },
|
226
191
|
{ url = "https://files.pythonhosted.org/packages/e7/ab/eb06ca556b2551d41de7d03bf2ee24285fa3d0c58c5f8d95c64c9c3281b1/jiter-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40", size = 313405, upload-time = "2025-09-15T09:20:18.918Z" },
|
227
192
|
{ url = "https://files.pythonhosted.org/packages/af/22/7ab7b4ec3a1c1f03aef376af11d23b05abcca3fb31fbca1e7557053b1ba2/jiter-0.11.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406", size = 347102, upload-time = "2025-09-15T09:20:20.16Z" },
|
193
|
+
{ url = "https://files.pythonhosted.org/packages/70/f3/ce100253c80063a7b8b406e1d1562657fd4b9b4e1b562db40e68645342fb/jiter-0.11.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7", size = 336380, upload-time = "2025-09-15T09:20:36.867Z" },
|
228
194
|
]
|
229
195
|
|
230
196
|
[[package]]
|
231
197
|
name = "ldbg"
|
232
|
-
version = "0.1.
|
198
|
+
version = "0.1.2"
|
233
199
|
source = { editable = "." }
|
234
200
|
dependencies = [
|
235
201
|
{ name = "openai" },
|
@@ -237,7 +203,6 @@ dependencies = [
|
|
237
203
|
|
238
204
|
[package.dev-dependencies]
|
239
205
|
dev = [
|
240
|
-
{ name = "ipython" },
|
241
206
|
{ name = "pytest" },
|
242
207
|
{ name = "ruff" },
|
243
208
|
]
|
@@ -247,23 +212,10 @@ requires-dist = [{ name = "openai", specifier = ">=1.107.3" }]
|
|
247
212
|
|
248
213
|
[package.metadata.requires-dev]
|
249
214
|
dev = [
|
250
|
-
{ name = "ipython", specifier = ">=9.5.0" },
|
251
215
|
{ name = "pytest", specifier = ">=8.4.2" },
|
252
216
|
{ name = "ruff", specifier = ">=0.14.0" },
|
253
217
|
]
|
254
218
|
|
255
|
-
[[package]]
|
256
|
-
name = "matplotlib-inline"
|
257
|
-
version = "0.1.7"
|
258
|
-
source = { registry = "https://pypi.org/simple" }
|
259
|
-
dependencies = [
|
260
|
-
{ name = "traitlets" },
|
261
|
-
]
|
262
|
-
sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" }
|
263
|
-
wheels = [
|
264
|
-
{ url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" },
|
265
|
-
]
|
266
|
-
|
267
219
|
[[package]]
|
268
220
|
name = "openai"
|
269
221
|
version = "2.1.0"
|
@@ -292,27 +244,6 @@ wheels = [
|
|
292
244
|
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
|
293
245
|
]
|
294
246
|
|
295
|
-
[[package]]
|
296
|
-
name = "parso"
|
297
|
-
version = "0.8.5"
|
298
|
-
source = { registry = "https://pypi.org/simple" }
|
299
|
-
sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" }
|
300
|
-
wheels = [
|
301
|
-
{ url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" },
|
302
|
-
]
|
303
|
-
|
304
|
-
[[package]]
|
305
|
-
name = "pexpect"
|
306
|
-
version = "4.9.0"
|
307
|
-
source = { registry = "https://pypi.org/simple" }
|
308
|
-
dependencies = [
|
309
|
-
{ name = "ptyprocess" },
|
310
|
-
]
|
311
|
-
sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" }
|
312
|
-
wheels = [
|
313
|
-
{ url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" },
|
314
|
-
]
|
315
|
-
|
316
247
|
[[package]]
|
317
248
|
name = "pluggy"
|
318
249
|
version = "1.6.0"
|
@@ -322,36 +253,6 @@ wheels = [
|
|
322
253
|
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
|
323
254
|
]
|
324
255
|
|
325
|
-
[[package]]
|
326
|
-
name = "prompt-toolkit"
|
327
|
-
version = "3.0.52"
|
328
|
-
source = { registry = "https://pypi.org/simple" }
|
329
|
-
dependencies = [
|
330
|
-
{ name = "wcwidth" },
|
331
|
-
]
|
332
|
-
sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" }
|
333
|
-
wheels = [
|
334
|
-
{ url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" },
|
335
|
-
]
|
336
|
-
|
337
|
-
[[package]]
|
338
|
-
name = "ptyprocess"
|
339
|
-
version = "0.7.0"
|
340
|
-
source = { registry = "https://pypi.org/simple" }
|
341
|
-
sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" }
|
342
|
-
wheels = [
|
343
|
-
{ url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" },
|
344
|
-
]
|
345
|
-
|
346
|
-
[[package]]
|
347
|
-
name = "pure-eval"
|
348
|
-
version = "0.2.3"
|
349
|
-
source = { registry = "https://pypi.org/simple" }
|
350
|
-
sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" }
|
351
|
-
wheels = [
|
352
|
-
{ url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
|
353
|
-
]
|
354
|
-
|
355
256
|
[[package]]
|
356
257
|
name = "pydantic"
|
357
258
|
version = "2.11.10"
|
@@ -376,6 +277,33 @@ dependencies = [
|
|
376
277
|
]
|
377
278
|
sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" }
|
378
279
|
wheels = [
|
280
|
+
{ url = "https://files.pythonhosted.org/packages/e5/92/b31726561b5dae176c2d2c2dc43a9c5bfba5d32f96f8b4c0a600dd492447/pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8", size = 2028817, upload-time = "2025-04-23T18:30:43.919Z" },
|
281
|
+
{ url = "https://files.pythonhosted.org/packages/a3/44/3f0b95fafdaca04a483c4e685fe437c6891001bf3ce8b2fded82b9ea3aa1/pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d", size = 1861357, upload-time = "2025-04-23T18:30:46.372Z" },
|
282
|
+
{ url = "https://files.pythonhosted.org/packages/30/97/e8f13b55766234caae05372826e8e4b3b96e7b248be3157f53237682e43c/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d", size = 1898011, upload-time = "2025-04-23T18:30:47.591Z" },
|
283
|
+
{ url = "https://files.pythonhosted.org/packages/9b/a3/99c48cf7bafc991cc3ee66fd544c0aae8dc907b752f1dad2d79b1b5a471f/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572", size = 1982730, upload-time = "2025-04-23T18:30:49.328Z" },
|
284
|
+
{ url = "https://files.pythonhosted.org/packages/de/8e/a5b882ec4307010a840fb8b58bd9bf65d1840c92eae7534c7441709bf54b/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02", size = 2136178, upload-time = "2025-04-23T18:30:50.907Z" },
|
285
|
+
{ url = "https://files.pythonhosted.org/packages/e4/bb/71e35fc3ed05af6834e890edb75968e2802fe98778971ab5cba20a162315/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b", size = 2736462, upload-time = "2025-04-23T18:30:52.083Z" },
|
286
|
+
{ url = "https://files.pythonhosted.org/packages/31/0d/c8f7593e6bc7066289bbc366f2235701dcbebcd1ff0ef8e64f6f239fb47d/pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2", size = 2005652, upload-time = "2025-04-23T18:30:53.389Z" },
|
287
|
+
{ url = "https://files.pythonhosted.org/packages/d2/7a/996d8bd75f3eda405e3dd219ff5ff0a283cd8e34add39d8ef9157e722867/pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a", size = 2113306, upload-time = "2025-04-23T18:30:54.661Z" },
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/ff/84/daf2a6fb2db40ffda6578a7e8c5a6e9c8affb251a05c233ae37098118788/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac", size = 2073720, upload-time = "2025-04-23T18:30:56.11Z" },
|
289
|
+
{ url = "https://files.pythonhosted.org/packages/77/fb/2258da019f4825128445ae79456a5499c032b55849dbd5bed78c95ccf163/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a", size = 2244915, upload-time = "2025-04-23T18:30:57.501Z" },
|
290
|
+
{ url = "https://files.pythonhosted.org/packages/d8/7a/925ff73756031289468326e355b6fa8316960d0d65f8b5d6b3a3e7866de7/pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b", size = 2241884, upload-time = "2025-04-23T18:30:58.867Z" },
|
291
|
+
{ url = "https://files.pythonhosted.org/packages/0b/b0/249ee6d2646f1cdadcb813805fe76265745c4010cf20a8eba7b0e639d9b2/pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22", size = 1910496, upload-time = "2025-04-23T18:31:00.078Z" },
|
292
|
+
{ url = "https://files.pythonhosted.org/packages/66/ff/172ba8f12a42d4b552917aa65d1f2328990d3ccfc01d5b7c943ec084299f/pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640", size = 1955019, upload-time = "2025-04-23T18:31:01.335Z" },
|
293
|
+
{ url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" },
|
294
|
+
{ url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" },
|
295
|
+
{ url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" },
|
296
|
+
{ url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" },
|
297
|
+
{ url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" },
|
298
|
+
{ url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" },
|
299
|
+
{ url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" },
|
300
|
+
{ url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" },
|
301
|
+
{ url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" },
|
302
|
+
{ url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" },
|
303
|
+
{ url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" },
|
304
|
+
{ url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" },
|
305
|
+
{ url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" },
|
306
|
+
{ url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" },
|
379
307
|
{ url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" },
|
380
308
|
{ url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" },
|
381
309
|
{ url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" },
|
@@ -407,6 +335,24 @@ wheels = [
|
|
407
335
|
{ url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" },
|
408
336
|
{ url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" },
|
409
337
|
{ url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" },
|
338
|
+
{ url = "https://files.pythonhosted.org/packages/30/68/373d55e58b7e83ce371691f6eaa7175e3a24b956c44628eb25d7da007917/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa", size = 2023982, upload-time = "2025-04-23T18:32:53.14Z" },
|
339
|
+
{ url = "https://files.pythonhosted.org/packages/a4/16/145f54ac08c96a63d8ed6442f9dec17b2773d19920b627b18d4f10a061ea/pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29", size = 1858412, upload-time = "2025-04-23T18:32:55.52Z" },
|
340
|
+
{ url = "https://files.pythonhosted.org/packages/41/b1/c6dc6c3e2de4516c0bb2c46f6a373b91b5660312342a0cf5826e38ad82fa/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d", size = 1892749, upload-time = "2025-04-23T18:32:57.546Z" },
|
341
|
+
{ url = "https://files.pythonhosted.org/packages/12/73/8cd57e20afba760b21b742106f9dbdfa6697f1570b189c7457a1af4cd8a0/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e", size = 2067527, upload-time = "2025-04-23T18:32:59.771Z" },
|
342
|
+
{ url = "https://files.pythonhosted.org/packages/e3/d5/0bb5d988cc019b3cba4a78f2d4b3854427fc47ee8ec8e9eaabf787da239c/pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c", size = 2108225, upload-time = "2025-04-23T18:33:04.51Z" },
|
343
|
+
{ url = "https://files.pythonhosted.org/packages/f1/c5/00c02d1571913d496aabf146106ad8239dc132485ee22efe08085084ff7c/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec", size = 2069490, upload-time = "2025-04-23T18:33:06.391Z" },
|
344
|
+
{ url = "https://files.pythonhosted.org/packages/22/a8/dccc38768274d3ed3a59b5d06f59ccb845778687652daa71df0cab4040d7/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052", size = 2237525, upload-time = "2025-04-23T18:33:08.44Z" },
|
345
|
+
{ url = "https://files.pythonhosted.org/packages/d4/e7/4f98c0b125dda7cf7ccd14ba936218397b44f50a56dd8c16a3091df116c3/pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c", size = 2238446, upload-time = "2025-04-23T18:33:10.313Z" },
|
346
|
+
{ url = "https://files.pythonhosted.org/packages/ce/91/2ec36480fdb0b783cd9ef6795753c1dea13882f2e68e73bce76ae8c21e6a/pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808", size = 2066678, upload-time = "2025-04-23T18:33:12.224Z" },
|
347
|
+
{ url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" },
|
348
|
+
{ url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" },
|
349
|
+
{ url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" },
|
350
|
+
{ url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" },
|
351
|
+
{ url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" },
|
352
|
+
{ url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" },
|
353
|
+
{ url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" },
|
354
|
+
{ url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" },
|
355
|
+
{ url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" },
|
410
356
|
]
|
411
357
|
|
412
358
|
[[package]]
|
@@ -424,10 +370,12 @@ version = "8.4.2"
|
|
424
370
|
source = { registry = "https://pypi.org/simple" }
|
425
371
|
dependencies = [
|
426
372
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
373
|
+
{ name = "exceptiongroup", marker = "python_full_version < '3.11'" },
|
427
374
|
{ name = "iniconfig" },
|
428
375
|
{ name = "packaging" },
|
429
376
|
{ name = "pluggy" },
|
430
377
|
{ name = "pygments" },
|
378
|
+
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
431
379
|
]
|
432
380
|
sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" }
|
433
381
|
wheels = [
|
@@ -470,17 +418,52 @@ wheels = [
|
|
470
418
|
]
|
471
419
|
|
472
420
|
[[package]]
|
473
|
-
name = "
|
474
|
-
version = "
|
475
|
-
source = { registry = "https://pypi.org/simple" }
|
476
|
-
|
477
|
-
|
478
|
-
{
|
479
|
-
{
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
{ url = "https://files.pythonhosted.org/packages/
|
421
|
+
name = "tomli"
|
422
|
+
version = "2.3.0"
|
423
|
+
source = { registry = "https://pypi.org/simple" }
|
424
|
+
sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" }
|
425
|
+
wheels = [
|
426
|
+
{ url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" },
|
427
|
+
{ url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" },
|
428
|
+
{ url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" },
|
429
|
+
{ url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" },
|
430
|
+
{ url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" },
|
431
|
+
{ url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" },
|
432
|
+
{ url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" },
|
433
|
+
{ url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" },
|
434
|
+
{ url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" },
|
435
|
+
{ url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" },
|
436
|
+
{ url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" },
|
437
|
+
{ url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" },
|
438
|
+
{ url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" },
|
439
|
+
{ url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" },
|
440
|
+
{ url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" },
|
441
|
+
{ url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" },
|
442
|
+
{ url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" },
|
443
|
+
{ url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" },
|
444
|
+
{ url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" },
|
445
|
+
{ url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" },
|
446
|
+
{ url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" },
|
447
|
+
{ url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" },
|
448
|
+
{ url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" },
|
449
|
+
{ url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" },
|
450
|
+
{ url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" },
|
451
|
+
{ url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" },
|
452
|
+
{ url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" },
|
453
|
+
{ url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" },
|
454
|
+
{ url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" },
|
455
|
+
{ url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" },
|
456
|
+
{ url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" },
|
457
|
+
{ url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" },
|
458
|
+
{ url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" },
|
459
|
+
{ url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" },
|
460
|
+
{ url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" },
|
461
|
+
{ url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" },
|
462
|
+
{ url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" },
|
463
|
+
{ url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" },
|
464
|
+
{ url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" },
|
465
|
+
{ url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" },
|
466
|
+
{ url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" },
|
484
467
|
]
|
485
468
|
|
486
469
|
[[package]]
|
@@ -495,15 +478,6 @@ wheels = [
|
|
495
478
|
{ url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
|
496
479
|
]
|
497
480
|
|
498
|
-
[[package]]
|
499
|
-
name = "traitlets"
|
500
|
-
version = "5.14.3"
|
501
|
-
source = { registry = "https://pypi.org/simple" }
|
502
|
-
sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" }
|
503
|
-
wheels = [
|
504
|
-
{ url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" },
|
505
|
-
]
|
506
|
-
|
507
481
|
[[package]]
|
508
482
|
name = "typing-extensions"
|
509
483
|
version = "4.15.0"
|
@@ -524,12 +498,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac
|
|
524
498
|
wheels = [
|
525
499
|
{ url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
|
526
500
|
]
|
527
|
-
|
528
|
-
[[package]]
|
529
|
-
name = "wcwidth"
|
530
|
-
version = "0.2.14"
|
531
|
-
source = { registry = "https://pypi.org/simple" }
|
532
|
-
sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" }
|
533
|
-
wheels = [
|
534
|
-
{ url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" },
|
535
|
-
]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|