edsger 0.1.1__cp311-cp311-win32.whl → 0.1.2__cp311-cp311-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- edsger/_version.py +1 -1
- edsger/commons.cp311-win32.pyd +0 -0
- edsger/dijkstra.cp311-win32.pyd +0 -0
- edsger/dijkstra.pyx +23 -0
- edsger/path_tracking.cp311-win32.pyd +0 -0
- edsger/path_tracking.pyx +2 -2
- edsger/pq_4ary_dec_0b.cp311-win32.pyd +0 -0
- edsger/pq_4ary_dec_0b.pxd +7 -7
- edsger/pq_4ary_dec_0b.pyx +14 -16
- edsger/prefetch_compat.h +21 -0
- edsger/spiess_florian.cp311-win32.pyd +0 -0
- edsger/star.cp311-win32.pyd +0 -0
- edsger/star.pyx +3 -3
- {edsger-0.1.1.dist-info → edsger-0.1.2.dist-info}/METADATA +19 -12
- edsger-0.1.2.dist-info/RECORD +27 -0
- edsger-0.1.1.dist-info/RECORD +0 -26
- {edsger-0.1.1.dist-info → edsger-0.1.2.dist-info}/WHEEL +0 -0
- {edsger-0.1.1.dist-info → edsger-0.1.2.dist-info}/licenses/AUTHORS.rst +0 -0
- {edsger-0.1.1.dist-info → edsger-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {edsger-0.1.1.dist-info → edsger-0.1.2.dist-info}/top_level.txt +0 -0
edsger/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.2"
|
edsger/commons.cp311-win32.pyd
CHANGED
Binary file
|
edsger/dijkstra.cp311-win32.pyd
CHANGED
Binary file
|
edsger/dijkstra.pyx
CHANGED
@@ -23,6 +23,11 @@ from edsger.commons cimport (
|
|
23
23
|
DTYPE_INF, UNLABELED, SCANNED, DTYPE_t, ElementState)
|
24
24
|
cimport edsger.pq_4ary_dec_0b as pq # priority queue
|
25
25
|
|
26
|
+
# Memory prefetching support (x86/x64 only)
|
27
|
+
cdef extern from "prefetch_compat.h":
|
28
|
+
void prefetch_hint(char*, int) nogil
|
29
|
+
int PREFETCH_T0
|
30
|
+
|
26
31
|
|
27
32
|
cpdef cnp.ndarray compute_sssp(
|
28
33
|
cnp.uint32_t[::1] csr_indptr,
|
@@ -83,8 +88,17 @@ cpdef cnp.ndarray compute_sssp(
|
|
83
88
|
<size_t>csr_indptr[tail_vert_idx + 1]):
|
84
89
|
|
85
90
|
head_vert_idx = <size_t>csr_indices[idx]
|
91
|
+
|
92
|
+
# Prefetch next iteration data to improve cache performance
|
93
|
+
if idx + 1 < <size_t>csr_indptr[tail_vert_idx + 1]:
|
94
|
+
prefetch_hint(<char*>&csr_indices[idx + 1], PREFETCH_T0)
|
95
|
+
prefetch_hint(<char*>&csr_data[idx + 1], PREFETCH_T0)
|
96
|
+
|
86
97
|
vert_state = pqueue.Elements[head_vert_idx].state
|
87
98
|
if vert_state != SCANNED:
|
99
|
+
# Prefetch priority queue element data for the vertex
|
100
|
+
prefetch_hint(<char*>&pqueue.Elements[head_vert_idx], PREFETCH_T0)
|
101
|
+
|
88
102
|
head_vert_val = tail_vert_val + csr_data[idx]
|
89
103
|
if vert_state == UNLABELED:
|
90
104
|
pq.insert(&pqueue, head_vert_idx, head_vert_val)
|
@@ -164,8 +178,17 @@ cpdef cnp.ndarray compute_sssp_w_path(
|
|
164
178
|
<size_t>csr_indptr[tail_vert_idx + 1]):
|
165
179
|
|
166
180
|
head_vert_idx = <size_t>csr_indices[idx]
|
181
|
+
|
182
|
+
# Prefetch next iteration data to improve cache performance
|
183
|
+
if idx + 1 < <size_t>csr_indptr[tail_vert_idx + 1]:
|
184
|
+
prefetch_hint(<char*>&csr_indices[idx + 1], PREFETCH_T0)
|
185
|
+
prefetch_hint(<char*>&csr_data[idx + 1], PREFETCH_T0)
|
186
|
+
|
167
187
|
vert_state = pqueue.Elements[head_vert_idx].state
|
168
188
|
if vert_state != SCANNED:
|
189
|
+
# Prefetch priority queue element data for the vertex
|
190
|
+
prefetch_hint(<char*>&pqueue.Elements[head_vert_idx], PREFETCH_T0)
|
191
|
+
|
169
192
|
head_vert_val = tail_vert_val + csr_data[idx]
|
170
193
|
if vert_state == UNLABELED:
|
171
194
|
pq.insert(&pqueue, head_vert_idx, head_vert_val)
|
Binary file
|
edsger/path_tracking.pyx
CHANGED
@@ -43,7 +43,7 @@ cpdef cnp.ndarray compute_path(cnp.uint32_t[::1] path_links, int vertex_idx):
|
|
43
43
|
cdef int _compute_path_first_pass(
|
44
44
|
cnp.uint32_t[::1] path_links,
|
45
45
|
int vertex_idx
|
46
|
-
) nogil
|
46
|
+
) noexcept nogil:
|
47
47
|
"""Returns the path length.
|
48
48
|
"""
|
49
49
|
|
@@ -69,7 +69,7 @@ cdef void _compute_path_second_pass(
|
|
69
69
|
cnp.uint32_t[::1] path_links,
|
70
70
|
cnp.uint32_t[::1] path_vertices,
|
71
71
|
int vertex_idx
|
72
|
-
) nogil
|
72
|
+
) noexcept nogil:
|
73
73
|
"""Compute the sequence of vertices forming a path.
|
74
74
|
"""
|
75
75
|
cdef size_t i, j, k
|
Binary file
|
edsger/pq_4ary_dec_0b.pxd
CHANGED
@@ -17,13 +17,13 @@ cdef struct PriorityQueue:
|
|
17
17
|
size_t* A # array storing the binary tree
|
18
18
|
Element* Elements # array storing the elements
|
19
19
|
|
20
|
-
cdef void init_pqueue(PriorityQueue*, size_t, size_t) nogil
|
21
|
-
cdef void free_pqueue(PriorityQueue*) nogil
|
22
|
-
cdef void insert(PriorityQueue*, size_t, DTYPE_t) nogil
|
23
|
-
cdef DTYPE_t peek(PriorityQueue*) nogil
|
24
|
-
cdef size_t extract_min(PriorityQueue*) nogil
|
25
|
-
cdef bint is_empty(PriorityQueue*) nogil
|
26
|
-
cdef void decrease_key(PriorityQueue*, size_t, DTYPE_t) nogil
|
20
|
+
cdef void init_pqueue(PriorityQueue*, size_t, size_t) noexcept nogil
|
21
|
+
cdef void free_pqueue(PriorityQueue*) noexcept nogil
|
22
|
+
cdef void insert(PriorityQueue*, size_t, DTYPE_t) noexcept nogil
|
23
|
+
cdef DTYPE_t peek(PriorityQueue*) noexcept nogil
|
24
|
+
cdef size_t extract_min(PriorityQueue*) noexcept nogil
|
25
|
+
cdef bint is_empty(PriorityQueue*) noexcept nogil
|
26
|
+
cdef void decrease_key(PriorityQueue*, size_t, DTYPE_t) noexcept nogil
|
27
27
|
cdef cnp.ndarray copy_keys_to_numpy(PriorityQueue*, size_t)
|
28
28
|
|
29
29
|
|
edsger/pq_4ary_dec_0b.pyx
CHANGED
@@ -47,7 +47,7 @@ from edsger.commons cimport (
|
|
47
47
|
cdef void init_pqueue(
|
48
48
|
PriorityQueue* pqueue,
|
49
49
|
size_t heap_length,
|
50
|
-
size_t element_count) nogil
|
50
|
+
size_t element_count) noexcept nogil:
|
51
51
|
"""
|
52
52
|
Initialize the priority queue.
|
53
53
|
|
@@ -77,7 +77,7 @@ cdef void init_pqueue(
|
|
77
77
|
|
78
78
|
cdef void _initialize_element(
|
79
79
|
PriorityQueue* pqueue,
|
80
|
-
size_t element_idx) nogil
|
80
|
+
size_t element_idx) noexcept nogil:
|
81
81
|
"""
|
82
82
|
Initialize a single element.
|
83
83
|
|
@@ -92,7 +92,7 @@ cdef void _initialize_element(
|
|
92
92
|
|
93
93
|
|
94
94
|
cdef void free_pqueue(
|
95
|
-
PriorityQueue* pqueue) nogil
|
95
|
+
PriorityQueue* pqueue) noexcept nogil:
|
96
96
|
"""
|
97
97
|
Free the priority queue.
|
98
98
|
|
@@ -107,7 +107,7 @@ cdef void free_pqueue(
|
|
107
107
|
cdef void insert(
|
108
108
|
PriorityQueue* pqueue,
|
109
109
|
size_t element_idx,
|
110
|
-
DTYPE_t key) nogil
|
110
|
+
DTYPE_t key) noexcept nogil:
|
111
111
|
"""
|
112
112
|
Insert an element into the heap and reorder the heap.
|
113
113
|
|
@@ -134,7 +134,7 @@ cdef void insert(
|
|
134
134
|
cdef void decrease_key(
|
135
135
|
PriorityQueue* pqueue,
|
136
136
|
size_t element_idx,
|
137
|
-
DTYPE_t key_new) nogil
|
137
|
+
DTYPE_t key_new) noexcept nogil:
|
138
138
|
"""
|
139
139
|
Decrease the key of a element in the heap, given its element index.
|
140
140
|
|
@@ -154,7 +154,7 @@ cdef void decrease_key(
|
|
154
154
|
key_new)
|
155
155
|
|
156
156
|
|
157
|
-
cdef DTYPE_t peek(PriorityQueue* pqueue) nogil
|
157
|
+
cdef DTYPE_t peek(PriorityQueue* pqueue) noexcept nogil:
|
158
158
|
"""
|
159
159
|
Find heap min key.
|
160
160
|
|
@@ -174,7 +174,7 @@ cdef DTYPE_t peek(PriorityQueue* pqueue) nogil noexcept:
|
|
174
174
|
return pqueue.Elements[pqueue.A[0]].key
|
175
175
|
|
176
176
|
|
177
|
-
cdef bint is_empty(PriorityQueue* pqueue) nogil
|
177
|
+
cdef bint is_empty(PriorityQueue* pqueue) noexcept nogil:
|
178
178
|
"""
|
179
179
|
Check if the heap is empty.
|
180
180
|
|
@@ -190,7 +190,7 @@ cdef bint is_empty(PriorityQueue* pqueue) nogil noexcept:
|
|
190
190
|
return isempty
|
191
191
|
|
192
192
|
|
193
|
-
cdef size_t extract_min(PriorityQueue* pqueue) nogil
|
193
|
+
cdef size_t extract_min(PriorityQueue* pqueue) noexcept nogil:
|
194
194
|
"""
|
195
195
|
Extract element with min keay from the heap,
|
196
196
|
and return its element index.
|
@@ -229,7 +229,7 @@ cdef size_t extract_min(PriorityQueue* pqueue) nogil noexcept:
|
|
229
229
|
cdef cnp.ndarray copy_keys_to_numpy(
|
230
230
|
PriorityQueue* pqueue,
|
231
231
|
size_t vertex_count
|
232
|
-
)
|
232
|
+
):
|
233
233
|
"""
|
234
234
|
Copy the keys into a numpy array.
|
235
235
|
|
@@ -261,7 +261,7 @@ cdef cnp.ndarray copy_keys_to_numpy(
|
|
261
261
|
cdef void _exchange_nodes(
|
262
262
|
PriorityQueue* pqueue,
|
263
263
|
size_t node_i,
|
264
|
-
size_t node_j) nogil
|
264
|
+
size_t node_j) noexcept nogil:
|
265
265
|
"""
|
266
266
|
Exchange two nodes in the heap.
|
267
267
|
|
@@ -286,7 +286,7 @@ cdef void _exchange_nodes(
|
|
286
286
|
|
287
287
|
cdef void _min_heapify(
|
288
288
|
PriorityQueue* pqueue,
|
289
|
-
size_t node_idx) nogil
|
289
|
+
size_t node_idx) noexcept nogil:
|
290
290
|
"""
|
291
291
|
Re-order sub-tree under a given node (given its node index)
|
292
292
|
until it satisfies the heap property.
|
@@ -363,7 +363,7 @@ cdef void _min_heapify(
|
|
363
363
|
cdef void _decrease_key_from_node_index(
|
364
364
|
PriorityQueue* pqueue,
|
365
365
|
size_t node_idx,
|
366
|
-
DTYPE_t key_new) nogil
|
366
|
+
DTYPE_t key_new) noexcept nogil:
|
367
367
|
"""
|
368
368
|
Decrease the key of an element in the heap, given its tree index.
|
369
369
|
|
@@ -594,7 +594,7 @@ cpdef is_empty_01():
|
|
594
594
|
assert is_empty(&pqueue) == 1
|
595
595
|
insert(&pqueue, 1, 3.0)
|
596
596
|
assert is_empty(&pqueue) == 0
|
597
|
-
|
597
|
+
_ = extract_min(&pqueue)
|
598
598
|
assert is_empty(&pqueue) == 1
|
599
599
|
|
600
600
|
free_pqueue(&pqueue)
|
@@ -652,7 +652,7 @@ cpdef decrease_key_01():
|
|
652
652
|
free_pqueue(&pqueue)
|
653
653
|
|
654
654
|
|
655
|
-
cdef void heapsort(DTYPE_t[::1] values_in, DTYPE_t[::1] values_out) nogil:
|
655
|
+
cdef void heapsort(DTYPE_t[::1] values_in, DTYPE_t[::1] values_out) noexcept nogil:
|
656
656
|
"""
|
657
657
|
Heap sort by inerting all the values into the priority queue,
|
658
658
|
and extracting them.
|
@@ -676,8 +676,6 @@ cpdef sort_01(int n, random_seed=124):
|
|
676
676
|
and with the numpy default sort function, compare the results.
|
677
677
|
"""
|
678
678
|
|
679
|
-
cdef PriorityQueue pqueue
|
680
|
-
|
681
679
|
rng = np.random.default_rng(random_seed)
|
682
680
|
values_in = rng.random(size=n)
|
683
681
|
values_out = np.empty_like(values_in, dtype=DTYPE_PY)
|
edsger/prefetch_compat.h
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#ifndef PREFETCH_COMPAT_H
|
2
|
+
#define PREFETCH_COMPAT_H
|
3
|
+
|
4
|
+
// Cross-platform memory prefetching compatibility header
|
5
|
+
|
6
|
+
#if defined(__aarch64__) || defined(_M_ARM64) || defined(__arm64__)
|
7
|
+
// ARM64 platforms - use ARM-specific prefetch
|
8
|
+
#define prefetch_hint(addr, hint) __builtin_prefetch((const void*)(addr), 0, 3)
|
9
|
+
#define PREFETCH_T0 0
|
10
|
+
#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
|
11
|
+
// x86/x64 platforms - use SSE intrinsics
|
12
|
+
#include <xmmintrin.h>
|
13
|
+
#define prefetch_hint(addr, hint) _mm_prefetch((const char*)(addr), hint)
|
14
|
+
#define PREFETCH_T0 _MM_HINT_T0
|
15
|
+
#else
|
16
|
+
// Other platforms - no-op (compile time optimization will remove calls)
|
17
|
+
#define prefetch_hint(addr, hint) ((void)0)
|
18
|
+
#define PREFETCH_T0 0
|
19
|
+
#endif
|
20
|
+
|
21
|
+
#endif // PREFETCH_COMPAT_H
|
Binary file
|
edsger/star.cp311-win32.pyd
CHANGED
Binary file
|
edsger/star.pyx
CHANGED
@@ -204,7 +204,7 @@ cdef void _coo_to_csr_uint32(
|
|
204
204
|
cnp.uint32_t [::1] Ax,
|
205
205
|
cnp.uint32_t [::1] Bp,
|
206
206
|
cnp.uint32_t [::1] Bj,
|
207
|
-
cnp.uint32_t [::1] Bx) nogil
|
207
|
+
cnp.uint32_t [::1] Bx) noexcept nogil:
|
208
208
|
|
209
209
|
cdef:
|
210
210
|
size_t i, row, dest
|
@@ -280,7 +280,7 @@ cpdef void _coo_to_csr_float64(
|
|
280
280
|
cnp.float64_t [::1] Ax,
|
281
281
|
cnp.uint32_t [::1] Bp,
|
282
282
|
cnp.uint32_t [::1] Bj,
|
283
|
-
cnp.float64_t [::1] Bx) nogil
|
283
|
+
cnp.float64_t [::1] Bx) noexcept nogil:
|
284
284
|
|
285
285
|
cdef:
|
286
286
|
size_t i, row, dest
|
@@ -318,7 +318,7 @@ cpdef void _coo_to_csc_float64(
|
|
318
318
|
cnp.float64_t [::1] Ax,
|
319
319
|
cnp.uint32_t [::1] Bp,
|
320
320
|
cnp.uint32_t [::1] Bi,
|
321
|
-
cnp.float64_t [::1] Bx) nogil
|
321
|
+
cnp.float64_t [::1] Bx) noexcept nogil:
|
322
322
|
|
323
323
|
cdef:
|
324
324
|
size_t i, col, dest
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: edsger
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.2
|
4
4
|
Summary: Graph algorithms in Cython.
|
5
5
|
Author-email: François Pacull <francois.pacull@architecture-performance.fr>
|
6
6
|
Maintainer-email: François Pacull <francois.pacull@architecture-performance.fr>
|
@@ -70,20 +70,19 @@ from edsger.path import Dijkstra
|
|
70
70
|
edges = pd.DataFrame({
|
71
71
|
'tail': [0, 0, 1, 2, 2, 3],
|
72
72
|
'head': [1, 2, 2, 3, 4, 4],
|
73
|
-
'weight': [1, 4, 2, 1, 3, 1]
|
73
|
+
'weight': [1, 4, 2, 1.5, 3, 1]
|
74
74
|
})
|
75
75
|
edges
|
76
76
|
```
|
77
77
|
|
78
|
-
| | tail | head | weight |
|
79
|
-
|---:|-------:|-------:|---------:|
|
80
|
-
| 0 | 0 | 1 |
|
81
|
-
| 1 | 0 | 2 |
|
82
|
-
| 2 | 1 | 2 |
|
83
|
-
| 3 | 2 | 3 |
|
84
|
-
| 4 | 2 | 4 |
|
85
|
-
| 5 | 3 | 4 |
|
86
|
-
|
78
|
+
| | tail | head | weight |
|
79
|
+
|---:|-------:|-------:|---------:|
|
80
|
+
| 0 | 0 | 1 | 1.0 |
|
81
|
+
| 1 | 0 | 2 | 4.0 |
|
82
|
+
| 2 | 1 | 2 | 2.0 |
|
83
|
+
| 3 | 2 | 3 | 1.5 |
|
84
|
+
| 4 | 2 | 4 | 3.0 |
|
85
|
+
| 5 | 3 | 4 | 1.0 |
|
87
86
|
|
88
87
|
```python
|
89
88
|
# Initialize the Dijkstra object
|
@@ -94,10 +93,18 @@ shortest_paths = dijkstra.run(vertex_idx=0)
|
|
94
93
|
print("Shortest paths:", shortest_paths)
|
95
94
|
```
|
96
95
|
|
97
|
-
Shortest paths: [0.
|
96
|
+
Shortest paths: [0. 1. 3. 4.5 5.5]
|
98
97
|
|
99
98
|
We get the shortest paths from the source node 0 to all other nodes in the graph. The output is an array with the shortest path length to each node. A path length is the sum of the weights of the edges in the path.
|
100
99
|
|
100
|
+
## Why Use Edsger?
|
101
|
+
|
102
|
+
Edsger is designed to be **dataframe-friendly**, providing seamless integration with pandas workflows for graph algorithms. Also it is rather efficient. Our benchmarks on the USA road network (23.9M vertices, 57.7M edges) demonstrate nice performance:
|
103
|
+
|
104
|
+
<img src="docs/source/assets/dijkstra_benchmark_comparison.png" alt="Dijkstra Performance Comparison" width="700">
|
105
|
+
|
106
|
+
*Benchmark performed on Intel i9-12900H laptop.*
|
107
|
+
|
101
108
|
## Contributing
|
102
109
|
|
103
110
|
We welcome contributions to the Edsger library. If you have any suggestions, bug reports, or feature requests, please open an issue on our [GitHub repository](https://github.com/aetperf/Edsger).
|
@@ -0,0 +1,27 @@
|
|
1
|
+
edsger/.gitignore,sha256=mr9Izcwvjgv215xjRKhWEZ7vsyrKWhMqvWjSLHRYDjk,13
|
2
|
+
edsger/__init__.py,sha256=lgtGe3cqdwWdO1DLEOx7fX3i8D4Z_2rXHSq7Xecf-NM,41
|
3
|
+
edsger/_version.py,sha256=K5SiDdEGYMpdqXThrqwTqECJJBOQNTQDrnpc2K5mzKs,21
|
4
|
+
edsger/commons.cp311-win32.pyd,sha256=V_JyypzUpl2QCBkxNzdTth-d8YRGAgYKyiE2i_CQb-k,19968
|
5
|
+
edsger/commons.pxd,sha256=UshKjr5ve3Or9u75xGyGPKRz1RwCCb5N-xgNevXZ4j4,464
|
6
|
+
edsger/commons.pyx,sha256=6Ze22eE_zwXPRAe550DEhEvu-b7hvKmwQu73rzzWMUE,839
|
7
|
+
edsger/dijkstra.cp311-win32.pyd,sha256=bDJ9W0p_AiPxKzz7SqMErGtJS9P2J4S0In86c3KhFAs,163840
|
8
|
+
edsger/dijkstra.pyx,sha256=5yjCC2NqXrfBe8tp1sN_XSsWF92IHFrOu-QdbOV8Rvo,17915
|
9
|
+
edsger/networks.py,sha256=hH9sgT5Ic4TLVCjxPNzMDWNjNDbqpXMxXxLeWxCpdLE,10730
|
10
|
+
edsger/path.py,sha256=OnXbP8Mf1rcO_9m6XsDrdXCRcLMeOb2vOAb1eHcZfM8,30395
|
11
|
+
edsger/path_tracking.cp311-win32.pyd,sha256=q06xTpnPW5uPwe0M7Lb4ajseMJK3r0ELpWQM0E-xYJw,107008
|
12
|
+
edsger/path_tracking.pyx,sha256=H24TLmC53I8LjbM1S5E7gS8WEb5uE_PZ8nhG6BteMYA,1900
|
13
|
+
edsger/pq_4ary_dec_0b.cp311-win32.pyd,sha256=b9DfU4pbTjwGnQAVmxG7w29DYSTORtyIP9QjYwjh_UE,131584
|
14
|
+
edsger/pq_4ary_dec_0b.pxd,sha256=VvXcQzJq3OGBptrbawtemagPimuqSCayGQ91Jrad894,1098
|
15
|
+
edsger/pq_4ary_dec_0b.pyx,sha256=IzvzQerf-LYy7weQpgI0f28Q8gUrR4ENaedekXs1Jeg,18486
|
16
|
+
edsger/prefetch_compat.h,sha256=AyAYq_ZHKk5ChaJDrZOAOYe6SprL0_2byjRbjcBGrsU,826
|
17
|
+
edsger/spiess_florian.cp311-win32.pyd,sha256=I_35HRoAweVAZgxyeUkxge4HwokRFT-b7eS5pdukqsE,154112
|
18
|
+
edsger/spiess_florian.pyx,sha256=tjfF9Iv8nqpp4lnv4KAjF-37ij0_SgQ0fnacVVKx-CE,9934
|
19
|
+
edsger/star.cp311-win32.pyd,sha256=oNQxJEyNpvapZDPMMOObEcSVhHvLOqfklETkPTgJ6HQ,144896
|
20
|
+
edsger/star.pyx,sha256=9LAIXhlccEeDgT41ico7n57FJ7PKCzhPv4f22Lphn78,9602
|
21
|
+
edsger/utils.py,sha256=xYfOFIbYpAiZljhUOgGWy0TVNvWaMFCwbCLPBkzdVos,2097
|
22
|
+
edsger-0.1.2.dist-info/licenses/AUTHORS.rst,sha256=8udN6bgZHdHYcVzV38y6SPnF-x6Ks0uXxxFsic6Aces,110
|
23
|
+
edsger-0.1.2.dist-info/licenses/LICENSE,sha256=w7gRlruGxK3_4KTZAyJsOR2tML4UQgB-GNm2LerwJS0,1132
|
24
|
+
edsger-0.1.2.dist-info/METADATA,sha256=Z2KnsYE4vh_m5tvRYU-LIyDso2Kpdl7iQQeFYH_zfhM,5273
|
25
|
+
edsger-0.1.2.dist-info/WHEEL,sha256=Ri8zddKrjGdgjlj1OpSsvpDnvHfnQhMQWi3E_v2pqng,97
|
26
|
+
edsger-0.1.2.dist-info/top_level.txt,sha256=QvhzFORJIIot6GzSnDrtGa9KQt9iifCbOC5ULlzY5dg,7
|
27
|
+
edsger-0.1.2.dist-info/RECORD,,
|
edsger-0.1.1.dist-info/RECORD
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
edsger/.gitignore,sha256=mr9Izcwvjgv215xjRKhWEZ7vsyrKWhMqvWjSLHRYDjk,13
|
2
|
-
edsger/__init__.py,sha256=lgtGe3cqdwWdO1DLEOx7fX3i8D4Z_2rXHSq7Xecf-NM,41
|
3
|
-
edsger/_version.py,sha256=8oAxKUG747GUokmxjkrWejyJa5yPNEsoJDlXxoedxTw,21
|
4
|
-
edsger/commons.cp311-win32.pyd,sha256=0e-_CqkfFKGIFPkHekn3hA4CbDiEN_dMb8swmW5K4Lg,19968
|
5
|
-
edsger/commons.pxd,sha256=UshKjr5ve3Or9u75xGyGPKRz1RwCCb5N-xgNevXZ4j4,464
|
6
|
-
edsger/commons.pyx,sha256=6Ze22eE_zwXPRAe550DEhEvu-b7hvKmwQu73rzzWMUE,839
|
7
|
-
edsger/dijkstra.cp311-win32.pyd,sha256=2jmgGPwfvFqr5HHqvnyoa0Ubvv8REKPJDskyaEo0XYo,164352
|
8
|
-
edsger/dijkstra.pyx,sha256=0Hs3ccSGWpKx53md3kHye344u63KaunHj_gmG3_T8EE,16830
|
9
|
-
edsger/networks.py,sha256=hH9sgT5Ic4TLVCjxPNzMDWNjNDbqpXMxXxLeWxCpdLE,10730
|
10
|
-
edsger/path.py,sha256=OnXbP8Mf1rcO_9m6XsDrdXCRcLMeOb2vOAb1eHcZfM8,30395
|
11
|
-
edsger/path_tracking.cp311-win32.pyd,sha256=0F1Rs7QI9uXIshUaBwjSzlbmTc0cp_ZpNWpeK3UAu9Q,107008
|
12
|
-
edsger/path_tracking.pyx,sha256=ZyIJQucG4-pyltgjsfGuZ7B6d0bFeovCuNh34LrBSvM,1900
|
13
|
-
edsger/pq_4ary_dec_0b.cp311-win32.pyd,sha256=yPw1zMbBlt-KHwL6zrgtj9nI581ny5wWn9_X61qse4c,131072
|
14
|
-
edsger/pq_4ary_dec_0b.pxd,sha256=s0IsejKiG95SPgS3EX8rG86w1gzEyAkXJMaq5zj3HzE,1035
|
15
|
-
edsger/pq_4ary_dec_0b.pyx,sha256=x9rDOYMAjS6uCyp_VQYrI1yFBY4va4sTLXn05be4rTo,18521
|
16
|
-
edsger/spiess_florian.cp311-win32.pyd,sha256=0PKG-9F2WU_lPsOLU2vW25SvX9N2Vs89_QKft2pjq9U,154624
|
17
|
-
edsger/spiess_florian.pyx,sha256=tjfF9Iv8nqpp4lnv4KAjF-37ij0_SgQ0fnacVVKx-CE,9934
|
18
|
-
edsger/star.cp311-win32.pyd,sha256=GDhST8hKer0eVNkD1VkBxHHTsVVAyfNISi0QeVl75Hs,144896
|
19
|
-
edsger/star.pyx,sha256=50sopL56DnCQokHORsJ4IydQv_Zqs39W3WZLnadwgfk,9602
|
20
|
-
edsger/utils.py,sha256=xYfOFIbYpAiZljhUOgGWy0TVNvWaMFCwbCLPBkzdVos,2097
|
21
|
-
edsger-0.1.1.dist-info/licenses/AUTHORS.rst,sha256=8udN6bgZHdHYcVzV38y6SPnF-x6Ks0uXxxFsic6Aces,110
|
22
|
-
edsger-0.1.1.dist-info/licenses/LICENSE,sha256=w7gRlruGxK3_4KTZAyJsOR2tML4UQgB-GNm2LerwJS0,1132
|
23
|
-
edsger-0.1.1.dist-info/METADATA,sha256=I6IBbA-l70HNaSOT9dlFffY90wm0eeXqbukb_-no2qo,4789
|
24
|
-
edsger-0.1.1.dist-info/WHEEL,sha256=Ri8zddKrjGdgjlj1OpSsvpDnvHfnQhMQWi3E_v2pqng,97
|
25
|
-
edsger-0.1.1.dist-info/top_level.txt,sha256=QvhzFORJIIot6GzSnDrtGa9KQt9iifCbOC5ULlzY5dg,7
|
26
|
-
edsger-0.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|