topologicpy 0.8.38__py3-none-any.whl → 0.8.39__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.
topologicpy/Dictionary.py CHANGED
@@ -324,6 +324,7 @@ class Dictionary():
324
324
  return new_dictionaries[0]
325
325
  else:
326
326
  dictionaries = return_dictionaries
327
+
327
328
  sinkKeys = []
328
329
  sinkValues = []
329
330
  d = dictionaries[0]
topologicpy/Graph.py CHANGED
@@ -6295,7 +6295,9 @@ class Graph:
6295
6295
  if not vertices:
6296
6296
  edges = []
6297
6297
  _ = graph.Edges(edges, tolerance) # Hook to Core
6298
- return edges
6298
+ if not edges:
6299
+ return []
6300
+ return list(dict.fromkeys(edges)) # remove duplicates
6299
6301
  else:
6300
6302
  vertices = [v for v in vertices if Topology.IsInstance(v, "Vertex")]
6301
6303
  if len(vertices) < 1:
@@ -12909,4 +12911,343 @@ class Graph:
12909
12911
  numerator = sum(min(weights1.get(k, 0), weights2.get(k, 0)) for k in keys)
12910
12912
  denominator = sum(max(weights1.get(k, 0), weights2.get(k, 0)) for k in keys)
12911
12913
 
