econgrapher 0.1.0__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.
- econgrapher-0.1.0/.gitignore +10 -0
- econgrapher-0.1.0/.python-version +1 -0
- econgrapher-0.1.0/.vscode/settings.json +11 -0
- econgrapher-0.1.0/Makefile +1 -0
- econgrapher-0.1.0/PKG-INFO +6 -0
- econgrapher-0.1.0/README.md +0 -0
- econgrapher-0.1.0/SKILL.md +50 -0
- econgrapher-0.1.0/main.py +19 -0
- econgrapher-0.1.0/pyproject.toml +16 -0
- econgrapher-0.1.0/src/econgrapher/__init__.py +6 -0
- econgrapher-0.1.0/src/econgrapher/axes.py +27 -0
- econgrapher-0.1.0/src/econgrapher/element.py +11 -0
- econgrapher-0.1.0/src/econgrapher/label.py +25 -0
- econgrapher-0.1.0/src/econgrapher/line.py +54 -0
- econgrapher-0.1.0/src/econgrapher/tags.py +32 -0
- econgrapher-0.1.0/tax_effect.py +45 -0
- econgrapher-0.1.0/uv.lock +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.Phony
|
|
File without changes
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# econgrapher
|
|
2
|
+
|
|
3
|
+
A Python package for drawing economic graphs using the `turtle` library.
|
|
4
|
+
|
|
5
|
+
## Elements
|
|
6
|
+
|
|
7
|
+
### `Element` (base class)
|
|
8
|
+
Abstract base class. All elements inherit from this and implement `render(turtle: Turtle)`.
|
|
9
|
+
|
|
10
|
+
### `Label(text, pos, font)`
|
|
11
|
+
Draws text at a position.
|
|
12
|
+
- `text`: string to display
|
|
13
|
+
- `pos`: `(x, y)` tuple
|
|
14
|
+
- `font`: `("FontName", size, "style")` — default `("Helvetica", 24, "bold")`
|
|
15
|
+
|
|
16
|
+
### `Line(start, end, style)`
|
|
17
|
+
Draws a line between two points.
|
|
18
|
+
- `start`, `end`: `(x, y)` tuples
|
|
19
|
+
- `style`: `"solid"` or `"dashed"` (default `"solid"`)
|
|
20
|
+
|
|
21
|
+
### `Axes(x_label, y_label, font)`
|
|
22
|
+
Creates a coordinate system with perpendicular axes.
|
|
23
|
+
- `x_label`: default `"Q"`
|
|
24
|
+
- `y_label`: default `"P"`
|
|
25
|
+
|
|
26
|
+
### `Tags(axes, sub, inter, font)`
|
|
27
|
+
Marks an intersection point with dashed lines to axes and labels.
|
|
28
|
+
- `axes`: an `Axes` instance
|
|
29
|
+
- `sub`: subscript string (e.g., `"1"`, `"e"`)
|
|
30
|
+
- `inter`: `(x, y)` intersection point
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from turtle import Turtle
|
|
36
|
+
from econgrapher import Axes, Line, Label, Tags
|
|
37
|
+
|
|
38
|
+
t = Turtle()
|
|
39
|
+
|
|
40
|
+
# Draw axes
|
|
41
|
+
axes = Axes("Q", "P")
|
|
42
|
+
axes.render(t)
|
|
43
|
+
|
|
44
|
+
# Draw a demand curve
|
|
45
|
+
demand = Line((-100, 100), (100, -100))
|
|
46
|
+
demand.render(t)
|
|
47
|
+
|
|
48
|
+
# Mark equilibrium point
|
|
49
|
+
tags = Tags(axes, "e", (0, 0))
|
|
50
|
+
tags.render(t)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import turtle
|
|
2
|
+
from econgrapher import Axes, Line, Tags
|
|
3
|
+
|
|
4
|
+
# Initialize the screen and turtle
|
|
5
|
+
screen = turtle.Screen()
|
|
6
|
+
t = turtle.Turtle()
|
|
7
|
+
|
|
8
|
+
axes = Axes()
|
|
9
|
+
demand = Line((-160, 160), (140, -160))
|
|
10
|
+
demand1 = Line((-140, 160), (160, -160))
|
|
11
|
+
supply = Line((-160, -160), (160, 160))
|
|
12
|
+
tag = Tags(axes, "0", (0, 0))
|
|
13
|
+
|
|
14
|
+
elements = [axes, demand, demand1, supply, tag]
|
|
15
|
+
for e in elements:
|
|
16
|
+
e.render(t)
|
|
17
|
+
|
|
18
|
+
# Keep the window open until clicked
|
|
19
|
+
screen.exitonclick()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "econgrapher"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Add your description here"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.12"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"numpy>=2.4.2",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
[build-system]
|
|
12
|
+
requires = ["hatchling"]
|
|
13
|
+
build-backend = "hatchling.build"
|
|
14
|
+
|
|
15
|
+
[tool.hatch.build.targets.wheel]
|
|
16
|
+
packages = ["src/econgrapher"]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from turtle import Turtle
|
|
2
|
+
|
|
3
|
+
from .element import Element
|
|
4
|
+
from .line import Line
|
|
5
|
+
from .label import Label
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Axes(Element):
|
|
9
|
+
x_label: Label
|
|
10
|
+
y_label: Label
|
|
11
|
+
x_axis: Line
|
|
12
|
+
y_axis: Line
|
|
13
|
+
|
|
14
|
+
def __init__(
|
|
15
|
+
self, x_label: str = "Q", y_label: str = "P", font=("Helvetica", 24, "bold")
|
|
16
|
+
) -> None:
|
|
17
|
+
super().__init__()
|
|
18
|
+
self.x_label = Label(x_label, (200, -240), font)
|
|
19
|
+
self.y_label = Label(y_label, (-225, 190), font)
|
|
20
|
+
self.x_axis = Line((-220, -200), (200, -200))
|
|
21
|
+
self.y_axis = Line((-200, -220), (-200, 200))
|
|
22
|
+
|
|
23
|
+
def render(self, turtle: Turtle) -> None:
|
|
24
|
+
self.x_axis.render(turtle)
|
|
25
|
+
self.y_axis.render(turtle)
|
|
26
|
+
self.x_label.render(turtle)
|
|
27
|
+
self.y_label.render(turtle)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from turtle import Turtle
|
|
2
|
+
|
|
3
|
+
from .element import Element
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Label(Element):
|
|
7
|
+
text: str
|
|
8
|
+
x: int
|
|
9
|
+
y: int
|
|
10
|
+
font: tuple[str, int, str]
|
|
11
|
+
|
|
12
|
+
def __init__(
|
|
13
|
+
self, text: str, pos: tuple[int, int], font=("Helvetica", 24, "bold")
|
|
14
|
+
) -> None:
|
|
15
|
+
super().__init__()
|
|
16
|
+
self.text = text
|
|
17
|
+
self.x, self.y = pos
|
|
18
|
+
self.font = font
|
|
19
|
+
|
|
20
|
+
def render(self, turtle: Turtle) -> None:
|
|
21
|
+
turtle.penup()
|
|
22
|
+
turtle.goto(self.x, self.y)
|
|
23
|
+
turtle.pendown()
|
|
24
|
+
turtle.write(self.text, align="center", font=self.font)
|
|
25
|
+
turtle.penup()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from turtle import Turtle
|
|
2
|
+
from typing import Literal
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
from .element import Element
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Line(Element):
|
|
9
|
+
sx: int
|
|
10
|
+
sy: int
|
|
11
|
+
ex: int
|
|
12
|
+
ey: int
|
|
13
|
+
style: Literal["solid"] | Literal["dashed"]
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
start: tuple[int, int],
|
|
18
|
+
end: tuple[int, int],
|
|
19
|
+
style: Literal["solid"] | Literal["dashed"] = "solid",
|
|
20
|
+
) -> None:
|
|
21
|
+
super().__init__()
|
|
22
|
+
self.sx, self.sy = start
|
|
23
|
+
self.ex, self.ey = end
|
|
24
|
+
self.style = style
|
|
25
|
+
|
|
26
|
+
def render(self, turtle: Turtle) -> None:
|
|
27
|
+
if self.style == "solid":
|
|
28
|
+
turtle.penup()
|
|
29
|
+
turtle.goto(self.sx, self.sy)
|
|
30
|
+
turtle.pensize(4)
|
|
31
|
+
turtle.pendown()
|
|
32
|
+
turtle.goto(self.ex, self.ey)
|
|
33
|
+
turtle.penup()
|
|
34
|
+
else: # dashed
|
|
35
|
+
dx = self.ex - self.sx
|
|
36
|
+
dy = self.ey - self.sy
|
|
37
|
+
total_length = np.sqrt(dx**2 + dy**2)
|
|
38
|
+
theta = np.arctan2(dy, dx)
|
|
39
|
+
|
|
40
|
+
increments = np.arange(0, total_length + 1, 12)
|
|
41
|
+
|
|
42
|
+
for incr in increments[::2]:
|
|
43
|
+
x1 = self.sx + incr * np.cos(theta)
|
|
44
|
+
y1 = self.sy + incr * np.sin(theta)
|
|
45
|
+
|
|
46
|
+
x2 = self.sx + (incr + 10) * np.cos(theta)
|
|
47
|
+
y2 = self.sy + (incr + 10) * np.sin(theta)
|
|
48
|
+
|
|
49
|
+
turtle.penup()
|
|
50
|
+
turtle.goto(x1, y1)
|
|
51
|
+
turtle.pensize(4)
|
|
52
|
+
turtle.pendown()
|
|
53
|
+
turtle.goto(x2, y2)
|
|
54
|
+
turtle.penup()
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from turtle import Turtle
|
|
2
|
+
|
|
3
|
+
from .element import Element
|
|
4
|
+
from .label import Label
|
|
5
|
+
from .line import Line
|
|
6
|
+
from .axes import Axes
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Tags(Element):
|
|
10
|
+
x_dashed: Line
|
|
11
|
+
y_dashed: Line
|
|
12
|
+
x_label: Label
|
|
13
|
+
y_label: Label
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
axes: Axes,
|
|
18
|
+
sub: str,
|
|
19
|
+
inter: tuple[int, int],
|
|
20
|
+
font=("Helvetica", 24, "bold"),
|
|
21
|
+
) -> None:
|
|
22
|
+
super().__init__()
|
|
23
|
+
self.x_dashed = Line(inter, (inter[0], -200), "dashed")
|
|
24
|
+
self.y_dashed = Line(inter, (-200, inter[1]), "dashed")
|
|
25
|
+
self.x_label = Label(f"{axes.x_label.text}{sub}", (inter[0], -240), font)
|
|
26
|
+
self.y_label = Label(f"{axes.y_label.text}{sub}", (-225, inter[1] - 10), font)
|
|
27
|
+
|
|
28
|
+
def render(self, turtle: Turtle) -> None:
|
|
29
|
+
self.x_dashed.render(turtle)
|
|
30
|
+
self.y_dashed.render(turtle)
|
|
31
|
+
self.x_label.render(turtle)
|
|
32
|
+
self.y_label.render(turtle)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Demonstrates the effect of tax on the consumer side - demand curve shifts inward (left)."""
|
|
2
|
+
|
|
3
|
+
import turtle
|
|
4
|
+
from econgrapher import Axes, Line, Label, Tags
|
|
5
|
+
|
|
6
|
+
screen = turtle.Screen()
|
|
7
|
+
t = turtle.Turtle()
|
|
8
|
+
t.speed(0)
|
|
9
|
+
t.hideturtle()
|
|
10
|
+
|
|
11
|
+
# Draw axes
|
|
12
|
+
axes = Axes("Q", "P", ("Times New Roman", 24, "italic"))
|
|
13
|
+
axes.render(t)
|
|
14
|
+
|
|
15
|
+
# Supply curve (upward sloping)
|
|
16
|
+
supply = Line((-150, -150), (150, 150), "solid")
|
|
17
|
+
supply.render(t)
|
|
18
|
+
Label("S", (160, 150)).render(t)
|
|
19
|
+
|
|
20
|
+
# Original demand curve (downward sloping)
|
|
21
|
+
demand1 = Line((-100, 150), (150, -100), "solid")
|
|
22
|
+
demand1.render(t)
|
|
23
|
+
Label("D₁", (155, -100)).render(t)
|
|
24
|
+
|
|
25
|
+
# New demand curve after tax (shifted left/inward)
|
|
26
|
+
demand2 = Line((-150, 100), (100, -150), "solid")
|
|
27
|
+
demand2.render(t)
|
|
28
|
+
Label("D₂", (105, -150)).render(t)
|
|
29
|
+
|
|
30
|
+
# Mark original equilibrium (intersection of S and D1)
|
|
31
|
+
# S: y = x, D1: y = -x + 50, so x = 25, y = 25
|
|
32
|
+
tags1 = Tags(axes, "1", (25, 25))
|
|
33
|
+
tags1.render(t)
|
|
34
|
+
|
|
35
|
+
# Mark new equilibrium after tax (intersection of S and D2)
|
|
36
|
+
# S: y = x, D2: y = -x - 25, so x = -12.5, y = -12.5
|
|
37
|
+
# But for visual purposes, let's use a reasonable point
|
|
38
|
+
tags2 = Tags(axes, "2", (-20, -20))
|
|
39
|
+
tags2.render(t)
|
|
40
|
+
|
|
41
|
+
# Arrow indicating shift direction
|
|
42
|
+
Label("← Tax shifts demand", (-50, 130)).render(t)
|
|
43
|
+
|
|
44
|
+
# Keep the window open until clicked
|
|
45
|
+
screen.exitonclick()
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 3
|
|
3
|
+
requires-python = ">=3.12"
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "econgrapher"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
source = { editable = "." }
|
|
9
|
+
dependencies = [
|
|
10
|
+
{ name = "numpy" },
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
[package.metadata]
|
|
14
|
+
requires-dist = [{ name = "numpy", specifier = ">=2.4.2" }]
|
|
15
|
+
|
|
16
|
+
[[package]]
|
|
17
|
+
name = "numpy"
|
|
18
|
+
version = "2.4.2"
|
|
19
|
+
source = { registry = "https://pypi.org/simple" }
|
|
20
|
+
sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" }
|
|
21
|
+
wheels = [
|
|
22
|
+
{ url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" },
|
|
23
|
+
{ url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" },
|
|
24
|
+
{ url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" },
|
|
25
|
+
{ url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" },
|
|
26
|
+
{ url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" },
|
|
27
|
+
{ url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" },
|
|
28
|
+
{ url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" },
|
|
29
|
+
{ url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" },
|
|
30
|
+
{ url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" },
|
|
31
|
+
{ url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" },
|
|
32
|
+
{ url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" },
|
|
33
|
+
{ url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" },
|
|
34
|
+
{ url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" },
|
|
35
|
+
{ url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" },
|
|
36
|
+
{ url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" },
|
|
37
|
+
{ url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" },
|
|
38
|
+
{ url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" },
|
|
39
|
+
{ url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" },
|
|
40
|
+
{ url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" },
|
|
41
|
+
{ url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" },
|
|
42
|
+
{ url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" },
|
|
43
|
+
{ url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" },
|
|
44
|
+
{ url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" },
|
|
45
|
+
{ url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" },
|
|
46
|
+
{ url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" },
|
|
47
|
+
{ url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" },
|
|
48
|
+
{ url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" },
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" },
|
|
50
|
+
{ url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" },
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" },
|
|
52
|
+
{ url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" },
|
|
53
|
+
{ url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" },
|
|
54
|
+
{ url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" },
|
|
55
|
+
{ url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" },
|
|
56
|
+
{ url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" },
|
|
57
|
+
{ url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" },
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" },
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" },
|
|
60
|
+
{ url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" },
|
|
62
|
+
{ url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" },
|
|
63
|
+
{ url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" },
|
|
64
|
+
{ url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" },
|
|
65
|
+
{ url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" },
|
|
66
|
+
{ url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" },
|
|
67
|
+
{ url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" },
|
|
68
|
+
{ url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" },
|
|
69
|
+
{ url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" },
|
|
70
|
+
{ url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" },
|
|
71
|
+
{ url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" },
|
|
72
|
+
{ url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" },
|
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" },
|
|
74
|
+
{ url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" },
|
|
75
|
+
]
|