darabos commited on
Commit
548948e
·
2 Parent(s): 37fb315 9e47f50

Merge pull request #64 from biggraph/darabos-tweaks

Browse files
.gitignore CHANGED
@@ -11,4 +11,5 @@ __pycache__
11
  node_modules
12
  dist
13
  build
 
14
  *.egg-info
 
11
  node_modules
12
  dist
13
  build
14
+ joblib-cache
15
  *.egg-info
lynxkite-app/data/Image processing CHANGED
@@ -7,22 +7,11 @@
7
  "data": {
8
  "title": "Open image",
9
  "params": {
10
- "filename": "/Users/danieldarabos/Downloads/mimic-a-fraction.png"
11
  },
12
  "display": null,
13
  "error": null,
14
  "meta": {
15
- "name": "Open image",
16
- "params": {
17
- "filename": {
18
- "name": "filename",
19
- "default": null,
20
- "type": {
21
- "type": "<class 'str'>"
22
- }
23
- }
24
- },
25
- "inputs": {},
26
  "outputs": {
27
  "output": {
28
  "name": "output",
@@ -32,15 +21,29 @@
32
  "position": "right"
33
  }
34
  },
35
- "type": "basic",
36
- "sub_nodes": null
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
38
  },
39
  "position": {
40
- "x": 19.215964588549014,
41
- "y": 205.21642829186527
42
  },
43
- "parentId": null
 
 
44
  },
45
  {
46
  "id": "View image 1",
@@ -48,30 +51,31 @@
48
  "data": {
49
  "title": "View image",
50
  "params": {},
51
- "display": "data:image/jpeg;base64,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",
52
  "error": null,
53
  "meta": {
54
- "name": "View image",
55
- "params": {},
56
  "inputs": {
57
  "image": {
58
  "name": "image",
59
  "type": {
60
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
61
  },
62
  "position": "left"
63
  }
64
  },
65
- "outputs": {},
66
- "type": "image",
67
- "sub_nodes": null
68
  }
69
  },
70
  "position": {
71
  "x": 371.2152385614552,
72
  "y": -243.68185336918702
73
  },
74
- "parentId": null
 
 
75
  },
76
  {
77
  "id": "Flip verically 1",
@@ -82,35 +86,38 @@
82
  "display": null,
83
  "error": null,
84
  "meta": {
85
- "name": "Flip verically",
86
- "params": {},
87
- "inputs": {
88
- "image": {
89
- "name": "image",
90
- "type": {
91
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
92
- },
93
- "position": "left"
94
- }
95
- },
96
  "outputs": {
97
  "output": {
 
98
  "name": "output",
99
  "type": {
100
  "type": "None"
101
- },
102
- "position": "right"
103
  }
104
  },
105
  "type": "basic",
106
- "sub_nodes": null
107
- }
 
 
 
 
 
 
 
 
 
 
 
 
108
  },
109
  "position": {
110
- "x": 258.90660520478934,
111
- "y": 582.9425419285425
112
  },
113
- "parentId": null
 
 
114
  },
115
  {
116
  "id": "View image 2",
@@ -118,29 +125,30 @@
118
  "data": {
119
  "title": "View image",
120
  "params": {},
121
- "display": "data:image/jpeg;base64,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",
122
  "error": null,
123
  "meta": {
124
- "name": "View image",
125
- "params": {},
126
  "inputs": {
127
  "image": {
128
- "name": "image",
129
  "type": {
130
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
131
  },
132
- "position": "left"
133
  }
134
  },
135
- "outputs": {},
136
- "type": "image",
137
- "sub_nodes": null
138
  }
139
  },
140
  "position": {
141
  "x": 1027.1387925400982,
142
  "y": 251.36630333493974
143
  },
 
 
144
  "parentId": null
145
  },
146
  {
@@ -151,36 +159,39 @@
151
  "params": {},
152
  "display": null,
153
  "error": null,
 
 
154
  "meta": {
155
- "name": "To grayscale",
156
  "params": {},
157
- "inputs": {
158
- "image": {
159
- "name": "image",
160
- "type": {
161
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
162
- },
163
- "position": "left"
164
- }
165
- },
166
  "outputs": {
167
  "output": {
168
- "name": "output",
169
  "type": {
170
  "type": "None"
171
  },
172
- "position": "right"
 
173
  }
174
  },
175
- "type": "basic",
176
- "sub_nodes": null
 
 
 
 
 
 
 
 
177
  }
178
  },
179
  "position": {
180
  "x": 826.1911193192234,
181
  "y": 579.1542134884979
182
  },
183
- "parentId": null
 
 
184
  },
185
  {
186
  "id": "Blur 1",
@@ -193,11 +204,11 @@
193
  "display": null,
194
  "error": null,
195
  "meta": {
196
- "name": "Blur",
197
  "params": {
198
  "radius": {
 
199
  "name": "radius",
200
- "default": null,
201
  "type": {
202
  "type": "<class 'float'>"
203
  }
@@ -207,11 +218,12 @@
207
  "image": {
208
  "name": "image",
209
  "type": {
210
- "type": "<module 'PIL.Image' from '/opt/miniconda3/lib/python3.12/site-packages/PIL/Image.py'>"
211
  },
212
  "position": "left"
213
  }
214
  },
 
215
  "outputs": {
216
  "output": {
217
  "name": "output",
@@ -220,16 +232,16 @@
220
  },
221
  "position": "right"
222
  }
223
- },
224
- "type": "basic",
225
- "sub_nodes": null
226
  }
227
  },
228
  "position": {
229
  "x": 505.15961556359304,
230
  "y": 539.8477981917164
231
  },
232
- "parentId": null
 
 
233
  }
234
  ],
235
  "edges": [
 
7
  "data": {
8
  "title": "Open image",
9
  "params": {
10
+ "filename": "https://media.licdn.com/dms/image/v2/C4E03AQEq4tdJKQiNHQ/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1657270040827?e=2147483647&v=beta&t=lDxix0_0-_K7NUFqgPdzxY5-P7f73bWpPS_XRre842c"
11
  },
12
  "display": null,
13
  "error": null,
14
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
15
  "outputs": {
16
  "output": {
17
  "name": "output",
 
21
  "position": "right"
22
  }
23
  },
24
+ "name": "Open image",
25
+ "inputs": {},
26
+ "params": {
27
+ "filename": {
28
+ "name": "filename",
29
+ "type": {
30
+ "type": "<class 'str'>"
31
+ },
32
+ "default": null
33
+ }
34
+ },
35
+ "type": "basic"
36
+ },
37
+ "__execution_delay": 0.0,
38
+ "collapsed": null
39
  },
40
  "position": {
41
+ "x": -316.51795927908694,
42
+ "y": 122.80901061526373
43
  },
44
+ "width": 422.0,
45
+ "parentId": null,
46
+ "height": 222.0
47
  },
48
  {
49
  "id": "View image 1",
 
51
  "data": {
52
  "title": "View image",
53
  "params": {},
54
+ "display": "data:image/jpeg;base64,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",
55
  "error": null,
56
  "meta": {
57
+ "type": "image",
58
+ "outputs": {},
59
  "inputs": {
60
  "image": {
61
  "name": "image",
62
  "type": {
63
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
64
  },
65
  "position": "left"
66
  }
67
  },
68
+ "name": "View image",
69
+ "params": {}
 
70
  }
71
  },
72
  "position": {
73
  "x": 371.2152385614552,
74
  "y": -243.68185336918702
75
  },
76
+ "parentId": null,
77
+ "width": 265.0,
78
+ "height": 288.0
79
  },
80
  {
81
  "id": "Flip verically 1",
 
86
  "display": null,
87
  "error": null,
88
  "meta": {
 
 
 
 
 
 
 
 
 
 
 
89
  "outputs": {
90
  "output": {
91
+ "position": "right",
92
  "name": "output",
93
  "type": {
94
  "type": "None"
95
+ }
 
96
  }
97
  },
98
  "type": "basic",
99
+ "params": {},
100
+ "name": "Flip verically",
101
+ "inputs": {
102
+ "image": {
103
+ "name": "image",
104
+ "position": "left",
105
+ "type": {
106
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "collapsed": true,
112
+ "__execution_delay": null
113
  },
114
  "position": {
115
+ "x": 228.3853393986406,
116
+ "y": 245.68255477059915
117
  },
118
+ "width": 200.0,
119
+ "parentId": null,
120
+ "height": 200.0
121
  },
122
  {
123
  "id": "View image 2",
 
125
  "data": {
126
  "title": "View image",
127
  "params": {},
128
+ "display": "data:image/jpeg;base64,UklGRoADAABXRUJQVlA4IHQDAAAwNQCdASrIAMgAPm0ukkYyMaGhrtt5UkANiWluu7AObIPJl9NfJmVCwA06FIbr8ZA3WaSJ7/dHH5er4u683qcKWcW7qn4VGE7XCnSEtZUZsarT1ox9y8J2EionbqsxfkAAIOk7JTtvXiLVAeVPQlEW3R4aJSLoxXCJTuGOqcp6fJ7+tzWWmOSq1IqFDN7536TfOvEoiw/K8AQcP06J13RTpwyFow3MFoK9BWZDv0mPqMmHjuC7Hb5MkHc6QnQihSek5PyYdUN4+yG0NpM3NK0+lOSMpu5jaeY5YrFUKke5nLaJ0Mu/3it1akkzebF4fRj8xdIkJDrC4xD4RcyC8aQ1zI4MjffvaCX8X0jbNJ5n5xzGOOU9kFhpry6Uy30xVtGdrEYwbGflOPdNp1u0tiKemkGylZmdj/9rbvWo0IYnCFLs1tAQ1fpkGVQYVo4FA68IbkKvB2KNxrQ17ySt96mzi6ODrNuVzsgisAS/q2ILoOlZL2nfdCNWb523fz7hEM319hb+aWTmo2zExKfWXzUZRGWy09rt8rQZXW5qBKTs5vsYabOjubwNNfFoX7dv32XwAAD++LH6dpCJbVSQouNoBCx0XMzcYw+6o+G//GpIy1eD9A/1cvAp/zhr1mDURDqx2xBgY79tNgsjX9AArhyCNX/BRq/st/uDXRqUv7Wx+Pl/40TsVhng3/XrKZXhDYKnD2aAAyOHG8yS8FTlr5aM6Nh//ra74YvdX+3/j/RLZDm6wRAbHmTF1ZWhK3HdcgOeU+RMXPeCEL8zqEcm3nMeTpuJhH7GTnjejYZx6OrdHAWBghyiaVrgH9f2nXLm1VZ4AgOokXq16NNjRz3FgLYzr7qd94Y2TRJW/cGAcaH5CN5+iXZy4LY2JaCo5I4//pJ/TthQ8SBbQdOIDZPayUXSmAo7cTuD/rk97N3QBGdx5oIzTeSYL8FZfiH/nJLQARX7PafEYZBW9a/ZMjDSPg9GFTPL4BL42F32uL8ZcYLrpkRGRW6jbjmj7GuGSwV5+YuKOhEAf2ZVwU55UjaxRygygrjlYc8FoCe+HyL6rJ5V3jfZvZy1Nw3CdfX4CWQ5/gUjrgONEGb7g2SL/nS9dGgl2gAHKKCzEneCdL38wwsnQYPGdrerT/4uEWM1T24cHLkgBmT+zH6YiwG7DkqEmAbjF4AAAA==",
129
  "error": null,
130
  "meta": {
131
+ "outputs": {},
 
132
  "inputs": {
133
  "image": {
134
+ "position": "left",
135
  "type": {
136
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
137
  },
138
+ "name": "image"
139
  }
140
  },
141
+ "name": "View image",
142
+ "params": {},
143
+ "type": "image"
144
  }
145
  },
146
  "position": {
147
  "x": 1027.1387925400982,
148
  "y": 251.36630333493974
149
  },
150
+ "width": 222.0,
151
+ "height": 291.0,
152
  "parentId": null
153
  },
154
  {
 
159
  "params": {},
160
  "display": null,
161
  "error": null,
162
+ "collapsed": true,
163
+ "__execution_delay": null,
164
  "meta": {
165
+ "type": "basic",
166
  "params": {},
 
 
 
 
 
 
 
 
 
167
  "outputs": {
168
  "output": {
 
169
  "type": {
170
  "type": "None"
171
  },
172
+ "position": "right",
173
+ "name": "output"
174
  }
175
  },
176
+ "name": "To grayscale",
177
+ "inputs": {
178
+ "image": {
179
+ "position": "left",
180
+ "type": {
181
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
182
+ },
183
+ "name": "image"
184
+ }
185
+ }
186
  }
187
  },
188
  "position": {
189
  "x": 826.1911193192234,
190
  "y": 579.1542134884979
191
  },
192
+ "parentId": null,
193
+ "width": 200.0,
194
+ "height": 200.0
195
  },
196
  {
197
  "id": "Blur 1",
 
204
  "display": null,
205
  "error": null,
206
  "meta": {
207
+ "type": "basic",
208
  "params": {
209
  "radius": {
210
+ "default": 5.0,
211
  "name": "radius",
 
212
  "type": {
213
  "type": "<class 'float'>"
214
  }
 
218
  "image": {
219
  "name": "image",
220
  "type": {
221
+ "type": "<module 'PIL.Image' from '/media/nvme/darabos/lynxkite-2024/.venv/lib/python3.11/site-packages/PIL/Image.py'>"
222
  },
223
  "position": "left"
224
  }
225
  },
226
+ "name": "Blur",
227
  "outputs": {
228
  "output": {
229
  "name": "output",
 
232
  },
233
  "position": "right"
234
  }
235
+ }
 
 
236
  }
237
  },
238
  "position": {
239
  "x": 505.15961556359304,
240
  "y": 539.8477981917164
241
  },
242
+ "parentId": null,
243
+ "height": 200.0,
244
+ "width": 200.0
245
  }
246
  ],