12912
- return round(numerator / denominator, mantissa) if denominator != 0 else 0.0
12914
+ return round(numerator / denominator, mantissa) if denominator != 0 else 0.0
12915
+
12916
+ @staticmethod
12917
+ def _vertex_is_same(v1, v2, key=None):
12918
+ from topologicpy.Topology import Topology
12919
+ from topologicpy.Dictionary import Dictionary
12920
+ d1 = Topology.Dictionary(v1)
12921
+ d2 = Topology.Dictionary(v2)
12922
+ a = Dictionary.ValueAtKey(d1, key, "0")
12923
+ b = Dictionary.ValueAtKey(d2, key, "1")
12924
+ return a == b
12925
+
12926
+ @staticmethod
12927
+ def _vertex_in_list(vertex, vertex_list, key=None):
12928
+ for i, v1 in enumerate(vertex_list):
12929
+ if Graph._vertex_is_same(vertex, v1, key=key):
12930
+ return i+1
12931
+ return False
12932
+
12933
+ @staticmethod
12934
+ def _edge_in_list(edge, edge_list, vertices_a, vertices_b, key=None):
12935
+ sv1 = vertices_a[edge[0]]
12936
+ ev1 = vertices_a[edge[1]]
12937
+ for i, e in enumerate(edge_list):
12938
+ sv2 = vertices_b[e[0]]
12939
+ ev2 = vertices_b[e[1]]
12940
+ if (Graph._vertex_is_same(sv1, sv2, key=key) and Graph._vertex_is_same(ev1, ev2, key=key)) or \
12941
+ (Graph._vertex_is_same(sv1, ev2, key=key) and Graph._vertex_is_same(ev1, sv2, key=key)):
12942
+ return i+1
12943
+ return False
12944
+
12945
+ @staticmethod
12946
+ def Union(graphA, graphB, vertexKey: str, silent: bool = False):
12947
+ """
12948
+ Union the two input graphs based on an input vertex key. See https://en.wikipedia.org/wiki/Boolean_operation.
12949
+
12950
+ Parameters
12951
+ ----------
12952
+ graphA : topologic_core.Graph
12953
+ The first input graph.
12954
+ graphB : topologic_core.Graph
12955
+ The second input graph.
12956
+ vertexKey : str
12957
+ The vertex dictionary key to use to determine if two vertices are the same.
12958
+ silent : bool , optional
12959
+ If set to True, error and warning messages are suppressed. The default is False.
12960
+
12961
+ Returns
12962
+ -------
12963
+ topologic_core.Graph
12964
+ the resultant graph. Vertex and edge dictionaries are merged.
12965
+
12966
+ """
12967
+ from topologicpy.Vertex import Vertex
12968
+ from topologicpy.Edge import Edge
12969
+ from topologicpy.Topology import Topology
12970
+ from topologicpy.Dictionary import Dictionary
12971
+
12972
+ if not Topology.IsInstance(graphA, "graph"):
12973
+ if not silent:
12974
+ print("Graph.Union - Error: The graphA input parameter is not a valid graph. Returning None.")
12975
+ return None
12976
+ if not Topology.IsInstance(graphB, "graph"):
12977
+ if not silent:
12978
+ print("Graph.Union - Error: The graphB input parameter is not a valid graph. Returning None.")
12979
+ return None
12980
+ if not isinstance(vertexKey, str):
12981
+ if not silent:
12982
+ print("Graph.Union - Error: The vertexKey input parameter is not a valid string. Returning None.")
12983
+ return None
12984
+ vertices_a = Graph.Vertices(graphA)
12985
+ vertices_a_new = []
12986
+ for v in vertices_a:
12987
+ d = Topology.Dictionary(v)
12988
+ v_new = Vertex.ByCoordinates(Vertex.Coordinates(v))
12989
+ v_new = Topology.SetDictionary(v_new, d)
12990
+ vertices_a_new.append(v_new)
12991
+ vertices_a = vertices_a_new
12992
+ vertices_b = Graph.Vertices(graphB)
12993
+ vertices_b_new = []
12994
+ for v in vertices_b:
12995
+ d = Topology.Dictionary(v)
12996
+ v_new = Vertex.ByCoordinates(Vertex.Coordinates(v))
12997
+ v_new = Topology.SetDictionary(v_new, d)
12998
+ vertices_b_new.append(v_new)
12999
+ vertices_b = vertices_b_new
13000
+ mesh_data_a = Graph.MeshData(graphA)
13001
+ mesh_data_b = Graph.MeshData(graphB)
13002
+ edges_a = mesh_data_a['edges']
13003
+ edges_b = mesh_data_b['edges']
13004
+ edges_a_dicts = mesh_data_a['edgeDictionaries']
13005
+ edges_b_dicts = mesh_data_b['edgeDictionaries']
13006
+
13007
+ union_vertices = []
13008
+
13009
+ def _add_vertex(v):
13010
+ for i, uv in enumerate(union_vertices):
13011
+ if Graph._vertex_is_same(v, uv, key=vertexKey):
13012
+ d_a = Topology.Dictionary(v)
13013
+ d_b = Topology.Dictionary(uv)
13014
+ d_c = Dictionary.ByMergedDictionaries(d_a, d_b)
13015
+ uv = Topology.SetDictionary(uv, d_c)
13016
+ return i
13017
+ union_vertices.append(v)
13018
+ return len(union_vertices) - 1
13019
+
13020
+ # Map original vertices to indices in union list
13021
+ index_map_a = [_add_vertex(v) for v in vertices_a]
13022
+ index_map_b = [_add_vertex(v) for v in vertices_b]
13023
+
13024
+ union_edges = []
13025
+
13026
+ def _add_edge(i, j, dictionary):
13027
+ vi = union_vertices[i]
13028
+ vj = union_vertices[j]
13029
+ for k, e in enumerate(union_edges):
13030
+ svi = Edge.StartVertex(e)
13031
+ evi = Edge.EndVertex(e)
13032
+ if (Graph._vertex_is_same(svi, vi, key=vertexKey) and Graph._vertex_is_same(evi, vj, key=vertexKey)) or \
13033
+ (Graph._vertex_is_same(svi, vj, key=vertexKey) and Graph._vertex_is_same(evi, vi, key=vertexKey)):
13034
+ # Merge dictionaries
13035
+ d_a = Topology.Dictionary(e)
13036
+ d_c = Dictionary.ByMergedDictionaries([d_a, dictionary], silent=True)
13037
+ new_edge = Edge.ByVertices(vi, vj)
13038
+ new_edge = Topology.SetDictionary(new_edge, d_c, silent=True)
13039
+ union_edges[k] = new_edge
13040
+ return
13041
+ # If not found, add new edge
13042
+ edge = Edge.ByVertices(vi, vj)
13043
+ edge = Topology.SetDictionary(edge, dictionary)
13044
+ union_edges.append(edge)
13045
+
13046
+ # Add edges from A
13047
+ for idx, e in enumerate(edges_a):
13048
+ i = index_map_a[e[0]]
13049
+ j = index_map_a[e[1]]
13050
+ _add_edge(i, j, Dictionary.ByPythonDictionary(edges_a_dicts[idx]))
13051
+
13052
+ # Add edges from B, merging duplicates
13053
+ for idx, e in enumerate(edges_b):
13054
+ i = index_map_b[e[0]]
13055
+ j = index_map_b[e[1]]
13056
+ _add_edge(i, j, Dictionary.ByPythonDictionary(edges_b_dicts[idx]))
13057
+
13058
+ return Graph.ByVerticesEdges(union_vertices, union_edges)
13059
+
13060
+ @staticmethod
13061
+ def Intersect(graphA, graphB, vertexKey: str, silent: bool = False):
13062
+ """
13063
+ Intersect the two input graphs based on an input vertex key. See https://en.wikipedia.org/wiki/Boolean_operation.
13064
+
13065
+ Parameters
13066
+ ----------
13067
+ graphA : topologic_core.Graph
13068
+ The first input graph.
13069
+ graphB : topologic_core.Graph
13070
+ The second input graph.
13071
+ vertexKey : str
13072
+ The vertex dictionary key to use to determine if two vertices are the same.
13073
+ silent : bool , optional
13074
+ If set to True, error and warning messages are suppressed. The default is False.
13075
+
13076
+ Returns
13077
+ -------
13078
+ topologic_core.Graph
13079
+ the resultant graph. Vertex and edge dictionaries are merged.
13080
+
13081
+ """
13082
+ from topologicpy.Vertex import Vertex
13083
+ from topologicpy.Edge import Edge
13084
+ from topologicpy.Topology import Topology
13085
+ from topologicpy.Dictionary import Dictionary
13086
+
13087
+ if not Topology.IsInstance(graphA, "graph"):
13088
+ if not silent:
13089
+ print("Graph.Intersect - Error: The graphA input parameter is not a valid graph. Returning None.")
13090
+ return None
13091
+ if not Topology.IsInstance(graphB, "graph"):
13092
+ if not silent:
13093
+ print("Graph.Intersect - Error: The graphB input parameter is not a valid graph. Returning None.")
13094
+ return None
13095
+ if not isinstance(vertexKey, str):
13096
+ if not silent:
13097
+ print("Graph.Intersect - Error: The vertexKey input parameter is not a valid string. Returning None.")
13098
+ return None
13099
+
13100
+ vertices_a = Graph.Vertices(graphA)
13101
+ vertices_a_new = []
13102
+ for v in vertices_a:
13103
+ d = Topology.Dictionary(v)
13104
+ v_new = Vertex.ByCoordinates(Vertex.Coordinates(v))
13105
+ v_new = Topology.SetDictionary(v_new, d)
13106
+ vertices_a_new.append(v_new)
13107
+ vertices_a = vertices_a_new
13108
+ vertices_b = Graph.Vertices(graphB)
13109
+ vertices_b_new = []
13110
+ for v in vertices_b:
13111
+ d = Topology.Dictionary(v)
13112
+ v_new = Vertex.ByCoordinates(Vertex.Coordinates(v))
13113
+ v_new = Topology.SetDictionary(v_new, d)
13114
+ vertices_b_new.append(v_new)
13115
+ vertices_b = vertices_b_new
13116
+ mesh_data_a = Graph.MeshData(graphA)
13117
+ mesh_data_b = Graph.MeshData(graphB)
13118
+ edges_a = mesh_data_a['edges']
13119
+ edges_b = mesh_data_b['edges']
13120
+ edges_a_dicts = mesh_data_a['edgeDictionaries']
13121
+ edges_b_dicts = mesh_data_b['edgeDictionaries']
13122
+
13123
+ common_vertices = []
13124
+ for i, v in enumerate(vertices_a):
13125
+ j = Graph._vertex_in_list(v, vertices_b, key=vertexKey)
13126
+ if j:
13127
+ d_a = Topology.Dictionary(v)
13128
+ d_b = Topology.Dictionary(vertices_b[j-1])
13129
+ d_c = Dictionary.ByMergedDictionaries([d_a, d_b], silent=True)
13130
+ v = Topology.SetDictionary(v, d_c, silent=True)
13131
+ common_vertices.append(v)
13132
+ common_edges = []
13133
+
13134
+ for i, e in enumerate(edges_a):
13135
+ j = Graph._edge_in_list(e, edges_b, vertices_a, vertices_b, key=vertexKey)
13136
+ if j:
13137
+ # Merge the dictionaries
13138
+ d_a = Dictionary.ByPythonDictionary(edges_a_dicts[i])
13139
+ d_b = Dictionary.ByPythonDictionary(edges_b_dicts[j-1]) # We added 1 to j to avoid 0 which can be interpreted as False.
13140
+ d_c = Dictionary.ByMergedDictionaries([d_a, d_b], silent=True)
13141
+ print("Intersect - d_c:", d_c)
13142
+ print(Dictionary.Keys(d_c), Dictionary.Values(d_c))
13143
+ # Create the edge
13144
+ final_edge = Edge.ByVertices(vertices_a[e[0]], vertices_a[e[1]])
13145
+ # Set the edge's dictionary
13146
+ final_edge = Topology.SetDictionary(final_edge, d_c, silent=True)
13147
+ # Add the final edge to the list
13148
+ common_edges.append(final_edge)
13149
+
13150
+ return Graph.ByVerticesEdges(common_vertices, common_edges)
13151
+
13152
+ @staticmethod
13153
+ def Difference(graphA, graphB, vertexKey: str, silent: bool = False):
13154
+ """
13155
+ Intersect the two input graphs based on an input vertex key. See https://en.wikipedia.org/wiki/Boolean_operation.
13156
+
13157
+ Parameters
13158
+ ----------
13159
+ graphA : topologic_core.Graph
13160
+ The first input graph.
13161
+ graphB : topologic_core.Graph
13162
+ The second input graph.
13163
+ vertexKey : str
13164
+ The vertex dictionary key to use to determine if two vertices are the same.
13165
+ silent : bool , optional
13166
+ If set to True, error and warning messages are suppressed. The default is False.
13167
+
13168
+ Returns
13169
+ -------
13170
+ topologic_core.Graph
13171
+ the resultant graph. Vertex and edge dictionaries are not merged.
13172
+
13173
+ """
13174
+ from topologicpy.Vertex import Vertex
13175
+ from topologicpy.Edge import Edge
13176
+ from topologicpy.Topology import Topology
13177
+ from topologicpy.Dictionary import Dictionary
13178
+
13179
+ if not Topology.IsInstance(graphA, "graph"):
13180
+ if not silent:
13181
+ print("Graph.Difference - Error: The graphA input parameter is not a valid graph. Returning None.")
13182
+ return None
13183
+ if not Topology.IsInstance(graphB, "graph"):
13184
+ if not silent:
13185
+ print("Graph.Difference - Error: The graphB input parameter is not a valid graph. Returning None.")
13186
+ return None
13187
+ if not isinstance(vertexKey, str):
13188
+ if not silent:
13189
+ print("Graph.Difference - Error: The vertexKey input parameter is not a valid string. Returning None.")
13190
+ return None
13191
+ vertices_a = Graph.Vertices(graphA)
13192
+ vertices_b = Graph.Vertices(graphB)
13193
+ mesh_data_a = Graph.MeshData(graphA)
13194
+ mesh_data_b = Graph.MeshData(graphB)
13195
+ edges_a = mesh_data_a['edges']
13196
+ edges_b = mesh_data_b['edges']
13197
+ edges_a_dicts = mesh_data_a['edgeDictionaries']
13198
+
13199
+ diff_vertices = [v for v in vertices_a if not Graph._vertex_in_list(v, vertices_b, key=vertexKey)]
13200
+ diff_edges = []
13201
+
13202
+ for i, e in enumerate(edges_a):
13203
+ if not Graph._edge_in_list(e, edges_b, vertices_a, vertices_b, key=vertexKey):
13204
+ # Create the edge
13205
+ if Graph._vertex_in_list(vertices_a[e[0]], diff_vertices, key=vertexKey) and Graph._vertex_in_list(vertices_a[e[1]], diff_vertices, key=vertexKey):
13206
+ final_edge = Edge.ByVertices(vertices_a[e[0]], vertices_a[e[1]])
13207
+ # Set the edge's dictionary
13208
+ final_edge = Topology.SetDictionary(final_edge, Dictionary.ByPythonDictionary(edges_a_dicts[i]), silent=True)
13209
+ # Add the final edge to the list
13210
+ diff_edges.append(final_edge)
13211
+
13212
+ return Graph.ByVerticesEdges(diff_vertices, diff_edges)
13213
+
13214
+ @staticmethod
13215
+ def SymmetricDifference(graphA, graphB, vertexKey: str, silent: bool = False):
13216
+ """
13217
+ Find the symmetric difference pf the two input graphs based on an input vertex key. See https://en.wikipedia.org/wiki/Boolean_operation.
13218
+
13219
+ Parameters
13220
+ ----------
13221
+ graphA : topologic_core.Graph
13222
+ The first input graph.
13223
+ graphB : topologic_core.Graph
13224
+ The second input graph.
13225
+ vertexKey : str
13226
+ The vertex dictionary key to use to determine if two vertices are the same.
13227
+ silent : bool , optional
13228
+ If set to True, error and warning messages are suppressed. The default is False.
13229
+
13230
+ Returns
13231
+ -------
13232
+ topologic_core.Graph
13233
+ the resultant graph. Vertex and edge dictionaries are not merged.
13234
+
13235
+ """
13236
+
13237
+ from topologicpy.Topology import Topology
13238
+
13239
+ if not Topology.IsInstance(graphA, "graph"):
13240
+ if not silent:
13241
+ print("Graph.SymmetricDifference - Error: The graphA input parameter is not a valid graph. Returning None.")
13242
+ return None
13243
+ if not Topology.IsInstance(graphB, "graph"):
13244
+ if not silent:
13245
+ print("Graph.SymmetricDifference - Error: The graphB input parameter is not a valid graph. Returning None.")
13246
+ return None
13247
+ if not isinstance(vertexKey, str):
13248
+ if not silent:
13249
+ print("Graph.SymmetricDifference - Error: The vertexKey input parameter is not a valid string. Returning None.")
13250
+ return None
13251
+ diffAB = Graph.Difference(graphA, graphB, vertexKey=vertexKey, silent=True)
13252
+ diffBA = Graph.Difference(graphB, graphA, vertexKey=vertexKey, silent=True)
13253
+ return Graph.Union(diffAB, diffBA, vertexKey=vertexKey, silent=True)
topologicpy/Plotly.py CHANGED
@@ -551,7 +551,7 @@ class Plotly:
551
551
  if not labelKey == None:
552
552
  labels[m] = Dictionary.ValueAtKey(d, key=labelKey, defaultValue=" ")
553
553
  if not sizeKey == None:
554
- sizes[m] = float(Dictionary.ValueAtKey(d, key=sizeKey))
554
+ sizes[m] = float(Dictionary.ValueAtKey(d, key=sizeKey, defaultValue=sizes[m]))
555
555
  if sizes[m] == None:
556
556
  sizes[m] = size
557
557
  if float(sizes[m]) <= 0:
topologicpy/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.8.38'
1
+ __version__ = '0.8.39'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: topologicpy
3
- Version: 0.8.38
3
+ Version: 0.8.39
4
4
  Summary: An AI-Powered Spatial Modelling and Analysis Software Library for Architecture, Engineering, and Construction.
5
5
  Author-email: Wassim Jabi <wassim.jabi@gmail.com>
6
6
  License: AGPL v3 License
@@ -8,17 +8,17 @@ topologicpy/Cluster.py,sha256=wvfMAx6aPrSAt5nQ4--KnqD4EK9MGjch6Dg985WF7JQ,58748
8
8
  topologicpy/Color.py,sha256=ZVVQRKGjebY9aOU1gpN_AbssdRRiVKlZV3f8TrsTNgg,20307
9
9
  topologicpy/Context.py,sha256=G3CwMvN8Jw2rnQRwB-n4MaQq_wLS0vPimbXKwsdMJ80,3055
