topologicpy 0.8.50__py3-none-any.whl → 0.8.52__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/Cell.py CHANGED
@@ -1567,6 +1567,8 @@ class Cell():
1567
1567
  vertices = Topology.Vertices(dodecahedron)
1568
1568
  d = Vertex.Distance(Vertex.Origin(), vertices[0])
1569
1569
  dodecahedron = Topology.Scale(dodecahedron, origin=Vertex.Origin(), x=radius/d, y=radius/d, z=radius/d)
1570
+ verts = Topology.Vertices(dodecahedron)
1571
+ print("Dodec: Distance", Vertex.Distance(Vertex.Origin(), verts[0]))
1570
1572
  if placement == "bottom":
1571
1573
  dodecahedron = Topology.Translate(dodecahedron, 0, 0, radius)
1572
1574
  elif placement == "lowerleft":
@@ -3091,9 +3093,9 @@ class Cell():
3091
3093
 
3092
3094
  @staticmethod
3093
3095
  def Sphere(origin= None, radius: float = 0.5, uSides: int = 16, vSides: int = 8, direction: list = [0, 0, 1],
3094
- placement: str = "center", tolerance: float = 0.0001):
3096
+ placement: str = "center", tolerance: float = 0.0001, silent: bool = False):
3095
3097
  """
3096
- Creates a sphere.
3098
+ Creates an approximation of a sphere using a UV grid of triangular faces.
3097
3099
 
3098
3100
  Parameters
3099
3101
  ----------
@@ -3111,6 +3113,9 @@ class Cell():
3111
3113
  The description of the placement of the origin of the sphere. This can be "bottom", "center", or "lowerleft". It is case insensitive. Default is "center".
3112
3114
  tolerance : float , optional
3113
3115
  The desired tolerance. Default is 0.0001.
3116
+ silent : bool, optional
3117
+ If set to True, suppresses warning and error messages. Default is False.
3118
+
3114
3119
 
3115
3120
  Returns
3116
3121
  -------
@@ -3118,24 +3123,89 @@ class Cell():
3118
3123
  The created sphere.
3119
3124
 
3120
3125
  """
3121
-
3126
+
3127
+ import math
3122
3128
  from topologicpy.Vertex import Vertex
3123
- from topologicpy.Wire import Wire
3124
- from topologicpy.CellComplex import CellComplex
3129
+ from topologicpy.Face import Face
3130
+ from topologicpy.Cell import Cell
3125
3131
  from topologicpy.Topology import Topology
3126
3132
 
3127
- if not Topology.IsInstance(origin, "Vertex"):
3133
+ # Validate inputs
3134
+ if radius <= 0 or uSides < 3 or vSides < 2:
3135
+ if not silent:
3136
+ print("Sphere - Error: radius must be > 0, uSides >= 3, vSides >= 2. Returning None.")
3137
+ return None
3138
+
3139
+ # Center
3140
+ if origin is None:
3128
3141
  origin = Vertex.ByCoordinates(0, 0, 0)