247
  "edges": [
lynxkite-app/data/PyTorch demo CHANGED
@@ -11,25 +11,28 @@
11
  "error": null,
12
  "meta": {
13
  "name": "Input: features",
14
- "params": {},
15
- "inputs": {},
16
  "outputs": {
17
  "x": {
 
18
  "name": "x",
19
  "type": {
20
  "type": "tensor"
21
- },
22
- "position": "top"
23
  }
24
  },
25
- "type": "basic",
26
- "sub_nodes": null
27
- }
 
 
28
  },
29
  "position": {
30
  "x": -108.60604658638658,
31
  "y": 63.96065124378427
32
  },
 
 
33
  "parentId": null
34
  },
35
  {
@@ -40,10 +43,13 @@
40
  "params": {},
41
  "display": null,
42
  "error": null,
 
 
43
  "meta": {
44
  "name": "Input: graph edges",
45
- "params": {},
46
  "inputs": {},
 
 
47
  "outputs": {
48
  "edges": {
49
  "name": "edges",
@@ -52,16 +58,16 @@
52
  },
53
  "position": "top"
54
  }
55
- },
56
- "type": "basic",
57
- "sub_nodes": null
58
  }
59
  },
60
  "position": {
61
  "x": 180.7373888617958,
62
  "y": 58.54904654355781
63
  },
64
- "parentId": null
 
 
65
  },
66
  {
67
  "id": "Linear 1",
@@ -74,43 +80,44 @@
74
  "display": null,
75
  "error": null,
76
  "meta": {
77
- "name": "Linear",
78
- "params": {
79
- "output_dim": {
80
- "name": "output_dim",
81
- "default": "same",
82
- "type": {
83
- "type": "<class 'str'>"
84
- }
85
- }
86
- },
87
  "inputs": {
88
  "x": {
89
- "name": "x",
90
  "type": {
91
  "type": "tensor"
92
  },
93
- "position": "bottom"
 
94
  }
95
  },
 
 
96
  "outputs": {
97
  "x": {
98
- "name": "x",
99
  "type": {
100
  "type": "tensor"
101
  },
102
- "position": "top"
 
103
  }
104
  },
105
- "type": "basic",
106
- "sub_nodes": null
 
 
 
 
 
 
 
107
  }
108
  },
109
  "position": {
110
- "x": 56.938816909128036,
111
- "y": -573.5634543506885
112
  },
113
- "parentId": null
 
 
114
  },
115
  {
116
  "id": "Activation 1",
@@ -123,11 +130,30 @@
123
  "display": null,
124
  "error": null,
125
  "meta": {
 
 
 
 
 
 
 
 
 
126
  "name": "Activation",
 
 
 
 
 
 
 
 
 
 
127
  "params": {
128
  "type": {
 
129
  "name": "type",
130
- "default": 1,
131
  "type": {
132
  "enum": [
133
  "ReLU",
@@ -137,34 +163,16 @@
137
  ]
138
  }
139
  }
140
- },
141
- "inputs": {
142
- "x": {
143
- "name": "x",
144
- "type": {
145
- "type": "tensor"
146
- },
147
- "position": "bottom"
148
- }
149
- },
150
- "outputs": {
151
- "x": {
152
- "name": "x",
153
- "type": {
154
- "type": "tensor"
155
- },
156
- "position": "top"
157
- }
158
- },
159
- "type": "basic",
160
- "sub_nodes": null
161
  }
162
  },
163
  "position": {
164
- "x": 84.15324804216073,
165
- "y": -729.2300004316357
166
  },
167
- "parentId": null
 
 
168
  },
169
  {
170
  "id": "Dropout 1",
@@ -177,16 +185,7 @@
177
  "display": null,
178
  "error": null,
179
  "meta": {
180
- "name": "Dropout",
181
- "params": {
182
- "p": {
183
- "name": "p",
184
- "default": 0.5,
185
- "type": {
186
- "type": "<class 'float'>"
187
- }
188
- }
189
- },
190
  "inputs": {
191
  "x": {
192
  "name": "x",
@@ -196,59 +195,34 @@
196
  "position": "bottom"
197
  }
198
  },
199
- "outputs": {
200
- "x": {
201
- "name": "x",
 
202
  "type": {
203
- "type": "tensor"
204
  },
205
- "position": "top"
206
  }
207
  },
208
- "type": "basic",
209
- "sub_nodes": null
210
- }
211
- },
212
- "position": {
213
- "x": 56.938816909128036,
214
- "y": -889.4846386414522
215
- },
216
- "parentId": null
217
- },
218
- {
219
- "id": "Repeat 1",
220
- "type": "area",
221
- "data": {
222
- "title": "Repeat",
223
- "params": {
224
- "times": "3"
225
- },
226
- "display": null,
227
- "error": null,
228
- "meta": {
229
- "name": "Repeat",
230
- "params": {
231
- "times": {
232
- "name": "times",
233
- "default": 1,
234
  "type": {
235
- "type": "<class 'int'>"
236
  }
237
  }
238
- },
239
- "inputs": {},
240
- "outputs": {},
241
- "type": "area",
242
- "sub_nodes": null
243
  }
244
  },
245
  "position": {
246
- "x": -48.6249442834993,
247
- "y": -970.0583599108166
248
  },
 
249
  "parentId": null,
250
- "width": 400,
251
- "height": 600
252
  },
253
  {
254
  "id": "Graph conv 1",
@@ -261,11 +235,21 @@
261
  "display": null,
262
  "error": null,
263
  "meta": {
 
 
 
 
 
 
 
 
 
 
264
  "name": "Graph conv",
265
  "params": {
266
  "type": {
267
  "name": "type",
268
- "default": 1,
269
  "type": {
270
  "enum": [
271
  "GCNConv",
@@ -278,10 +262,10 @@
278
  },
279
  "inputs": {
280
  "x": {
281
- "name": "x",
282
  "type": {
283
  "type": "tensor"
284
  },
 
285
  "position": "bottom"
286
  },
287
  "edges": {
@@ -291,61 +275,17 @@
291
  },
292
  "position": "bottom"
293
  }
294
- },
295
- "outputs": {
296
- "x": {
297
- "name": "x",
298
- "type": {
299
- "type": "tensor"
300
- },
301
- "position": "top"
302
- }
303
- },
304
- "type": "basic",
305
- "sub_nodes": null
306
  }
307
  },
308
  "position": {
309
  "x": 64.08886242755246,
310
  "y": -269.43023573181557
311
  },
 
 
312
  "parentId": null
313
  },
314
- {
315
- "id": "Repeat 2",
316
- "type": "area",
317
- "data": {
318
- "title": "Repeat",
319
- "params": {
320
- "times": "5"
321
- },
322
- "display": null,
323
- "error": null,
324
- "meta": {
325
- "name": "Repeat",
326
- "params": {
327
- "times": {
328
- "name": "times",
329
- "default": 1,
330
- "type": {
331
- "type": "<class 'int'>"
332
- }
333
- }
334
- },
335
- "inputs": {},
336
- "outputs": {},
337
- "type": "area",
338
- "sub_nodes": null
339
- }
340
- },
341
- "position": {
342
- "x": -46.21033706832179,
343
- "y": -326.2712248181098
344
- },
345
- "parentId": null,
346
- "width": 400,
347
- "height": 200
348
- },
349
  {
350
  "id": "Supervised loss 1",
351
  "type": "basic",
@@ -354,19 +294,22 @@
354
  "params": {},
355
  "display": null,
356
  "error": null,
 
 
357
  "meta": {
358
- "name": "Supervised loss",
359
  "params": {},
 
360
  "inputs": {
361
- "x": {
362
- "name": "x",
363
  "type": {
364
  "type": "tensor"
365
  },
366
  "position": "bottom"
367
  },
368
- "y": {
369
- "name": "y",
370
  "type": {
371
  "type": "tensor"
372
  },
@@ -375,22 +318,22 @@
375
  },
376
  "outputs": {
377
  "loss": {
378
- "name": "loss",
379
  "type": {
380
  "type": "tensor"
381
  },
382
- "position": "top"
383
  }
384
- },
385
- "type": "basic",
386
- "sub_nodes": null
387
  }
388
  },
389
  "position": {
390
  "x": 110.53693593362718,
391
  "y": -1123.9976567905628
392
  },
393
- "parentId": null
 
 
394
  },
395
  {
396
  "id": "Input: label 1",
@@ -400,27 +343,30 @@
400
  "params": {},
401
  "display": null,
402
  "error": null,
 
 
403
  "meta": {
404
- "name": "Input: label",
405
- "params": {},
406
  "inputs": {},
407
  "outputs": {
408
  "y": {
409
- "name": "y",
410
  "type": {
411
  "type": "tensor"
412
  },
413
- "position": "top"
 
414
  }
415
  },
 
416
  "type": "basic",
417
- "sub_nodes": null
418
  }
419
  },
420
  "position": {
421
  "x": 666.110498676668,
422
  "y": -898.6721561114967
423
  },
 
 
424
  "parentId": null
425
  },
426
  {
@@ -429,17 +375,23 @@
429
  "data": {
430
  "title": "Optimizer",
431
  "params": {
432
- "type": "AdamW",
433
- "lr": 0.001
434
  },
435
  "display": null,
436
  "error": null,
437
  "meta": {
438
  "name": "Optimizer",
 
439
  "params": {
 
 
 
 
 
 
 
440
  "type": {
441
- "name": "type",
442
- "default": 1,
443
  "type": {
444
  "enum": [
445
  "AdamW",
@@ -450,35 +402,136 @@
450
  "Paged AdamW",
451
  "Galore AdamW"
452
  ]
453
- }
454
- },
455
- "lr": {
456
- "name": "lr",
457
- "default": 0.001,
458
- "type": {
459
- "type": "<class 'float'>"
460
- }
461
  }
462
  },
463
  "inputs": {
464
  "loss": {
 
 
 
465
  "name": "loss",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
466
  "type": {
467
  "type": "tensor"
468
  },
469
  "position": "bottom"
470
  }
471
  },
472
- "outputs": {},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
  "type": "basic",
474
- "sub_nodes": null
 
 
 
 
 
 
 
 
 
475
  }
476
  },
477
  "position": {
478
- "x": 165.28398260528976,
479
- "y": -1338.6254108128633
480
  },
481
- "parentId": null
 
482
  }
483
  ],
484
  "edges": [
@@ -537,6 +590,34 @@
537
  "target": "Optimizer 1",
538
  "sourceHandle": "loss",
539
  "targetHandle": "loss"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
540
  }
541
  ]
542
  }
 
11
  "error": null,
12
  "meta": {
13
  "name": "Input: features",
14
+ "type": "basic",
 
15
  "outputs": {
16
  "x": {
17
+ "position": "top",
18
  "name": "x",
19
  "type": {
20
  "type": "tensor"
21
+ }
 
22
  }
23
  },
24
+ "params": {},
25
+ "inputs": {}
26
+ },
27
+ "collapsed": true,
28
+ "__execution_delay": null
29
  },
30
  "position": {
31
  "x": -108.60604658638658,
32
  "y": 63.96065124378427
33
  },
34
+ "width": 200.0,
35
+ "height": 200.0,
36
  "parentId": null
37
  },
38
  {
 
43
  "params": {},
44
  "display": null,
45
  "error": null,
46
+ "__execution_delay": null,
47
+ "collapsed": true,
48
  "meta": {
49
  "name": "Input: graph edges",
 
50
  "inputs": {},
51
+ "params": {},
52
+ "type": "basic",
53
  "outputs": {
54
  "edges": {
55
  "name": "edges",
 
58
  },
59
  "position": "top"
60
  }
61
+ }
 
 
62
  }
63
  },
64
  "position": {
65
  "x": 180.7373888617958,
66
  "y": 58.54904654355781
67
  },
68
+ "width": 200.0,
69
+ "parentId": null,
70
+ "height": 200.0
71
  },
72
  {
73
  "id": "Linear 1",
 
80
  "display": null,
81
  "error": null,
82
  "meta": {
 
 
 
 
 
 
 
 
 
 
83
  "inputs": {
84
  "x": {
 
85
  "type": {
86
  "type": "tensor"
87
  },
88
+ "position": "bottom",
89
+ "name": "x"
90
  }
91
  },
92
+ "type": "basic",
93
+ "name": "Linear",
94
  "outputs": {
95
  "x": {
 
96
  "type": {
97
  "type": "tensor"
98
  },
99
+ "position": "top",
100
+ "name": "x"
101
  }
102
  },
103
+ "params": {
104
+ "output_dim": {
105
+ "name": "output_dim",
106
+ "type": {
107
+ "type": "<class 'str'>"
108
+ },
109
+ "default": "same"
110
+ }
111
+ }
112
  }
113
  },
114
  "position": {
115
+ "x": 78.37881963123723,
116
+ "y": -528.3012263817914
117
  },
118
+ "parentId": null,
119
+ "width": 204.0,
120
+ "height": 140.0
121
  },