10
10
  topologicpy/DGL.py,sha256=HQXy9iDnrvWGDxaBfe5pRbweQ2zLBvAf6UdjfhKkQYI,139041
11
- topologicpy/Dictionary.py,sha256=PageNwgFmLakb0cKizsCEGkL_u_JV0CVqYGRM60XdsI,40837
11
+ topologicpy/Dictionary.py,sha256=2Sxm8twR1W4ksZho0YXQB_EltK2qbZWK4UHskP3jvFQ,40846
12
12
  topologicpy/Edge.py,sha256=CPdQKaE7ft6zgh0vxekkfGRRUY_yEqkEJ14NvjSgJOA,73190
13
13
  topologicpy/EnergyModel.py,sha256=Pyb28gDDwhzlQIH0xqAygqS0P3SJxWyyV7OWS_AAfRs,53856
14
14
  topologicpy/Face.py,sha256=BT_5ymb7-s-Wb1tuaBtkopJpeNg-RbooTUk_-KInQ6c,201618
15
- topologicpy/Graph.py,sha256=e9_KSCvRI8jilx7afqicPDJqsCPHA5ucz5To8mfbFKo,605658
15
+ topologicpy/Graph.py,sha256=YLigYjWAAhMMtUurYngjK9NUMLkDM08BmYWYjxYwMcs,620455
16
16
  topologicpy/Grid.py,sha256=EbI2NcYhQDpD5mItd7A1Lpr8Puuf87vZPWuoh7_gChQ,18483