3129
- if not Topology.IsInstance(origin, "Vertex"):
3130
- print("Cell.Sphere - Error: The input origin parameter is not a valid topologic vertex. Returning None.")
3142
+ ox = Vertex.X(origin)
3143
+ oy = Vertex.Y(origin)
3144
+ oz = Vertex.Z(origin)
3145
+
3146
+ # Poles
3147
+ top_pole = Vertex.ByCoordinates(ox, oy, oz + radius)
3148
+ bottom_pole = Vertex.ByCoordinates(ox, oy, oz - radius)
3149
+
3150
+ # Latitude rings (exclude poles)
3151
+ rings = [] # list of list[Vertex]
3152
+ for vi in range(1, vSides):
3153
+ phi = math.pi * vi / vSides # 0..pi
3154
+ sin_phi = math.sin(phi)
3155
+ cos_phi = math.cos(phi)
3156
+ ring = []
3157
+ for ui in range(uSides):
3158
+ theta = 2.0 * math.pi * ui / uSides
3159
+ x = ox + radius * sin_phi * math.cos(theta)
3160
+ y = oy + radius * sin_phi * math.sin(theta)
3161
+ z = oz + radius * cos_phi
3162
+ ring.append(Vertex.ByCoordinates(x, y, z))
3163
+ rings.append(ring)
3164
+
3165
+ faces = []
3166
+
3167
+ # Top cap: triangles from top pole to first ring
3168
+ first_ring = rings[0]
3169
+ for u in range(uSides):
3170
+ v1 = first_ring[u]
3171
+ v2 = first_ring[(u + 1) % uSides]
3172
+ f = Face.ByVertices([top_pole, v1, v2], tolerance=tolerance)
3173
+ if f:
3174
+ faces.append(f)
3175
+
3176
+ # Middle bands: split quads into two triangles
3177
+ for i in range(len(rings) - 1):
3178
+ curr = rings[i]
3179
+ nxt = rings[i + 1]
3180
+ for u in range(uSides):
3181
+ a = curr[u]
3182
+ b = nxt[u]
3183
+ c = nxt[(u + 1) % uSides]
3184
+ d = curr[(u + 1) % uSides]
3185
+ f1 = Face.ByVertices([a, b, c], tolerance=tolerance)
3186
+ if f1:
3187
+ faces.append(f1)
3188
+ f2 = Face.ByVertices([a, c, d], tolerance=tolerance)
3189
+ if f2:
3190
+ faces.append(f2)
3191
+
3192
+ # Bottom cap: triangles from last ring to bottom pole
3193
+ last_ring = rings[-1]
3194
+ for u in range(uSides):
3195
+ v1 = last_ring[(u + 1) % uSides]
3196
+ v2 = last_ring[u]
3197
+ f = Face.ByVertices([bottom_pole, v1, v2], tolerance=tolerance)
3198
+ if f:
3199
+ faces.append(f)
3200
+
3201
+ # Sew faces into a shell
3202
+ sphere = None
3203
+ try:
3204
+ sphere = Cell.ByFaces(faces, tolerance=tolerance)
3205
+ except Exception:
3206
+ if not silent:
3207
+ print("Cell.Sphere - Error: could not create a sphere. Returning None.")
3131
3208
  return None
3132
- c = Wire.Circle(origin=Vertex.Origin(), radius=radius, sides=vSides, fromAngle=0, toAngle=180, close=False, direction=[0, 0, 1], placement="center")
3133
- c = Topology.Rotate(c, origin=Vertex.Origin(), axis=[1, 0, 0], angle=90)
3134
- sphere = Topology.Spin(c, origin=Vertex.Origin(), triangulate=False, direction=[0, 0, 1], angle=360, sides=uSides, tolerance=tolerance)
3135
- if Topology.Type(sphere) == Topology.TypeID("CellComplex"):
3136
- sphere = CellComplex.ExternalBoundary(sphere)
3137
- if Topology.Type(sphere) == Topology.TypeID("Shell"):
3138
- sphere = Cell.ByShell(sphere)
3139
3209
  if placement.lower() == "bottom":
3140
3210
  sphere = Topology.Translate(sphere, 0, 0, radius)
3141
3211
  elif placement.lower() == "lowerleft":
topologicpy/Graph.py CHANGED
@@ -6255,53 +6255,79 @@ class Graph:
6255
6255
  return scores
6256
6256
 
6257
6257
  @staticmethod
6258
- def Diameter(graph):
6258
+ def Diameter(graph, silent: bool = False):
6259
6259
  """
6260
- Returns the diameter of the input graph. See https://mathworld.wolfram.com/GraphDiameter.html.
6260
+ Returns the diameter of the input (unweighted, undirected) graph.
6261
+
6262
+ The diameter is the maximum, over all pairs of vertices, of the length of a
6263
+ shortest path between them. If the graph is disconnected, this returns the
6264
+ maximum finite eccentricity across connected components and prints a warning
6265
+ unless `silent=True`.
6261
6266
 
6262
6267
  Parameters
6263
6268
  ----------
6264
6269
  graph : topologic_core.Graph
6265
6270
  The input graph.
6271
+ silent : bool , optional
6272
+ If set to True, error and warning messages are suppressed. Default is False.
6266
6273
 
6267
6274
  Returns
6268
6275
  -------
6269
6276
  int
6270
- The diameter of the input graph.
6271
-
6277
+ The diameter of the input graph, or None if the graph is empty.
6272
6278
  """
6279
+ from collections import deque
6273
6280
  from topologicpy.Topology import Topology
6274
6281
 
6282
+ # Basic checks
6275
6283
  if not Topology.IsInstance(graph, "Graph"):
