Spaces:
Running
Running
Plugin loading.
Browse files- README.md +24 -0
- lynxkite-app/src/lynxkite/app/main.py +21 -8
- lynxkite-graph-analytics/pyproject.toml +1 -0
- lynxkite-graph-analytics/src/lynxkite/graph_analytics/networkx_ops.py +0 -53
- lynxkite-graph-analytics/src/lynxkite/graph_analytics/pytorch_model_ops.py +0 -35
- lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/__init__.py +3 -0
- lynxkite-graph-analytics/src/{lynxkite β lynxkite_plugins}/graph_analytics/lynxkite_ops.py +1 -1
- lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/networkx_ops.py +60 -0
- lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/pytorch_model_ops.py +69 -0
- lynxkite-graph-analytics/uv.lock +265 -3
- lynxkite-lynxscribe/src/lynxkite_plugins/lynxscribe/__init__.py +2 -0
- lynxkite-lynxscribe/src/{lynxscribe/lynxkite β lynxkite_plugins/lynxscribe}/llm_ops.py +0 -0
- lynxkite-lynxscribe/src/{lynxscribe/lynxkite β lynxkite_plugins/lynxscribe}/lynxscribe_ops.py +2 -2
- lynxkite-lynxscribe/tests/test_llm_ops.py +108 -0
- lynxkite-lynxscribe/uv.lock +77 -0
- {lynxkite-pillow β lynxkite-pillow-example}/pyproject.toml +1 -1
- lynxkite-pillow/src/lynxkite_pillow/pillow_ops.py β lynxkite-pillow-example/src/lynxkite_plugins/pillow_example/__init__.py +29 -18
- {lynxkite-pillow β lynxkite-pillow-example}/uv.lock +0 -0
README.md
CHANGED
@@ -14,3 +14,27 @@ original LynxKite. The primary goals of this rewrite are:
|
|
14 |
- `lynxkite-graph-analytics`: Graph analytics plugin. The classical LynxKite experience!
|
15 |
- `lynxkite-pillow`: A simple example plugin.
|
16 |
- `lynxkite-lynxscribe`: A plugin for building and running LynxScribe applications.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
- `lynxkite-graph-analytics`: Graph analytics plugin. The classical LynxKite experience!
|
15 |
- `lynxkite-pillow`: A simple example plugin.
|
16 |
- `lynxkite-lynxscribe`: A plugin for building and running LynxScribe applications.
|
17 |
+
|
18 |
+
## Development
|
19 |
+
|
20 |
+
Install everything like this:
|
21 |
+
|
22 |
+
```bash
|
23 |
+
uv venv
|
24 |
+
source .venv/bin/activate
|
25 |
+
uv pip install -e lynxkite-core/ lynxkite-app/ lynxkite-graph-analytics/ lynxkite-lynxscribe/ lynxkite-pillow-example/
|
26 |
+
```
|
27 |
+
|
28 |
+
This also builds the frontend, hopefully very quickly. To run it:
|
29 |
+
|
30 |
+
```bash
|
31 |
+
cd lynxkite-app # just because the "data" directory with the examples is here
|
32 |
+
LYNXKITE_RELOAD=1 lynxkite
|
33 |
+
```
|
34 |
+
|
35 |
+
If you also want to make changes to the frontend with hot reloading:
|
36 |
+
|
37 |
+
```bash
|
38 |
+
cd lynxkite-app/web
|
39 |
+
npm run dev
|
40 |
+
```
|
lynxkite-app/src/lynxkite/app/main.py
CHANGED
@@ -12,13 +12,26 @@ from lynxkite.core import ops
|
|
12 |
from lynxkite.core import workspace
|
13 |
from . import crdt
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
print(f"Importing {name}")
|
20 |
-
name =
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
app = fastapi.FastAPI(lifespan=crdt.lifespan)
|
24 |
app.include_router(crdt.router)
|
@@ -95,14 +108,14 @@ def make_dir(req: dict):
|
|
95 |
@app.get("/api/service/{module_path:path}")
|
96 |
async def service_get(req: fastapi.Request, module_path: str):
|
97 |
"""Executors can provide extra HTTP APIs through the /api/service endpoint."""
|
98 |
-
module =
|
99 |
return await module.api_service_get(req)
|
100 |
|
101 |
|
102 |
@app.post("/api/service/{module_path:path}")
|
103 |
async def service_post(req: fastapi.Request, module_path: str):
|
104 |
"""Executors can provide extra HTTP APIs through the /api/service endpoint."""
|
105 |
-
module =
|
106 |
return await module.api_service_post(req)
|
107 |
|
108 |
|
|
|
12 |
from lynxkite.core import workspace
|
13 |
from . import crdt
|
14 |
|
15 |
+
|
16 |
+
def detect_plugins():
|
17 |
+
try:
|
18 |
+
import lynxkite_plugins
|
19 |
+
except ImportError:
|
20 |
+
print("No modules found in lynxkite_plugins. Be sure to install some plugins.")
|
21 |
+
return {}
|
22 |
+
|
23 |
+
print(list(pkgutil.iter_modules(lynxkite_plugins.__path__)))
|
24 |
+
plugins = {}
|
25 |
+
for _, name, _ in pkgutil.iter_modules(lynxkite_plugins.__path__):
|
26 |
+
name = f"lynxkite_plugins.{name}"
|
27 |
print(f"Importing {name}")
|
28 |
+
plugins[name] = importlib.import_module(name)
|
29 |
+
if not plugins:
|
30 |
+
print("No modules found in lynxkite_plugins. Be sure to install some plugins.")
|
31 |
+
return plugins
|
32 |
+
|
33 |
+
|
34 |
+
lynxkite_plugins = detect_plugins()
|
35 |
|
36 |
app = fastapi.FastAPI(lifespan=crdt.lifespan)
|
37 |
app.include_router(crdt.router)
|
|
|
108 |
@app.get("/api/service/{module_path:path}")
|
109 |
async def service_get(req: fastapi.Request, module_path: str):
|
110 |
"""Executors can provide extra HTTP APIs through the /api/service endpoint."""
|
111 |
+
module = lynxkite_plugins[module_path.split("/")[0]]
|
112 |
return await module.api_service_get(req)
|
113 |
|
114 |
|
115 |
@app.post("/api/service/{module_path:path}")
|
116 |
async def service_post(req: fastapi.Request, module_path: str):
|
117 |
"""Executors can provide extra HTTP APIs through the /api/service endpoint."""
|
118 |
+
module = lynxkite_plugins[module_path.split("/")[0]]
|
119 |
return await module.api_service_post(req)
|
120 |
|
121 |
|
lynxkite-graph-analytics/pyproject.toml
CHANGED
@@ -6,6 +6,7 @@ readme = "README.md"
|
|
6 |
requires-python = ">=3.11"
|
7 |
dependencies = [
|
8 |
"lynxkite-core",
|
|
|
9 |
"networkx>=3.4.2",
|
10 |
"pandas>=2.2.3",
|
11 |
"polars[gpu]>=1.14.0",
|
|
|
6 |
requires-python = ">=3.11"
|
7 |
dependencies = [
|
8 |
"lynxkite-core",
|
9 |
+
"matplotlib>=3.10.0",
|
10 |
"networkx>=3.4.2",
|
11 |
"pandas>=2.2.3",
|
12 |
"polars[gpu]>=1.14.0",
|
lynxkite-graph-analytics/src/lynxkite/graph_analytics/networkx_ops.py
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
"""Automatically wraps all NetworkX functions as LynxKite operations."""
|
2 |
-
from . import ops
|
3 |
-
import functools
|
4 |
-
import inspect
|
5 |
-
import networkx as nx
|
6 |
-
|
7 |
-
|
8 |
-
def wrapped(name: str, func):
|
9 |
-
@functools.wraps(func)
|
10 |
-
def wrapper(*args, **kwargs):
|
11 |
-
for k, v in kwargs.items():
|
12 |
-
if v == 'None':
|
13 |
-
kwargs[k] = None
|
14 |
-
res = func(*args, **kwargs)
|
15 |
-
if isinstance(res, nx.Graph):
|
16 |
-
return res
|
17 |
-
# Otherwise it's a node attribute.
|
18 |
-
graph = args[0].copy()
|
19 |
-
nx.set_node_attributes(graph, values=res, name=name)
|
20 |
-
return graph
|
21 |
-
return wrapper
|
22 |
-
|
23 |
-
def register_networkx(env: str):
|
24 |
-
ops.CATALOGS.setdefault(env, {})
|
25 |
-
for (name, func) in nx.__dict__.items():
|
26 |
-
if hasattr(func, 'graphs'):
|
27 |
-
sig = inspect.signature(func)
|
28 |
-
inputs = {k: ops.Input(name=k, type=nx.Graph) for k in func.graphs}
|
29 |
-
params = {
|
30 |
-
name: ops.Parameter.basic(
|
31 |
-
name, str(param.default)
|
32 |
-
if type(param.default) in [str, int, float]
|
33 |
-
else None,
|
34 |
-
param.annotation)
|
35 |
-
for name, param in sig.parameters.items()
|
36 |
-
if name not in ['G', 'backend', 'backend_kwargs', 'create_using']}
|
37 |
-
for p in params.values():
|
38 |
-
if not p.type:
|
39 |
-
# Guess the type based on the name.
|
40 |
-
if len(p.name) == 1:
|
41 |
-
p.type = int
|
42 |
-
name = "NX βΊ " + name.replace('_', ' ').title()
|
43 |
-
op = ops.Op(
|
44 |
-
func=wrapped(name, func),
|
45 |
-
name=name,
|
46 |
-
params=params,
|
47 |
-
inputs=inputs,
|
48 |
-
outputs={'output': ops.Output(name='output', type=nx.Graph)},
|
49 |
-
type='basic',
|
50 |
-
)
|
51 |
-
ops.CATALOGS[env][name] = op
|
52 |
-
|
53 |
-
register_networkx('LynxKite')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lynxkite-graph-analytics/src/lynxkite/graph_analytics/pytorch_model_ops.py
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
'''Boxes for defining PyTorch models.'''
|
2 |
-
from . import ops
|
3 |
-
from .ops import Parameter as P
|
4 |
-
|
5 |
-
ENV = 'PyTorch model'
|
6 |
-
def reg(name, inputs=[], outputs=None, params=[]):
|
7 |
-
if outputs is None:
|
8 |
-
outputs = inputs
|
9 |
-
return ops.register_passive_op(
|
10 |
-
ENV, name,
|
11 |
-
inputs=[ops.Input(name=name, position='bottom', type='tensor') for name in inputs],
|
12 |
-
outputs=[ops.Output(name=name, position='top', type='tensor') for name in outputs],
|
13 |
-
params=params)
|
14 |
-
reg('Input: features', outputs=['x'])
|
15 |
-
reg('Input: graph edges', outputs=['edges'])
|
16 |
-
reg('Input: label', outputs=['y'])
|
17 |
-
reg('Input: positive sample', outputs=['x_pos'])
|
18 |
-
reg('Input: negative sample', outputs=['x_neg'])
|
19 |
-
|
20 |
-
reg('Attention', inputs=['q', 'k', 'v'], outputs=['x'])
|
21 |
-
reg('LayerNorm', inputs=['x'])
|
22 |
-
reg('Dropout', inputs=['x'], params=[P.basic('p', 0.5)])
|
23 |
-
reg('Linear', inputs=['x'], params=[P.basic('output_dim', 'same')])
|
24 |
-
reg('Graph conv', inputs=['x', 'edges'], outputs=['x'],
|
25 |
-
params=[P.options('type', ['GCNConv', 'GATConv', 'GATv2Conv', 'SAGEConv'])])
|
26 |
-
reg('Activation', inputs=['x'],
|
27 |
-
params=[P.options('type', ['ReLU', 'LeakyReLU', 'Tanh', 'Mish'])])
|
28 |
-
reg('Supervised loss', inputs=['x', 'y'], outputs=['loss'])
|
29 |
-
reg('Triplet loss', inputs=['x', 'x_pos', 'x_neg'], outputs=['loss'])
|
30 |
-
reg('Optimizer', inputs=['loss'], outputs=[],
|
31 |
-
params=[
|
32 |
-
P.options('type', ['AdamW', 'Adafactor', 'Adagrad', 'SGD', 'Lion', 'Paged AdamW', 'Galore AdamW']),
|
33 |
-
P.basic('lr', 0.001)])
|
34 |
-
|
35 |
-
ops.register_area(ENV, 'Repeat', params=[ops.Parameter.basic('times', 1, int)])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/__init__.py
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
from . import lynxkite_ops
|
2 |
+
from . import networkx_ops
|
3 |
+
from . import pytorch_model_ops
|
lynxkite-graph-analytics/src/{lynxkite β lynxkite_plugins}/graph_analytics/lynxkite_ops.py
RENAMED
@@ -1,7 +1,7 @@
|
|
1 |
"""Graph analytics operations. To be split into separate files when we have more."""
|
2 |
|
3 |
import os
|
4 |
-
from . import ops
|
5 |
from collections import deque
|
6 |
import dataclasses
|
7 |
import functools
|
|
|
1 |
"""Graph analytics operations. To be split into separate files when we have more."""
|
2 |
|
3 |
import os
|
4 |
+
from lynxkite.core import ops
|
5 |
from collections import deque
|
6 |
import dataclasses
|
7 |
import functools
|
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/networkx_ops.py
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Automatically wraps all NetworkX functions as LynxKite operations."""
|
2 |
+
|
3 |
+
from lynxkite.core import ops
|
4 |
+
import functools
|
5 |
+
import inspect
|
6 |
+
import networkx as nx
|
7 |
+
|
8 |
+
|
9 |
+
def wrapped(name: str, func):
|
10 |
+
@functools.wraps(func)
|
11 |
+
def wrapper(*args, **kwargs):
|
12 |
+
for k, v in kwargs.items():
|
13 |
+
if v == "None":
|
14 |
+
kwargs[k] = None
|
15 |
+
res = func(*args, **kwargs)
|
16 |
+
if isinstance(res, nx.Graph):
|
17 |
+
return res
|
18 |
+
# Otherwise it's a node attribute.
|
19 |
+
graph = args[0].copy()
|
20 |
+
nx.set_node_attributes(graph, values=res, name=name)
|
21 |
+
return graph
|
22 |
+
|
23 |
+
return wrapper
|
24 |
+
|
25 |
+
|
26 |
+
def register_networkx(env: str):
|
27 |
+
ops.CATALOGS.setdefault(env, {})
|
28 |
+
for name, func in nx.__dict__.items():
|
29 |
+
if hasattr(func, "graphs"):
|
30 |
+
sig = inspect.signature(func)
|
31 |
+
inputs = {k: ops.Input(name=k, type=nx.Graph) for k in func.graphs}
|
32 |
+
params = {
|
33 |
+
name: ops.Parameter.basic(
|
34 |
+
name,
|
35 |
+
str(param.default)
|
36 |
+
if type(param.default) in [str, int, float]
|
37 |
+
else None,
|
38 |
+
param.annotation,
|
39 |
+
)
|
40 |
+
for name, param in sig.parameters.items()
|
41 |
+
if name not in ["G", "backend", "backend_kwargs", "create_using"]
|
42 |
+
}
|
43 |
+
for p in params.values():
|
44 |
+
if not p.type:
|
45 |
+
# Guess the type based on the name.
|
46 |
+
if len(p.name) == 1:
|
47 |
+
p.type = int
|
48 |
+
name = "NX βΊ " + name.replace("_", " ").title()
|
49 |
+
op = ops.Op(
|
50 |
+
func=wrapped(name, func),
|
51 |
+
name=name,
|
52 |
+
params=params,
|
53 |
+
inputs=inputs,
|
54 |
+
outputs={"output": ops.Output(name="output", type=nx.Graph)},
|
55 |
+
type="basic",
|
56 |
+
)
|
57 |
+
ops.CATALOGS[env][name] = op
|
58 |
+
|
59 |
+
|
60 |
+
register_networkx("LynxKite")
|
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/pytorch_model_ops.py
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Boxes for defining PyTorch models."""
|
2 |
+
|
3 |
+
from lynxkite.core import ops
|
4 |
+
from lynxkite.core.ops import Parameter as P
|
5 |
+
|
6 |
+
ENV = "PyTorch model"
|
7 |
+
|
8 |
+
|
9 |
+
def reg(name, inputs=[], outputs=None, params=[]):
|
10 |
+
if outputs is None:
|
11 |
+
outputs = inputs
|
12 |
+
return ops.register_passive_op(
|
13 |
+
ENV,
|
14 |
+
name,
|
15 |
+
inputs=[
|
16 |
+
ops.Input(name=name, position="bottom", type="tensor") for name in inputs
|
17 |
+
],
|
18 |
+
outputs=[
|
19 |
+
ops.Output(name=name, position="top", type="tensor") for name in outputs
|
20 |
+
],
|
21 |
+
params=params,
|
22 |
+
)
|
23 |
+
|
24 |
+
|
25 |
+
reg("Input: features", outputs=["x"])
|
26 |
+
reg("Input: graph edges", outputs=["edges"])
|
27 |
+
reg("Input: label", outputs=["y"])
|
28 |
+
reg("Input: positive sample", outputs=["x_pos"])
|
29 |
+
reg("Input: negative sample", outputs=["x_neg"])
|
30 |
+
|
31 |
+
reg("Attention", inputs=["q", "k", "v"], outputs=["x"])
|
32 |
+
reg("LayerNorm", inputs=["x"])
|
33 |
+
reg("Dropout", inputs=["x"], params=[P.basic("p", 0.5)])
|
34 |
+
reg("Linear", inputs=["x"], params=[P.basic("output_dim", "same")])
|
35 |
+
reg(
|
36 |
+
"Graph conv",
|
37 |
+
inputs=["x", "edges"],
|
38 |
+
outputs=["x"],
|
39 |
+
params=[P.options("type", ["GCNConv", "GATConv", "GATv2Conv", "SAGEConv"])],
|
40 |
+
)
|
41 |
+
reg(
|
42 |
+
"Activation",
|
43 |
+
inputs=["x"],
|
44 |
+
params=[P.options("type", ["ReLU", "LeakyReLU", "Tanh", "Mish"])],
|
45 |
+
)
|
46 |
+
reg("Supervised loss", inputs=["x", "y"], outputs=["loss"])
|
47 |
+
reg("Triplet loss", inputs=["x", "x_pos", "x_neg"], outputs=["loss"])
|
48 |
+
reg(
|
49 |
+
"Optimizer",
|
50 |
+
inputs=["loss"],
|
51 |
+
outputs=[],
|
52 |
+
params=[
|
53 |
+
P.options(
|
54 |
+
"type",
|
55 |
+
[
|
56 |
+
"AdamW",
|
57 |
+
"Adafactor",
|
58 |
+
"Adagrad",
|
59 |
+
"SGD",
|
60 |
+
"Lion",
|
61 |
+
"Paged AdamW",
|
62 |
+
"Galore AdamW",
|
63 |
+
],
|
64 |
+
),
|
65 |
+
P.basic("lr", 0.001),
|
66 |
+
],
|
67 |
+
)
|
68 |
+
|
69 |
+
ops.register_area(ENV, "Repeat", params=[ops.Parameter.basic("times", 1, int)])
|
lynxkite-graph-analytics/uv.lock
CHANGED
@@ -9,6 +9,57 @@ resolution-markers = [
|
|
9 |
"python_full_version >= '3.12' and platform_machine != 'aarch64' and platform_machine != 'x86_64'",
|
10 |
]
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
[[package]]
|
13 |
name = "cuda-python"
|
14 |
version = "12.6.0"
|
@@ -34,6 +85,114 @@ wheels = [
|
|
34 |
{ url = "https://files.pythonhosted.org/packages/0f/6e/3d0b2d19ac853347f435f49815d471d461315d8f6e74f165624f16ddc7db/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa", size = 79456 },
|
35 |
]
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
[[package]]
|
38 |
name = "libcudf-cu12"
|
39 |
version = "24.12.0"
|
@@ -74,12 +233,18 @@ wheels = [
|
|
74 |
{ url = "https://files.pythonhosted.org/packages/c6/94/dea10e263655ce78d777e78d904903faae39d1fc440762be4a9dc46bed49/llvmlite-0.43.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9", size = 28107442 },
|
75 |
]
|
76 |
|
|
|
|
|
|
|
|
|
|
|
77 |
[[package]]
|
78 |
name = "lynxkite-graph-analytics"
|
79 |
version = "0.1.0"
|
80 |
source = { virtual = "." }
|
81 |
dependencies = [
|
82 |
{ name = "lynxkite-core" },
|
|
|
83 |
{ name = "networkx" },
|
84 |
{ name = "pandas" },
|
85 |
{ name = "polars", extra = ["gpu"] },
|
@@ -88,15 +253,54 @@ dependencies = [
|
|
88 |
[package.metadata]
|
89 |
requires-dist = [
|
90 |
{ name = "lynxkite-core", virtual = "../lynxkite-core" },
|
|
|
91 |
{ name = "networkx", specifier = ">=3.4.2" },
|
92 |
{ name = "pandas", specifier = ">=2.2.3" },
|
93 |
{ name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
|
94 |
]
|
95 |
|
96 |
[[package]]
|
97 |
-
name = "
|
98 |
-
version = "
|
99 |
-
source = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
[[package]]
|
102 |
name = "networkx"
|
@@ -229,6 +433,55 @@ wheels = [
|
|
229 |
{ url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 },
|
230 |
]
|
231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
[[package]]
|
233 |
name = "polars"
|
234 |
version = "1.14.0"
|
@@ -302,6 +555,15 @@ wheels = [
|
|
302 |
{ url = "https://files.pythonhosted.org/packages/8e/2c/653ca775cefafeea2158d0c94296e6b78e050af2892f89fe21697bb737af/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e2bb951f1a2fddf1976b84aa4e6d1280689da22014d6d1d5f48364cc1b32e2d", size = 37180377 },
|
303 |
]
|
304 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
305 |
[[package]]
|
306 |
name = "python-dateutil"
|
307 |
version = "2.9.0.post0"
|
|
|
9 |
"python_full_version >= '3.12' and platform_machine != 'aarch64' and platform_machine != 'x86_64'",
|
10 |
]
|
11 |
|
12 |
+
[[package]]
|
13 |
+
name = "contourpy"
|
14 |
+
version = "1.3.1"
|
15 |
+
source = { registry = "https://pypi.org/simple" }
|
16 |
+
dependencies = [
|
17 |
+
{ name = "numpy" },
|
18 |
+
]
|
19 |
+
sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 }
|
20 |
+
wheels = [
|
21 |
+
{ url = "https://files.pythonhosted.org/packages/12/bb/11250d2906ee2e8b466b5f93e6b19d525f3e0254ac8b445b56e618527718/contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b", size = 269555 },
|
22 |
+
{ url = "https://files.pythonhosted.org/packages/67/71/1e6e95aee21a500415f5d2dbf037bf4567529b6a4e986594d7026ec5ae90/contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc", size = 254549 },
|
23 |
+
{ url = "https://files.pythonhosted.org/packages/31/2c/b88986e8d79ac45efe9d8801ae341525f38e087449b6c2f2e6050468a42c/contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86", size = 313000 },
|
24 |
+
{ url = "https://files.pythonhosted.org/packages/c4/18/65280989b151fcf33a8352f992eff71e61b968bef7432fbfde3a364f0730/contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6", size = 352925 },
|
25 |
+
{ url = "https://files.pythonhosted.org/packages/f5/c7/5fd0146c93220dbfe1a2e0f98969293b86ca9bc041d6c90c0e065f4619ad/contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85", size = 323693 },
|
26 |
+
{ url = "https://files.pythonhosted.org/packages/85/fc/7fa5d17daf77306840a4e84668a48ddff09e6bc09ba4e37e85ffc8e4faa3/contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c", size = 326184 },
|
27 |
+
{ url = "https://files.pythonhosted.org/packages/ef/e7/104065c8270c7397c9571620d3ab880558957216f2b5ebb7e040f85eeb22/contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291", size = 1268031 },
|
28 |
+
{ url = "https://files.pythonhosted.org/packages/e2/4a/c788d0bdbf32c8113c2354493ed291f924d4793c4a2e85b69e737a21a658/contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f", size = 1325995 },
|
29 |
+
{ url = "https://files.pythonhosted.org/packages/a6/e6/a2f351a90d955f8b0564caf1ebe4b1451a3f01f83e5e3a414055a5b8bccb/contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375", size = 174396 },
|
30 |
+
{ url = "https://files.pythonhosted.org/packages/a8/7e/cd93cab453720a5d6cb75588cc17dcdc08fc3484b9de98b885924ff61900/contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9", size = 219787 },
|
31 |
+
{ url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 },
|
32 |
+
{ url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 },
|
33 |
+
{ url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 },
|
34 |
+
{ url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 },
|
35 |
+
{ url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 },
|
36 |
+
{ url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 },
|
37 |
+
{ url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 },
|
38 |
+
{ url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 },
|
39 |
+
{ url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 },
|
40 |
+
{ url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 },
|
41 |
+
{ url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 },
|
42 |
+
{ url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 },
|
43 |
+
{ url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 },
|
44 |
+
{ url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 },
|
45 |
+
{ url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 },
|
46 |
+
{ url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 },
|
47 |
+
{ url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 },
|
48 |
+
{ url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 },
|
49 |
+
{ url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 },
|
50 |
+
{ url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 },
|
51 |
+
{ url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 },
|
52 |
+
{ url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 },
|
53 |
+
{ url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 },
|
54 |
+
{ url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 },
|
55 |
+
{ url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 },
|
56 |
+
{ url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 },
|
57 |
+
{ url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 },
|
58 |
+
{ url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 },
|
59 |
+
{ url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 },
|
60 |
+
{ url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 },
|
61 |
+
]
|
62 |
+
|
63 |
[[package]]
|
64 |
name = "cuda-python"
|
65 |
version = "12.6.0"
|
|
|
85 |
{ url = "https://files.pythonhosted.org/packages/0f/6e/3d0b2d19ac853347f435f49815d471d461315d8f6e74f165624f16ddc7db/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa", size = 79456 },
|
86 |
]
|
87 |
|
88 |
+
[[package]]
|
89 |
+
name = "cycler"
|
90 |
+
version = "0.12.1"
|
91 |
+
source = { registry = "https://pypi.org/simple" }
|
92 |
+
sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 }
|
93 |
+
wheels = [
|
94 |
+
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 },
|
95 |
+
]
|
96 |
+
|
97 |
+
[[package]]
|
98 |
+
name = "fonttools"
|
99 |
+
version = "4.55.3"
|
100 |
+
source = { registry = "https://pypi.org/simple" }
|
101 |
+
sdist = { url = "https://files.pythonhosted.org/packages/76/61/a300d1574dc381393424047c0396a0e213db212e28361123af9830d71a8d/fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45", size = 3498155 }
|
102 |
+
wheels = [
|
103 |
+
{ url = "https://files.pythonhosted.org/packages/4b/18/14be25545600bd100e5b74a3ac39089b7c1cb403dc513b7ca348be3381bf/fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e", size = 2771005 },
|
104 |
+
{ url = "https://files.pythonhosted.org/packages/b2/51/2e1a5d3871cd7c2ae2054b54e92604e7d6abc3fd3656e9583c399648fe1c/fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b", size = 2300654 },
|
105 |
+
{ url = "https://files.pythonhosted.org/packages/73/1a/50109bb2703bc6f774b52ea081db21edf2a9fa4b6d7485faadf9d1b997e9/fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90", size = 4877541 },
|
106 |
+
{ url = "https://files.pythonhosted.org/packages/5d/52/c0b9857fa075da1b8806c5dc2d8342918a8cc2065fd14fbddb3303282693/fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0", size = 4906304 },
|
107 |
+
{ url = "https://files.pythonhosted.org/packages/0b/1b/55f85c7e962d295e456d5209581c919620ee3e877b95cd86245187a5050f/fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b", size = 4888087 },
|
108 |
+
{ url = "https://files.pythonhosted.org/packages/83/13/6f2809c612ea2ac51391f92468ff861c63473601530fca96458b453212bf/fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765", size = 5056958 },
|
109 |
+
{ url = "https://files.pythonhosted.org/packages/c1/28/d0ea9e872fa4208b9dfca686e1dd9ca22f6c9ef33ecff2f0ebc2dbe7c29b/fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f", size = 2173939 },
|
110 |
+
{ url = "https://files.pythonhosted.org/packages/be/36/d74ae1020bc41a1dff3e6f5a99f646563beecb97e386d27abdac3ba07650/fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72", size = 2220363 },
|
111 |
+
{ url = "https://files.pythonhosted.org/packages/89/58/fbcf5dff7e3ea844bb00c4d806ca1e339e1f2dce5529633bf4842c0c9a1f/fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35", size = 2765380 },
|
112 |
+
{ url = "https://files.pythonhosted.org/packages/81/dd/da6e329e51919b4f421c8738f3497e2ab08c168e76aaef7b6d5351862bdf/fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c", size = 2297940 },
|
113 |
+
{ url = "https://files.pythonhosted.org/packages/00/44/f5ee560858425c99ef07e04919e736db09d6416408e5a8d3bbfb4a6623fd/fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7", size = 4793327 },
|
114 |
+
{ url = "https://files.pythonhosted.org/packages/24/da/0a001926d791c55e29ac3c52964957a20dbc1963615446b568b7432891c3/fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314", size = 4865624 },
|
115 |
+
{ url = "https://files.pythonhosted.org/packages/3d/d8/1edd8b13a427a9fb6418373437caa586c0caa57f260af8e0548f4d11e340/fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427", size = 4774166 },
|
116 |
+
{ url = "https://files.pythonhosted.org/packages/9c/ec/ade054097976c3d6debc9032e09a351505a0196aa5493edf021be376f75e/fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a", size = 5001832 },
|
117 |
+
{ url = "https://files.pythonhosted.org/packages/e2/cd/233f0e31ad799bb91fc78099c8b4e5ec43b85a131688519640d6bae46f6a/fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07", size = 2162228 },
|
118 |
+
{ url = "https://files.pythonhosted.org/packages/46/45/a498b5291f6c0d91b2394b1ed7447442a57d1c9b9cf8f439aee3c316a56e/fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54", size = 2209118 },
|
119 |
+
{ url = "https://files.pythonhosted.org/packages/9c/9f/00142a19bad96eeeb1aed93f567adc19b7f2c1af6f5bc0a1c3de90b4b1ac/fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29", size = 2752812 },
|
120 |
+
{ url = "https://files.pythonhosted.org/packages/b0/20/14b8250d63ba65e162091fb0dda07730f90c303bbf5257e9ddacec7230d9/fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4", size = 2291521 },
|
121 |
+
{ url = "https://files.pythonhosted.org/packages/34/47/a681cfd10245eb74f65e491a934053ec75c4af639655446558f29818e45e/fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca", size = 4770980 },
|
122 |
+
{ url = "https://files.pythonhosted.org/packages/d2/6c/a7066afc19db0705a12efd812e19c32cde2b9514eb714659522f2ebd60b6/fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b", size = 4845534 },
|
123 |
+
{ url = "https://files.pythonhosted.org/packages/0c/a2/3c204fbabbfd845d9bdcab9ae35279d41e9a4bf5c80a0a2708f9c5a195d6/fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048", size = 4753910 },
|
124 |
+
{ url = "https://files.pythonhosted.org/packages/6e/8c/b4cb3592880340b89e4ef6601b531780bba73862332a6451d78fe135d6cb/fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe", size = 4976411 },
|
125 |
+
{ url = "https://files.pythonhosted.org/packages/fc/a8/4bf98840ff89fcc188470b59daec57322178bf36d2f4f756cd19a42a826b/fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628", size = 2160178 },
|
126 |
+
{ url = "https://files.pythonhosted.org/packages/e6/57/4cc35004605416df3225ff362f3455cf09765db00df578ae9e46d0fefd23/fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b", size = 2206102 },
|
127 |
+
{ url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 },
|
128 |
+
]
|
129 |
+
|
130 |
+
[[package]]
|
131 |
+
name = "kiwisolver"
|
132 |
+
version = "1.4.8"
|
133 |
+
source = { registry = "https://pypi.org/simple" }
|
134 |
+
sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 }
|
135 |
+
wheels = [
|
136 |
+
{ url = "https://files.pythonhosted.org/packages/da/ed/c913ee28936c371418cb167b128066ffb20bbf37771eecc2c97edf8a6e4c/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", size = 124635 },
|
137 |
+
{ url = "https://files.pythonhosted.org/packages/4c/45/4a7f896f7467aaf5f56ef093d1f329346f3b594e77c6a3c327b2d415f521/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", size = 66717 },
|
138 |
+
{ url = "https://files.pythonhosted.org/packages/5f/b4/c12b3ac0852a3a68f94598d4c8d569f55361beef6159dce4e7b624160da2/kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", size = 65413 },
|
139 |
+
{ url = "https://files.pythonhosted.org/packages/a9/98/1df4089b1ed23d83d410adfdc5947245c753bddfbe06541c4aae330e9e70/kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", size = 1343994 },
|
140 |
+
{ url = "https://files.pythonhosted.org/packages/8d/bf/b4b169b050c8421a7c53ea1ea74e4ef9c335ee9013216c558a047f162d20/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", size = 1434804 },
|
141 |
+
{ url = "https://files.pythonhosted.org/packages/66/5a/e13bd341fbcf73325ea60fdc8af752addf75c5079867af2e04cc41f34434/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", size = 1450690 },
|
142 |
+
{ url = "https://files.pythonhosted.org/packages/9b/4f/5955dcb376ba4a830384cc6fab7d7547bd6759fe75a09564910e9e3bb8ea/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", size = 1376839 },
|
143 |
+
{ url = "https://files.pythonhosted.org/packages/3a/97/5edbed69a9d0caa2e4aa616ae7df8127e10f6586940aa683a496c2c280b9/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", size = 1435109 },
|
144 |
+
{ url = "https://files.pythonhosted.org/packages/13/fc/e756382cb64e556af6c1809a1bbb22c141bbc2445049f2da06b420fe52bf/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", size = 2245269 },
|
145 |
+
{ url = "https://files.pythonhosted.org/packages/76/15/e59e45829d7f41c776d138245cabae6515cb4eb44b418f6d4109c478b481/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", size = 2393468 },
|
146 |
+
{ url = "https://files.pythonhosted.org/packages/e9/39/483558c2a913ab8384d6e4b66a932406f87c95a6080112433da5ed668559/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", size = 2355394 },
|
147 |
+
{ url = "https://files.pythonhosted.org/packages/01/aa/efad1fbca6570a161d29224f14b082960c7e08268a133fe5dc0f6906820e/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", size = 2490901 },
|
148 |
+
{ url = "https://files.pythonhosted.org/packages/c9/4f/15988966ba46bcd5ab9d0c8296914436720dd67fca689ae1a75b4ec1c72f/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", size = 2312306 },
|
149 |
+
{ url = "https://files.pythonhosted.org/packages/2d/27/bdf1c769c83f74d98cbc34483a972f221440703054894a37d174fba8aa68/kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", size = 71966 },
|
150 |
+
{ url = "https://files.pythonhosted.org/packages/4a/c9/9642ea855604aeb2968a8e145fc662edf61db7632ad2e4fb92424be6b6c0/kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", size = 65311 },
|
151 |
+
{ url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 },
|
152 |
+
{ url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 },
|
153 |
+
{ url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 },
|
154 |
+
{ url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 },
|
155 |
+
{ url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 },
|
156 |
+
{ url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 },
|
157 |
+
{ url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 },
|
158 |
+
{ url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 },
|
159 |
+
{ url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 },
|
160 |
+
{ url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 },
|
161 |
+
{ url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 },
|
162 |
+
{ url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 },
|
163 |
+
{ url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 },
|
164 |
+
{ url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 },
|
165 |
+
{ url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 },
|
166 |
+
{ url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 },
|
167 |
+
{ url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 },
|
168 |
+
{ url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 },
|
169 |
+
{ url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 },
|
170 |
+
{ url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 },
|
171 |
+
{ url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 },
|
172 |
+
{ url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 },
|
173 |
+
{ url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 },
|
174 |
+
{ url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 },
|
175 |
+
{ url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 },
|
176 |
+
{ url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 },
|
177 |
+
{ url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 },
|
178 |
+
{ url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 },
|
179 |
+
{ url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 },
|
180 |
+
{ url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 },
|
181 |
+
{ url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 },
|
182 |
+
{ url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 },
|
183 |
+
{ url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 },
|
184 |
+
{ url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 },
|
185 |
+
{ url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 },
|
186 |
+
{ url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 },
|
187 |
+
{ url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 },
|
188 |
+
{ url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 },
|
189 |
+
{ url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 },
|
190 |
+
{ url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 },
|
191 |
+
{ url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 },
|
192 |
+
{ url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 },
|
193 |
+
{ url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 },
|
194 |
+
]
|
195 |
+
|
196 |
[[package]]
|
197 |
name = "libcudf-cu12"
|
198 |
version = "24.12.0"
|
|
|
233 |
{ url = "https://files.pythonhosted.org/packages/c6/94/dea10e263655ce78d777e78d904903faae39d1fc440762be4a9dc46bed49/llvmlite-0.43.0-cp312-cp312-win_amd64.whl", hash = "sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9", size = 28107442 },
|
234 |
]
|
235 |
|
236 |
+
[[package]]
|
237 |
+
name = "lynxkite-core"
|
238 |
+
version = "0.1.0"
|
239 |
+
source = { virtual = "../lynxkite-core" }
|
240 |
+
|
241 |
[[package]]
|
242 |
name = "lynxkite-graph-analytics"
|
243 |
version = "0.1.0"
|
244 |
source = { virtual = "." }
|
245 |
dependencies = [
|
246 |
{ name = "lynxkite-core" },
|
247 |
+
{ name = "matplotlib" },
|
248 |
{ name = "networkx" },
|
249 |
{ name = "pandas" },
|
250 |
{ name = "polars", extra = ["gpu"] },
|
|
|
253 |
[package.metadata]
|
254 |
requires-dist = [
|
255 |
{ name = "lynxkite-core", virtual = "../lynxkite-core" },
|
256 |
+
{ name = "matplotlib", specifier = ">=3.10.0" },
|
257 |
{ name = "networkx", specifier = ">=3.4.2" },
|
258 |
{ name = "pandas", specifier = ">=2.2.3" },
|
259 |
{ name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
|
260 |
]
|
261 |
|
262 |
[[package]]
|
263 |
+
name = "matplotlib"
|
264 |
+
version = "3.10.0"
|
265 |
+
source = { registry = "https://pypi.org/simple" }
|
266 |
+
dependencies = [
|
267 |
+
{ name = "contourpy" },
|
268 |
+
{ name = "cycler" },
|
269 |
+
{ name = "fonttools" },
|
270 |
+
{ name = "kiwisolver" },
|
271 |
+
{ name = "numpy" },
|
272 |
+
{ name = "packaging" },
|
273 |
+
{ name = "pillow" },
|
274 |
+
{ name = "pyparsing" },
|
275 |
+
{ name = "python-dateutil" },
|
276 |
+
]
|
277 |
+
sdist = { url = "https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6/matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278", size = 36686418 }
|
278 |
+
wheels = [
|
279 |
+
{ url = "https://files.pythonhosted.org/packages/0c/f1/e37f6c84d252867d7ddc418fff70fc661cfd363179263b08e52e8b748e30/matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363", size = 8171677 },
|
280 |
+
{ url = "https://files.pythonhosted.org/packages/c7/8b/92e9da1f28310a1f6572b5c55097b0c0ceb5e27486d85fb73b54f5a9b939/matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997", size = 8044945 },
|
281 |
+
{ url = "https://files.pythonhosted.org/packages/c5/cb/49e83f0fd066937a5bd3bc5c5d63093703f3637b2824df8d856e0558beef/matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef", size = 8458269 },
|
282 |
+
{ url = "https://files.pythonhosted.org/packages/b2/7d/2d873209536b9ee17340754118a2a17988bc18981b5b56e6715ee07373ac/matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683", size = 8599369 },
|
283 |
+
{ url = "https://files.pythonhosted.org/packages/b8/03/57d6cbbe85c61fe4cbb7c94b54dce443d68c21961830833a1f34d056e5ea/matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765", size = 9405992 },
|
284 |
+
{ url = "https://files.pythonhosted.org/packages/14/cf/e382598f98be11bf51dd0bc60eca44a517f6793e3dc8b9d53634a144620c/matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a", size = 8034580 },
|
285 |
+
{ url = "https://files.pythonhosted.org/packages/44/c7/6b2d8cb7cc251d53c976799cacd3200add56351c175ba89ab9cbd7c1e68a/matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59", size = 8172465 },
|
286 |
+
{ url = "https://files.pythonhosted.org/packages/42/2a/6d66d0fba41e13e9ca6512a0a51170f43e7e7ed3a8dfa036324100775612/matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a", size = 8043300 },
|
287 |
+
{ url = "https://files.pythonhosted.org/packages/90/60/2a60342b27b90a16bada939a85e29589902b41073f59668b904b15ea666c/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95", size = 8448936 },
|
288 |
+
{ url = "https://files.pythonhosted.org/packages/a7/b2/d872fc3d753516870d520595ddd8ce4dd44fa797a240999f125f58521ad7/matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8", size = 8594151 },
|
289 |
+
{ url = "https://files.pythonhosted.org/packages/f4/bd/b2f60cf7f57d014ab33e4f74602a2b5bdc657976db8196bbc022185f6f9c/matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12", size = 9400347 },
|
290 |
+
{ url = "https://files.pythonhosted.org/packages/9f/6e/264673e64001b99d747aff5a288eca82826c024437a3694e19aed1decf46/matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc", size = 8039144 },
|
291 |
+
{ url = "https://files.pythonhosted.org/packages/72/11/1b2a094d95dcb6e6edd4a0b238177c439006c6b7a9fe8d31801237bf512f/matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25", size = 8173073 },
|
292 |
+
{ url = "https://files.pythonhosted.org/packages/0d/c4/87b6ad2723070511a411ea719f9c70fde64605423b184face4e94986de9d/matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908", size = 8043892 },
|
293 |
+
{ url = "https://files.pythonhosted.org/packages/57/69/cb0812a136550b21361335e9ffb7d459bf6d13e03cb7b015555d5143d2d6/matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2", size = 8450532 },
|
294 |
+
{ url = "https://files.pythonhosted.org/packages/ea/3a/bab9deb4fb199c05e9100f94d7f1c702f78d3241e6a71b784d2b88d7bebd/matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf", size = 8593905 },
|
295 |
+
{ url = "https://files.pythonhosted.org/packages/8b/66/742fd242f989adc1847ddf5f445815f73ad7c46aa3440690cc889cfa423c/matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae", size = 9399609 },
|
296 |
+
{ url = "https://files.pythonhosted.org/packages/fa/d6/54cee7142cef7d910a324a7aedf335c0c147b03658b54d49ec48166f10a6/matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442", size = 8039076 },
|
297 |
+
{ url = "https://files.pythonhosted.org/packages/43/14/815d072dc36e88753433bfd0385113405efb947e6895ff7b4d2e8614a33b/matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06", size = 8211000 },
|
298 |
+
{ url = "https://files.pythonhosted.org/packages/9a/76/34e75f364194ec352678adcb540964be6f35ec7d3d8c75ebcb17e6839359/matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff", size = 8087707 },
|
299 |
+
{ url = "https://files.pythonhosted.org/packages/c3/2b/b6bc0dff6a72d333bc7df94a66e6ce662d224e43daa8ad8ae4eaa9a77f55/matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593", size = 8477384 },
|
300 |
+
{ url = "https://files.pythonhosted.org/packages/c2/2d/b5949fb2b76e9b47ab05e25a5f5f887c70de20d8b0cbc704a4e2ee71c786/matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e", size = 8610334 },
|
301 |
+
{ url = "https://files.pythonhosted.org/packages/d6/9a/6e3c799d5134d9af44b01c787e1360bee38cf51850506ea2e743a787700b/matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede", size = 9406777 },
|
302 |
+
{ url = "https://files.pythonhosted.org/packages/0e/dd/e6ae97151e5ed648ab2ea48885bc33d39202b640eec7a2910e2c843f7ac0/matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c", size = 8109742 },
|
303 |
+
]
|
304 |
|
305 |
[[package]]
|
306 |
name = "networkx"
|
|
|
433 |
{ url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 },
|
434 |
]
|
435 |
|
436 |
+
[[package]]
|
437 |
+
name = "pillow"
|
438 |
+
version = "11.1.0"
|
439 |
+
source = { registry = "https://pypi.org/simple" }
|
440 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 }
|
441 |
+
wheels = [
|
442 |
+
{ url = "https://files.pythonhosted.org/packages/dd/d6/2000bfd8d5414fb70cbbe52c8332f2283ff30ed66a9cde42716c8ecbe22c/pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457", size = 3229968 },
|
443 |
+
{ url = "https://files.pythonhosted.org/packages/d9/45/3fe487010dd9ce0a06adf9b8ff4f273cc0a44536e234b0fad3532a42c15b/pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35", size = 3101806 },
|
444 |
+
{ url = "https://files.pythonhosted.org/packages/e3/72/776b3629c47d9d5f1c160113158a7a7ad177688d3a1159cd3b62ded5a33a/pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2", size = 4322283 },
|
445 |
+
{ url = "https://files.pythonhosted.org/packages/e4/c2/e25199e7e4e71d64eeb869f5b72c7ddec70e0a87926398785ab944d92375/pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070", size = 4402945 },
|
446 |
+
{ url = "https://files.pythonhosted.org/packages/c1/ed/51d6136c9d5911f78632b1b86c45241c712c5a80ed7fa7f9120a5dff1eba/pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6", size = 4361228 },
|
447 |
+
{ url = "https://files.pythonhosted.org/packages/48/a4/fbfe9d5581d7b111b28f1d8c2762dee92e9821bb209af9fa83c940e507a0/pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1", size = 4484021 },
|
448 |
+
{ url = "https://files.pythonhosted.org/packages/39/db/0b3c1a5018117f3c1d4df671fb8e47d08937f27519e8614bbe86153b65a5/pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2", size = 4287449 },
|
449 |
+
{ url = "https://files.pythonhosted.org/packages/d9/58/bc128da7fea8c89fc85e09f773c4901e95b5936000e6f303222490c052f3/pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96", size = 4419972 },
|
450 |
+
{ url = "https://files.pythonhosted.org/packages/5f/bb/58f34379bde9fe197f51841c5bbe8830c28bbb6d3801f16a83b8f2ad37df/pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f", size = 2291201 },
|
451 |
+
{ url = "https://files.pythonhosted.org/packages/3a/c6/fce9255272bcf0c39e15abd2f8fd8429a954cf344469eaceb9d0d1366913/pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761", size = 2625686 },
|
452 |
+
{ url = "https://files.pythonhosted.org/packages/c8/52/8ba066d569d932365509054859f74f2a9abee273edcef5cd75e4bc3e831e/pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71", size = 2375194 },
|
453 |
+
{ url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 },
|
454 |
+
{ url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 },
|
455 |
+
{ url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 },
|
456 |
+
{ url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 },
|
457 |
+
{ url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 },
|
458 |
+
{ url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 },
|
459 |
+
{ url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 },
|
460 |
+
{ url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 },
|
461 |
+
{ url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 },
|
462 |
+
{ url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 },
|
463 |
+
{ url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 },
|
464 |
+
{ url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 },
|
465 |
+
{ url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 },
|
466 |
+
{ url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 },
|
467 |
+
{ url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 },
|
468 |
+
{ url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 },
|
469 |
+
{ url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 },
|
470 |
+
{ url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 },
|
471 |
+
{ url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 },
|
472 |
+
{ url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 },
|
473 |
+
{ url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 },
|
474 |
+
{ url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 },
|
475 |
+
{ url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 },
|
476 |
+
{ url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 },
|
477 |
+
{ url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 },
|
478 |
+
{ url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 },
|
479 |
+
{ url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 },
|
480 |
+
{ url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 },
|
481 |
+
{ url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 },
|
482 |
+
{ url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 },
|
483 |
+
]
|
484 |
+
|
485 |
[[package]]
|
486 |
name = "polars"
|
487 |
version = "1.14.0"
|
|
|
555 |
{ url = "https://files.pythonhosted.org/packages/8e/2c/653ca775cefafeea2158d0c94296e6b78e050af2892f89fe21697bb737af/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e2bb951f1a2fddf1976b84aa4e6d1280689da22014d6d1d5f48364cc1b32e2d", size = 37180377 },
|
556 |
]
|
557 |
|
558 |
+
[[package]]
|
559 |
+
name = "pyparsing"
|
560 |
+
version = "3.2.1"
|
561 |
+
source = { registry = "https://pypi.org/simple" }
|
562 |
+
sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694 }
|
563 |
+
wheels = [
|
564 |
+
{ url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
|
565 |
+
]
|
566 |
+
|
567 |
[[package]]
|
568 |
name = "python-dateutil"
|
569 |
version = "2.9.0.post0"
|
lynxkite-lynxscribe/src/lynxkite_plugins/lynxscribe/__init__.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
from . import lynxscribe_ops
|
2 |
+
from . import llm_ops
|
lynxkite-lynxscribe/src/{lynxscribe/lynxkite β lynxkite_plugins/lynxscribe}/llm_ops.py
RENAMED
File without changes
|
lynxkite-lynxscribe/src/{lynxscribe/lynxkite β lynxkite_plugins/lynxscribe}/lynxscribe_ops.py
RENAMED
@@ -16,9 +16,9 @@ from lynxscribe.components.chat.processors import (
|
|
16 |
)
|
17 |
from lynxscribe.components.chat.api import ChatAPI, ChatAPIRequest, ChatAPIResponse
|
18 |
|
19 |
-
from . import ops
|
20 |
import json
|
21 |
-
from .executors import one_by_one
|
22 |
|
23 |
ENV = "LynxScribe"
|
24 |
one_by_one.register(ENV)
|
|
|
16 |
)
|
17 |
from lynxscribe.components.chat.api import ChatAPI, ChatAPIRequest, ChatAPIResponse
|
18 |
|
19 |
+
from lynxkite.core import ops
|
20 |
import json
|
21 |
+
from lynxkite.core.executors import one_by_one
|
22 |
|
23 |
ENV = "LynxScribe"
|
24 |
one_by_one.register(ENV)
|
lynxkite-lynxscribe/tests/test_llm_ops.py
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import unittest
|
2 |
+
from lynxscribe.lynxkite import llm_ops # noqa: F401
|
3 |
+
from lynxkite.core.executors import one_by_one
|
4 |
+
from lynxkite.core import ops, workspace
|
5 |
+
|
6 |
+
|
7 |
+
def make_node(id, op, type="basic", **params):
|
8 |
+
return workspace.WorkspaceNode(
|
9 |
+
id=id,
|
10 |
+
type=type,
|
11 |
+
position=workspace.Position(x=0, y=0),
|
12 |
+
data=workspace.WorkspaceNodeData(title=op, params=params),
|
13 |
+
)
|
14 |
+
|
15 |
+
|
16 |
+
def make_input(id):
|
17 |
+
return make_node(
|
18 |
+
id,
|
19 |
+
"Input CSV",
|
20 |
+
filename="/Users/danieldarabos/Downloads/aimo-train.csv",
|
21 |
+
key="problem",
|
22 |
+
)
|
23 |
+
|
24 |
+
|
25 |
+
def make_edge(source, target, targetHandle="input"):
|
26 |
+
return workspace.WorkspaceEdge(
|
27 |
+
id=f"{source}-{target}",
|
28 |
+
source=source,
|
29 |
+
target=target,
|
30 |
+
sourceHandle="",
|
31 |
+
targetHandle=targetHandle,
|
32 |
+
)
|
33 |
+
|
34 |
+
|
35 |
+
class LLMOpsTest(unittest.IsolatedAsyncioTestCase):
|
36 |
+
async def testExecute(self):
|
37 |
+
ws = workspace.Workspace(
|
38 |
+
env="LLM logic",
|
39 |
+
nodes=[
|
40 |
+
make_node(
|
41 |
+
"0",
|
42 |
+
"Input CSV",
|
43 |
+
filename="/Users/danieldarabos/Downloads/aimo-train.csv",
|
44 |
+
key="problem",
|
45 |
+
),
|
46 |
+
make_node("1", "View", type="table_view"),
|
47 |
+
],
|
48 |
+
edges=[make_edge("0", "1")],
|
49 |
+
)
|
50 |
+
catalog = ops.CATALOGS[ws.env]
|
51 |
+
await one_by_one.execute(ws, catalog)
|
52 |
+
# self.assertEqual('', ws.nodes[1].data.display)
|
53 |
+
|
54 |
+
def testStages(self):
|
55 |
+
ws = workspace.Workspace(
|
56 |
+
env="LLM logic",
|
57 |
+
nodes=[
|
58 |
+
make_input("in1"),
|
59 |
+
make_input("in2"),
|
60 |
+
make_input("in3"),
|
61 |
+
make_node("rag1", "RAG"),
|
62 |
+
make_node("rag2", "RAG"),
|
63 |
+
make_node("p1", "Create prompt"),
|
64 |
+
make_node("p2", "Create prompt"),
|
65 |
+
],
|
66 |
+
edges=[
|
67 |
+
make_edge("in1", "rag1", "db"),
|
68 |
+
make_edge("in2", "rag1"),
|
69 |
+
make_edge("rag1", "p1"),
|
70 |
+
make_edge("p1", "rag2", "db"),
|
71 |
+
make_edge("in3", "p2"),
|
72 |
+
make_edge("p3", "rag2"),
|
73 |
+
],
|
74 |
+
)
|
75 |
+
catalog = ops.CATALOGS[ws.env]
|
76 |
+
stages = one_by_one.get_stages(ws, catalog)
|
77 |
+
print(stages)
|
78 |
+
# self.assertEqual('', stages)
|
79 |
+
|
80 |
+
def testStagesMultiInput(self):
|
81 |
+
ws = workspace.Workspace(
|
82 |
+
env="LLM logic",
|
83 |
+
nodes=[
|
84 |
+
make_node("doc", "Input document"),
|
85 |
+
make_node("split", "Split document"),
|
86 |
+
make_node("graph", "Build document graph"),
|
87 |
+
make_node("chat", "Input chat"),
|
88 |
+
make_node("rag", "RAG"),
|
89 |
+
make_node("neighbors", "Add neighbors"),
|
90 |
+
],
|
91 |
+
edges=[
|
92 |
+
make_edge("doc", "split"),
|
93 |
+
make_edge("split", "graph"),
|
94 |
+
make_edge("split", "rag", "db"),
|
95 |
+
make_edge("chat", "rag", "input"),
|
96 |
+
make_edge("split", "neighbors", "nodes"),
|
97 |
+
make_edge("graph", "neighbors", "edges"),
|
98 |
+
make_edge("rag", "neighbors", "item"),
|
99 |
+
],
|
100 |
+
)
|
101 |
+
catalog = ops.CATALOGS[ws.env]
|
102 |
+
stages = one_by_one.get_stages(ws, catalog)
|
103 |
+
print(stages)
|
104 |
+
# self.assertEqual('', stages)
|
105 |
+
|
106 |
+
|
107 |
+
if __name__ == "__main__":
|
108 |
+
unittest.main()
|
lynxkite-lynxscribe/uv.lock
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version = 1
|
2 |
+
requires-python = ">=3.11"
|
3 |
+
|
4 |
+
[[package]]
|
5 |
+
name = "colorama"
|
6 |
+
version = "0.4.6"
|
7 |
+
source = { registry = "https://pypi.org/simple" }
|
8 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
9 |
+
wheels = [
|
10 |
+
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
11 |
+
]
|
12 |
+
|
13 |
+
[[package]]
|
14 |
+
name = "iniconfig"
|
15 |
+
version = "2.0.0"
|
16 |
+
source = { registry = "https://pypi.org/simple" }
|
17 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 }
|
18 |
+
wheels = [
|
19 |
+
{ url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 },
|
20 |
+
]
|
21 |
+
|
22 |
+
[[package]]
|
23 |
+
name = "lynxkite-core"
|
24 |
+
version = "0.1.0"
|
25 |
+
source = { virtual = "../lynxkite-core" }
|
26 |
+
|
27 |
+
[[package]]
|
28 |
+
name = "lynxkite-lynxscribe"
|
29 |
+
version = "0.1.0"
|
30 |
+
source = { virtual = "." }
|
31 |
+
dependencies = [
|
32 |
+
{ name = "lynxkite-core" },
|
33 |
+
]
|
34 |
+
|
35 |
+
[package.optional-dependencies]
|
36 |
+
test = [
|
37 |
+
{ name = "pytest" },
|
38 |
+
]
|
39 |
+
|
40 |
+
[package.metadata]
|
41 |
+
requires-dist = [
|
42 |
+
{ name = "lynxkite-core", virtual = "../lynxkite-core" },
|
43 |
+
{ name = "pytest", marker = "extra == 'test'" },
|
44 |
+
]
|
45 |
+
|
46 |
+
[[package]]
|
47 |
+
name = "packaging"
|
48 |
+
version = "24.2"
|
49 |
+
source = { registry = "https://pypi.org/simple" }
|
50 |
+
sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 }
|
51 |
+
wheels = [
|
52 |
+
{ url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 },
|
53 |
+
]
|
54 |
+
|
55 |
+
[[package]]
|
56 |
+
name = "pluggy"
|
57 |
+
version = "1.5.0"
|
58 |
+
source = { registry = "https://pypi.org/simple" }
|
59 |
+
sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 }
|
60 |
+
wheels = [
|
61 |
+
{ url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 },
|
62 |
+
]
|
63 |
+
|
64 |
+
[[package]]
|
65 |
+
name = "pytest"
|
66 |
+
version = "8.3.4"
|
67 |
+
source = { registry = "https://pypi.org/simple" }
|
68 |
+
dependencies = [
|
69 |
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
70 |
+
{ name = "iniconfig" },
|
71 |
+
{ name = "packaging" },
|
72 |
+
{ name = "pluggy" },
|
73 |
+
]
|
74 |
+
sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 }
|
75 |
+
wheels = [
|
76 |
+
{ url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 },
|
77 |
+
]
|
{lynxkite-pillow β lynxkite-pillow-example}/pyproject.toml
RENAMED
@@ -1,5 +1,5 @@
|
|
1 |
[project]
|
2 |
-
name = "lynxkite-pillow"
|
3 |
version = "0.1.0"
|
4 |
description = "An example LynxKite plugin that wraps some Pillow image processing features in LynxKite operations"
|
5 |
readme = "README.md"
|
|
|
1 |
[project]
|
2 |
+
name = "lynxkite-pillow-example"
|
3 |
version = "0.1.0"
|
4 |
description = "An example LynxKite plugin that wraps some Pillow image processing features in LynxKite operations"
|
5 |
readme = "README.md"
|
lynxkite-pillow/src/lynxkite_pillow/pillow_ops.py β lynxkite-pillow-example/src/lynxkite_plugins/pillow_example/__init__.py
RENAMED
@@ -1,54 +1,65 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
from .
|
|
|
4 |
from PIL import Image, ImageFilter
|
5 |
import base64
|
6 |
import io
|
7 |
|
8 |
-
ENV =
|
9 |
op = ops.op_registration(ENV)
|
10 |
one_by_one.register(ENV, cache=False)
|
11 |
|
|
|
12 |
@op("Open image")
|
13 |
def open_image(*, filename: str):
|
14 |
-
|
|
|
15 |
|
16 |
@op("Save image")
|
17 |
def save_image(image: Image, *, filename: str):
|
18 |
-
|
|
|
19 |
|
20 |
@op("Crop")
|
21 |
def crop(image: Image, *, top: int, left: int, bottom: int, right: int):
|
22 |
-
|
|
|
23 |
|
24 |
@op("Flip horizontally")
|
25 |
def flip_horizontally(image: Image):
|
26 |
-
|
|
|
27 |
|
28 |
@op("Flip verically")
|
29 |
def flip_vertically(image: Image):
|
30 |
-
|
|
|
31 |
|
32 |
@op("Blur")
|
33 |
def blur(image: Image, *, radius: float = 5):
|
34 |
-
|
|
|
35 |
|
36 |
@op("Detail")
|
37 |
def detail(image: Image):
|
38 |
-
|
|
|
39 |
|
40 |
@op("Edge enhance")
|
41 |
def edge_enhance(image: Image):
|
42 |
-
|
|
|
43 |
|
44 |
@op("To grayscale")
|
45 |
def to_grayscale(image: Image):
|
46 |
-
|
|
|
47 |
|
48 |
@op("View image", view="image")
|
49 |
def view_image(image: Image):
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
1 |
+
"""Demo for how easily we can provide a UI for popular open-source tools."""
|
2 |
+
|
3 |
+
from lynxkite.core import ops
|
4 |
+
from lynxkite.core.executors import one_by_one
|
5 |
from PIL import Image, ImageFilter
|
6 |
import base64
|
7 |
import io
|
8 |
|
9 |
+
ENV = "Pillow"
|
10 |
op = ops.op_registration(ENV)
|
11 |
one_by_one.register(ENV, cache=False)
|
12 |
|
13 |
+
|
14 |
@op("Open image")
|
15 |
def open_image(*, filename: str):
|
16 |
+
return Image.open(filename)
|
17 |
+
|
18 |
|
19 |
@op("Save image")
|
20 |
def save_image(image: Image, *, filename: str):
|
21 |
+
image.save(filename)
|
22 |
+
|
23 |
|
24 |
@op("Crop")
|
25 |
def crop(image: Image, *, top: int, left: int, bottom: int, right: int):
|
26 |
+
return image.crop((left, top, right, bottom))
|
27 |
+
|
28 |
|
29 |
@op("Flip horizontally")
|
30 |
def flip_horizontally(image: Image):
|
31 |
+
return image.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
|
32 |
+
|
33 |
|
34 |
@op("Flip verically")
|
35 |
def flip_vertically(image: Image):
|
36 |
+
return image.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
|
37 |
+
|
38 |
|
39 |
@op("Blur")
|
40 |
def blur(image: Image, *, radius: float = 5):
|
41 |
+
return image.filter(ImageFilter.GaussianBlur(radius))
|
42 |
+
|
43 |
|
44 |
@op("Detail")
|
45 |
def detail(image: Image):
|
46 |
+
return image.filter(ImageFilter.DETAIL)
|
47 |
+
|
48 |
|
49 |
@op("Edge enhance")
|
50 |
def edge_enhance(image: Image):
|
51 |
+
return image.filter(ImageFilter.EDGE_ENHANCE)
|
52 |
+
|
53 |
|
54 |
@op("To grayscale")
|
55 |
def to_grayscale(image: Image):
|
56 |
+
return image.convert("L")
|
57 |
+
|
58 |
|
59 |
@op("View image", view="image")
|
60 |
def view_image(image: Image):
|
61 |
+
buffered = io.BytesIO()
|
62 |
+
image.save(buffered, format="JPEG")
|
63 |
+
b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
|
64 |
+
data_url = "data:image/jpeg;base64," + b64
|
65 |
+
return data_url
|
{lynxkite-pillow β lynxkite-pillow-example}/uv.lock
RENAMED
File without changes
|