17
17
  topologicpy/Helper.py,sha256=qEsE4yaboEGW94q9lFCff0I_JwwTTQnDAFXw006yHaQ,31203
18
18
  topologicpy/Honeybee.py,sha256=yctkwfdupKnp7bAOjP1Z4YaYpRrWoMEb4gz9Z5zaWwE,21751
19
19
  topologicpy/Matrix.py,sha256=LqVckk2qTwKwEo79eyNsOrHVSHdO82JCREcfy6WIk4I,22716
20
20
  topologicpy/Neo4j.py,sha256=ELKmON7R16j1kQD8xRHDGGCvzjIM2HGHNekdaXDUw6w,22371
21
- topologicpy/Plotly.py,sha256=B6CxNyAGfhv70N6sa4B4aHLYd7zIpH5S1hmpk3sQ3ys,120533
21
+ topologicpy/Plotly.py,sha256=Dmy9i9puSfvB42mrBUip3v0TCXIzHpAETWDUCDxfqNA,120556
22
22
  topologicpy/Polyskel.py,sha256=oVfM4lqSMPTjnkHfsRU9VI8Blt6Vf0LVPkD9ebz7Wmw,27082
23
23
  topologicpy/PyG.py,sha256=zvV6jtnol_aFiN6JRoMpYwBVfOU2aFs9gdWSdEo6mtU,109757