6276
- print("Graph.Diameter - Error: The input graph is not a valid graph. Returning None.")
6284
+ if not silent:
6285
+ print("Graph.Diameter - Error: The input graph is not a valid graph. Returning None.")
6277
6286
  return None
6278
-
6279
- def dfs(node, visited):
6280
- visited.add(node)
6281
- max_depth = 0
6282
- farthest_node = node
6283
- for neighbor in adj_dict[node]:
6284
- if neighbor not in visited:
6285
- depth, end_node = dfs(neighbor, visited)
6286
- if depth + 1 > max_depth:
6287
- max_depth = depth + 1
6288
- farthest_node = end_node
6289
- return max_depth, farthest_node
6290
6287
 
6291
- adj_dict = Graph.AdjacencyDictionary(graph, includeWeights=False)
6292
-
6293
- # Step 1: Pick an arbitrary starting node (first node in the graph)
6294
- start_node = next(iter(adj_dict))
6295
-
6296
- # Step 2: Run DFS to find the farthest node from the start_node
6297
- visited = set()
6298
- _, farthest_node = dfs(start_node, visited)
6299
-
6300
- # Step 3: Run DFS from the farthest node found to get the maximum depth
6301
- visited.clear()
6302
- diameter, _ = dfs(farthest_node, visited)
6288
+ # Build adjacency dictionary (as sets) and force undirected symmetry
6289
+ adj_raw = Graph.AdjacencyDictionary(graph, includeWeights=False)
6290
+ if not adj_raw: # empty graph
6291
+ if not silent:
6292
+ print("Graph.Diameter - Warning: The graph has no vertices. Returning None.")
6293
+ return None
6294
+
6295
+ adj = {u: set(neighbors) for u, neighbors in adj_raw.items()}
6296
+ # Ensure symmetry (in case the underlying graph stored directed edges)
6297
+ for u, nbrs in list(adj.items()):
6298
+ for v in nbrs:
6299
+ adj.setdefault(v, set()).add(u)
6300
+ adj[u].add(v)
6301
+
6302
+ def bfs_eccentricity(start):
6303
+ """Return distances map from start and its eccentricity."""
6304
+ dist = {start: 0}
6305
+ q = deque([start])
6306
+ while q:
6307
+ u = q.popleft()
6308
+ for v in adj.get(u, ()):
6309
+ if v not in dist:
6310
+ dist[v] = dist[u] + 1
6311
+ q.append(v)
6312
+ ecc = max(dist.values()) if dist else 0
6313
+ return dist, ecc
6314
+
6315
+ diameter = 0
6316
+ n = len(adj)
6317
+ disconnected = False
6318
+
6319
+ for s in adj:
6320
+ dist, ecc = bfs_eccentricity(s)
6321
+ if len(dist) < n:
6322
+ disconnected = True
6323
+ if ecc > diameter:
6324
+ diameter = ecc
6325
+
6326
+ if disconnected and not silent:
6327
+ print("Graph.Diameter - Warning: The graph is disconnected. Returning the maximum finite diameter across connected components.")
6303
6328
 
6304
6329
  return diameter
6330
+
6305
6331
 
6306
6332
  @staticmethod
6307
6333
  def Dictionary(graph):
@@ -13454,7 +13480,85 @@ class Graph:
13454
13480
  queue.append((neighbor, distance + 1))
13455
13481
 
13456
13482
  return None # Target not reachable
