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 +85 -15
- topologicpy/Graph.py +134 -30
- topologicpy/Shell.py +1 -1
- topologicpy/Topology.py +10 -2
- topologicpy/version.py +1 -1
- {topologicpy-0.8.50.dist-info → topologicpy-0.8.52.dist-info}/METADATA +1 -1
- {topologicpy-0.8.50.dist-info → topologicpy-0.8.52.dist-info}/RECORD +10 -10
- {topologicpy-0.8.50.dist-info → topologicpy-0.8.52.dist-info}/WHEEL +0 -0
- {topologicpy-0.8.50.dist-info → topologicpy-0.8.52.dist-info}/licenses/LICENSE +0 -0
- {topologicpy-0.8.50.dist-info → topologicpy-0.8.52.dist-info}/top_level.txt +0 -0
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.
|
3124
|
-
from topologicpy.
|
3129
|
+
from topologicpy.Face import Face
|
3130
|
+
from topologicpy.Cell import Cell
|
3125
3131
|
from topologicpy.Topology import Topology
|
3126
3132
|
|
3127
|
-
|
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
|
-
|
3130
|
-
|
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
|
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
|
-
|
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
|
-
|
6292
|
-
|
6293
|
-
|
6294
|
-
|
6295
|
-
|
6296
|
-
|
6297
|
-
|
6298
|
-
|
6299
|
-
|
6300
|
-
|
6301
|
-
|
6302
|
-
|
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
|
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
|
-
|
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
|
-
|
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.
|
1
|
+
__version__ = '0.8.52'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.8.
|
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
|
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=
|
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=
|
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=
|
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=
|
34
|
-
topologicpy-0.8.
|
35
|
-
topologicpy-0.8.
|
36
|
-
topologicpy-0.8.
|
37
|
-
topologicpy-0.8.
|
38
|
-
topologicpy-0.8.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|