122
  {
123
  "id": "Activation 1",
 
130
  "display": null,
131
  "error": null,
132
  "meta": {
133
+ "outputs": {
134
+ "x": {
135
+ "position": "top",
136
+ "type": {
137
+ "type": "tensor"
138
+ },
139
+ "name": "x"
140
+ }
141
+ },
142
  "name": "Activation",
143
+ "type": "basic",
144
+ "inputs": {
145
+ "x": {
146
+ "position": "bottom",
147
+ "name": "x",
148
+ "type": {
149
+ "type": "tensor"
150
+ }
151
+ }
152
+ },
153
  "params": {
154
  "type": {
155
+ "default": "OptionsFor_type.ReLU",
156
  "name": "type",
 
157
  "type": {
158
  "enum": [
159
  "ReLU",
 
163
  ]
164
  }
165
  }
166
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  }
168
  },
169
  "position": {
170
+ "x": 98.44658319023353,
171
+ "y": -741.1411130550297
172
  },
173
+ "height": 154.0,
174
+ "parentId": null,
175
+ "width": 173.0
176
  },
177
  {
178
  "id": "Dropout 1",
 
185
  "display": null,
186
  "error": null,
187
  "meta": {
188
+ "type": "basic",
 
 
 
 
 
 
 
 
 
189
  "inputs": {
190
  "x": {
191
  "name": "x",
 
195
  "position": "bottom"
196
  }
197
  },
198
+ "name": "Dropout",
199
+ "params": {
200
+ "p": {
201
+ "default": 0.5,
202
  "type": {
203
+ "type": "<class 'float'>"
204
  },
205
+ "name": "p"
206
  }
207
  },
208
+ "outputs": {
209
+ "x": {
210
+ "position": "top",
211
+ "name": "x",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  "type": {
213
+ "type": "tensor"
214
  }
215
  }
216
+ }
 
 
 
 
217
  }
218
  },
219
  "position": {
220
+ "x": 73.61437458187964,
221
+ "y": -929.9824215609918
222
  },
223
+ "width": 207.0,
224
  "parentId": null,
225
+ "height": 159.0
 
226
  },
227
  {
228
  "id": "Graph conv 1",
 
235
  "display": null,
236
  "error": null,
237
  "meta": {
238
+ "outputs": {
239
+ "x": {
240
+ "type": {
241
+ "type": "tensor"
242
+ },
243
+ "name": "x",
244
+ "position": "top"
245
+ }
246
+ },
247
+ "type": "basic",
248
  "name": "Graph conv",
249
  "params": {
250
  "type": {
251
  "name": "type",
252
+ "default": "OptionsFor_type.GCNConv",
253
  "type": {
254
  "enum": [
255
  "GCNConv",
 
262
  },
263
  "inputs": {
264
  "x": {
 
265
  "type": {
266
  "type": "tensor"
267
  },
268
+ "name": "x",
269
  "position": "bottom"
270
  },
271
  "edges": {
 
275
  },
276
  "position": "bottom"
277
  }
278
+ }
 
 
 
 
 
 
 
 
 
 
 
279
  }
280
  },
281
  "position": {
282
  "x": 64.08886242755246,
283
  "y": -269.43023573181557
284
  },
285
+ "height": 200.0,
286
+ "width": 200.0,
287
  "parentId": null
288
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  {
290
  "id": "Supervised loss 1",
291
  "type": "basic",
 
294
  "params": {},
295
  "display": null,
296
  "error": null,
297
+ "collapsed": true,
298
+ "__execution_delay": null,
299
  "meta": {
300
+ "type": "basic",
301
  "params": {},
302
+ "name": "Supervised loss",
303
  "inputs": {
304
+ "y": {
305
+ "name": "y",
306
  "type": {
307
  "type": "tensor"
308
  },
309
  "position": "bottom"
310
  },
311
+ "x": {
312
+ "name": "x",
313
  "type": {
314
  "type": "tensor"
315
  },
 
318
  },
319
  "outputs": {
320
  "loss": {
321
+ "position": "top",
322
  "type": {
323
  "type": "tensor"
324
  },
325
+ "name": "loss"
326
  }
327
+ }
 
 
328
  }
329
  },
330
  "position": {
331
  "x": 110.53693593362718,
332
  "y": -1123.9976567905628
333
  },
334
+ "parentId": null,
335
+ "height": 80.0,
336
+ "width": 204.0
337
  },
338
  {
339
  "id": "Input: label 1",
 
343
  "params": {},
344
  "display": null,
345
  "error": null,
346
+ "collapsed": true,
347
+ "__execution_delay": null,
348
  "meta": {
 
 
349
  "inputs": {},
350
  "outputs": {
351
  "y": {
 
352
  "type": {
353
  "type": "tensor"
354
  },
355
+ "position": "top",
356
+ "name": "y"
357
  }
358
  },
359
+ "name": "Input: label",
360
  "type": "basic",
361
+ "params": {}
362
  }
363
  },
364
  "position": {
365
  "x": 666.110498676668,
366
  "y": -898.6721561114967
367
  },
368
+ "width": 200.0,
369
+ "height": 73.0,
370
  "parentId": null
371
  },
372
  {
 
375
  "data": {
376
  "title": "Optimizer",
377
  "params": {
378
+ "lr": 0.001,
379
+ "type": "AdamW"
380
  },
381
  "display": null,
382
  "error": null,
383
  "meta": {
384
  "name": "Optimizer",
385
+ "outputs": {},
386
  "params": {
387
+ "lr": {
388
+ "default": 0.001,
389
+ "name": "lr",
390
+ "type": {
391
+ "type": "<class 'float'>"
392
+ }
393
+ },
394
  "type": {
 
 
395
  "type": {
396
  "enum": [
397
  "AdamW",
 
402
  "Paged AdamW",
403
  "Galore AdamW"
404
  ]
405
+ },
406
+ "name": "type",
407
+ "default": "OptionsFor_type.AdamW"
 
 
 
 
 
408
  }
409
  },
410
  "inputs": {
411
  "loss": {
412
+ "type": {
413
+ "type": "tensor"
414
+ },
415
  "name": "loss",
416
+ "position": "bottom"
417
+ }
418
+ },
419
+ "type": "basic"
420
+ }
421
+ },
422
+ "position": {
423
+ "x": 115.25730958703494,
424
+ "y": -1431.5320892753364
425
+ },
426
+ "width": 200.0,
427
+ "height": 233.0,
428
+ "parentId": null
429
+ },
430
+ {
431
+ "id": "Repeat 3",
432
+ "type": "basic",
433
+ "data": {
434
+ "title": "Repeat",
435
+ "params": {
436
+ "times": 1.0
437
+ },
438
+ "display": null,
439
+ "error": null,
440
+ "meta": {
441
+ "type": "basic",
442
+ "position": {
443
+ "y": 340.0,
444
+ "x": 371.0
445
+ },
446
+ "outputs": {
447
+ "output": {
448
+ "name": "output",
449
  "type": {
450
  "type": "tensor"
451
  },
452
  "position": "bottom"
453
  }
454
  },
455
+ "name": "Repeat",
456
+ "params": {
457
+ "times": {
458
+ "name": "times",
459
+ "default": 1.0,
460
+ "type": {
461
+ "type": "<class 'int'>"
462
+ }
463
+ }
464
+ },
465
+ "inputs": {
466
+ "input": {
467
+ "type": {
468
+ "type": "tensor"
469
+ },
470
+ "position": "top",
471
+ "name": "input"
472
+ }
473
+ }
474
+ }
475
+ },
476
+ "position": {
477
+ "x": -245.1288628776232,
478
+ "y": -276.90661040974317
479
+ },
480
+ "width": 200.0,
481
+ "height": 200.0
482
+ },
483
+ {
484
+ "id": "Repeat 1",
485
+ "type": "basic",
486
+ "data": {
487
+ "title": "Repeat",
488
+ "params": {
489
+ "times": 1.0
490
+ },
491
+ "display": null,
492
+ "error": null,
493
+ "meta": {
494
+ "outputs": {
495
+ "output": {
496
+ "position": "bottom",
497
+ "type": {
498
+ "type": "tensor"
499
+ },
500
+ "name": "output"
501
+ }
502
+ },
503
+ "params": {
504
+ "times": {
505
+ "default": 1.0,
506
+ "type": {
507
+ "type": "<class 'int'>"
508
+ },
509
+ "name": "times"
510
+ }
511
+ },
512
+ "position": {
513
+ "x": 387.0,
514
+ "y": 337.0
515
+ },
516
  "type": "basic",
517
+ "name": "Repeat",
518
+ "inputs": {
519
+ "input": {
520
+ "name": "input",
521
+ "position": "top",
522
+ "type": {
523
+ "type": "tensor"
524
+ }
525
+ }
526
+ }
527
  }
528
  },
529
  "position": {
530
+ "x": -258.0088683218416,
531
+ "y": -737.3822225246788
532
  },
533
+ "width": 200.0,
534
+ "height": 200.0
535
  }
536
  ],
537
  "edges": [
 
590
  "target": "Optimizer 1",
591
  "sourceHandle": "loss",
592
  "targetHandle": "loss"
593
+ },
594
+ {
595
+ "id": "Graph conv 1 Repeat 3",
596
+ "source": "Graph conv 1",
597
+ "target": "Repeat 3",
598
+ "sourceHandle": "x",
599
+ "targetHandle": "input"
600
+ },
601
+ {
602
+ "id": "Repeat 3 Graph conv 1",
603
+ "source": "Repeat 3",
604
+ "target": "Graph conv 1",
605
+ "sourceHandle": "output",
606
+ "targetHandle": "x"
607
+ },
608
+ {
609
+ "id": "Dropout 1 Repeat 1",
610
+ "source": "Dropout 1",
611
+ "target": "Repeat 1",
612
+ "sourceHandle": "x",
613
+ "targetHandle": "input"
614
+ },
615
+ {
616
+ "id": "Repeat 1 Linear 1",
617
+ "source": "Repeat 1",
618
+ "target": "Linear 1",
619
+ "sourceHandle": "output",
620
+ "targetHandle": "x"
621
  }
622
  ]
623
  }
lynxkite-app/data/example-pizza.md ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ hello
2
+
3
+ ### 1. **Overview**
4
+
5
+ This document outlines the pricing structure and available options for our pizza delivery service. The goal is to provide clear guidance on the pricing tiers, additional offerings, and optional extras to ensure consistency across all locations and platforms (phone, online, in-app). All pricing is based on current market trends, food costs, and competitive analysis.
6
+
7
+ ---
8
+
9
+ ### 2. **Pizza Options**
10
+
11
+ #### 2.1 **Size & Base Pricing**
12
+
13
+ | Size | Diameter | Price (Cheese Pizza) |
14
+ |------------------|------------|----------------------|
15
+ | Small | 10 inches | $8.99 |
16
+ | Medium | 12 inches | $11.99 |
17
+ | Large | 14 inches | $14.99 |
18
+ | Extra Large | 16 inches | $17.99 |
19
+
20
+ **Note**: Cheese pizza pricing includes sauce and cheese. Toppings are additional (see section 2.3).
21
+
22
+ #### 2.2 **Crust Options**
23
+
24
+ | Crust Type | Description | Price Adjustment |
25
+ |------------------|------------------------------------------|------------------|
26
+ | Classic Hand-Tossed | Soft, airy texture | No Change |
27
+ | Thin & Crispy | Light and crunchy | No Change |
28
+ | Stuffed Crust | Filled with mozzarella | +$2.00 (M-XL) |
29
+ | Gluten-Free | 10" only; made with rice flour | +$2.50 (Small Only) |
30
+
31
+ ---
32
+
33
+ ### 3. **Toppings**
34
+
35
+ #### 3.1 **Standard Toppings**
36
+ **Price per topping:**
37
+
38
+ - Small: $1.00
39
+ - Medium: $1.50
40
+ - Large: $2.00
41
+ - Extra Large: $2.50
42
+
43
+ | Topping | Category |
44
+ |------------------|----------------|
45
+ | Pepperoni | Meat |
46
+ | Sausage | Meat |
47
+ | Mushrooms | Vegetable |
48
+ | Onions | Vegetable |
49
+ | Bell Peppers | Vegetable |
50
+ | Olives | Vegetable |
51
+ | Extra Cheese | Dairy |
52
+
53
+ #### 3.2 **Premium Toppings**
54
+ **Price per topping:**
55
+
56
+ - Small: $1.75
57
+ - Medium: $2.25
58
+ - Large: $2.75
59
+ - Extra Large: $3.25
60
+
61
+ | Topping | Category |
62
+ |------------------|----------------|
63
+ | Grilled Chicken | Meat |
64
+ | Bacon | Meat |
65
+ | Sun-Dried Tomatoes| Vegetable |
66
+ | Artichoke Hearts | Vegetable |
67
+ | Feta Cheese | Dairy |
68
+ | Vegan Cheese | Dairy Alternative |
69
+
70
+ ---
71
+
72
+ ### 4. **Specialty Pizzas**
73
+
74
+ Specialty pizzas include a combination of premium toppings and are available in all sizes. Prices below are for Medium size, with additional costs for upgrading to larger sizes.
75
+
76
+ | Pizza Name | Description | Price (Medium) |
77
+ |----------------------|----------------------------------------------------|-----------------|
78
+ | Meat Lover’s | Pepperoni, sausage, bacon, ham | $16.99 |
79
+ | Veggie Delight | Mushrooms, bell peppers, onions, olives | $14.99 |
80
+ | BBQ Chicken | BBQ sauce, grilled chicken, red onions, cilantro | $17.99 |
81
+ | Margherita | Fresh mozzarella, tomatoes, basil | $15.99 |
82
+ | Hawaiian | Ham, pineapple | $14.99 |
83
+
84
+ ---
85
+
86
+ ### 5. **Additional Menu Items**
87
+
88
+ #### 5.1 **Side Orders**
89
+
90
+ | Item | Description | Price |
91
+ |--------------------|--------------------------------------|---------------|
92
+ | Garlic Breadsticks | Served with marinara dipping sauce | $5.99 |
93
+ | Chicken Wings | Buffalo, BBQ, or plain (10 pieces) | $9.99 |
94
+ | Mozzarella Sticks | Served with marinara (8 pieces) | $6.99 |
95
+ | Caesar Salad | Romaine, croutons, Caesar dressing | $7.99 |
96
+
97
+ #### 5.2 **Desserts**
98
+
99
+ | Item | Description | Price |
100
+ |--------------------|--------------------------------------|---------------|
101
+ | Chocolate Brownies | Chewy and rich (6 pieces) | $4.99 |
102
+ | Cinnamon Sticks | Dusted with cinnamon sugar | $5.99 |
103
+
104
+ ---
105
+
106
+ ### 6. **Drinks**
107
+
108
+ | Size | Price |
109
+ |--------------------|---------------|
110
+ | 20 oz Bottle | $1.99 |
111
+ | 2-Liter Bottle | $3.50 |
112
+
113
+ Available options: Coke, Diet Coke, Sprite, Root Beer, Lemonade.
114
+
115
+ ---
116
+
117
+ ### 7. **Delivery Fees & Minimum Order**
118
+
119
+ - **Delivery Fee**: $2.99
120
+ - **Minimum Order**: $12.00
121
+
122
+ *Note: Delivery fees and minimum order thresholds apply to all delivery orders within a 5-mile radius. Additional charges may apply for orders outside this zone.*
123
+
124
+ ---
125
+
126
+ ### 8. **Promotions & Discounts**
127
+
128
+ - **Monday Madness**: Buy one large pizza, get a second pizza for 50% off.
129
+ - **Student Discount**: 10% off with valid student ID (pickup only).
130
+ - **Family Deal**: 2 large pizzas, 1 side, and 2-liter soda for $29.99.
131
+
132
+ ---
133
+
134
+ ### 9. **Conclusion**
135
+
136
+ This pricing and menu structure is designed to offer a wide range of choices for our customers while maintaining competitive pricing and ensuring profitability. Please ensure all team members are familiar with the details in this document and implement it accordingly.
lynxkite-app/data/night demo ADDED
The diff for this file is too large to render. See raw diff
 
