alonso 0.0.5__py3-none-any.whl → 0.0.7__py3-none-any.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.
- alonso/algorithm.py +4 -3
- alonso/app.py +1 -1
- alonso/batch.py +1 -1
- alonso/partition.py +189 -182
- alonso/test.py +1 -1
- {alonso-0.0.5.dist-info → alonso-0.0.7.dist-info}/METADATA +2 -2
- alonso-0.0.7.dist-info/RECORD +17 -0
- alonso-0.0.5.dist-info/RECORD +0 -17
- {alonso-0.0.5.dist-info → alonso-0.0.7.dist-info}/WHEEL +0 -0
- {alonso-0.0.5.dist-info → alonso-0.0.7.dist-info}/entry_points.txt +0 -0
- {alonso-0.0.5.dist-info → alonso-0.0.7.dist-info}/licenses/LICENSE +0 -0
- {alonso-0.0.5.dist-info → alonso-0.0.7.dist-info}/top_level.txt +0 -0
alonso/algorithm.py
CHANGED
@@ -12,7 +12,7 @@ from . import merge
|
|
12
12
|
|
13
13
|
def find_vertex_cover(graph):
|
14
14
|
"""
|
15
|
-
Compute an approximate minimum vertex cover set for an undirected graph
|
15
|
+
Compute an approximate minimum vertex cover set for an undirected graph.
|
16
16
|
|
17
17
|
Args:
|
18
18
|
graph (nx.Graph): A NetworkX Graph object representing the input graph.
|
@@ -58,8 +58,9 @@ def find_vertex_cover(graph):
|
|
58
58
|
|
59
59
|
# Step 1: Edge partitioning using enhanced Burr-Erdos-Lovasz technique
|
60
60
|
# Partition edges E = E1 union E2 such that both induced subgraphs G[E1] and G[E2] are claw-free
|
61
|
-
|
62
|
-
|
61
|
+
partitioner = partition.ClawFreePartitioner(working_graph)
|
62
|
+
E1, E2 = partitioner.partition_edges()
|
63
|
+
|
63
64
|
# Step 2: Solve subproblems optimally on claw-free partitions
|
64
65
|
# Each partition can be solved exactly using polynomial-time algorithms
|
65
66
|
vertex_cover_1 = stable.minimum_vertex_cover_claw_free(E1)
|
alonso/app.py
CHANGED
@@ -82,7 +82,7 @@ def main():
|
|
82
82
|
helper.add_argument('-c', '--count', action='store_true', help='calculate the size of the vertex cover')
|
83
83
|
helper.add_argument('-v', '--verbose', action='store_true', help='anable verbose output')
|
84
84
|
helper.add_argument('-l', '--log', action='store_true', help='enable file logging')
|
85
|
-
helper.add_argument('--version', action='version', version='%(prog)s 0.0.
|
85
|
+
helper.add_argument('--version', action='version', version='%(prog)s 0.0.7')
|
86
86
|
|
87
87
|
# Initialize the parameters
|
88
88
|
args = helper.parse_args()
|
alonso/batch.py
CHANGED
@@ -36,7 +36,7 @@ def main():
|
|
36
36
|
helper.add_argument('-c', '--count', action='store_true', help='calculate the size of the vertex cover')
|
37
37
|
helper.add_argument('-v', '--verbose', action='store_true', help='anable verbose output')
|
38
38
|
helper.add_argument('-l', '--log', action='store_true', help='enable file logging')
|
39
|
-
helper.add_argument('--version', action='version', version='%(prog)s 0.0.
|
39
|
+
helper.add_argument('--version', action='version', version='%(prog)s 0.0.7')
|
40
40
|
|
41
41
|
|
42
42
|
# Initialize the parameters
|
alonso/partition.py
CHANGED
@@ -1,216 +1,223 @@
|
|
1
|
-
import networkx as nx
|
2
|
-
from typing import Tuple, Set, List
|
3
1
|
from collections import defaultdict
|
4
|
-
import
|
2
|
+
import networkx as nx
|
3
|
+
from typing import Set, Tuple, List
|
5
4
|
import mendive.algorithm as algo
|
6
|
-
|
7
|
-
class BurrErdosLovaszPartitioner:
|
5
|
+
class ClawFreePartitioner:
|
8
6
|
"""
|
9
|
-
|
10
|
-
|
7
|
+
Implements a polynomial-time algorithm to partition graph edges into two sets
|
8
|
+
E1 and E2 such that both induced subgraphs are claw-free.
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
The algorithm works by maintaining two edge sets and for each new edge,
|
15
|
-
assigning it to the partition where it creates the fewest violations,
|
16
|
-
then locally repairing any violations that arise.
|
10
|
+
Based on principles from Burr-Erdős-Lovász approach for Ramsey-type problems.
|
11
|
+
A claw is a star graph K_{1,3} (one central vertex connected to 3 others).
|
17
12
|
"""
|
18
13
|
|
19
|
-
def __init__(self, graph
|
20
|
-
|
21
|
-
|
22
|
-
self.n = len(graph.nodes())
|
14
|
+
def __init__(self, graph):
|
15
|
+
"""
|
16
|
+
Initialize with a NetworkX graph.
|
23
17
|
|
24
|
-
|
18
|
+
Args:
|
19
|
+
graph: NetworkX Graph object
|
20
|
+
"""
|
21
|
+
self.G = graph.copy()
|
22
|
+
self.n = len(self.G.nodes())
|
23
|
+
self.m = len(self.G.edges())
|
24
|
+
|
25
|
+
def find_potential_claw_centers(self) -> Set[int]:
|
26
|
+
"""
|
27
|
+
Find vertices that could potentially be centers of claws.
|
28
|
+
A vertex can be a claw center only if it has degree >= 3.
|
29
|
+
|
30
|
+
Returns:
|
31
|
+
Set of vertices with degree >= 3
|
32
|
+
"""
|
33
|
+
return {v for v in self.G.nodes() if self.G.degree(v) >= 3}
|
34
|
+
|
35
|
+
def get_neighborhood_edges(self, vertex: int) -> List[Tuple[int, int]]:
|
36
|
+
"""
|
37
|
+
Get all edges incident to a given vertex.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
vertex: The vertex to get incident edges for
|
41
|
+
|
42
|
+
Returns:
|
43
|
+
List of edges (as tuples) incident to the vertex
|
44
|
+
"""
|
45
|
+
return [(vertex, neighbor) for neighbor in self.G.neighbors(vertex)]
|
46
|
+
|
47
|
+
def would_create_claw(self, edges_in_partition: Set[Tuple[int, int]],
|
48
|
+
new_edge: Tuple[int, int]) -> bool:
|
49
|
+
"""
|
50
|
+
Check if adding a new edge to a partition would create a claw.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
edges_in_partition: Current edges in the partition
|
54
|
+
new_edge: Edge to potentially add
|
55
|
+
|
56
|
+
Returns:
|
57
|
+
True if adding the edge would create a claw, False otherwise
|
25
58
|
"""
|
26
|
-
|
59
|
+
# Build adjacency list for current partition
|
60
|
+
adj = defaultdict(set)
|
61
|
+
for u, v in edges_in_partition:
|
62
|
+
adj[u].add(v)
|
63
|
+
adj[v].add(u)
|
64
|
+
|
65
|
+
# Add the new edge temporarily
|
66
|
+
u, v = new_edge
|
67
|
+
adj[u].add(v)
|
68
|
+
adj[v].add(u)
|
69
|
+
|
70
|
+
# Check if any vertex now forms a claw
|
71
|
+
for vertex in [u, v]:
|
72
|
+
neighbors = list(adj[vertex])
|
73
|
+
if len(neighbors) >= 3:
|
74
|
+
# Check all combinations of 3 neighbors
|
75
|
+
|
76
|
+
for i in range(len(neighbors)):
|
77
|
+
for j in range(i + 1, len(neighbors)):
|
78
|
+
for k in range(j + 1, len(neighbors)):
|
79
|
+
n1, n2, n3 = neighbors[i], neighbors[j], neighbors[k]
|
80
|
+
# Check if these 3 neighbors are not connected to each other
|
81
|
+
# (which would make vertex the center of a claw)
|
82
|
+
if (n1 not in adj[n2] and n2 not in adj[n1] and
|
83
|
+
n1 not in adj[n3] and n3 not in adj[n1] and
|
84
|
+
n2 not in adj[n3] and n3 not in adj[n2]):
|
85
|
+
return True
|
86
|
+
|
87
|
+
return False
|
88
|
+
|
89
|
+
def greedy_partition(self) -> Tuple[Set[Tuple[int, int]], Set[Tuple[int, int]]]:
|
90
|
+
"""
|
91
|
+
Greedily partition edges into two claw-free sets.
|
92
|
+
|
93
|
+
Strategy:
|
94
|
+
1. Process vertices in order of decreasing degree
|
95
|
+
2. For each vertex, try to distribute its incident edges
|
96
|
+
between the two partitions to avoid creating claws
|
97
|
+
3. Use a greedy approach that prioritizes balance
|
98
|
+
|
99
|
+
Returns:
|
100
|
+
Tuple of (E1, E2) - two sets of edges
|
27
101
|
"""
|
28
102
|
E1 = set()
|
29
103
|
E2 = set()
|
104
|
+
processed_edges = set()
|
30
105
|
|
31
|
-
#
|
32
|
-
|
106
|
+
# Sort vertices by degree (descending) to handle high-degree vertices first
|
107
|
+
vertices_by_degree = sorted(self.G.nodes(),
|
108
|
+
key=lambda v: self.G.degree(v),
|
109
|
+
reverse=True)
|
33
110
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
111
|
+
for vertex in vertices_by_degree:
|
112
|
+
if self.G.degree(vertex) < 3:
|
113
|
+
continue # Can't be center of a claw
|
114
|
+
|
115
|
+
incident_edges = self.get_neighborhood_edges(vertex)
|
116
|
+
unprocessed_edges = [e for e in incident_edges if e not in processed_edges]
|
117
|
+
|
118
|
+
if len(unprocessed_edges) < 3:
|
119
|
+
continue # Not enough edges to potentially form a claw
|
39
120
|
|
40
|
-
#
|
41
|
-
|
121
|
+
# Try to distribute edges to avoid claws
|
122
|
+
for edge in unprocessed_edges:
|
123
|
+
if edge in processed_edges:
|
124
|
+
continue
|
125
|
+
|
126
|
+
# Try adding to E1 first
|
127
|
+
if not self.would_create_claw(E1, edge):
|
128
|
+
E1.add(edge)
|
129
|
+
processed_edges.add(edge)
|
130
|
+
elif not self.would_create_claw(E2, edge):
|
131
|
+
E2.add(edge)
|
132
|
+
processed_edges.add(edge)
|
133
|
+
else:
|
134
|
+
# If adding to either partition would create a claw,
|
135
|
+
# add to the smaller partition (balance heuristic)
|
136
|
+
if len(E1) <= len(E2):
|
137
|
+
E1.add(edge)
|
138
|
+
else:
|
139
|
+
E2.add(edge)
|
140
|
+
processed_edges.add(edge)
|
141
|
+
|
142
|
+
# Add remaining unprocessed edges using simple alternating strategy
|
143
|
+
remaining_edges = set(self.G.edges()) - processed_edges
|
144
|
+
for i, edge in enumerate(remaining_edges):
|
145
|
+
if i % 2 == 0:
|
42
146
|
E1.add(edge)
|
43
|
-
# Repair violations in E1
|
44
|
-
E1 = self._repair_violations(E1)
|
45
147
|
else:
|
46
148
|
E2.add(edge)
|
47
|
-
# Repair violations in E2
|
48
|
-
E2 = self._repair_violations(E2)
|
49
149
|
|
50
150
|
return E1, E2
|
51
151
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
def _is_claw_free(self, edge_set: Set[Tuple[int, int]]) -> bool:
|
59
|
-
"""Count number of k-stars in the edge set."""
|
60
|
-
if not edge_set:
|
61
|
-
return True
|
152
|
+
def verify_claw_free(self, edge_set: Set[Tuple[int, int]]) -> bool:
|
153
|
+
"""
|
154
|
+
Verify that a given edge set induces a claw-free graph.
|
155
|
+
|
156
|
+
Args:
|
157
|
+
edge_set: Set of edges to check
|
62
158
|
|
63
|
-
|
159
|
+
Returns:
|
160
|
+
True if the induced graph is claw-free, False otherwise
|
161
|
+
"""
|
162
|
+
# Build adjacency list
|
64
163
|
G = nx.Graph()
|
65
164
|
G.add_edges_from(edge_set)
|
66
|
-
|
67
165
|
claw = algo.find_claw_coordinates(G, first_claw=True)
|
68
166
|
if claw is None:
|
69
167
|
return True
|
70
|
-
else:
|
168
|
+
else:
|
71
169
|
return False
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
if not edge_set:
|
77
|
-
return 0
|
78
|
-
|
79
|
-
# Build graph from edge set
|
80
|
-
G = nx.Graph()
|
81
|
-
G.add_edges_from(edge_set)
|
170
|
+
|
171
|
+
def partition_edges(self) -> Tuple[Set[Tuple[int, int]], Set[Tuple[int, int]]]:
|
172
|
+
"""
|
173
|
+
Main method to partition graph edges into two claw-free sets.
|
82
174
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
for i in range(self.k):
|
99
|
-
for j in range(i + 1, self.k):
|
100
|
-
if G.has_edge(k_subset[i], k_subset[j]):
|
101
|
-
is_independent = False
|
102
|
-
break
|
103
|
-
if not is_independent:
|
104
|
-
break
|
105
|
-
|
106
|
-
if is_independent:
|
107
|
-
k_star_count += 1
|
108
|
-
|
109
|
-
return k_star_count
|
175
|
+
Returns:
|
176
|
+
Tuple of (E1, E2) where both induce claw-free graphs
|
177
|
+
"""
|
178
|
+
if self.m == 0:
|
179
|
+
return set(), set()
|
180
|
+
|
181
|
+
# Try the greedy approach
|
182
|
+
E1, E2 = self.greedy_partition()
|
183
|
+
|
184
|
+
# Verify the result
|
185
|
+
if self.verify_claw_free(E1) and self.verify_claw_free(E2):
|
186
|
+
return E1, E2
|
187
|
+
|
188
|
+
# If greedy fails, use a more conservative approach
|
189
|
+
return self.fallback_partition()
|
110
190
|
|
111
|
-
def
|
191
|
+
def fallback_partition(self) -> Tuple[Set[Tuple[int, int]], Set[Tuple[int, int]]]:
|
112
192
|
"""
|
113
|
-
|
114
|
-
|
193
|
+
Fallback method: Create a more conservative partition by ensuring
|
194
|
+
no vertex has degree > 2 in either partition (guarantees claw-free).
|
195
|
+
|
196
|
+
Returns:
|
197
|
+
Tuple of (E1, E2) - two claw-free edge sets
|
115
198
|
"""
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
current_set = edge_set.copy()
|
120
|
-
|
121
|
-
while True:
|
122
|
-
if self.k == 3:
|
123
|
-
is_claw_free = self._is_claw_free(current_set)
|
124
|
-
if is_claw_free:
|
125
|
-
break # No more violations
|
126
|
-
violations = self._find_k_stars(current_set)
|
127
|
-
else:
|
128
|
-
violations = self._find_k_stars(current_set)
|
129
|
-
if not violations:
|
130
|
-
break # No more violations
|
131
|
-
|
132
|
-
# Find the edge that appears in most violations
|
133
|
-
edge_violation_count = defaultdict(int)
|
134
|
-
for k_star in violations:
|
135
|
-
center, leaves = k_star
|
136
|
-
# Each k-star consists of k edges from center to leaves
|
137
|
-
for leaf in leaves:
|
138
|
-
edge = (min(center, leaf), max(center, leaf))
|
139
|
-
if edge in current_set:
|
140
|
-
edge_violation_count[edge] += 1
|
141
|
-
|
142
|
-
if not edge_violation_count:
|
143
|
-
break
|
144
|
-
|
145
|
-
# Remove the edge that appears in most violations
|
146
|
-
most_violating_edge = max(edge_violation_count.keys(),
|
147
|
-
key=lambda e: edge_violation_count[e])
|
148
|
-
current_set.remove(most_violating_edge)
|
199
|
+
E1 = set()
|
200
|
+
E2 = set()
|
149
201
|
|
150
|
-
|
151
|
-
|
152
|
-
def _find_k_stars(self, edge_set: Set[Tuple[int, int]]) -> List[Tuple[int, Tuple]]:
|
153
|
-
"""Find all k-stars in the edge set. Returns list of (center, leaves) tuples."""
|
154
|
-
if not edge_set:
|
155
|
-
return []
|
156
|
-
|
157
|
-
# Build graph from edge set
|
158
|
-
G = nx.Graph()
|
159
|
-
G.add_edges_from(edge_set)
|
202
|
+
degree1 = defaultdict(int)
|
203
|
+
degree2 = defaultdict(int)
|
160
204
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
for k_subset in itertools.combinations(neighbors, self.k):
|
179
|
-
# Check if this k-subset is independent
|
180
|
-
is_independent = True
|
181
|
-
for i in range(self.k):
|
182
|
-
for j in range(i + 1, self.k):
|
183
|
-
if G.has_edge(k_subset[i], k_subset[j]):
|
184
|
-
is_independent = False
|
185
|
-
break
|
186
|
-
if not is_independent:
|
187
|
-
break
|
188
|
-
|
189
|
-
if is_independent:
|
190
|
-
k_stars.append((center, k_subset))
|
191
|
-
|
192
|
-
return k_stars
|
193
|
-
|
194
|
-
def verify_partition(self, E1: Set[Tuple[int, int]], E2: Set[Tuple[int, int]]) -> Tuple[bool, bool]:
|
195
|
-
"""Verify that both partitions are k-star-free."""
|
196
|
-
if self.k == 3:
|
197
|
-
return (self._is_claw_free(E1), self._is_claw_free(E2))
|
198
|
-
else:
|
199
|
-
return (self._count_k_stars(E1) == 0, self._count_k_stars(E2) == 0)
|
200
|
-
|
201
|
-
|
202
|
-
def partition_edges_claw_free(G: nx.Graph) -> Tuple[Set[Tuple[int, int]], Set[Tuple[int, int]]]:
|
203
|
-
"""
|
204
|
-
Partition edges of graph G into two sets such that each induces a claw-free subgraph.
|
205
|
-
|
206
|
-
Implementation of Burr, Erdős, Lovász (1976) algorithm for k=3 (claw-free case).
|
207
|
-
|
208
|
-
Args:
|
209
|
-
G: Undirected NetworkX graph
|
205
|
+
for edge in self.G.edges():
|
206
|
+
u, v = edge
|
207
|
+
# Add to partition where both endpoints have degree < 2
|
208
|
+
if degree1[u] < 2 and degree1[v] < 2:
|
209
|
+
E1.add(edge)
|
210
|
+
degree1[u] += 1
|
211
|
+
degree1[v] += 1
|
212
|
+
elif degree2[u] < 2 and degree2[v] < 2:
|
213
|
+
E2.add(edge)
|
214
|
+
degree2[u] += 1
|
215
|
+
degree2[v] += 1
|
216
|
+
else:
|
217
|
+
# Add to the partition with smaller total degree
|
218
|
+
if sum(degree1.values()) <= sum(degree2.values()):
|
219
|
+
E1.add(edge)
|
220
|
+
else:
|
221
|
+
E2.add(edge)
|
210
222
|
|
211
|
-
|
212
|
-
(E1, E2): Two edge sets that induce claw-free subgraphs
|
213
|
-
"""
|
214
|
-
partitioner = BurrErdosLovaszPartitioner(G, k=3)
|
215
|
-
return partitioner.partition_edges()
|
216
|
-
|
223
|
+
return E1, E2
|
alonso/test.py
CHANGED
@@ -34,7 +34,7 @@ def main():
|
|
34
34
|
helper.add_argument('-w', '--write', action='store_true', help='write the generated random matrix to a file in the current directory')
|
35
35
|
helper.add_argument('-v', '--verbose', action='store_true', help='anable verbose output')
|
36
36
|
helper.add_argument('-l', '--log', action='store_true', help='enable file logging')
|
37
|
-
helper.add_argument('--version', action='version', version='%(prog)s 0.0.
|
37
|
+
helper.add_argument('--version', action='version', version='%(prog)s 0.0.7')
|
38
38
|
|
39
39
|
# Initialize the parameters
|
40
40
|
args = helper.parse_args()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alonso
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.7
|
4
4
|
Summary: Compute an Approximate Vertex Cover for undirected graph encoded in DIMACS format.
|
5
5
|
Home-page: https://github.com/frankvegadelgado/alonso
|
6
6
|
Author: Frank Vega
|
@@ -69,7 +69,7 @@ Given an undirected graph $G = (V, E)$, a **vertex cover** is a subset $V' \subs
|
|
69
69
|
|
70
70
|
# Overview of the Algorithm and Its Running Time
|
71
71
|
|
72
|
-
The `find_vertex_cover` algorithm approximates a minimum vertex cover for an undirected graph $G = (V, E)$ by partitioning its edges into two claw-free subgraphs using the Burr-Erdős-Lovász (1976) method, computing exact vertex covers for these subgraphs with the Faenza, Oriolo, and Stauffer (2011) approach, and recursively refining the solution on residual edges. This process prevents the ratio from reaching 2, leveraging overlap between subgraphs and minimal additions in recursion. The algorithm begins by cleaning the graph (removing self-loops and isolates in $O(n + m)$), checking for claw-free in $O(m \cdot \Delta)
|
72
|
+
The `find_vertex_cover` algorithm approximates a minimum vertex cover for an undirected graph $G = (V, E)$ by partitioning its edges into two claw-free subgraphs using the Burr-Erdős-Lovász (1976) method, computing exact vertex covers for these subgraphs with the Faenza, Oriolo, and Stauffer (2011) approach, and recursively refining the solution on residual edges. This process prevents the ratio from reaching 2, leveraging overlap between subgraphs and minimal additions in recursion. The algorithm begins by cleaning the graph (removing self-loops and isolates in $O(n + m)$), checking for claw-free in $O(m \cdot \Delta)$ where $\Delta$ is the maximum degree, partitions edges in $O(n^3)$, computes vertex covers in $O(n^3)$ per subgraph (total $O(n^3)$), merges covers in $O(n \cdot \log n)$, and constructs the residual graph in $O(m)$. The recursive nature, with a worst-case depth of $O(m)$ if each step covers one edge, yields a total runtime of $O(n^3 m)$, dominated by the cubic cost across levels. For sparse graphs ($m = O(n)$), this simplifies to $O(n^4)$.
|
73
73
|
|
74
74
|
---
|
75
75
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
alonso/__init__.py,sha256=xFbWJ7kskxYZCWD3QWtJ6d9uGnDlqhJyFJDCVuqG7hE,207
|
2
|
+
alonso/algorithm.py,sha256=QqSdBTIPtLxAVoCtCmlTTlflJafjsbA00AKMRehKoOE,5241
|
3
|
+
alonso/app.py,sha256=GvSjQNfwAuBw6Wjw6Mv6OaDzstw3XPyLpu72FKDPMJU,4320
|
4
|
+
alonso/applogger.py,sha256=fQBo51-TboX1DBqfSxX2P2eKJ5CcyiCq_IVlJTHjxAE,2624
|
5
|
+
alonso/batch.py,sha256=a_jbgkPEmn9w4bYn4oK9js5HYsNrs31sgbbp65b-rLQ,2305
|
6
|
+
alonso/merge.py,sha256=dWhF9t_2bFp4HT1NCzjhrSlhm8CkJQ4pwBHOhHSkezQ,4257
|
7
|
+
alonso/parser.py,sha256=Ib4TnWdkQb6A6FA3HHEjZDBb7uD0v9Gabwewqfu4XpQ,2549
|
8
|
+
alonso/partition.py,sha256=iDtuIkLyBTf8Cg-nceYDgLlWWQ2mLGrm-J3fmnz0j5I,8114
|
9
|
+
alonso/stable.py,sha256=IwINwjd3F7dfoISXlWsNWRkVJzItEojgMyNwzMM7nYc,6577
|
10
|
+
alonso/test.py,sha256=BWDBANpSnDRY9J2mj8L4-RCEtMt_pgu_gCkJ531L2fY,5472
|
11
|
+
alonso/utils.py,sha256=RmctLB8oDtjf0wKcKFaRvXiRgmtegqfbB1HFFzlpsvE,7674
|
12
|
+
alonso-0.0.7.dist-info/licenses/LICENSE,sha256=nUDh1nfa7rfEv1HocpoqPu0JaFnZKpIVh9eM0MgozpM,1067
|
13
|
+
alonso-0.0.7.dist-info/METADATA,sha256=CC2QC_LmSuHb_-rOPY3V5B1pN2t4Q_LjzUFOPUrTfks,9290
|
14
|
+
alonso-0.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
15
|
+
alonso-0.0.7.dist-info/entry_points.txt,sha256=JSod2CWtklhiaOFW3masqrgqhXIpVRsbIiprSmS1P7g,98
|
16
|
+
alonso-0.0.7.dist-info/top_level.txt,sha256=rOo7SlpYGdic6g55rHDus2d5N2t74H9qamX4yi6z5vw,7
|
17
|
+
alonso-0.0.7.dist-info/RECORD,,
|
alonso-0.0.5.dist-info/RECORD
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
alonso/__init__.py,sha256=xFbWJ7kskxYZCWD3QWtJ6d9uGnDlqhJyFJDCVuqG7hE,207
|
2
|
-
alonso/algorithm.py,sha256=j7rKY6Mx5LU_RbVU7KbUsQOLrGvIvHJxZxFuHQyoC5U,5227
|
3
|
-
alonso/app.py,sha256=KW11jl_NDooytw0cuVyz37_Guc06xj--KMuxtG7sYAI,4320
|
4
|
-
alonso/applogger.py,sha256=fQBo51-TboX1DBqfSxX2P2eKJ5CcyiCq_IVlJTHjxAE,2624
|
5
|
-
alonso/batch.py,sha256=wk4kfNNLfPJAuf4Mg6FuKzJBKmQ_BYdehPvT66xvovw,2305
|
6
|
-
alonso/merge.py,sha256=dWhF9t_2bFp4HT1NCzjhrSlhm8CkJQ4pwBHOhHSkezQ,4257
|
7
|
-
alonso/parser.py,sha256=Ib4TnWdkQb6A6FA3HHEjZDBb7uD0v9Gabwewqfu4XpQ,2549
|
8
|
-
alonso/partition.py,sha256=a4JHiFsZ9MgFWWFLCvmh-k6EbDrMfJbXR_3Tb_IaPrQ,8511
|
9
|
-
alonso/stable.py,sha256=IwINwjd3F7dfoISXlWsNWRkVJzItEojgMyNwzMM7nYc,6577
|
10
|
-
alonso/test.py,sha256=pXgfgja86h-EuCPMa_AW7NjzaBLtvSsnPtOsFTAOops,5472
|
11
|
-
alonso/utils.py,sha256=RmctLB8oDtjf0wKcKFaRvXiRgmtegqfbB1HFFzlpsvE,7674
|
12
|
-
alonso-0.0.5.dist-info/licenses/LICENSE,sha256=nUDh1nfa7rfEv1HocpoqPu0JaFnZKpIVh9eM0MgozpM,1067
|
13
|
-
alonso-0.0.5.dist-info/METADATA,sha256=SZfvVva7pWYi8OZyXjw4WHhzvoT99dM8yENR4iSSdmo,9356
|
14
|
-
alonso-0.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
15
|
-
alonso-0.0.5.dist-info/entry_points.txt,sha256=JSod2CWtklhiaOFW3masqrgqhXIpVRsbIiprSmS1P7g,98
|
16
|
-
alonso-0.0.5.dist-info/top_level.txt,sha256=rOo7SlpYGdic6g55rHDus2d5N2t74H9qamX4yi6z5vw,7
|
17
|
-
alonso-0.0.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|