13457
-
13483
+
13484
+ @staticmethod
13485
+ def Tietze(radius: float = 0.5, height: float = 1):
13486
+ """
13487
+ Creates a Tietze's graph mapped on a mobius strip of the same input radius and height. See https://en.wikipedia.org/wiki/Tietze%27s_graph
13488
+
13489
+ Parameters
13490
+ ----------
13491
+ radius : float , optional
13492
+ The desired radius of the mobius strip on which the graph is mapped. Default is 0.5.
13493
+ height : float , optional
13494
+ The desired height of the mobius strip on which the graph is mapped. Default is 1.
13495
+
13496
+ Returns
13497
+ -------
13498
+ topologicpy.Graph
13499
+ The created Tietze's graph.
13500
+
13501
+ """
13502
+ from topologicpy.Dictionary import Dictionary
13503
+ from topologicpy.Edge import Edge
13504
+ from topologicpy.Shell import Shell
13505
+ from topologicpy.Graph import Graph
13506
+ from topologicpy.Topology import Topology
13507
+
13508
+ m = Shell.MobiusStrip(radius=radius, height=height, uSides=12, vSides=3)
13509
+ eb = Shell.ExternalBoundary(m)
13510
+ verts = Topology.Vertices(eb)
13511
+ new_verts = []
13512
+ for i in range(0, len(verts), 2): #The mobius strip has 24 edges, we need half of that (12).
13513
+ new_verts.append(verts[i])
13514
+
13515
+ graph_edges = []
13516
+ for r in range(0,6):
13517
+ s = (r + 6)
13518
+ e = Edge.ByVertices(new_verts[r], new_verts[s])
13519
+ if r == 0:
13520
+ v1 = Edge.VertexByParameter(e, 2/3)
13521
+ v2 = Edge.EndVertex(e)
13522
+ e = Edge.ByVertices(v1, v2)
13523
+ elif r == 1:
13524
+ v3 = Edge.VertexByParameter(e, 1/3)
13525
+ v4 = Edge.VertexByParameter(e, 2/3)
13526
+ e = Edge.ByVertices(v3, v4)
13527
+ elif r == 2:
13528
+ v5 = Edge.StartVertex(e)
13529
+ v6 = Edge.VertexByParameter(e, 1/3)
13530
+ e = Edge.ByVertices(v5, v6)
13531
+ elif r == 3:
13532
+ v7 = Edge.VertexByParameter(e, 1/3)
13533
+ v8 = Edge.VertexByParameter(e, 2/3)
13534
+ e = Edge.ByVertices(v7, v8)
13535
+ elif r == 4:
13536
+ v9 = Edge.VertexByParameter(e, 2/3)
13537
+ v10 = Edge.EndVertex(e)
13538
+ e = Edge.ByVertices(v9, v10)
13539
+ elif r == 5:
13540
+ v11 = Edge.VertexByParameter(e, 1/3)
13541
+ v12 = Edge.VertexByParameter(e, 2/3)
13542
+ e = Edge.ByVertices(v11, v12)
13543
+ graph_edges.append(e)
13544
+
13545
+ graph_vertices= [v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12]
13546
+ graph_edges.append(Edge.ByVertices(v10, v2))
13547
+ graph_edges.append(Edge.ByVertices(v5, v10))
13548
+ graph_edges.append(Edge.ByVertices(v2, v5))
13549
+ graph_edges.append(Edge.ByVertices(v1, v4))
13550
+ graph_edges.append(Edge.ByVertices(v4, v8))
13551
+ graph_edges.append(Edge.ByVertices(v8, v9))
13552
+ graph_edges.append(Edge.ByVertices(v9, v12))
13553
+ graph_edges.append(Edge.ByVertices(v12, v3))
13554
+ graph_edges.append(Edge.ByVertices(v3, v6))
13555
+ graph_edges.append(Edge.ByVertices(v6, v7))
13556
+ graph_edges.append(Edge.ByVertices(v7, v11))
13557
+ graph_edges.append(Edge.ByVertices(v11, v1))
13558
+ graph_edges = [Edge.Reverse(e) for e in graph_edges] #This makes them look better when sagitta is applied.
13559
+ graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
13560
+ return graph
13561
+
13458
13562
  @staticmethod
13459
13563
  def TopologicalDistance(graph, vertexA, vertexB, tolerance=0.0001):