lynxkite-app/web/src/workspace/nodes/NodeParameter.tsx CHANGED
@@ -24,7 +24,8 @@ export default function NodeParameter({ name, value, meta, onChange }: NodeParam
24
  <textarea className="textarea textarea-bordered w-full max-w-xs"
25
  rows={6}
26
  value={value}
27
- onChange={(evt) => onChange(evt.currentTarget.value)}
 
28
  />
29
  </> : meta?.type?.enum ? <>
30
  <ParamName name={name} />
 
24
  <textarea className="textarea textarea-bordered w-full max-w-xs"
25
  rows={6}
26
  value={value}
27
+ onChange={(evt) => onChange(evt.currentTarget.value, { delay: 2 })}
28
+ onBlur={(evt) => onChange(evt.currentTarget.value, { delay: 0 })}
29
  />
30
  </> : meta?.type?.enum ? <>
31
  <ParamName name={name} />
lynxkite-graph-analytics/pyproject.toml CHANGED
@@ -6,9 +6,11 @@ readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
8
  "grand-cypher>=0.12.0",
 
9
  "lynxkite-core",
10
  "matplotlib>=3.10.0",
11
  "networkx>=3.4.2",
 
12
  "pandas>=2.2.3",
13
  "polars[gpu]>=1.14.0",
14
  ]
 
6
  requires-python = ">=3.11"
7
  dependencies = [
8
  "grand-cypher>=0.12.0",
9
+ "joblib>=1.4.2",
10
  "lynxkite-core",
11
  "matplotlib>=3.10.0",
12
  "networkx>=3.4.2",
13
+ "osmnx>=2.0.1",
14
  "pandas>=2.2.3",
15
  "polars[gpu]>=1.14.0",
16
  ]
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/lynxkite_ops.py CHANGED
@@ -6,13 +6,16 @@ from collections import deque
6
  import dataclasses
7
  import functools
8
  import grandcypher
 
9
  import matplotlib
10
  import networkx as nx
11
  import pandas as pd
12
  import polars as pl
13
  import traceback
14
  import typing
 
15
 
 
16
  ENV = "LynxKite Graph Analytics"
17
  op = ops.op_registration(ENV)
18
 
@@ -52,6 +55,8 @@ class Bundle:
52
  d = dict(graph.nodes(data=True))
53
  nodes = pd.DataFrame(d.values(), index=d.keys())
54
  nodes["id"] = nodes.index
 
 