24
24
  topologicpy/ShapeGrammar.py,sha256=UVb8VPwVKd6V3zDTNzpBecQPgYo1EjSsS10XJ8k5YcI,23364
@@ -30,9 +30,9 @@ topologicpy/Vector.py,sha256=X12eqskn28bdB7sLY1EZhq3noPYzPbNEgHPb4a959ss,42302
30
30
  topologicpy/Vertex.py,sha256=epBfbD7fm87T-TZ0WuwrioXdYqg9NgRlHn_qUFtVbkc,84562
31
31
  topologicpy/Wire.py,sha256=vE6IoObVucOZVTFMPiHuNN4DDezRHHyFbwhF5WRBm3s,231547
32
32
  topologicpy/__init__.py,sha256=RMftibjgAnHB1vdL-muo71RwMS4972JCxHuRHOlU428,928
33
- topologicpy/version.py,sha256=K8Qib--QiI1qx6hx2xqHbVpHiSCs5RJ_6E-TRDxr1Y8,23
34
- topologicpy-0.8.38.dist-info/licenses/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
35
- topologicpy-0.8.38.dist-info/METADATA,sha256=ebAGBKEzxeo5cll1YKrRoo-G0mOx6Dwzmwsl246AwYo,10535
36
- topologicpy-0.8.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
- topologicpy-0.8.38.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
38
- topologicpy-0.8.38.dist-info/RECORD,,
33
+ topologicpy/version.py,sha256=krvNarxqLr-1e4M5aYKlWbcRZoZxDYVlZehTgEbpBTg,23
34
+ topologicpy-0.8.39.dist-info/licenses/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
35
+ topologicpy-0.8.39.dist-info/METADATA,sha256=l1XGyTl1wZZ-G4PgjDEzyZ_kitEAFGAGhcgW8wV1Jos,10535
36
+ topologicpy-0.8.39.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
+ topologicpy-0.8.39.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
38
+ topologicpy-0.8.39.dist-info/RECORD,,