13460
13564
  """
topologicpy/Shell.py CHANGED
@@ -1175,7 +1175,7 @@ class Shell():
1175
1175
  if not silent:
1176
1176
  print("Shell.MobiusStrip - Error: The height input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
1177
1177
  return None
1178
- if uSides <= 3:
1178
+ if uSides < 3:
1179
1179
  if not silent:
1180
1180
  print("Shell.MobiusStrip - Error: The uSides input parameter must be a positive integer greater than 2. Returning None.")
1181
1181
  return None
topologicpy/Topology.py CHANGED
@@ -8320,6 +8320,8 @@ class Topology():
8320
8320
  absolute=False,
8321
8321
  sides=8,
8322
8322
  angle=0,
8323
+
8324
+ showFigure=True,
8323
8325
  mantissa=6,
8324
8326
  tolerance=0.0001,
8325
8327
  silent=False):
@@ -8507,6 +8509,8 @@ class Topology():
8507
8509
  The units used in the colorbar. Default is ""
8508
8510
  colorScale : str , optional
8509
8511
  The desired type of plotly color scales to use (e.g. "viridis", "plasma"). Default is "viridis". For a full list of names, see https://plotly.com/python/builtin-colorscales/.
8512
+ showFigure : bool , optional
8513
+ If set to True, the figure will be shown and a None is returned. If not, the figure will be returned, but not shown. Default is True.
8510
8514
  mantissa : int , optional
8511
8515
  The desired length of the mantissa for the values listed on the colorbar. Default is 6.
8512
8516
  tolerance : float , optional
@@ -8516,7 +8520,8 @@ class Topology():
8516
8520
 
8517
8521
  Returns
8518
8522
  -------
8519
- None
8523
+ Plotly figure
8524
+ The created plotly figure.
8520
8525
 
8521
8526
  """
8522
8527
 
@@ -8691,7 +8696,10 @@ class Topology():
8691
8696
  tolerance=tolerance)
8692
8697
  if showScale:
8693
8698
  figure = Plotly.AddColorBar(figure, values=cbValues, nTicks=cbTicks, xPosition=cbX, width=cbWidth, outlineWidth=cbOutlineWidth, title=cbTitle, subTitle=cbSubTitle, units=cbUnits, colorScale=colorScale, mantissa=mantissa)
8694
- Plotly.Show(figure=figure, renderer=renderer, camera=camera, center=center, up=up, projection=projection)
8699
+ if showFigure:
8700
+ Plotly.Show(figure=figure, renderer=renderer, camera=camera, center=center, up=up, projection=projection)
8701
+ return None
8702
+ return figure
8695
8703
 
8696
8704
  @staticmethod
8697
8705
  def SmallestFaces(topology, removeCoplanarFaces: bool = False, epsilon: float = 0.001, tolerance: float = 0.0001, silent: bool = False):
topologicpy/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.8.50'
1
+ __version__ = '0.8.52'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: topologicpy
3
- Version: 0.8.50
3
+ Version: 0.8.52
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
@@ -2,7 +2,7 @@ topologicpy/ANN.py,sha256=gpflv4lFypOW789vO7mSkMLaMF_ZftVOCqCvtGr6-JA,47873
2
2
  topologicpy/Aperture.py,sha256=wNn5miB_IrGCBYuQ18HXQYRva20dUC3id4AJCulL7to,2723
3
3
  topologicpy/BVH.py,sha256=JA4bb-9hgMfVZ_syzmSmTL3ueCq-0vMUGMPZxNcawAY,13023
4
4
  topologicpy/CSG.py,sha256=09la1-xzS9vr-WnV7tpJ0I-mkZ-XY0MRSd5iB50Nfgw,15556
5
- topologicpy/Cell.py,sha256=gldsBl3LnrvTRS4SnK9aAM8k_kS1aNovTjUNHxQRNKk,175319
5
+ topologicpy/Cell.py,sha256=-QoKvAsLjKp4xXO1bXCIpKdKNrPF7o232QTj60WCADE,177462
6
6
  topologicpy/CellComplex.py,sha256=Kbz63rGeE08bJfMXFvB-AptoKHiaCK5OtiV1wz8Y-Fk,68081
7
7
  topologicpy/Cluster.py,sha256=G49AuhJHQ1s819cB5MtVdmAGgkag19IC3dRP1ub1Wh4,58608
8
8
  topologicpy/Color.py,sha256=hzSmgBWhiuYc55RSipkQNIgGtgyhC5BqY8AakNYEK-U,24486
@@ -12,7 +12,7 @@ topologicpy/Dictionary.py,sha256=Z4YQ88tONWd-0X0dENQ8IZqIOa9mbBqhJkTBsHmft2g,446
12
12
  topologicpy/Edge.py,sha256=DifItuyabFDUFC7CVMlt2DeMFMNaGOqCg43iU9CPP0A,74029
13
13
  topologicpy/EnergyModel.py,sha256=IiBJNx7F9-8TPMaQn1iQON1ZtTv2nT5kbZHxM_gBCTQ,53773
14
14
  topologicpy/Face.py,sha256=aX9EcR3JGbLITElhd25J0Z8m9U8KkmbYivGg3oZN-Uw,202296
