margin-estimator 0.2__tar.gz → 0.4__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.
- {margin_estimator-0.2 → margin_estimator-0.4}/PKG-INFO +24 -1
- {margin_estimator-0.2 → margin_estimator-0.4}/README.md +23 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/pyproject.toml +3 -3
- {margin_estimator-0.2 → margin_estimator-0.4}/src/margin_estimator/__init__.py +2 -2
- {margin_estimator-0.2 → margin_estimator-0.4}/src/margin_estimator/margin.py +62 -10
- {margin_estimator-0.2 → margin_estimator-0.4}/src/margin_estimator/models.py +11 -2
- {margin_estimator-0.2 → margin_estimator-0.4}/test.py +133 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/uv.lock +55 -54
- {margin_estimator-0.2 → margin_estimator-0.4}/.github/workflows/publish.yml +0 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/.gitignore +0 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/.python-version +0 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/LICENSE +0 -0
- {margin_estimator-0.2 → margin_estimator-0.4}/src/margin_estimator/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: margin-estimator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4
|
|
4
4
|
Summary: Calculate estimated margin requirements for equities options, based on CBOE margining.
|
|
5
5
|
Project-URL: Homepage, https://github.com/tastyware/margin-estimator
|
|
6
6
|
Author-email: Graeme Holliday <graeme.holliday@pm.me>
|
|
@@ -53,6 +53,7 @@ from margin_estimator import (
|
|
|
53
53
|
ETFType,
|
|
54
54
|
Option,
|
|
55
55
|
OptionType,
|
|
56
|
+
Shares,
|
|
56
57
|
Underlying,
|
|
57
58
|
calculate_margin,
|
|
58
59
|
)
|
|
@@ -145,4 +146,26 @@ print(margin)
|
|
|
145
146
|
>>> cash_requirement=Decimal('7555.00') margin_requirement=Decimal('3661.00')
|
|
146
147
|
```
|
|
147
148
|
|
|
149
|
+
You can even add shares of an underlying to calculate requirements for covered legs:
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
# a covered SPY call
|
|
153
|
+
underlying = Underlying(price=Decimal("740"))
|
|
154
|
+
expiration = date(2026, 5, 15)
|
|
155
|
+
call = Option(
|
|
156
|
+
expiration=expiration,
|
|
157
|
+
price=Decimal("4.45"),
|
|
158
|
+
quantity=-1,
|
|
159
|
+
strike=Decimal(780),
|
|
160
|
+
type=OptionType.CALL,
|
|
161
|
+
)
|
|
162
|
+
shares = Shares(price=Decimal("700.41"), quantity=100)
|
|
163
|
+
margin = calculate_margin([call, shares], underlying)
|
|
164
|
+
print(margin)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
>>> cash_requirement=Decimal('70041.00') margin_requirement=Decimal('35020.00')
|
|
169
|
+
```
|
|
170
|
+
|
|
148
171
|
Please note that all numbers are baseline minimums from CBOE guidelines and individual broker margins will likely vary significantly.
|
|
@@ -21,6 +21,7 @@ from margin_estimator import (
|
|
|
21
21
|
ETFType,
|
|
22
22
|
Option,
|
|
23
23
|
OptionType,
|
|
24
|
+
Shares,
|
|
24
25
|
Underlying,
|
|
25
26
|
calculate_margin,
|
|
26
27
|
)
|
|
@@ -113,4 +114,26 @@ print(margin)
|
|
|
113
114
|
>>> cash_requirement=Decimal('7555.00') margin_requirement=Decimal('3661.00')
|
|
114
115
|
```
|
|
115
116
|
|
|
117
|
+
You can even add shares of an underlying to calculate requirements for covered legs:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
# a covered SPY call
|
|
121
|
+
underlying = Underlying(price=Decimal("740"))
|
|
122
|
+
expiration = date(2026, 5, 15)
|
|
123
|
+
call = Option(
|
|
124
|
+
expiration=expiration,
|
|
125
|
+
price=Decimal("4.45"),
|
|
126
|
+
quantity=-1,
|
|
127
|
+
strike=Decimal(780),
|
|
128
|
+
type=OptionType.CALL,
|
|
129
|
+
)
|
|
130
|
+
shares = Shares(price=Decimal("700.41"), quantity=100)
|
|
131
|
+
margin = calculate_margin([call, shares], underlying)
|
|
132
|
+
print(margin)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
>>> cash_requirement=Decimal('70041.00') margin_requirement=Decimal('35020.00')
|
|
137
|
+
```
|
|
138
|
+
|
|
116
139
|
Please note that all numbers are baseline minimums from CBOE guidelines and individual broker margins will likely vary significantly.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "margin-estimator"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4"
|
|
8
8
|
description = "Calculate estimated margin requirements for equities options, based on CBOE margining."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -19,7 +19,7 @@ dependencies = [
|
|
|
19
19
|
[project.urls]
|
|
20
20
|
Homepage = "https://github.com/tastyware/margin-estimator"
|
|
21
21
|
|
|
22
|
-
[
|
|
23
|
-
dev
|
|
22
|
+
[dependency-groups]
|
|
23
|
+
dev = [
|
|
24
24
|
"pytest>=8.3.3",
|
|
25
25
|
]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from .margin import calculate_margin
|
|
2
|
-
from .models import ETFType, Option, OptionType, Underlying
|
|
3
|
-
|
|
2
|
+
from .models import ETFType, Option, OptionType, Shares, Underlying
|
|
4
3
|
|
|
5
4
|
__all__ = [
|
|
6
5
|
"ETFType",
|
|
7
6
|
"Option",
|
|
8
7
|
"OptionType",
|
|
8
|
+
"Shares",
|
|
9
9
|
"Underlying",
|
|
10
10
|
"calculate_margin",
|
|
11
11
|
]
|
|
@@ -3,26 +3,61 @@ from datetime import date, timedelta
|
|
|
3
3
|
from decimal import Decimal
|
|
4
4
|
|
|
5
5
|
from .models import (
|
|
6
|
+
ZERO,
|
|
6
7
|
ETFType,
|
|
7
8
|
MarginRequirements,
|
|
8
9
|
Option,
|
|
9
10
|
OptionType,
|
|
11
|
+
Shares,
|
|
10
12
|
Underlying,
|
|
11
13
|
)
|
|
12
14
|
|
|
13
|
-
ZERO = Decimal(0)
|
|
14
15
|
|
|
16
|
+
def calculate_margin(
|
|
17
|
+
legs: list[Option | Shares], underlying: Underlying
|
|
18
|
+
) -> MarginRequirements:
|
|
19
|
+
# separate out shares from options
|
|
20
|
+
options = [leg for leg in legs if isinstance(leg, Option)]
|
|
21
|
+
stocks = [leg for leg in legs if isinstance(leg, Shares)]
|
|
22
|
+
stock: Shares | None = None
|
|
23
|
+
if stocks and (stock_quantity := sum(leg.quantity for leg in stocks)):
|
|
24
|
+
avg_price = sum(leg.quantity * leg.price for leg in stocks) / stock_quantity
|
|
25
|
+
stock = Shares(price=Decimal(avg_price), quantity=stock_quantity)
|
|
26
|
+
# step 0: cancel out opposing positions
|
|
27
|
+
netted: dict[tuple[date, Decimal, str], Option] = {}
|
|
28
|
+
for leg in options:
|
|
29
|
+
key = (leg.expiration, leg.strike, leg.type.value)
|
|
30
|
+
if key in netted:
|
|
31
|
+
netted[key] = netted[key].model_copy(
|
|
32
|
+
update={"quantity": netted[key].quantity + leg.quantity}
|
|
33
|
+
)
|
|
34
|
+
else:
|
|
35
|
+
netted[key] = leg
|
|
36
|
+
options = [leg for leg in netted.values() if leg.quantity != 0]
|
|
15
37
|
|
|
16
|
-
def calculate_margin(legs: list[Option], underlying: Underlying) -> MarginRequirements:
|
|
17
38
|
# sort by expiry to cover near-term risk first
|
|
18
|
-
shorts = sorted(
|
|
19
|
-
longs = {
|
|
20
|
-
leg: leg.quantity for leg in sorted([leg for leg in legs if leg.quantity > 0])
|
|
21
|
-
}
|
|
39
|
+
shorts = sorted(o for o in options if o.quantity < 0)
|
|
40
|
+
longs = {leg: leg.quantity for leg in sorted(o for o in options if o.quantity > 0)}
|
|
22
41
|
covered: list[Option] = []
|
|
23
42
|
naked_shorts: list[Option] = []
|
|
24
43
|
|
|
25
|
-
# step 1: match
|
|
44
|
+
# step 1: match covered calls/puts with stock position
|
|
45
|
+
if stock:
|
|
46
|
+
remaining = abs(stock.quantity)
|
|
47
|
+
target = OptionType.CALL if stock.quantity > 0 else OptionType.PUT
|
|
48
|
+
new_shorts = []
|
|
49
|
+
for short in shorts:
|
|
50
|
+
if short.type != target or remaining < 100:
|
|
51
|
+
new_shorts.append(short)
|
|
52
|
+
continue
|
|
53
|
+
paired = min(abs(short.quantity), remaining // 100)
|
|
54
|
+
remaining -= paired * 100
|
|
55
|
+
leftover = abs(short.quantity) - paired
|
|
56
|
+
if leftover:
|
|
57
|
+
new_shorts.append(short.model_copy(update={"quantity": -leftover}))
|
|
58
|
+
shorts = new_shorts
|
|
59
|
+
|
|
60
|
+
# step 2: match spreads
|
|
26
61
|
for short in shorts:
|
|
27
62
|
unmatched = abs(short.quantity)
|
|
28
63
|
# iterate our long inventory to find a cover
|
|
@@ -43,7 +78,7 @@ def calculate_margin(legs: list[Option], underlying: Underlying) -> MarginRequir
|
|
|
43
78
|
if unmatched > 0:
|
|
44
79
|
naked_shorts.append(short.model_copy(update={"quantity": -unmatched}))
|
|
45
80
|
|
|
46
|
-
# step
|
|
81
|
+
# step 3: match strangles
|
|
47
82
|
strangles: list[tuple[Option, Option]] = []
|
|
48
83
|
naked_calls = deque(leg for leg in naked_shorts if leg.type == OptionType.CALL)
|
|
49
84
|
naked_puts = deque(leg for leg in naked_shorts if leg.type == OptionType.PUT)
|
|
@@ -71,10 +106,12 @@ def calculate_margin(legs: list[Option], underlying: Underlying) -> MarginRequir
|
|
|
71
106
|
leg.model_copy(update={"quantity": q}) for leg, q in longs.items() if q
|
|
72
107
|
)
|
|
73
108
|
|
|
74
|
-
# step
|
|
75
|
-
total = MarginRequirements(
|
|
109
|
+
# step 4: calculate totals
|
|
110
|
+
total = MarginRequirements()
|
|
76
111
|
if covered:
|
|
77
112
|
total += _calculate_margin_spread(covered)
|
|
113
|
+
if stock:
|
|
114
|
+
total += _calculate_margin_shares(stock)
|
|
78
115
|
for call, put in strangles:
|
|
79
116
|
total += _calculate_margin_short_strangle([call, put], underlying)
|
|
80
117
|
for leg in naked:
|
|
@@ -258,3 +295,18 @@ def _calculate_margin_spread(legs: list[Option]) -> MarginRequirements:
|
|
|
258
295
|
# maximum potential loss
|
|
259
296
|
margin_requirement=margin_requirement,
|
|
260
297
|
)
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def _calculate_margin_shares(shares: Shares) -> MarginRequirements:
|
|
301
|
+
"""
|
|
302
|
+
Calculate margin for a stock position.
|
|
303
|
+
Source: CBOE Margin Manual.
|
|
304
|
+
"""
|
|
305
|
+
value = shares.price * abs(shares.quantity)
|
|
306
|
+
half = round(shares.price / 2, 2) * abs(shares.quantity)
|
|
307
|
+
if shares.quantity > 0:
|
|
308
|
+
# long: pay 100% in cash, 50% requirement in margin account
|
|
309
|
+
return MarginRequirements(cash_requirement=value, margin_requirement=half)
|
|
310
|
+
# short: not permitted in cash account.
|
|
311
|
+
# margin: short sale proceeds plus 50% requirement = 150%
|
|
312
|
+
return MarginRequirements(margin_requirement=value + half)
|
|
@@ -5,6 +5,8 @@ from enum import StrEnum
|
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, ConfigDict
|
|
7
7
|
|
|
8
|
+
ZERO = Decimal(0)
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
class ETFType(StrEnum):
|
|
10
12
|
BROAD = "broad-based"
|
|
@@ -65,8 +67,8 @@ class Option(BaseModel):
|
|
|
65
67
|
|
|
66
68
|
|
|
67
69
|
class MarginRequirements(BaseModel):
|
|
68
|
-
cash_requirement: Decimal
|
|
69
|
-
margin_requirement: Decimal
|
|
70
|
+
cash_requirement: Decimal = ZERO
|
|
71
|
+
margin_requirement: Decimal = ZERO
|
|
70
72
|
|
|
71
73
|
def __add__(self, other: "MarginRequirements"):
|
|
72
74
|
return MarginRequirements(
|
|
@@ -85,3 +87,10 @@ class Underlying(BaseModel):
|
|
|
85
87
|
etf_type: ETFType | None = None
|
|
86
88
|
leverage_factor: Decimal = Decimal(1)
|
|
87
89
|
price: Decimal
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class Shares(BaseModel):
|
|
93
|
+
model_config = ConfigDict(frozen=True)
|
|
94
|
+
|
|
95
|
+
price: Decimal
|
|
96
|
+
quantity: int
|
|
@@ -9,6 +9,7 @@ from margin_estimator import (
|
|
|
9
9
|
Underlying,
|
|
10
10
|
calculate_margin,
|
|
11
11
|
)
|
|
12
|
+
from margin_estimator.models import MarginRequirements, Shares
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
def test_long_option():
|
|
@@ -914,3 +915,135 @@ def test_complex_multi_strategy_position():
|
|
|
914
915
|
underlying,
|
|
915
916
|
)
|
|
916
917
|
assert total == vertical + orphan_spread + strangle + mismatched_spread
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
def test_cancel_opposing_positions():
|
|
921
|
+
underlying = Underlying(price=500)
|
|
922
|
+
long = Option(
|
|
923
|
+
expiration=date.today(), price=10, quantity=1, strike=510, type=OptionType.CALL
|
|
924
|
+
)
|
|
925
|
+
short = Option(
|
|
926
|
+
expiration=date.today(), price=10, quantity=-1, strike=510, type=OptionType.CALL
|
|
927
|
+
)
|
|
928
|
+
nothing = MarginRequirements()
|
|
929
|
+
assert calculate_margin([long, short], underlying) == nothing
|
|
930
|
+
assert calculate_margin([long, short, short, long], underlying) == nothing
|
|
931
|
+
assert (
|
|
932
|
+
calculate_margin([short, long, long, short, long, short], underlying) == nothing
|
|
933
|
+
)
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
def test_cancel_some_opposing_positions():
|
|
937
|
+
underlying = Underlying(price=500)
|
|
938
|
+
long = Option(
|
|
939
|
+
expiration=date.today(), price=10, quantity=1, strike=510, type=OptionType.CALL
|
|
940
|
+
)
|
|
941
|
+
short = Option(
|
|
942
|
+
expiration=date.today(), price=10, quantity=-2, strike=510, type=OptionType.CALL
|
|
943
|
+
)
|
|
944
|
+
assert calculate_margin([long, short], underlying) == calculate_margin(
|
|
945
|
+
[short.model_copy(update={"quantity": -1})], underlying
|
|
946
|
+
)
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
def test_covered_call():
|
|
950
|
+
underlying = Underlying(price=85)
|
|
951
|
+
short = Option(
|
|
952
|
+
expiration=date.today(),
|
|
953
|
+
price=7,
|
|
954
|
+
quantity=-1,
|
|
955
|
+
strike=90,
|
|
956
|
+
type=OptionType.CALL,
|
|
957
|
+
)
|
|
958
|
+
shares = Shares(price=Decimal("92.38"), quantity=100)
|
|
959
|
+
margin = calculate_margin([short, shares], underlying)
|
|
960
|
+
assert margin.cash_requirement == 9238 and margin.margin_requirement == 4619
|
|
961
|
+
assert margin == calculate_margin([shares], underlying)
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
def test_covered_call_itm():
|
|
965
|
+
underlying = Underlying(price=95)
|
|
966
|
+
short = Option(
|
|
967
|
+
expiration=date.today(),
|
|
968
|
+
price=7,
|
|
969
|
+
quantity=-1,
|
|
970
|
+
strike=90,
|
|
971
|
+
type=OptionType.CALL,
|
|
972
|
+
)
|
|
973
|
+
shares = Shares(price=Decimal("92.38"), quantity=100)
|
|
974
|
+
margin = calculate_margin([short, shares], underlying)
|
|
975
|
+
assert margin.cash_requirement == 9238 and margin.margin_requirement == 4619
|
|
976
|
+
|
|
977
|
+
|
|
978
|
+
def test_shares():
|
|
979
|
+
underlying = Underlying(price=50)
|
|
980
|
+
shares = Shares(price=Decimal("47.38"), quantity=100)
|
|
981
|
+
margin = calculate_margin([shares], underlying)
|
|
982
|
+
assert margin.cash_requirement == 4738 and margin.margin_requirement == 4738 / 2
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
def test_covered_put():
|
|
986
|
+
underlying = Underlying(price=253)
|
|
987
|
+
short = Option(
|
|
988
|
+
expiration=date.today(),
|
|
989
|
+
price=3,
|
|
990
|
+
quantity=-1,
|
|
991
|
+
strike=250,
|
|
992
|
+
type=OptionType.PUT,
|
|
993
|
+
)
|
|
994
|
+
shares = Shares(price=255, quantity=-100)
|
|
995
|
+
margin = calculate_margin([short, shares], underlying)
|
|
996
|
+
assert not margin.cash_requirement and margin.margin_requirement == 38250
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
def test_covered_put_itm():
|
|
1000
|
+
underlying = Underlying(price=247)
|
|
1001
|
+
short = Option(
|
|
1002
|
+
expiration=date.today(),
|
|
1003
|
+
price=3,
|
|
1004
|
+
quantity=-1,
|
|
1005
|
+
strike=250,
|
|
1006
|
+
type=OptionType.PUT,
|
|
1007
|
+
)
|
|
1008
|
+
shares = Shares(price=255, quantity=-100)
|
|
1009
|
+
margin = calculate_margin([short, shares], underlying)
|
|
1010
|
+
assert not margin.cash_requirement and margin.margin_requirement == 38250
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
def test_covered_call_extra_shares():
|
|
1014
|
+
underlying = Underlying(price=85)
|
|
1015
|
+
short = Option(
|
|
1016
|
+
expiration=date.today(), price=7, quantity=-1, strike=90, type=OptionType.CALL
|
|
1017
|
+
)
|
|
1018
|
+
full = calculate_margin(
|
|
1019
|
+
[short, Shares(price=Decimal("92.38"), quantity=200)], underlying
|
|
1020
|
+
)
|
|
1021
|
+
covered = calculate_margin(
|
|
1022
|
+
[short, Shares(price=Decimal("92.38"), quantity=100)], underlying
|
|
1023
|
+
)
|
|
1024
|
+
extra = calculate_margin([Shares(price=Decimal("92.38"), quantity=100)], underlying)
|
|
1025
|
+
assert full == covered + extra
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
def test_uncovered_call():
|
|
1029
|
+
underlying = Underlying(price=85)
|
|
1030
|
+
short = Option(
|
|
1031
|
+
expiration=date.today(), price=7, quantity=-1, strike=90, type=OptionType.CALL
|
|
1032
|
+
)
|
|
1033
|
+
shares = Shares(price=Decimal("92.38"), quantity=95)
|
|
1034
|
+
margin = calculate_margin([short, shares], underlying)
|
|
1035
|
+
assert margin == calculate_margin([short], underlying) + calculate_margin(
|
|
1036
|
+
[shares], underlying
|
|
1037
|
+
)
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
def test_long_shares_dont_cover_short_put():
|
|
1041
|
+
underlying = Underlying(price=85)
|
|
1042
|
+
put = Option(
|
|
1043
|
+
expiration=date.today(), price=2, quantity=-1, strike=80, type=OptionType.PUT
|
|
1044
|
+
)
|
|
1045
|
+
shares = Shares(price=80, quantity=100)
|
|
1046
|
+
margin = calculate_margin([put, shares], underlying)
|
|
1047
|
+
assert margin == calculate_margin([put], underlying) + calculate_margin(
|
|
1048
|
+
[shares], underlying
|
|
1049
|
+
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
version = 1
|
|
2
|
+
revision = 3
|
|
2
3
|
requires-python = ">=3.11"
|
|
3
4
|
resolution-markers = [
|
|
4
5
|
"python_full_version < '3.13'",
|
|
@@ -9,32 +10,32 @@ resolution-markers = [
|
|
|
9
10
|
name = "annotated-types"
|
|
10
11
|
version = "0.7.0"
|
|
11
12
|
source = { registry = "https://pypi.org/simple" }
|
|
12
|
-
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
|
|
13
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" }
|
|
13
14
|
wheels = [
|
|
14
|
-
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
|
15
|
+
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" },
|
|
15
16
|
]
|
|
16
17
|
|
|
17
18
|
[[package]]
|
|
18
19
|
name = "colorama"
|
|
19
20
|
version = "0.4.6"
|
|
20
21
|
source = { registry = "https://pypi.org/simple" }
|
|
21
|
-
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
|
22
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
|
|
22
23
|
wheels = [
|
|
23
|
-
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
|
24
|
+
{ 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" },
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
[[package]]
|
|
27
28
|
name = "iniconfig"
|
|
28
29
|
version = "2.0.0"
|
|
29
30
|
source = { registry = "https://pypi.org/simple" }
|
|
30
|
-
sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
|
|
31
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646, upload-time = "2023-01-07T11:08:11.254Z" }
|
|
31
32
|
wheels = [
|
|
32
|
-
{ url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
|
|
33
|
+
{ url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892, upload-time = "2023-01-07T11:08:09.864Z" },
|
|
33
34
|
]
|
|
34
35
|
|
|
35
36
|
[[package]]
|
|
36
37
|
name = "margin-estimator"
|
|
37
|
-
version = "0.
|
|
38
|
+
version = "0.4"
|
|
38
39
|
source = { editable = "." }
|
|
39
40
|
dependencies = [
|
|
40
41
|
{ name = "pydantic" },
|
|
@@ -55,18 +56,18 @@ dev = [{ name = "pytest", specifier = ">=8.3.3" }]
|
|
|
55
56
|
name = "packaging"
|
|
56
57
|
version = "24.1"
|
|
57
58
|
source = { registry = "https://pypi.org/simple" }
|
|
58
|
-
sdist = { url = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", size = 148788 }
|
|
59
|
+
sdist = { url = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", size = 148788, upload-time = "2024-06-09T23:19:24.956Z" }
|
|
59
60
|
wheels = [
|
|
60
|
-
{ url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985, upload-time = "2024-06-09T23:19:21.909Z" },
|
|
61
62
|
]
|
|
62
63
|
|
|
63
64
|
[[package]]
|
|
64
65
|
name = "pluggy"
|
|
65
66
|
version = "1.5.0"
|
|
66
67
|
source = { registry = "https://pypi.org/simple" }
|
|
67
|
-
sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
|
|
68
|
+
sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" }
|
|
68
69
|
wheels = [
|
|
69
|
-
{ url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
|
|
70
|
+
{ url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" },
|
|
70
71
|
]
|
|
71
72
|
|
|
72
73
|
[[package]]
|
|
@@ -78,9 +79,9 @@ dependencies = [
|
|
|
78
79
|
{ name = "pydantic-core" },
|
|
79
80
|
{ name = "typing-extensions" },
|
|
80
81
|
]
|
|
81
|
-
sdist = { url = "https://files.pythonhosted.org/packages/a9/b7/d9e3f12af310e1120c21603644a1cd86f59060e040ec5c3a80b8f05fae30/pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", size = 769917 }
|
|
82
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a9/b7/d9e3f12af310e1120c21603644a1cd86f59060e040ec5c3a80b8f05fae30/pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", size = 769917, upload-time = "2024-09-17T15:59:54.273Z" }
|
|
82
83
|
wheels = [
|
|
83
|
-
{ url = "https://files.pythonhosted.org/packages/df/e4/ba44652d562cbf0bf320e0f3810206149c8a4e99cdbf66da82e97ab53a15/pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12", size = 434928 },
|
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/df/e4/ba44652d562cbf0bf320e0f3810206149c8a4e99cdbf66da82e97ab53a15/pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12", size = 434928, upload-time = "2024-09-17T15:59:51.827Z" },
|
|
84
85
|
]
|
|
85
86
|
|
|
86
87
|
[[package]]
|
|
@@ -90,44 +91,44 @@ source = { registry = "https://pypi.org/simple" }
|
|
|
90
91
|
dependencies = [
|
|
91
92
|
{ name = "typing-extensions" },
|
|
92
93
|
]
|
|
93
|
-
sdist = { url = "https://files.pythonhosted.org/packages/e2/aa/6b6a9b9f8537b872f552ddd46dd3da230367754b6f707b8e1e963f515ea3/pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", size = 402156 }
|
|
94
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e2/aa/6b6a9b9f8537b872f552ddd46dd3da230367754b6f707b8e1e963f515ea3/pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", size = 402156, upload-time = "2024-09-16T16:06:44.786Z" }
|
|
94
95
|
wheels = [
|
|
95
|
-
{ url = "https://files.pythonhosted.org/packages/5d/30/890a583cd3f2be27ecf32b479d5d615710bb926d92da03e3f7838ff3e58b/pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", size = 1865160 },
|
|
96
|
-
{ url = "https://files.pythonhosted.org/packages/1d/9a/b634442e1253bc6889c87afe8bb59447f106ee042140bd57680b3b113ec7/pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", size = 1776777 },
|
|
97
|
-
{ url = "https://files.pythonhosted.org/packages/75/9a/7816295124a6b08c24c96f9ce73085032d8bcbaf7e5a781cd41aa910c891/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", size = 1799244 },
|
|
98
|
-
{ url = "https://files.pythonhosted.org/packages/a9/8f/89c1405176903e567c5f99ec53387449e62f1121894aa9fc2c4fdc51a59b/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607", size = 1805307 },
|
|
99
|
-
{ url = "https://files.pythonhosted.org/packages/d5/a5/1a194447d0da1ef492e3470680c66048fef56fc1f1a25cafbea4bc1d1c48/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", size = 2000663 },
|
|
100
|
-
{ url = "https://files.pythonhosted.org/packages/13/a5/1df8541651de4455e7d587cf556201b4f7997191e110bca3b589218745a5/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", size = 2655941 },
|
|
101
|
-
{ url = "https://files.pythonhosted.org/packages/44/31/a3899b5ce02c4316865e390107f145089876dff7e1dfc770a231d836aed8/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", size = 2052105 },
|
|
102
|
-
{ url = "https://files.pythonhosted.org/packages/1b/aa/98e190f8745d5ec831f6d5449344c48c0627ac5fed4e5340a44b74878f8e/pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", size = 1919967 },
|
|
103
|
-
{ url = "https://files.pythonhosted.org/packages/ae/35/b6e00b6abb2acfee3e8f85558c02a0822e9a8b2f2d812ea8b9079b118ba0/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", size = 1964291 },
|
|
104
|
-
{ url = "https://files.pythonhosted.org/packages/13/46/7bee6d32b69191cd649bbbd2361af79c472d72cb29bb2024f0b6e350ba06/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", size = 2109666 },
|
|
105
|
-
{ url = "https://files.pythonhosted.org/packages/39/ef/7b34f1b122a81b68ed0a7d0e564da9ccdc9a2924c8d6c6b5b11fa3a56970/pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", size = 1732940 },
|
|
106
|
-
{ url = "https://files.pythonhosted.org/packages/2f/76/37b7e76c645843ff46c1d73e046207311ef298d3f7b2f7d8f6ac60113071/pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", size = 1916804 },
|
|
107
|
-
{ url = "https://files.pythonhosted.org/packages/74/7b/8e315f80666194b354966ec84b7d567da77ad927ed6323db4006cf915f3f/pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", size = 1856459 },
|
|
108
|
-
{ url = "https://files.pythonhosted.org/packages/14/de/866bdce10ed808323d437612aca1ec9971b981e1c52e5e42ad9b8e17a6f6/pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", size = 1770007 },
|
|
109
|
-
{ url = "https://files.pythonhosted.org/packages/dc/69/8edd5c3cd48bb833a3f7ef9b81d7666ccddd3c9a635225214e044b6e8281/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", size = 1790245 },
|
|
110
|
-
{ url = "https://files.pythonhosted.org/packages/80/33/9c24334e3af796ce80d2274940aae38dd4e5676298b4398eff103a79e02d/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", size = 1801260 },
|
|
111
|
-
{ url = "https://files.pythonhosted.org/packages/a5/6f/e9567fd90104b79b101ca9d120219644d3314962caa7948dd8b965e9f83e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", size = 1996872 },
|
|
112
|
-
{ url = "https://files.pythonhosted.org/packages/2d/ad/b5f0fe9e6cfee915dd144edbd10b6e9c9c9c9d7a56b69256d124b8ac682e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", size = 2661617 },
|
|
113
|
-
{ url = "https://files.pythonhosted.org/packages/06/c8/7d4b708f8d05a5cbfda3243aad468052c6e99de7d0937c9146c24d9f12e9/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", size = 2071831 },
|
|
114
|
-
{ url = "https://files.pythonhosted.org/packages/89/4d/3079d00c47f22c9a9a8220db088b309ad6e600a73d7a69473e3a8e5e3ea3/pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", size = 1917453 },
|
|
115
|
-
{ url = "https://files.pythonhosted.org/packages/e9/88/9df5b7ce880a4703fcc2d76c8c2d8eb9f861f79d0c56f4b8f5f2607ccec8/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", size = 1968793 },
|
|
116
|
-
{ url = "https://files.pythonhosted.org/packages/e3/b9/41f7efe80f6ce2ed3ee3c2dcfe10ab7adc1172f778cc9659509a79518c43/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", size = 2116872 },
|
|
117
|
-
{ url = "https://files.pythonhosted.org/packages/63/08/b59b7a92e03dd25554b0436554bf23e7c29abae7cce4b1c459cd92746811/pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", size = 1738535 },
|
|
118
|
-
{ url = "https://files.pythonhosted.org/packages/88/8d/479293e4d39ab409747926eec4329de5b7129beaedc3786eca070605d07f/pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", size = 1917992 },
|
|
119
|
-
{ url = "https://files.pythonhosted.org/packages/ad/ef/16ee2df472bf0e419b6bc68c05bf0145c49247a1095e85cee1463c6a44a1/pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", size = 1856143 },
|
|
120
|
-
{ url = "https://files.pythonhosted.org/packages/da/fa/bc3dbb83605669a34a93308e297ab22be82dfb9dcf88c6cf4b4f264e0a42/pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", size = 1770063 },
|
|
121
|
-
{ url = "https://files.pythonhosted.org/packages/4e/48/e813f3bbd257a712303ebdf55c8dc46f9589ec74b384c9f652597df3288d/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", size = 1790013 },
|
|
122
|
-
{ url = "https://files.pythonhosted.org/packages/b4/e0/56eda3a37929a1d297fcab1966db8c339023bcca0b64c5a84896db3fcc5c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", size = 1801077 },
|
|
123
|
-
{ url = "https://files.pythonhosted.org/packages/04/be/5e49376769bfbf82486da6c5c1683b891809365c20d7c7e52792ce4c71f3/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", size = 1996782 },
|
|
124
|
-
{ url = "https://files.pythonhosted.org/packages/bc/24/e3ee6c04f1d58cc15f37bcc62f32c7478ff55142b7b3e6d42ea374ea427c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", size = 2661375 },
|
|
125
|
-
{ url = "https://files.pythonhosted.org/packages/c1/f8/11a9006de4e89d016b8de74ebb1db727dc100608bb1e6bbe9d56a3cbbcce/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", size = 2071635 },
|
|
126
|
-
{ url = "https://files.pythonhosted.org/packages/7c/45/bdce5779b59f468bdf262a5bc9eecbae87f271c51aef628d8c073b4b4b4c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", size = 1916994 },
|
|
127
|
-
{ url = "https://files.pythonhosted.org/packages/d8/fa/c648308fe711ee1f88192cad6026ab4f925396d1293e8356de7e55be89b5/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", size = 1968877 },
|
|
128
|
-
{ url = "https://files.pythonhosted.org/packages/16/16/b805c74b35607d24d37103007f899abc4880923b04929547ae68d478b7f4/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", size = 2116814 },
|
|
129
|
-
{ url = "https://files.pythonhosted.org/packages/d1/58/5305e723d9fcdf1c5a655e6a4cc2a07128bf644ff4b1d98daf7a9dbf57da/pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", size = 1738360 },
|
|
130
|
-
{ url = "https://files.pythonhosted.org/packages/a5/ae/e14b0ff8b3f48e02394d8acd911376b7b66e164535687ef7dc24ea03072f/pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", size = 1919411 },
|
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/5d/30/890a583cd3f2be27ecf32b479d5d615710bb926d92da03e3f7838ff3e58b/pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", size = 1865160, upload-time = "2024-09-16T16:04:18.628Z" },
|
|
97
|
+
{ url = "https://files.pythonhosted.org/packages/1d/9a/b634442e1253bc6889c87afe8bb59447f106ee042140bd57680b3b113ec7/pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", size = 1776777, upload-time = "2024-09-16T16:04:20.038Z" },
|
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/75/9a/7816295124a6b08c24c96f9ce73085032d8bcbaf7e5a781cd41aa910c891/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", size = 1799244, upload-time = "2024-09-16T16:04:21.799Z" },
|
|
99
|
+
{ url = "https://files.pythonhosted.org/packages/a9/8f/89c1405176903e567c5f99ec53387449e62f1121894aa9fc2c4fdc51a59b/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607", size = 1805307, upload-time = "2024-09-16T16:04:23.324Z" },
|
|
100
|
+
{ url = "https://files.pythonhosted.org/packages/d5/a5/1a194447d0da1ef492e3470680c66048fef56fc1f1a25cafbea4bc1d1c48/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", size = 2000663, upload-time = "2024-09-16T16:04:25.203Z" },
|
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/13/a5/1df8541651de4455e7d587cf556201b4f7997191e110bca3b589218745a5/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", size = 2655941, upload-time = "2024-09-16T16:04:27.211Z" },
|
|
102
|
+
{ url = "https://files.pythonhosted.org/packages/44/31/a3899b5ce02c4316865e390107f145089876dff7e1dfc770a231d836aed8/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", size = 2052105, upload-time = "2024-09-16T16:04:28.611Z" },
|
|
103
|
+
{ url = "https://files.pythonhosted.org/packages/1b/aa/98e190f8745d5ec831f6d5449344c48c0627ac5fed4e5340a44b74878f8e/pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", size = 1919967, upload-time = "2024-09-16T16:04:30.045Z" },
|
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/ae/35/b6e00b6abb2acfee3e8f85558c02a0822e9a8b2f2d812ea8b9079b118ba0/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", size = 1964291, upload-time = "2024-09-16T16:04:32.376Z" },
|
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/13/46/7bee6d32b69191cd649bbbd2361af79c472d72cb29bb2024f0b6e350ba06/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", size = 2109666, upload-time = "2024-09-16T16:04:33.923Z" },
|
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/39/ef/7b34f1b122a81b68ed0a7d0e564da9ccdc9a2924c8d6c6b5b11fa3a56970/pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", size = 1732940, upload-time = "2024-09-16T16:04:35.467Z" },
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/2f/76/37b7e76c645843ff46c1d73e046207311ef298d3f7b2f7d8f6ac60113071/pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", size = 1916804, upload-time = "2024-09-16T16:04:37.06Z" },
|
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/74/7b/8e315f80666194b354966ec84b7d567da77ad927ed6323db4006cf915f3f/pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", size = 1856459, upload-time = "2024-09-16T16:04:38.438Z" },
|
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/14/de/866bdce10ed808323d437612aca1ec9971b981e1c52e5e42ad9b8e17a6f6/pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", size = 1770007, upload-time = "2024-09-16T16:04:40.229Z" },
|
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/dc/69/8edd5c3cd48bb833a3f7ef9b81d7666ccddd3c9a635225214e044b6e8281/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", size = 1790245, upload-time = "2024-09-16T16:04:41.794Z" },
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/80/33/9c24334e3af796ce80d2274940aae38dd4e5676298b4398eff103a79e02d/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", size = 1801260, upload-time = "2024-09-16T16:04:43.991Z" },
|
|
112
|
+
{ url = "https://files.pythonhosted.org/packages/a5/6f/e9567fd90104b79b101ca9d120219644d3314962caa7948dd8b965e9f83e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", size = 1996872, upload-time = "2024-09-16T16:04:45.593Z" },
|
|
113
|
+
{ url = "https://files.pythonhosted.org/packages/2d/ad/b5f0fe9e6cfee915dd144edbd10b6e9c9c9c9d7a56b69256d124b8ac682e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", size = 2661617, upload-time = "2024-09-16T16:04:47.3Z" },
|
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/06/c8/7d4b708f8d05a5cbfda3243aad468052c6e99de7d0937c9146c24d9f12e9/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", size = 2071831, upload-time = "2024-09-16T16:04:48.893Z" },
|
|
115
|
+
{ url = "https://files.pythonhosted.org/packages/89/4d/3079d00c47f22c9a9a8220db088b309ad6e600a73d7a69473e3a8e5e3ea3/pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", size = 1917453, upload-time = "2024-09-16T16:04:51.099Z" },
|
|
116
|
+
{ url = "https://files.pythonhosted.org/packages/e9/88/9df5b7ce880a4703fcc2d76c8c2d8eb9f861f79d0c56f4b8f5f2607ccec8/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", size = 1968793, upload-time = "2024-09-16T16:04:52.604Z" },
|
|
117
|
+
{ url = "https://files.pythonhosted.org/packages/e3/b9/41f7efe80f6ce2ed3ee3c2dcfe10ab7adc1172f778cc9659509a79518c43/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", size = 2116872, upload-time = "2024-09-16T16:04:54.41Z" },
|
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/63/08/b59b7a92e03dd25554b0436554bf23e7c29abae7cce4b1c459cd92746811/pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", size = 1738535, upload-time = "2024-09-16T16:04:55.828Z" },
|
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/88/8d/479293e4d39ab409747926eec4329de5b7129beaedc3786eca070605d07f/pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", size = 1917992, upload-time = "2024-09-16T16:04:57.395Z" },
|
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/ad/ef/16ee2df472bf0e419b6bc68c05bf0145c49247a1095e85cee1463c6a44a1/pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", size = 1856143, upload-time = "2024-09-16T16:04:59.062Z" },
|
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/da/fa/bc3dbb83605669a34a93308e297ab22be82dfb9dcf88c6cf4b4f264e0a42/pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", size = 1770063, upload-time = "2024-09-16T16:05:00.522Z" },
|
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/4e/48/e813f3bbd257a712303ebdf55c8dc46f9589ec74b384c9f652597df3288d/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", size = 1790013, upload-time = "2024-09-16T16:05:02.619Z" },
|
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/b4/e0/56eda3a37929a1d297fcab1966db8c339023bcca0b64c5a84896db3fcc5c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", size = 1801077, upload-time = "2024-09-16T16:05:04.154Z" },
|
|
124
|
+
{ url = "https://files.pythonhosted.org/packages/04/be/5e49376769bfbf82486da6c5c1683b891809365c20d7c7e52792ce4c71f3/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", size = 1996782, upload-time = "2024-09-16T16:05:06.931Z" },
|
|
125
|
+
{ url = "https://files.pythonhosted.org/packages/bc/24/e3ee6c04f1d58cc15f37bcc62f32c7478ff55142b7b3e6d42ea374ea427c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", size = 2661375, upload-time = "2024-09-16T16:05:08.773Z" },
|
|
126
|
+
{ url = "https://files.pythonhosted.org/packages/c1/f8/11a9006de4e89d016b8de74ebb1db727dc100608bb1e6bbe9d56a3cbbcce/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", size = 2071635, upload-time = "2024-09-16T16:05:10.456Z" },
|
|
127
|
+
{ url = "https://files.pythonhosted.org/packages/7c/45/bdce5779b59f468bdf262a5bc9eecbae87f271c51aef628d8c073b4b4b4c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", size = 1916994, upload-time = "2024-09-16T16:05:12.051Z" },
|
|
128
|
+
{ url = "https://files.pythonhosted.org/packages/d8/fa/c648308fe711ee1f88192cad6026ab4f925396d1293e8356de7e55be89b5/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", size = 1968877, upload-time = "2024-09-16T16:05:14.021Z" },
|
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/16/16/b805c74b35607d24d37103007f899abc4880923b04929547ae68d478b7f4/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", size = 2116814, upload-time = "2024-09-16T16:05:15.684Z" },
|
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/d1/58/5305e723d9fcdf1c5a655e6a4cc2a07128bf644ff4b1d98daf7a9dbf57da/pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", size = 1738360, upload-time = "2024-09-16T16:05:17.258Z" },
|
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/a5/ae/e14b0ff8b3f48e02394d8acd911376b7b66e164535687ef7dc24ea03072f/pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", size = 1919411, upload-time = "2024-09-16T16:05:18.934Z" },
|
|
131
132
|
]
|
|
132
133
|
|
|
133
134
|
[[package]]
|
|
@@ -140,16 +141,16 @@ dependencies = [
|
|
|
140
141
|
{ name = "packaging" },
|
|
141
142
|
{ name = "pluggy" },
|
|
142
143
|
]
|
|
143
|
-
sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 }
|
|
144
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487, upload-time = "2024-09-10T10:52:15.003Z" }
|
|
144
145
|
wheels = [
|
|
145
|
-
{ url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 },
|
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341, upload-time = "2024-09-10T10:52:12.54Z" },
|
|
146
147
|
]
|
|
147
148
|
|
|
148
149
|
[[package]]
|
|
149
150
|
name = "typing-extensions"
|
|
150
151
|
version = "4.12.2"
|
|
151
152
|
source = { registry = "https://pypi.org/simple" }
|
|
152
|
-
sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 }
|
|
153
|
+
sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" }
|
|
153
154
|
wheels = [
|
|
154
|
-
{ url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 },
|
|
155
|
+
{ url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" },
|
|
155
156
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|