55
  return cls(
56
  dfs={"edges": edges, "nodes": nodes},
57
  relations=[
@@ -187,6 +192,32 @@ def import_csv(
187
  )
188
 
189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  @op("Create scale-free graph")
191
  def create_scale_free_graph(*, nodes: int = 10):
192
  """Creates a scale-free graph with the given number of nodes."""
@@ -213,6 +244,11 @@ def discard_loop_edges(graph: nx.Graph):
213
  return graph
214
 
215
 
 
 
 
 
 
216
  @op("SQL")
217
  def sql(bundle: Bundle, *, query: ops.LongStr, save_as: str = "result"):
218
  """Run a SQL query on the DataFrames in the bundle. Save the results as a new DataFrame."""
@@ -286,7 +322,9 @@ def _map_color(value):
286
  colors = cmap.colors[: len(categories)]
287
  return [
288
  "#{:02x}{:02x}{:02x}".format(int(r * 255), int(g * 255), int(b * 255))
289
- for r, g, b in [colors[categories.get_loc(v)] for v in value]
 
 
290
  ]
291
 
292
 
@@ -295,10 +333,35 @@ def visualize_graph(graph: Bundle, *, color_nodes_by: ops.NodeAttribute = None):
295
  nodes = graph.dfs["nodes"].copy()
296
  if color_nodes_by:
297
  nodes["color"] = _map_color(nodes[color_nodes_by])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  nodes = nodes.to_records()
299
  edges = graph.dfs["edges"].drop_duplicates(["source", "target"])
300
  edges = edges.to_records()
301
- pos = nx.spring_layout(graph.to_nx(), iterations=max(1, int(10000 / len(nodes))))
302
  v = {
303
  "animationDuration": 500,
304
  "animationEasingUpdate": "quinticInOut",
@@ -308,7 +371,7 @@ def visualize_graph(graph: Bundle, *, color_nodes_by: ops.NodeAttribute = None):
308
  "roam": True,
309
  "lineStyle": {
310
  "color": "gray",
311
- "curveness": 0.3,
312
  },
313
  "emphasis": {
314
  "focus": "adjacency",
 
6
  import dataclasses
7
  import functools
8
  import grandcypher
9
+ import joblib
10
  import matplotlib
11
  import networkx as nx
12
  import pandas as pd
13
  import polars as pl
14
  import traceback
15
  import typing
16
+ import zipfile
17
 
18
+ mem = joblib.Memory("../joblib-cache")
19
  ENV = "LynxKite Graph Analytics"
20
  op = ops.op_registration(ENV)
21
 
 
55
  d = dict(graph.nodes(data=True))
56
  nodes = pd.DataFrame(d.values(), index=d.keys())
57
  nodes["id"] = nodes.index
58
+ if "index" in nodes.columns:
59
+ nodes.drop(columns=["index"], inplace=True)
60
  return cls(
61
  dfs={"edges": edges, "nodes": nodes},
62
  relations=[
 
192
  )
193
 
194
 
195
+ @op("Import GraphML")
196
+ @mem.cache
197
+ def import_graphml(*, filename: str):
198
+ """Imports a GraphML file."""
199
+ if filename.endswith(".zip"):
200
+ with zipfile.ZipFile(filename, "r") as z:
201
+ for fn in z.namelist():
202
+ if fn.endswith(".graphml"):
203
+ with z.open(fn) as f:
204
+ G = nx.read_graphml(f)
205
+ break
206
+ else:
207
+ raise ValueError("No GraphML file found in the ZIP archive.")
208
+ else:
209
+ G = nx.read_graphml(filename)
210
+ return G
211
+
212
+
213
+ @op("Graph from OSM")
214
+ @mem.cache
215
+ def import_osm(*, location: str):
216
+ import osmnx as ox
217
+
218
+ return ox.graph.graph_from_place(location, network_type="drive")
219
+
220
+
221
  @op("Create scale-free graph")
222
  def create_scale_free_graph(*, nodes: int = 10):
223
  """Creates a scale-free graph with the given number of nodes."""
 
244
  return graph
245
 
246
 
247
+ @op("Discard parallel edges")
248
+ def discard_parallel_edges(graph: nx.Graph):
249
+ return nx.DiGraph(graph)
250
+
251
+
252
  @op("SQL")
253
  def sql(bundle: Bundle, *, query: ops.LongStr, save_as: str = "result"):
254
  """Run a SQL query on the DataFrames in the bundle. Save the results as a new DataFrame."""
 
322
  colors = cmap.colors[: len(categories)]
323
  return [
324
  "#{:02x}{:02x}{:02x}".format(int(r * 255), int(g * 255), int(b * 255))
325
+ for r, g, b in [
326
+ colors[min(len(colors) - 1, categories.get_loc(v))] for v in value
327
+ ]
328
  ]
329
 
330
 
 
333
  nodes = graph.dfs["nodes"].copy()
334
  if color_nodes_by:
335
  nodes["color"] = _map_color(nodes[color_nodes_by])
336
+ for cols in ["x y", "long lat"]:
337
+ x, y = cols.split()
338
+ if (
339
+ x in nodes.columns
340
+ and nodes[x].dtype == "float64"
341
+ and y in nodes.columns
342
+ and nodes[y].dtype == "float64"
343
+ ):
344
+ cx, cy = nodes[x].mean(), nodes[y].mean()
345
+ dx, dy = nodes[x].std(), nodes[y].std()
346
+ # Scale up to avoid float precision issues and because eCharts omits short edges.
347
+ scale_x = 100 / max(dx, dy)
348
+ scale_y = scale_x
349
+ if y == "lat":
350
+ scale_y *= -1
351
+ pos = {
352
+ node_id: ((row[x] - cx) * scale_x, (row[y] - cy) * scale_y)
353
+ for node_id, row in nodes.iterrows()
354
+ }
355
+ curveness = 0 # Street maps are better with straight streets.
356
+ break
357
+ else:
358
+ pos = nx.spring_layout(
359
+ graph.to_nx(), iterations=max(1, int(10000 / len(nodes)))
360
+ )
361
+ curveness = 0.3
362
  nodes = nodes.to_records()
363
  edges = graph.dfs["edges"].drop_duplicates(["source", "target"])
364
  edges = edges.to_records()
 
365
  v = {
366
  "animationDuration": 500,
367
  "animationEasingUpdate": "quinticInOut",
 
371
  "roam": True,
372
  "lineStyle": {
373
  "color": "gray",
374
+ "curveness": curveness,
375
  },
376
  "emphasis": {
377
  "focus": "adjacency",
lynxkite-graph-analytics/src/lynxkite_plugins/graph_analytics/pytorch_model_ops.py CHANGED
@@ -65,3 +65,11 @@ reg(
65
  P.basic("lr", 0.001),
66
  ],
67
  )
 
 
 
 
 
 
 
 
 
65
  P.basic("lr", 0.001),
66
  ],
67
  )
68
+
69
+ ops.register_passive_op(
70
+ ENV,
71
+ "Repeat",
72
+ inputs=[ops.Input(name="input", position="top", type="tensor")],
73
+ outputs=[ops.Output(name="output", position="bottom", type="tensor")],
74
+ params=[ops.Parameter.basic("times", 1, int)],
75
+ )
lynxkite-graph-analytics/uv.lock CHANGED
@@ -10,26 +10,60 @@ resolution-markers = [
10
  ]
11
 
12
  [[package]]
13
- name = "anyio"
14
- version = "4.8.0"
15
  source = { registry = "https://pypi.org/simple" }
16
- dependencies = [
17
- { name = "idna" },
18
- { name = "sniffio" },
19
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
20
- ]
21
- sdist = { url = "https://files.pythonhosted.org/packages/a3/73/199a98fc2dae33535d6b8e8e6ec01f8c1d76c9adb096c6b7d64823038cde/anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", size = 181126 }
22
  wheels = [
23
- { url = "https://files.pythonhosted.org/packages/46/eb/e7f063ad1fec6b3178a3cd82d1a3c4de82cccf283fc42746168188e1cdd5/anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a", size = 96041 },
24
  ]
25
 
26
  [[package]]
27
- name = "certifi"
28
- version = "2025.1.31"
29
  source = { registry = "https://pypi.org/simple" }
30
- sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
31
  wheels = [
32
- { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  ]
34
 
35
  [[package]]
@@ -99,13 +133,13 @@ wheels = [
99
  [[package]]
100
  name = "cudf-polars-cu12"
101
  version = "24.12.0"
102
- source = { registry = "https://pypi.nvidia.com/" }
103
  dependencies = [
104
  { name = "polars" },
105
  { name = "pylibcudf-cu12" },
106
  ]
107
  wheels = [
108
- { url = "https://pypi.nvidia.com/cudf-polars-cu12/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa" },
109
  ]
110
 
111
  [[package]]
@@ -195,6 +229,23 @@ wheels = [
195
  { url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 },
196
  ]
197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  [[package]]
199
  name = "grand-cypher"
200
  version = "0.12.0"
@@ -216,49 +267,21 @@ dependencies = [
216
  sdist = { url = "https://files.pythonhosted.org/packages/65/c6/27400e2d81bd769ebe65c695cead44c8efb55ac3769826a01c9223d65709/grandiso-2.2.0.tar.gz", hash = "sha256:66f292d27328e13122065c7905ad0ac79c4649f69a35e7b98a3631654a0bf77c", size = 16277 }
217
 
218
  [[package]]
219
- name = "h11"
220
- version = "0.14.0"
221
- source = { registry = "https://pypi.org/simple" }
222
- sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 }
223
- wheels = [
224
- { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 },
225
- ]
226
-
227
- [[package]]
228
- name = "httpcore"
229
- version = "1.0.7"
230
- source = { registry = "https://pypi.org/simple" }
231
- dependencies = [
232
- { name = "certifi" },
233
- { name = "h11" },
234
- ]
235
- sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 }
236
- wheels = [
237
- { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 },
238
- ]
239
-
240
- [[package]]
241
- name = "httpx"
242
- version = "0.28.1"
243
  source = { registry = "https://pypi.org/simple" }
244
- dependencies = [
245
- { name = "anyio" },
246
- { name = "certifi" },
247
- { name = "httpcore" },
248
- { name = "idna" },
249
- ]
250
- sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
251
  wheels = [
252
- { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
253
  ]
254
 
255
  [[package]]
256
- name = "idna"
257
- version = "3.10"
258
  source = { registry = "https://pypi.org/simple" }
259
- sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
260
  wheels = [
261
- { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
262
  ]
263
 
264
  [[package]]
@@ -339,23 +362,23 @@ wheels = [
339
  [[package]]
340
  name = "libcudf-cu12"
341
  version = "24.12.0"
342
- source = { registry = "https://pypi.nvidia.com/" }
343
  dependencies = [
344
  { name = "libkvikio-cu12" },
345
  { name = "nvidia-nvcomp-cu12" },
346
  ]
347
  wheels = [
348
- { url = "https://pypi.nvidia.com/libcudf-cu12/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1e78a247f31c6045221f3142a5fd15210d53c91043c5a4e260b67b5ddff43164" },
349
- { url = "https://pypi.nvidia.com/libcudf-cu12/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:47b7537a314b4462c24938f4e9118ea65bfe2de7440e99ecf278a38a14abf9ab" },
350
  ]
351
 
352
  [[package]]
353
  name = "libkvikio-cu12"
354
  version = "24.12.1"
355
- source = { registry = "https://pypi.nvidia.com/" }
356
  wheels = [
357
- { url = "https://pypi.nvidia.com/libkvikio-cu12/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7ed5d27263204a237ea7a14ce176ed885888c8daf47341ae0fbcecd55fb2c694" },
358
- { url = "https://pypi.nvidia.com/libkvikio-cu12/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c4f333dbbffc35ba94a028db3b24ddb1c3dfddff9c6fb0f17488dc662a86f481" },
359
  ]
360
 
361
  [[package]]
@@ -387,27 +410,29 @@ version = "0.1.0"
387
  source = { virtual = "." }
388
  dependencies = [
389
  { name = "grand-cypher" },
 
390
  { name = "lynxkite-core" },
391
  { name = "matplotlib" },
392
  { name = "networkx" },
393
- { name = "nx-cugraph-cu12" },
394
  { name = "pandas" },
395
  { name = "polars", extra = ["gpu"] },
396
  ]
397
 
398
  [package.optional-dependencies]
399
  gpu = [
400
- { name = "httpx" },
401
  ]
402
 
403
  [package.metadata]
404
  requires-dist = [
405
  { name = "grand-cypher", specifier = ">=0.12.0" },
406
- { name = "httpx", marker = "extra == 'gpu'" },
407
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
408
  { name = "matplotlib", specifier = ">=3.10.0" },
409
  { name = "networkx", specifier = ">=3.4.2" },
410
- { name = "nx-cugraph-cu12", specifier = ">=24.12.0" },
 
411
  { name = "pandas", specifier = ">=2.2.3" },
412
  { name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
413
  ]
@@ -517,69 +542,69 @@ wheels = [
517
  [[package]]
518
  name = "nvidia-cublas-cu12"
519
  version = "12.8.3.14"
520
- source = { registry = "https://pypi.nvidia.com/" }
521
  wheels = [
522
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:93a4e0e386cc7f6e56c822531396de8170ed17068a1e18f987574895044cd8c3" },
523
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44" },
524
- { url = "https://pypi.nvidia.com/nvidia-cublas-cu12/nvidia_cublas_cu12-12.8.3.14-py3-none-win_amd64.whl", hash = "sha256:9ae5eae500aead01fc4bdfc458209df638b1a3551557ce11a78eea9ece602ae9" },
525
  ]
526
 
527
  [[package]]
528
  name = "nvidia-curand-cu12"
529
  version = "10.3.9.55"
530
- source = { registry = "https://pypi.nvidia.com/" }
531
  wheels = [
532
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6bb90c044fa9b07cedae2ef29077c4cf851fb6fdd6d862102321f359dca81e9" },
533
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86" },
534
- { url = "https://pypi.nvidia.com/nvidia-curand-cu12/nvidia_curand_cu12-10.3.9.55-py3-none-win_amd64.whl", hash = "sha256:570d82475fe7f3d8ed01ffbe3b71796301e0e24c98762ca018ff8ce4f5418e1f" },
535
  ]
536
 
537
  [[package]]
538
  name = "nvidia-cusolver-cu12"
539
  version = "11.7.2.55"
540
- source = { registry = "https://pypi.nvidia.com/" }
541
  dependencies = [
542
  { name = "nvidia-cublas-cu12" },
543
  { name = "nvidia-cusparse-cu12" },
544
  { name = "nvidia-nvjitlink-cu12" },
545
  ]
546
  wheels = [
547
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:0fd9e98246f43c15bee5561147ad235dfdf2d037f5d07c9d41af3f7f72feb7cc" },
548
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b" },
549
- { url = "https://pypi.nvidia.com/nvidia-cusolver-cu12/nvidia_cusolver_cu12-11.7.2.55-py3-none-win_amd64.whl", hash = "sha256:a5a516c55da5c5aba98420d9bc9bcab18245f21ec87338cc1f930eb18dd411ac" },
550
  ]
551
 
552
  [[package]]
553
  name = "nvidia-cusparse-cu12"
554
  version = "12.5.7.53"
555
- source = { registry = "https://pypi.nvidia.com/" }
556
  dependencies = [
557
  { name = "nvidia-nvjitlink-cu12" },
558
  ]
559
  wheels = [
560
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d869c6146ca80f4305b62e02d924b4aaced936f8173e3cef536a67eed2a91af1" },
561
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d" },
562
- { url = "https://pypi.nvidia.com/nvidia-cusparse-cu12/nvidia_cusparse_cu12-12.5.7.53-py3-none-win_amd64.whl", hash = "sha256:82c201d6781bacf6bb7c654f0446728d0fe596dfdd82ef4a04c204ce3e107441" },
563
  ]
564
 
565
  [[package]]
566
  name = "nvidia-nvcomp-cu12"
567
  version = "4.1.0.6"
568
- source = { registry = "https://pypi.nvidia.com/" }
569
  wheels = [
570
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:3bff6267fa6aae59a98155262e5e9da6142e798dac5afd01f7389b23bce89803" },
571
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:aaff831f0fdbf20631df32e411ede37ddf5fd7297f78e77346441cd0d72cb787" },
572
- { url = "https://pypi.nvidia.com/nvidia-nvcomp-cu12/nvidia_nvcomp_cu12-4.1.0.6-py3-none-win_amd64.whl", hash = "sha256:df24bedfe9df8be67ae7c59f5d21223f082c5ce689679909ee4985c563a0a89f" },
573
  ]
574
 
575
  [[package]]
576
  name = "nvidia-nvjitlink-cu12"
577
  version = "12.8.61"
578
- source = { registry = "https://pypi.nvidia.com/" }
579
  wheels = [
580
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17" },
581
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0" },
582
- { url = "https://pypi.nvidia.com/nvidia-nvjitlink-cu12/nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c" },
583
  ]
584
 
585
  [[package]]
@@ -597,15 +622,30 @@ wheels = [
597
  [[package]]
598
  name = "nx-cugraph-cu12"
599
  version = "24.12.0"
600
- source = { registry = "https://pypi.nvidia.com/" }
601
  dependencies = [
602
  { name = "cupy-cuda12x" },
603
  { name = "networkx" },
604
  { name = "numpy" },
605
  { name = "pylibcugraph-cu12" },
606
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  wheels = [
608
- { url = "https://pypi.nvidia.com/nx-cugraph-cu12/nx_cugraph_cu12-24.12.0-py3-none-any.whl", hash = "sha256:a6bd906e498aefb7cfb0f7ec36d1fd776a72baee275da1452888ea82970956b6" },
609
  ]
610
 
611
  [[package]]
@@ -763,7 +803,7 @@ wheels = [
763
  [[package]]
764
  name = "pylibcudf-cu12"
765
  version = "24.12.0"
766
- source = { registry = "https://pypi.nvidia.com/" }
767
  dependencies = [
768
  { name = "cuda-python" },
769
  { name = "libcudf-cu12" },
@@ -774,16 +814,16 @@ dependencies = [
774
  { name = "typing-extensions" },
775
  ]
776
  wheels = [
777
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c61587a6d9e9f392745b9b238f3eebcfacbbf21e3c7d9fedf7a1a672284fcce" },
778
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6459baed065bc76fbc7ef34e14912982971c1a9d4bffb2699909d78a95b0b8a3" },
779
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd130e347c28716912b89a1f7ff653ca6e202bfbc79f5abbedd7918bb9124f34" },
780
- { url = "https://pypi.nvidia.com/pylibcudf-cu12/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e2bb951f1a2fddf1976b84aa4e6d1280689da22014d6d1d5f48364cc1b32e2d" },
781
  ]
782
 
783
  [[package]]
784
  name = "pylibcugraph-cu12"
785
  version = "24.12.0"
786
- source = { registry = "https://pypi.nvidia.com/" }
787
  dependencies = [
788
  { name = "nvidia-cublas-cu12" },
789
  { name = "nvidia-curand-cu12" },
@@ -792,17 +832,12 @@ dependencies = [
792
  { name = "pylibraft-cu12" },
793
  { name = "rmm-cu12" },
794
  ]
795
- wheels = [
796
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:314d0c35cf2fadee224577e23c141fae4c59532c7a4a9a9ccfbcfac0bfdd75a7" },
797
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bcc370b63c3b7da535c4c33658bbd8dde8ccef1dc63a5d6454afb462b8316de4" },
798
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa100594d5d7f1d4d1405e1628d879bf3a39431169a6bd65619cb73f8ffe99fc" },
799
- { url = "https://pypi.nvidia.com/pylibcugraph-cu12/pylibcugraph_cu12-24.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3ffdf0788aec9791b2483de45db0eeb2a1bafc0ae9ca8d34c8a5998a36b3120e" },
800
- ]
801
 
802
  [[package]]
803
  name = "pylibraft-cu12"
804
  version = "24.12.0"
805
- source = { registry = "https://pypi.nvidia.com/" }
806
  dependencies = [
807
  { name = "cuda-python" },
808
  { name = "numpy" },
@@ -812,11 +847,37 @@ dependencies = [
812
  { name = "nvidia-cusparse-cu12" },
813
  { name = "rmm-cu12" },
814
  ]
 
 
 
 
 
 
 
 
 
 
 
 
815
  wheels = [
816
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f3102f3b7886ad9583672fa2d47c3a941215e34d0ee3a8d3a32cebc2dfcc8606" },
817
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47d3915fd3cdf4022acbd0315f88b12155399ef0b0e77fcac050c459ab6b31b0" },
818
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:af4c259b275ce36f998b5adb16fd55582f90a20c5223029e02c9a59dc7ce5331" },
819
- { url = "https://pypi.nvidia.com/pylibraft-cu12/pylibraft_cu12-24.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:291b804ba21c34bbab17da34d6cc6ee86b9750f2714dfbd339c5906fefb7201e" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
820
  ]
821
 
822
  [[package]]
@@ -828,6 +889,35 @@ wheels = [
828
  { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
829
  ]
830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
831
  [[package]]
832
  name = "python-dateutil"
833
  version = "2.9.0.post0"
@@ -849,38 +939,73 @@ wheels = [
849
  { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
850
  ]
851
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
852
  [[package]]
853
  name = "rmm-cu12"
854
  version = "24.12.1"
855
- source = { registry = "https://pypi.nvidia.com/" }
856
  dependencies = [
857
  { name = "cuda-python" },
858
  { name = "numba" },
859
  { name = "numpy" },
860
  ]
861
  wheels = [
862
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d509d735201d1b0bc05b3e148e23a6216eabcfec67006a4e9311b6c25766023f" },
863
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1d6b166aaf9b81495ff33f2fe5a29ad12dc1ed6089daf9f387160e7734fc901" },
864
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317a6641fb37f3efa6e8eb76eeb568970a8c439e0090529520861fd139ef6f0c" },
865
- { url = "https://pypi.nvidia.com/rmm-cu12/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9460a386e34f1921c8d06204f320d705511de899ababb45302d314da036da5a" },
866
  ]
867
 
868
  [[package]]
869
- name = "six"
870
- version = "1.17.0"
871
  source = { registry = "https://pypi.org/simple" }
872
- sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
 
 
 
873
  wheels = [
874
- { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
875
  ]
876
 
877
  [[package]]
878
- name = "sniffio"
879
- version = "1.3.1"
880
  source = { registry = "https://pypi.org/simple" }
881
- sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
882
  wheels = [
883
- { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
884
  ]
885
 
886
  [[package]]
@@ -900,3 +1025,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a
900
  wheels = [
901
  { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
902
  ]
 
 
 
 
 
 
 
 
 
 
10
  ]
11
 
12
  [[package]]
13
+ name = "certifi"
14
+ version = "2025.1.31"
15
  source = { registry = "https://pypi.org/simple" }
16
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
 
 
 
 
 
17
  wheels = [
18
+ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
19
  ]
20
 
21
  [[package]]
22
+ name = "charset-normalizer"
23
+ version = "3.4.1"
24
  source = { registry = "https://pypi.org/simple" }
25
+ sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
26
  wheels = [
27
+ { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 },
28
+ { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 },
29
+ { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 },
30
+ { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 },
31
+ { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 },
32
+ { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 },
33
+ { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 },
34
+ { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 },
35
+ { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 },
36
+ { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 },
37
+ { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 },
38
+ { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 },
39
+ { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 },
40
+ { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
41
+ { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
42
+ { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
43
+ { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
44
+ { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
45
+ { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
46
+ { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
47
+ { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
48
+ { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
49
+ { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
50
+ { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
51
+ { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
52
+ { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
53
+ { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 },
54
+ { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 },
55
+ { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 },
56
+ { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 },
57
+ { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 },
58
+ { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 },
59
+ { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 },
60
+ { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 },
61
+ { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 },
62
+ { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 },
63
+ { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
64
+ { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
65
+ { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
66
+ { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
67
  ]
68
 
69
  [[package]]
 
133
  [[package]]
134
  name = "cudf-polars-cu12"
135
  version = "24.12.0"
136
+ source = { registry = "https://pypi.org/simple" }
137
  dependencies = [
138
  { name = "polars" },
139
  { name = "pylibcudf-cu12" },
140
  ]
141
  wheels = [
142
+ { url = "https://files.pythonhosted.org/packages/0f/6e/3d0b2d19ac853347f435f49815d471d461315d8f6e74f165624f16ddc7db/cudf_polars_cu12-24.12.0-py3-none-any.whl", hash = "sha256:3d2058f75251fd4921618bb1d4cfba0c99b670a12756df0d3f51559aca2298fa", size = 79456 },
143
  ]
144
 
145
  [[package]]
 
229
  { url = "https://files.pythonhosted.org/packages/99/3b/406d17b1f63e04a82aa621936e6e1c53a8c05458abd66300ac85ea7f9ae9/fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977", size = 1111638 },
230
  ]
231
 
232
+ [[package]]
233
+ name = "geopandas"
234
+ version = "1.0.1"
235
+ source = { registry = "https://pypi.org/simple" }
236
+ dependencies = [
237
+ { name = "numpy" },
238
+ { name = "packaging" },
239
+ { name = "pandas" },
240
+ { name = "pyogrio" },
241
+ { name = "pyproj" },
242
+ { name = "shapely" },
243
+ ]
244
+ sdist = { url = "https://files.pythonhosted.org/packages/39/08/2cf5d85356e45b10b8d066cf4c3ba1e9e3185423c48104eed87e8afd0455/geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab", size = 317736 }
245
+ wheels = [
246
+ { url = "https://files.pythonhosted.org/packages/c4/64/7d344cfcef5efddf9cf32f59af7f855828e9d74b5f862eddf5bfd9f25323/geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6", size = 323587 },
247
+ ]
248
+
249
  [[package]]
250
  name = "grand-cypher"
251
  version = "0.12.0"
 
267
  sdist = { url = "https://files.pythonhosted.org/packages/65/c6/27400e2d81bd769ebe65c695cead44c8efb55ac3769826a01c9223d65709/grandiso-2.2.0.tar.gz", hash = "sha256:66f292d27328e13122065c7905ad0ac79c4649f69a35e7b98a3631654a0bf77c", size = 16277 }
268
 
269
  [[package]]
270
+ name = "idna"
271
+ version = "3.10"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  source = { registry = "https://pypi.org/simple" }
273
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
 
 
 
 
 
 
274
  wheels = [
275
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
276
  ]
277
 
278
  [[package]]
279
+ name = "joblib"
280
+ version = "1.4.2"
281
  source = { registry = "https://pypi.org/simple" }
282
+ sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 }
283
  wheels = [
284
+ { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 },
285
  ]
286
 
287
  [[package]]
 
362
  [[package]]
363
  name = "libcudf-cu12"
364
  version = "24.12.0"
365
+ source = { registry = "https://pypi.org/simple" }
366
  dependencies = [
367
  { name = "libkvikio-cu12" },
368
  { name = "nvidia-nvcomp-cu12" },
369
  ]
370
  wheels = [
371
+ { url = "https://files.pythonhosted.org/packages/fa/ea/efccbbeb4012cdd247e3d12ed19c4cd70a770e6c22c1456d8cb569818083/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1e78a247f31c6045221f3142a5fd15210d53c91043c5a4e260b67b5ddff43164", size = 454436993 },
372
+ { url = "https://files.pythonhosted.org/packages/88/93/dc3a27c3904aa12a32def0df330f15a85d0f01e0420b18bc0efa8b3245ba/libcudf_cu12-24.12.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:47b7537a314b4462c24938f4e9118ea65bfe2de7440e99ecf278a38a14abf9ab", size = 457847164 },
373
  ]
374
 
375
  [[package]]
376
  name = "libkvikio-cu12"
377
  version = "24.12.1"
378
+ source = { registry = "https://pypi.org/simple" }
379
  wheels = [
380
+ { url = "https://files.pythonhosted.org/packages/24/17/8dbef99dc5a73dbf56dea090ba1c345cc4343bf8d13f331a8091d0e1c362/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7ed5d27263204a237ea7a14ce176ed885888c8daf47341ae0fbcecd55fb2c694", size = 1875299 },
381
+ { url = "https://files.pythonhosted.org/packages/0a/31/3be8facaf2f15849629a030e8fb1696ec80228270860b9ffd869a17a6a71/libkvikio_cu12-24.12.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:c4f333dbbffc35ba94a028db3b24ddb1c3dfddff9c6fb0f17488dc662a86f481", size = 1989095 },
382
  ]
383
 
384
  [[package]]
 
410
  source = { virtual = "." }
411
  dependencies = [
412
  { name = "grand-cypher" },
413
+ { name = "joblib" },
414
  { name = "lynxkite-core" },
415
  { name = "matplotlib" },
416
  { name = "networkx" },
417
+ { name = "osmnx" },
418
  { name = "pandas" },
419
  { name = "polars", extra = ["gpu"] },
420
  ]
421
 
422
  [package.optional-dependencies]
423
  gpu = [
424
+ { name = "nx-cugraph-cu12" },
425
  ]
426
 
427
  [package.metadata]
428
  requires-dist = [
429
  { name = "grand-cypher", specifier = ">=0.12.0" },
430
+ { name = "joblib", specifier = ">=1.4.2" },
431
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
432
  { name = "matplotlib", specifier = ">=3.10.0" },
433
  { name = "networkx", specifier = ">=3.4.2" },
434
+ { name = "nx-cugraph-cu12", marker = "extra == 'gpu'", specifier = ">=24.12.0" },
435
+ { name = "osmnx", specifier = ">=2.0.1" },
436
  { name = "pandas", specifier = ">=2.2.3" },
437
  { name = "polars", extras = ["gpu"], specifier = ">=1.14.0" },
438
  ]
 
542
  [[package]]
543
  name = "nvidia-cublas-cu12"
544
  version = "12.8.3.14"
545
+ source = { registry = "https://pypi.org/simple" }
546
  wheels = [
547
+ { url = "https://files.pythonhosted.org/packages/ed/63/684a6f72f52671ea222c12ecde9bdf748a0ba025e2ad3ec374e466c26eb6/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:93a4e0e386cc7f6e56c822531396de8170ed17068a1e18f987574895044cd8c3", size = 604900717 },
548
+ { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630 },
549
+ { url = "https://files.pythonhosted.org/packages/6c/54/fbfa3315b936d3358517f7da5f9f2557c279bf210e5261f0cf66cc0f9832/nvidia_cublas_cu12-12.8.3.14-py3-none-win_amd64.whl", hash = "sha256:9ae5eae500aead01fc4bdfc458209df638b1a3551557ce11a78eea9ece602ae9", size = 578387959 },
550
  ]
551
 
552
  [[package]]
553
  name = "nvidia-curand-cu12"
554
  version = "10.3.9.55"
555
+ source = { registry = "https://pypi.org/simple" }
556
  wheels = [
557
+ { url = "https://files.pythonhosted.org/packages/f4/13/bbcf48e2f8a6a9adef58f130bc968810528a4e66bbbe62fad335241e699f/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6bb90c044fa9b07cedae2ef29077c4cf851fb6fdd6d862102321f359dca81e9", size = 63623836 },
558
+ { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038 },
559
+ { url = "https://files.pythonhosted.org/packages/d6/f0/91252f3cffe3f3c233a8e17262c21b41534652edfe783c1e58ea1c92c115/nvidia_curand_cu12-10.3.9.55-py3-none-win_amd64.whl", hash = "sha256:570d82475fe7f3d8ed01ffbe3b71796301e0e24c98762ca018ff8ce4f5418e1f", size = 62761446 },
560
  ]
561
 
562
  [[package]]
563
  name = "nvidia-cusolver-cu12"
564
  version = "11.7.2.55"
565
+ source = { registry = "https://pypi.org/simple" }
566
  dependencies = [
567
  { name = "nvidia-cublas-cu12" },
568
  { name = "nvidia-cusparse-cu12" },
569
  { name = "nvidia-nvjitlink-cu12" },
570
  ]
571
  wheels = [
572
+ { url = "https://files.pythonhosted.org/packages/8c/ce/4214a892e804b20bf66d04f04a473006fc2d3dac158160ef85f1bc906639/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:0fd9e98246f43c15bee5561147ad235dfdf2d037f5d07c9d41af3f7f72feb7cc", size = 260094827 },
573
+ { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 },
574
+ { url = "https://files.pythonhosted.org/packages/c4/f9/e0e6f8b7aecd13e0f9e937d116fb3211329a0a92b9bea9624b1368de307a/nvidia_cusolver_cu12-11.7.2.55-py3-none-win_amd64.whl", hash = "sha256:a5a516c55da5c5aba98420d9bc9bcab18245f21ec87338cc1f930eb18dd411ac", size = 249600787 },
575
  ]
576
 
577
  [[package]]
578
  name = "nvidia-cusparse-cu12"
579
  version = "12.5.7.53"
580
+ source = { registry = "https://pypi.org/simple" }
581
  dependencies = [
582
  { name = "nvidia-nvjitlink-cu12" },
583
  ]
584
  wheels = [
585
+ { url = "https://files.pythonhosted.org/packages/2e/a2/313db0453087f5324a5900380ca2e57e050c8de76f407b5e11383dc762ae/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d869c6146ca80f4305b62e02d924b4aaced936f8173e3cef536a67eed2a91af1", size = 291963692 },
586
+ { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 },
587
+ { url = "https://files.pythonhosted.org/packages/7c/48/64b01653919a3d1d9b5117c156806ab0db8312c7496ff646477a5c1545bf/nvidia_cusparse_cu12-12.5.7.53-py3-none-win_amd64.whl", hash = "sha256:82c201d6781bacf6bb7c654f0446728d0fe596dfdd82ef4a04c204ce3e107441", size = 288767123 },
588
  ]
589
 
590
  [[package]]
591
  name = "nvidia-nvcomp-cu12"
592
  version = "4.1.0.6"
593
+ source = { registry = "https://pypi.org/simple" }
594
  wheels = [
595
+ { url = "https://files.pythonhosted.org/packages/91/51/17e3acc3b53e5a6d97db7ed79035e8b5f13aefa1f5a8e703287418eac2b4/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:3bff6267fa6aae59a98155262e5e9da6142e798dac5afd01f7389b23bce89803", size = 28724365 },
596
+ { url = "https://files.pythonhosted.org/packages/f6/3e/c90004db47c527c4f253c1c866facefbd2a5059ba50035a6967712b3b125/nvidia_nvcomp_cu12-4.1.0.6-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:aaff831f0fdbf20631df32e411ede37ddf5fd7297f78e77346441cd0d72cb787", size = 28944826 },
597
+ { url = "https://files.pythonhosted.org/packages/ef/97/be4151c26d13741237e1b58d6fac097b79b552bee4a9c89d7f150c4959fb/nvidia_nvcomp_cu12-4.1.0.6-py3-none-win_amd64.whl", hash = "sha256:df24bedfe9df8be67ae7c59f5d21223f082c5ce689679909ee4985c563a0a89f", size = 75296662 },
598
  ]
599
 
600
  [[package]]
601
  name = "nvidia-nvjitlink-cu12"
602
  version = "12.8.61"
603
+ source = { registry = "https://pypi.org/simple" }
604
  wheels = [
605
+ { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473 },
606
+ { url = "https://files.pythonhosted.org/packages/af/53/698f3758f48c5fcb1112721e40cc6714da3980d3c7e93bae5b29dafa9857/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b80ecab31085dda3ce3b41d043be0ec739216c3fc633b8abe212d5a30026df0", size = 38374634 },
607
+ { url = "https://files.pythonhosted.org/packages/7f/c6/0d1b2bfeb2ef42c06db0570c4d081e5cde4450b54c09e43165126cfe6ff6/nvidia_nvjitlink_cu12-12.8.61-py3-none-win_amd64.whl", hash = "sha256:1166a964d25fdc0eae497574d38824305195a5283324a21ccb0ce0c802cbf41c", size = 268514099 },
608
  ]
609
 
610
  [[package]]
 
622
  [[package]]
623
  name = "nx-cugraph-cu12"
624
  version = "24.12.0"
625
+ source = { registry = "https://pypi.org/simple" }
626
  dependencies = [
627
  { name = "cupy-cuda12x" },
628
  { name = "networkx" },
629
  { name = "numpy" },
630
  { name = "pylibcugraph-cu12" },
631
  ]
632
+ sdist = { url = "https://files.pythonhosted.org/packages/2e/a1/e968a05bc2980fa4ad66b3fe8e5411a48c3079f6faa4d4ed89d29d82a956/nx_cugraph_cu12-24.12.0.tar.gz", hash = "sha256:a21b60b57cad982678570a69cbbe6d58fb171b12e8c99b296f68bf89ac517813", size = 5259 }
633
+
634
+ [[package]]
635
+ name = "osmnx"
636
+ version = "2.0.1"
637
+ source = { registry = "https://pypi.org/simple" }
638
+ dependencies = [
639
+ { name = "geopandas" },
640
+ { name = "networkx" },
641
+ { name = "numpy" },
642
+ { name = "pandas" },
643
+ { name = "requests" },
644
+ { name = "shapely" },
645
+ ]
646
+ sdist = { url = "https://files.pythonhosted.org/packages/15/c4/dec0738e6defe0299ebb51a39b6c624f4093faad1f67e684859ba312dd30/osmnx-2.0.1.tar.gz", hash = "sha256:24bb7dc4c0d548ce11a61a79de08bdeea7d74f2d1889a93b60da825051c0e374", size = 86437 }
647
  wheels = [
648
+ { url = "https://files.pythonhosted.org/packages/77/59/4de56d8db7694831bea788de3a44e196a73f5c1053560b2ccf18282782c8/osmnx-2.0.1-py3-none-any.whl", hash = "sha256:6532b28f4eaf0c7621f03f77873e64c2e4de5bf46aeafb4faa84413bc9f34f62", size = 99641 },
649
  ]
650
 
651
  [[package]]
 
803
  [[package]]
804
  name = "pylibcudf-cu12"
805
  version = "24.12.0"
806
+ source = { registry = "https://pypi.org/simple" }
807
  dependencies = [
808
  { name = "cuda-python" },
809
  { name = "libcudf-cu12" },
 
814
  { name = "typing-extensions" },
815
  ]
816
  wheels = [
817
+ { url = "https://files.pythonhosted.org/packages/ee/0f/5a78a8bb72726de1ea50735c2e02588564542b8a0ad1069a067d9fe8e301/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c61587a6d9e9f392745b9b238f3eebcfacbbf21e3c7d9fedf7a1a672284fcce", size = 36400678 },
818
+ { url = "https://files.pythonhosted.org/packages/98/c9/66fe3954244f809b5b9a201e33d7cf8c663b09b0911443374b01333fe28a/pylibcudf_cu12-24.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6459baed065bc76fbc7ef34e14912982971c1a9d4bffb2699909d78a95b0b8a3", size = 37259282 },
819
+ { url = "https://files.pythonhosted.org/packages/fa/1b/5f43e550262de73dfab17bbc8b2ee3f0add116be28c7ed6ba61a53135859/pylibcudf_cu12-24.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd130e347c28716912b89a1f7ff653ca6e202bfbc79f5abbedd7918bb9124f34", size = 36317440 },
820
+ { 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 },
821
  ]
822
 
823
  [[package]]
824
  name = "pylibcugraph-cu12"
825
  version = "24.12.0"
826
+ source = { registry = "https://pypi.org/simple" }
827
  dependencies = [
828
  { name = "nvidia-cublas-cu12" },
829
  { name = "nvidia-curand-cu12" },
 
832
  { name = "pylibraft-cu12" },
833
  { name = "rmm-cu12" },
834
  ]
835
+ sdist = { url = "https://files.pythonhosted.org/packages/78/0f/10642063a2b228a3e9e192f5fbb1e9cf2b3914025bcb3f77fbf93d97b9b4/pylibcugraph_cu12-24.12.0.tar.gz", hash = "sha256:f8943c94db9333c53193fc575dd426f50dbdefe26c96c6715d5bbebd130b3a86", size = 3773 }
 
 
 
 
 
836
 
837
  [[package]]
838
  name = "pylibraft-cu12"
839
  version = "24.12.0"
840
+ source = { registry = "https://pypi.org/simple" }
841
  dependencies = [
842
  { name = "cuda-python" },
843
  { name = "numpy" },
 
847
  { name = "nvidia-cusparse-cu12" },
848
  { name = "rmm-cu12" },
849
  ]
850
+ sdist = { url = "https://files.pythonhosted.org/packages/97/21/7528b474119607168aae1e94148614761effbec8c45ae31f323ea75e7d68/pylibraft_cu12-24.12.0.tar.gz", hash = "sha256:88370c81ec6cad13c14f5b6df18845596cfb067f9c009d8d118fc0a2f3c78833", size = 5613 }
851
+
852
+ [[package]]
853
+ name = "pyogrio"
854
+ version = "0.10.0"
855
+ source = { registry = "https://pypi.org/simple" }
856
+ dependencies = [
857
+ { name = "certifi" },
858
+ { name = "numpy" },
859
+ { name = "packaging" },
860
+ ]
861
+ sdist = { url = "https://files.pythonhosted.org/packages/a5/8f/5a784595524a79c269f2b1c880f4fdb152867df700c97005dda51997da02/pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c", size = 281950 }
862
  wheels = [
863
+ { url = "https://files.pythonhosted.org/packages/8d/2c/c761e6adeb81bd4029a137b3240e7214a8c9aaf225883356196afd6ef9d8/pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9", size = 15083526 },
864
+ { url = "https://files.pythonhosted.org/packages/c3/e5/983aa9ddf2ff784e973d6b2ec3e874065d6655a5329ca26311b0f3b9f92f/pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8", size = 16457867 },
865
+ { url = "https://files.pythonhosted.org/packages/fa/9a/7103eee7aa3b6ec88e072ef18a05c3aae1ed96fe00009a7a5ce139b50f30/pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96", size = 23926332 },
866
+ { url = "https://files.pythonhosted.org/packages/8b/b2/2ca124343aba24b9a5dcd7c1f43da81e652849cfaf3110d3f507a80af0a1/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b", size = 23138693 },
867
+ { url = "https://files.pythonhosted.org/packages/ae/15/501aa4823c142232169d54255ab343f28c4ea9e7fa489b8433dcc873a942/pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add", size = 24062952 },
868
+ { url = "https://files.pythonhosted.org/packages/94/8d/24f21e6a93ca418231aee3bddade7a0766c89c523832f29e08a8860f83e6/pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff", size = 16172573 },
869
+ { url = "https://files.pythonhosted.org/packages/b5/b5/3c5dfd0b50cbce6f3d4e42c0484647feb1809dbe20e225c4c6abd067e69f/pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce", size = 15079211 },
870
+ { url = "https://files.pythonhosted.org/packages/b8/9a/1ba9c707a094976f343bd0177741eaba0e842fa05ecd8ab97192db4f2ec1/pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2", size = 16442782 },
871
+ { url = "https://files.pythonhosted.org/packages/5e/bb/b4250746c2c85fea5004cae93e9e25ad01516e9e94e04de780a2e78139da/pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6", size = 23899832 },
872
+ { url = "https://files.pythonhosted.org/packages/bd/4c/79e47e40a8e54e79a45133786a0a58209534f580591c933d40c5ed314fe7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622", size = 23081469 },
873
+ { url = "https://files.pythonhosted.org/packages/47/78/2b62c8a340bcb0ea56b9ddf2ef5fd3d1f101dc0e98816b9e6da87c5ac3b7/pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20", size = 24024758 },
874
+ { url = "https://files.pythonhosted.org/packages/43/97/34605480f06b0ad9611bf58a174eccc6f3673275f3d519cf763391892881/pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc", size = 16160294 },
875
+ { url = "https://files.pythonhosted.org/packages/14/4a/4c8e4f5b9edbca46e0f8d6c1c0b56c0d4af0900c29f4bea22d37853c07f3/pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf", size = 15076879 },
876
+ { url = "https://files.pythonhosted.org/packages/5f/be/7db0644eef9ef3382518399aaf3332827c43018112d2a74f78784fd496ec/pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04", size = 16440405 },
877
+ { url = "https://files.pythonhosted.org/packages/96/77/f199230ba86fe88b1f57e71428c169ed982de68a32d6082cd7c12d0f5d55/pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5", size = 23871511 },
878
+ { url = "https://files.pythonhosted.org/packages/25/ac/ca483bec408b59c54f7129b0244cc9de21d8461aefe89ece7bd74ad33807/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e", size = 23048830 },
879
+ { url = "https://files.pythonhosted.org/packages/d7/3e/c35f2d8dad95b24e568c468f09ff60fb61945065465e0ec7868400596566/pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205", size = 23996873 },
880
+ { url = "https://files.pythonhosted.org/packages/27/5d/0deb16d228362a097ee3258d0a887c9c0add4b9678bb4847b08a241e124d/pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848", size = 16158260 },
881
  ]
882
 
883
  [[package]]
 
889
  { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 },
890
  ]
891
 
892
+ [[package]]
893
+ name = "pyproj"
894
+ version = "3.7.0"
895
+ source = { registry = "https://pypi.org/simple" }
896
+ dependencies = [
897
+ { name = "certifi" },
898
+ ]
899
+ sdist = { url = "https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813", size = 225577 }
900
+ wheels = [
901
+ { url = "https://files.pythonhosted.org/packages/e2/8f/15ff6ab10a08050e94afcd544962a1a930d0bb7ca102ad39795a847eb340/pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03", size = 6272213 },
902
+ { url = "https://files.pythonhosted.org/packages/2d/4d/610fe2a17de71b4fe210af69ce25f2d65379ba0a48299129894d0d0988ee/pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b", size = 4634548 },
903
+ { url = "https://files.pythonhosted.org/packages/d6/27/0327d0b0fcdfc4cf72696a2effca2963e524dcd846a0274ba503f8bf2648/pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04", size = 6333913 },
904
+ { url = "https://files.pythonhosted.org/packages/3c/e5/2cb256148c730b9c3f74bfb3c03904f5070499c6dcaea153073a9642c6c6/pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838", size = 9460363 },
905
+ { url = "https://files.pythonhosted.org/packages/ba/a3/4aa1e8e78ad18aa170efd2c94c1931bf2a34c526683b874d06e40fa323f6/pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc", size = 5820551 },
906
+ { url = "https://files.pythonhosted.org/packages/26/0c/b084e8839a117eaad8cb4fbaa81bbb24c6f183de0ee95c6c4e2770ab6f09/pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff", size = 6231788 },
907
+ { url = "https://files.pythonhosted.org/packages/bd/19/be806b711e9ebfb80411c653054157db128fffdd7f8493e3064136c8d880/pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e", size = 6261400 },
908
+ { url = "https://files.pythonhosted.org/packages/99/3b/8497995e8cae0049d013679c6a7ac6c57b816d590c733a388748dafe5af5/pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106", size = 4637848 },
909
+ { url = "https://files.pythonhosted.org/packages/ea/f7/2a5b46d6f8da913d58d44942ab06ca4803b5424b73259b15344cf90040f6/pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463", size = 6324856 },
910
+ { url = "https://files.pythonhosted.org/packages/36/83/c257771077bcf9da20d0e97abc834f9037c219986cc76d40183903a30464/pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62", size = 9525831 },
911
+ { url = "https://files.pythonhosted.org/packages/d6/50/a635de79def69fe03cdef3a4bd3bec780c30987bce3a15dd7099afb2506f/pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3", size = 5811864 },
912
+ { url = "https://files.pythonhosted.org/packages/a1/8b/96bc8c8f3eca4eb7fa3758fde0b755d1df30a19f494376e3ee8de1ef4e79/pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1", size = 6224720 },
913
+ { url = "https://files.pythonhosted.org/packages/bf/da/a17c452bea1ff4cd58d6dc573055b9c8fb6af114b7d2c694782aec770865/pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426", size = 6254898 },
914
+ { url = "https://files.pythonhosted.org/packages/c2/31/ab07b389f2caa527c95ab2ea1940d28879bd2a19e67b2529cb3e94648d26/pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a", size = 4628612 },
915
+ { url = "https://files.pythonhosted.org/packages/1d/24/def3ded6529db3e3d8351ad73481730249ab57d8d876d502f86d7958ce06/pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098", size = 6315895 },
916
+ { url = "https://files.pythonhosted.org/packages/dd/14/07314f78302105d199fb25e73376d723efe9c2ef3906463aae209913a6d3/pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9", size = 9466144 },
917
+ { url = "https://files.pythonhosted.org/packages/00/f2/2a116920db3496e3ff3c94d7d8d15da41374f35cfe1b9e79682eca500a61/pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4", size = 5807180 },
918
+ { url = "https://files.pythonhosted.org/packages/f8/33/3c8c6302717096b54aa14ccbb271045ba04629e21cbf348f2f2dc94f69b4/pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509", size = 6218036 },
919
+ ]
920
+
921
  [[package]]
922
  name = "python-dateutil"
923
  version = "2.9.0.post0"
 
939
  { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 },
940
  ]
941
 
942
+ [[package]]
943
+ name = "requests"
944
+ version = "2.32.3"
945
+ source = { registry = "https://pypi.org/simple" }
946
+ dependencies = [
947
+ { name = "certifi" },
948
+ { name = "charset-normalizer" },
949
+ { name = "idna" },
950
+ { name = "urllib3" },
951
+ ]
952
+ sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
953
+ wheels = [
954
+ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
955
+ ]
956
+
957
  [[package]]
958
  name = "rmm-cu12"
959
  version = "24.12.1"
960
+ source = { registry = "https://pypi.org/simple" }
961
  dependencies = [
962
  { name = "cuda-python" },
963
  { name = "numba" },
964
  { name = "numpy" },
965
  ]
966
  wheels = [
967
+ { url = "https://files.pythonhosted.org/packages/0e/c3/b08d5282116dd930e68a0ccbdecd750880efc451e0d2150e764793f03070/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d509d735201d1b0bc05b3e148e23a6216eabcfec67006a4e9311b6c25766023f", size = 1933478 },
968
+ { url = "https://files.pythonhosted.org/packages/c7/ce/c32c1a95d53b1a22aeb258af7afa68a73a995c6c2f533fb774d2078d3cca/rmm_cu12-24.12.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1d6b166aaf9b81495ff33f2fe5a29ad12dc1ed6089daf9f387160e7734fc901", size = 1984701 },
969
+ { url = "https://files.pythonhosted.org/packages/c2/4b/32f7920f130536e7e1a8ea7feb591cab7fcb85aaff28311c4e8057ec23da/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317a6641fb37f3efa6e8eb76eeb568970a8c439e0090529520861fd139ef6f0c", size = 1923807 },
970
+ { url = "https://files.pythonhosted.org/packages/1d/f2/56faa578aefdab498f6eb73dde3316f99390769786e0cdbb6c7a6abbbf86/rmm_cu12-24.12.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9460a386e34f1921c8d06204f320d705511de899ababb45302d314da036da5a", size = 1975053 },
971
  ]
972
 
973
  [[package]]
974
+ name = "shapely"
975
+ version = "2.0.7"
976
  source = { registry = "https://pypi.org/simple" }
977
+ dependencies = [
978
+ { name = "numpy" },
979
+ ]
980
+ sdist = { url = "https://files.pythonhosted.org/packages/21/c0/a911d1fd765d07a2b6769ce155219a281bfbe311584ebe97340d75c5bdb1/shapely-2.0.7.tar.gz", hash = "sha256:28fe2997aab9a9dc026dc6a355d04e85841546b2a5d232ed953e3321ab958ee5", size = 283413 }
981
  wheels = [
982
+ { url = "https://files.pythonhosted.org/packages/1d/ad/21798c2fec013e289f8ab91d42d4d3299c315b8c4460c08c75fef0901713/shapely-2.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5cf23400cb25deccf48c56a7cdda8197ae66c0e9097fcdd122ac2007e320bc34", size = 1473091 },
983
+ { url = "https://files.pythonhosted.org/packages/15/63/eef4f180f1b5859c70e7f91d2f2570643e5c61e7d7c40743d15f8c6cbc42/shapely-2.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f1da01c04527f7da59ee3755d8ee112cd8967c15fab9e43bba936b81e2a013", size = 1332921 },
984
+ { url = "https://files.pythonhosted.org/packages/fe/67/77851dd17738bbe7762a0ef1acf7bc499d756f68600dd68a987d78229412/shapely-2.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f623b64bb219d62014781120f47499a7adc30cf7787e24b659e56651ceebcb0", size = 2427949 },
985
+ { url = "https://files.pythonhosted.org/packages/0b/a5/2c8dbb0f383519771df19164e3bf3a8895d195d2edeab4b6040f176ee28e/shapely-2.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6d95703efaa64aaabf278ced641b888fc23d9c6dd71f8215091afd8a26a66e3", size = 2529282 },
986
+ { url = "https://files.pythonhosted.org/packages/dc/4e/e1d608773c7fe4cde36d48903c0d6298e3233dc69412403783ac03fa5205/shapely-2.0.7-cp311-cp311-win32.whl", hash = "sha256:2f6e4759cf680a0f00a54234902415f2fa5fe02f6b05546c662654001f0793a2", size = 1295751 },
987
+ { url = "https://files.pythonhosted.org/packages/27/57/8ec7c62012bed06731f7ee979da7f207bbc4b27feed5f36680b6a70df54f/shapely-2.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:b52f3ab845d32dfd20afba86675c91919a622f4627182daec64974db9b0b4608", size = 1442684 },
988
+ { url = "https://files.pythonhosted.org/packages/4f/3e/ea100eec5811bafd0175eb21828a3be5b0960f65250f4474391868be7c0f/shapely-2.0.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4c2b9859424facbafa54f4a19b625a752ff958ab49e01bc695f254f7db1835fa", size = 1482451 },
989
+ { url = "https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51", size = 1345765 },
990
+ { url = "https://files.pythonhosted.org/packages/fd/dd/b35d7891d25cc11066a70fb8d8169a6a7fca0735dd9b4d563a84684969a3/shapely-2.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73c9ae8cf443187d784d57202199bf9fd2d4bb7d5521fe8926ba40db1bc33e8e", size = 2421540 },
991
+ { url = "https://files.pythonhosted.org/packages/62/de/8dbd7df60eb23cb983bb698aac982944b3d602ef0ce877a940c269eae34e/shapely-2.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9469f49ff873ef566864cb3516091881f217b5d231c8164f7883990eec88b73", size = 2525741 },
992
+ { url = "https://files.pythonhosted.org/packages/96/64/faf0413ebc7a84fe7a0790bf39ec0b02b40132b68e57aba985c0b6e4e7b6/shapely-2.0.7-cp312-cp312-win32.whl", hash = "sha256:6bca5095e86be9d4ef3cb52d56bdd66df63ff111d580855cb8546f06c3c907cd", size = 1296552 },
993
+ { url = "https://files.pythonhosted.org/packages/63/05/8a1c279c226d6ad7604d9e237713dd21788eab96db97bf4ce0ea565e5596/shapely-2.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:f86e2c0259fe598c4532acfcf638c1f520fa77c1275912bbc958faecbf00b108", size = 1443464 },
994
+ { url = "https://files.pythonhosted.org/packages/c6/21/abea43effbfe11f792e44409ee9ad7635aa93ef1c8ada0ef59b3c1c3abad/shapely-2.0.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a0c09e3e02f948631c7763b4fd3dd175bc45303a0ae04b000856dedebefe13cb", size = 1481618 },
995
+ { url = "https://files.pythonhosted.org/packages/d9/71/af688798da36fe355a6e6ffe1d4628449cb5fa131d57fc169bcb614aeee7/shapely-2.0.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06ff6020949b44baa8fc2e5e57e0f3d09486cd5c33b47d669f847c54136e7027", size = 1345159 },
996
+ { url = "https://files.pythonhosted.org/packages/67/47/f934fe2b70d31bb9774ad4376e34f81666deed6b811306ff574faa3d115e/shapely-2.0.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6dbf096f961ca6bec5640e22e65ccdec11e676344e8157fe7d636e7904fd36", size = 2410267 },
997
+ { url = "https://files.pythonhosted.org/packages/f5/8a/2545cc2a30afc63fc6176c1da3b76af28ef9c7358ed4f68f7c6a9d86cf5b/shapely-2.0.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adeddfb1e22c20548e840403e5e0b3d9dc3daf66f05fa59f1fcf5b5f664f0e98", size = 2514128 },
998
+ { url = "https://files.pythonhosted.org/packages/87/54/2344ce7da39676adec94e84fbaba92a8f1664e4ae2d33bd404dafcbe607f/shapely-2.0.7-cp313-cp313-win32.whl", hash = "sha256:a7f04691ce1c7ed974c2f8b34a1fe4c3c5dfe33128eae886aa32d730f1ec1913", size = 1295783 },
999
+ { url = "https://files.pythonhosted.org/packages/d7/1e/6461e5cfc8e73ae165b8cff6eb26a4d65274fad0e1435137c5ba34fe4e88/shapely-2.0.7-cp313-cp313-win_amd64.whl", hash = "sha256:aaaf5f7e6cc234c1793f2a2760da464b604584fb58c6b6d7d94144fd2692d67e", size = 1442300 },
1000
  ]
1001
 
1002
  [[package]]
1003
+ name = "six"
1004
+ version = "1.17.0"
1005
  source = { registry = "https://pypi.org/simple" }
1006
+ sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
1007
  wheels = [
1008
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
1009
  ]
1010
 
1011
  [[package]]
 
1025
  wheels = [
1026
  { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 },
1027
  ]
1028
+
1029
+ [[package]]
1030
+ name = "urllib3"
1031
+ version = "2.3.0"
1032
+ source = { registry = "https://pypi.org/simple" }
1033
+ sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
1034
+ wheels = [
1035
+ { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
1036
+ ]
lynxkite-pillow-example/pyproject.toml CHANGED
@@ -5,6 +5,7 @@ description = "An example LynxKite plugin that wraps some Pillow image processin
5
  readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
 
8
  "lynxkite-core",
9
  "pillow>=11.1.0",
10
  ]
 
5
  readme = "README.md"
6
  requires-python = ">=3.11"
7
  dependencies = [
8
+ "fsspec>=2025.2.0",
9
  "lynxkite-core",
10
  "pillow>=11.1.0",
11
  ]
lynxkite-pillow-example/src/lynxkite_plugins/pillow_example/__init__.py CHANGED
@@ -4,6 +4,7 @@ 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"
@@ -13,12 +14,15 @@ one_by_one.register(ENV, cache=False)
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")
@@ -59,7 +63,7 @@ def to_grayscale(image: Image):
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
 
4
  from lynxkite.core.executors import one_by_one
5
  from PIL import Image, ImageFilter
6
  import base64
7
+ import fsspec
8
  import io
9
 
10
  ENV = "Pillow"
 
14
 
15
  @op("Open image")
16
  def open_image(*, filename: str):
17
+ with fsspec.open(filename, "rb") as f:
18
+ data = io.BytesIO(f.read())
19
+ return Image.open(data)
20
 
21
 
22
  @op("Save image")
23
  def save_image(image: Image, *, filename: str):
24
+ with fsspec.open(filename, "wb") as f:
25
+ image.save(f)
26
 
27
 
28
  @op("Crop")
 
63
  @op("View image", view="image")
64
  def view_image(image: Image):
65
  buffered = io.BytesIO()
66
+ image.save(buffered, format="webp")
67
  b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
68
  data_url = "data:image/jpeg;base64," + b64
69
  return data_url
lynxkite-pillow-example/uv.lock CHANGED
@@ -1,22 +1,33 @@
1
  version = 1
2
  requires-python = ">=3.11"
3
 
 
 
 
 
 
 
 
 
 
4
  [[package]]
5
  name = "lynxkite-core"
6
  version = "0.1.0"
7
  source = { virtual = "../lynxkite-core" }
8
 
9
  [[package]]
10
- name = "lynxkite-pillow"
11
  version = "0.1.0"
12
  source = { virtual = "." }
13
  dependencies = [
 
14
  { name = "lynxkite-core" },
15
  { name = "pillow" },
16
  ]
17
 
18
  [package.metadata]
19
  requires-dist = [
 
20
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
21
  { name = "pillow", specifier = ">=11.1.0" },
22
  ]
 
1
  version = 1
2
  requires-python = ">=3.11"
3
 
4
+ [[package]]
5
+ name = "fsspec"
6
+ version = "2025.2.0"
7
+ source = { registry = "https://pypi.org/simple" }
8
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/79/68612ed99700e6413de42895aa725463e821a6b3be75c87fcce1b4af4c70/fsspec-2025.2.0.tar.gz", hash = "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd", size = 292283 }
9
+ wheels = [
10
+ { url = "https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl", hash = "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b", size = 184484 },
11
+ ]
12
+
13
  [[package]]
14
  name = "lynxkite-core"
15
  version = "0.1.0"
16
  source = { virtual = "../lynxkite-core" }
17
 
18
  [[package]]
19
+ name = "lynxkite-pillow-example"
20
  version = "0.1.0"
21
  source = { virtual = "." }
22
  dependencies = [
23
+ { name = "fsspec" },
24
  { name = "lynxkite-core" },
25
  { name = "pillow" },
26
  ]
27
 
28
  [package.metadata]
29
  requires-dist = [
30
+ { name = "fsspec", specifier = ">=2025.2.0" },
31
  { name = "lynxkite-core", virtual = "../lynxkite-core" },
32
  { name = "pillow", specifier = ">=11.1.0" },
33
  ]