15
- topologicpy/Graph.py,sha256=Idp-Wmm_ziofg_mJyJHhw6Qm0xRd-etTzaVNxp3EreU,686857
15
+ topologicpy/Graph.py,sha256=o6aK18tCTkfzsNFOTAU-wIPG2p3g_vpm6n7YHc44bYU,691239
16
16
  topologicpy/Grid.py,sha256=3OsBMyHh4w8gpFOTMKHMNTpo62V0CwRNu5cwm87yDUA,18421
17
17
  topologicpy/Helper.py,sha256=aGmndgmEztjVNU-wW9OoHDel7wzapprM0TjA7f2AoS8,31188
18
18
  topologicpy/Honeybee.py,sha256=C7Am0kCK3a5rt7Jpu2EIgqeR114ZJWtsx4_DBcr5hQA,21716
@@ -22,17 +22,17 @@ topologicpy/Plotly.py,sha256=RXGeEBwVs8unJaT9vv_FBmAFfKd-1Z5x3V8oeKE43Bs,122924
22
22
  topologicpy/Polyskel.py,sha256=oVfM4lqSMPTjnkHfsRU9VI8Blt6Vf0LVPkD9ebz7Wmw,27082
23
23
  topologicpy/PyG.py,sha256=wOsoBFxMgwZYWjj86OMkz_PJuQ02locV_djhSDD6dVc,109644
24
24
  topologicpy/ShapeGrammar.py,sha256=KYsKDLXWdflAcYMAIz84AUF-GMkbTmaBDd2-ovbilqU,23336
25
- topologicpy/Shell.py,sha256=e6R7JdzYL1ubO0xXJs5P_UiiNHccN5SjQhQfGPPgHBg,96793
25
+ topologicpy/Shell.py,sha256=ioO4raCJfXtYldQg-adpcLVeJPEA6od6cAA5ro7t6r4,96792
26
26
  topologicpy/Speckle.py,sha256=-eiTqJugd7pHiHpD3pDUcDO6CGhVyPV14HFRzaqEoaw,18187
27
27
  topologicpy/Sun.py,sha256=8S6dhCKfOhUGVny-jEk87Q08anLYMB1JEBKRGCklvbQ,36670
28
- topologicpy/Topology.py,sha256=MoEszjDhEiCVYTO4IFxYsYjYj4Vg5TnWUcnoPMNj-Nc,471350
28
+ topologicpy/Topology.py,sha256=Oz6I0jerzgXJaOEAS-WZVko5wj4_PYq67UH707jpwE0,471685
29
29
  topologicpy/Vector.py,sha256=pEC8YY3TeHGfGdeNgvdHjgMDwxGabp5aWjwYC1HSvMk,42236
30
30
  topologicpy/Vertex.py,sha256=0f6HouARKaCuxhdxsUEYi8T9giJycnWhQ8Cn70YILBA,84885
31
31
  topologicpy/Wire.py,sha256=gjgQUGHdBdXUIijgZc_VIW0E39w-smaVhhdl0jF63fQ,230466
32
32
  topologicpy/__init__.py,sha256=RMftibjgAnHB1vdL-muo71RwMS4972JCxHuRHOlU428,928
33
- topologicpy/version.py,sha256=jLQwp8ZJ2hrMvKdSSwJuigGT_jHflNoJKrmd0A0MBrM,23
34
- topologicpy-0.8.50.dist-info/licenses/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
35
- topologicpy-0.8.50.dist-info/METADATA,sha256=bOOGHTn6e-sOwgpqkBLm1YWvhnNNUMdjgfQZzqLHM9g,10535
36
- topologicpy-0.8.50.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
- topologicpy-0.8.50.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
38
- topologicpy-0.8.50.dist-info/RECORD,,
33
+ topologicpy/version.py,sha256=KGLw5DoKAzuYOCwcR3luB2Dw4oq0tDBaQ67alLPVna8,23
34
+ topologicpy-0.8.52.dist-info/licenses/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
35
+ topologicpy-0.8.52.dist-info/METADATA,sha256=haOTIpPxEwBfVeLm4SOIow_qanvOQ-4bzWRFNCGnWPg,10535
36
+ topologicpy-0.8.52.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
+ topologicpy-0.8.52.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
38
+ topologicpy-0.8.52.dist-info/RECORD,,