topologicpy 0.8.7__py3-none-any.whl → 0.8.9__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
@@ -2352,6 +2352,128 @@ class Cell():
2352
2352
  volume = None
2353
2353
  return volume
2354
2354
 
2355
+ @staticmethod
2356
+ def Wedge(origin=None,
2357
+ width=1,
2358
+ length=1,
2359
+ height=1,
2360
+ flipHorizontal = False,
2361
+ flipVertical = False,
2362
+ direction=[0,0,1],
2363
+ placement="center",
2364
+ tolerance=0.0001,
2365
+ silent=False):
2366
+ """
2367
+ Creates a Wedge.
2368
+
2369
+ Parameters
2370
+ ----------
2371
+ origin : topologic_core.Vertex , optional
2372
+ The location of the origin of the Wedge. The default is None which results in the Wedge being placed at (0, 0, 0).
2373
+ width : float , optional
2374
+ The overall width of the Wedge. The default is 1.0.
2375
+ length : float , optional
2376
+ The overall length of the Wedge. The default is 1.0.
2377
+ height : float , optional
2378
+ The overall height of the Wedge. The default is 1.0.
2379
+ direction : list , optional
2380
+ The vector representing the up direction of the Wedge. The default is [0, 0, 1].
2381
+ placement : str , optional
2382
+ The description of the placement of the origin of the Wedge. This can be "center", "lowerleft", "upperleft", "lowerright", "upperright". It is case insensitive. The default is "center".
2383
+ tolerance : float , optional
2384
+ The desired tolerance. The default is 0.0001.
2385
+ silent : bool , optional
2386
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
2387
+
2388
+ Returns
2389
+ -------
2390
+ topologic_core.Cell
2391
+ The created Wedge.
2392
+
2393
+ """
2394
+ from topologicpy.Vertex import Vertex
2395
+ from topologicpy.Face import Face
2396
+ from topologicpy.Topology import Topology
2397
+
2398
+ if not isinstance(width, int) and not isinstance(width, float):
2399
+ if not silent:
2400
+ print("Cell.Wedge - Error: The width input parameter is not a valid number. Returning None.")
2401
+ return None
2402
+ if not isinstance(length, int) and not isinstance(length, float):
2403
+ if not silent:
2404
+ print("Cell.Wedge - Error: The length input parameter is not a valid number. Returning None.")
2405
+ return None
2406
+ if not isinstance(height, int) and not isinstance(height, float):
2407
+ if not silent:
2408
+ print("Cell.Wedge - Error: The height input parameter is not a valid number. Returning None.")
2409
+ return None
2410
+ if width <= tolerance:
2411
+ if not silent:
2412
+ print("Cell.Wedge - Error: The width input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
2413
+ return None
2414
+ if length <= tolerance:
2415
+ if not silent:
2416
+ print("Cell.Wedge - Error: The length input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
2417
+ return None
2418
+ if height <= tolerance:
2419
+ if not silent:
2420
+ print("Cell.Wedge - Error: The a input parameter must be a positive number greater than the tolerance input parameter. Returning None.")
2421
+ return None
2422
+ if origin == None:
2423
+ origin = Vertex.Origin()
2424
+ if not Topology.IsInstance(origin, "vertex"):
2425
+ if not silent:
2426
+ print("Cell.Wedge - Error: The origin input parameter is not a valid topologic vertex. Returning None.")
2427
+ return None
2428
+ if not isinstance(direction, list):
2429
+ if not silent:
2430
+ print("Cell.Wedge - Error: The direction input parameter is not a valid list. Returning None.")
2431
+ return None
2432
+ if not len(direction) == 3:
2433
+ if not silent:
2434
+ print("Cell.Wedge - Error: The direction input parameter is not a valid vector. Returning None.")
2435
+ return None
2436
+
2437
+ # Define the vertices of the T-shape (counterclockwise)
2438
+ v1 = Vertex.ByCoordinates(0,0,0)
2439
+ v2 = Vertex.ByCoordinates(width, 0, 0)
2440
+ v3 = Vertex.ByCoordinates(width, length, 0)
2441
+ v4 = Vertex.ByCoordinates(0, length, 0)
2442
+ v5 = Vertex.ByCoordinates(0, length, height)
2443
+ v6 = Vertex.ByCoordinates(0, 0, height)
2444
+
2445
+ f1 = Face.ByVertices([v1, v2, v3, v4], tolerance=tolerance)
2446
+ f2 = Face.ByVertices([v1, v2, v6], tolerance=tolerance)
2447
+ f3 = Face.ByVertices([v4, v5, v3], tolerance=tolerance)
2448
+ f4 = Face.ByVertices([v1, v6, v5, v4], tolerance=tolerance)
2449
+ f5 = Face.ByVertices([v2, v3, v5, v6], tolerance=tolerance)
2450
+ cell = Cell.ByFaces([f1, f2, f3, f4, f5])
2451
+ cell = Topology.Translate(cell, -width/2, -length/2, -height/2)
2452
+ cell = Topology.Translate(cell, Vertex.X(origin), Vertex.Y(origin), Vertex.Z(origin))
2453
+ if flipHorizontal == True:
2454
+ xScale = -1
2455
+ else:
2456
+ xScale = 1
2457
+ if flipVertical == True:
2458
+ zScale = -1
2459
+ else:
2460
+ zScale = 1
2461
+ if xScale == -1 or zScale == -1:
2462
+ cell = Topology.Scale(cell, origin=origin, x=xScale, y=1, z=zScale)
2463
+ if placement.lower() == "lowerleft":
2464
+ cell = Topology.Translate(cell, origin=origin, x=width/2, y=length/2, z=height/2)
2465
+ elif placement.lower() == "upperright":
2466
+ cell = Topology.Translate(cell, origin=origin, x=-width/2, y=-length/2, z=-height/2)
2467
+ elif placement.lower() == "upperleft":
2468
+ cell = Topology.Translate(cell, origin=origin, x=width/2, y=-length/2, z=-height/2)
2469
+ elif placement.lower() == "lowerright":
2470
+ cell = Topology.Translate(cell, origin=origin, x=-width/2, y=length/2, z=height/2)
2471
+
2472
+ if direction != [0, 0, 1]:
2473
+ cell = Topology.Orient(cell, origin=origin, dirA=[0, 0, 1], dirB=direction)
2474
+
2475
+ return cell
2476
+
2355
2477
  @staticmethod
2356
2478
  def Wires(cell) -> list:
2357
2479
  """
topologicpy/Graph.py CHANGED
@@ -264,6 +264,164 @@ class _DrawTree(object):
264
264
  return self.__str__()
265
265
 
266
266
  class Graph:
267
+ @staticmethod
268
+ def AddEdge(graph, edge, transferVertexDictionaries: bool = False, transferEdgeDictionaries: bool = False, tolerance: float = 0.0001, silent: bool = False):
269
+ """
270
+ Adds the input edge to the input Graph.
271
+
272
+ Parameters
273
+ ----------
274
+ graph : topologic_core.Graph
275
+ The input graph.
276
+ edge : topologic_core.Edge
277
+ The input edge.
278
+ transferVertexDictionaries : bool, optional
279
+ If set to True, the dictionaries of the vertices are transferred to the graph.
280
+ transferEdgeDictionaries : bool, optional
281
+ If set to True, the dictionaries of the edges are transferred to the graph.
282
+ tolerance : float , optional
283
+ The desired tolerance. The default is 0.0001.
284
+ silent : bool , optional
285
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
286
+
287
+ Returns
288
+ -------
289
+ topologic_core.Graph
290
+ The input graph with the input edge added to it.
291
+
292
+ """
293
+ from topologicpy.Vertex import Vertex
294
+ from topologicpy.Edge import Edge
295
+ from topologicpy.Dictionary import Dictionary
296
+ from topologicpy.Topology import Topology
297
+
298
+ def addIfUnique(graph_vertices, vertex, tolerance=0.0001):
299
+ unique = True
300
+ returnVertex = vertex
301
+ for gv in graph_vertices:
302
+ if (Vertex.Distance(vertex, gv) < tolerance):
303
+ if transferVertexDictionaries == True:
304
+ gd = Topology.Dictionary(gv)
305
+ vd = Topology.Dictionary(vertex)
306
+ gk = gd.Keys()
307
+ vk = vd.Keys()
308
+ d = None
309
+ if (len(gk) > 0) and (len(vk) > 0):
310
+ d = Dictionary.ByMergedDictionaries([gd, vd])
311
+ elif (len(gk) > 0) and (len(vk) < 1):
312
+ d = gd
313
+ elif (len(gk) < 1) and (len(vk) > 0):
314
+ d = vd
315
+ if d:
316
+ _ = Topology.SetDictionary(gv, d, silent=True)
317
+ unique = False
318
+ returnVertex = gv
319
+ break
320
+ if unique:
321
+ graph_vertices.append(vertex)
322
+ return [graph_vertices, returnVertex]
323
+
324
+ if not Topology.IsInstance(graph, "Graph"):
325
+ if not silent:
326
+ print("Graph.AddEdge - Error: The input graph is not a valid graph. Returning None.")
327
+ return None
328
+ if not Topology.IsInstance(edge, "Edge"):
329
+ if not silent:
330
+ print("Graph.AddEdge - Error: The input edge is not a valid edge. Returning the input graph.")
331
+ return graph
332
+ graph_vertices = Graph.Vertices(graph)
333
+ graph_edges = Graph.Edges(graph, graph_vertices, tolerance=tolerance)
334
+ vertices = Topology.Vertices(edge)
335
+ new_vertices = []
336
+ for vertex in vertices:
337
+ graph_vertices, nv = addIfUnique(graph_vertices, vertex, tolerance=tolerance)
338
+ new_vertices.append(nv)
339
+ new_edge = Edge.ByVertices([new_vertices[0], new_vertices[1]], tolerance=tolerance)
340
+ if transferEdgeDictionaries == True:
341
+ d = Topology.Dictionary(edge)
342
+ keys = Dictionary.Keys(d)
343
+ if isinstance(keys, list):
344
+ if len(keys) > 0:
345
+ _ = Topology.SetDictionary(new_edge, d, silent=True)
346
+ graph_edges.append(new_edge)
347
+ new_graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
348
+ return new_graph
349
+
350
+ @staticmethod
351
+ def AddVertex(graph, vertex, tolerance: float = 0.0001, silent: bool = False):
352
+ """
353
+ Adds the input vertex to the input graph.
354
+
355
+ Parameters
356
+ ----------
357
+ graph : topologic_core.Graph
358
+ The input graph.
359
+ vertex : topologic_core.Vertex
360
+ The input vertex.
361
+ tolerance : float , optional
362
+ The desired tolerance. The default is 0.0001.
363
+ silent : bool , optional
364
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
365
+
366
+ Returns
367
+ -------
368
+ topologic_core.Graph
369
+ The input graph with the input vertex added to it.
370
+
371
+ """
372
+ from topologicpy.Topology import Topology
373
+
374
+ if not Topology.IsInstance(graph, "Graph"):
375
+ if not silent:
376
+ print("Graph.AddVertex - Error: The input graph is not a valid graph. Returning None.")
377
+ return None
378
+ if not Topology.IsInstance(vertex, "Vertex"):
379
+ if not silent:
380
+ print("Graph.AddVertex - Error: The input vertex is not a valid vertex. Returning the input graph.")
381
+ return graph
382
+ _ = graph.AddVertices([vertex], tolerance) # Hook to Core
383
+ return graph
384
+
385
+ @staticmethod
386
+ def AddVertices(graph, vertices, tolerance: float = 0.0001, silent: bool = False):
387
+ """
388
+ Adds the input vertex to the input graph.
389
+
390
+ Parameters
391
+ ----------
392
+ graph : topologic_core.Graph
393
+ The input graph.
394
+ vertices : list
395
+ The input list of vertices.
396
+ tolerance : float , optional
397
+ The desired tolerance. The default is 0.0001.
398
+ silent : bool , optional
399
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
400
+
401
+ Returns
402
+ -------
403
+ topologic_core.Graph
404
+ The input graph with the input vertex added to it.
405
+
406
+ """
407
+ from topologicpy.Topology import Topology
408
+
409
+ if not Topology.IsInstance(graph, "Graph"):
410
+ if not silent:
411
+ print("Graph.AddVertices - Error: The input graph is not a valid graph. Returning None.")
412
+ return None
413
+ if not isinstance(vertices, list):
414
+ if not silent:
415
+ print("Graph.AddVertices - Error: The input list of vertices is not a valid list. Returning None.")
416
+ return None
417
+ vertices = [v for v in vertices if Topology.IsInstance(v, "Vertex")]
418
+ if len(vertices) < 1:
419
+ if not silent:
420
+ print("Graph.AddVertices - Error: Could not find any valid vertices in the input list of vertices. Returning None.")
421
+ return None
422
+ _ = graph.AddVertices(vertices, tolerance) # Hook to Core
423
+ return graph
424
+
267
425
  def AdjacencyDictionary(graph, vertexLabelKey: str = None, edgeKey: str = "Length", includeWeights: bool = False, reverse: bool = False, mantissa: int = 6):
268
426
  """
269
427
  Returns the adjacency dictionary of the input Graph.
@@ -517,167 +675,101 @@ class Graph:
517
675
  return adjList
518
676
 
519
677
  @staticmethod
520
- def AddEdge(graph, edge, transferVertexDictionaries: bool = False, transferEdgeDictionaries: bool = False, tolerance: float = 0.0001, silent: bool = False):
678
+ def AdjacentVertices(graph, vertex, silent: bool = False):
521
679
  """
522
- Adds the input edge to the input Graph.
680
+ Returns the list of vertices connected to the input vertex.
523
681
 
524
682
  Parameters
525
683
  ----------
526
684
  graph : topologic_core.Graph
527
685
  The input graph.
528
- edge : topologic_core.Edge
529
- The input edge.
530
- transferVertexDictionaries : bool, optional
531
- If set to True, the dictionaries of the vertices are transferred to the graph.
532
- transferEdgeDictionaries : bool, optional
533
- If set to True, the dictionaries of the edges are transferred to the graph.
534
- tolerance : float , optional
535
- The desired tolerance. The default is 0.0001.
686
+ vertex : topologic_core.Vertex
687
+ the input vertex.
536
688
  silent : bool , optional
537
689
  If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
538
690
 
539
691
  Returns
540
692
  -------
541
- topologic_core.Graph
542
- The input graph with the input edge added to it.
693
+ list
694
+ The list of adjacent vertices.
543
695
 
544
696
  """
545
- from topologicpy.Vertex import Vertex
546
- from topologicpy.Edge import Edge
547
- from topologicpy.Dictionary import Dictionary
548
697
  from topologicpy.Topology import Topology
549
698
 
550
- def addIfUnique(graph_vertices, vertex, tolerance=0.0001):
551
- unique = True
552
- returnVertex = vertex
553
- for gv in graph_vertices:
554
- if (Vertex.Distance(vertex, gv) < tolerance):
555
- if transferVertexDictionaries == True:
556
- gd = Topology.Dictionary(gv)
557
- vd = Topology.Dictionary(vertex)
558
- gk = gd.Keys()
559
- vk = vd.Keys()
560
- d = None
561
- if (len(gk) > 0) and (len(vk) > 0):
562
- d = Dictionary.ByMergedDictionaries([gd, vd])
563
- elif (len(gk) > 0) and (len(vk) < 1):
564
- d = gd
565
- elif (len(gk) < 1) and (len(vk) > 0):
566
- d = vd
567
- if d:
568
- _ = Topology.SetDictionary(gv, d, silent=True)
569
- unique = False
570
- returnVertex = gv
571
- break
572
- if unique:
573
- graph_vertices.append(vertex)
574
- return [graph_vertices, returnVertex]
575
-
576
699
  if not Topology.IsInstance(graph, "Graph"):
577
700
  if not silent:
578
- print("Graph.AddEdge - Error: The input graph is not a valid graph. Returning None.")
701
+ print("Graph.AdjacentVertices - Error: The input graph is not a valid graph. Returning None.")
579
702
  return None
580
- if not Topology.IsInstance(edge, "Edge"):
703
+ if not Topology.IsInstance(vertex, "Vertex"):
581
704
  if not silent:
582
- print("Graph.AddEdge - Error: The input edge is not a valid edge. Returning the input graph.")
583
- return graph
584
- graph_vertices = Graph.Vertices(graph)
585
- graph_edges = Graph.Edges(graph, graph_vertices, tolerance=tolerance)
586
- vertices = Topology.Vertices(edge)
587
- new_vertices = []
588
- for vertex in vertices:
589
- graph_vertices, nv = addIfUnique(graph_vertices, vertex, tolerance=tolerance)
590
- new_vertices.append(nv)
591
- new_edge = Edge.ByVertices([new_vertices[0], new_vertices[1]], tolerance=tolerance)
592
- if transferEdgeDictionaries == True:
593
- d = Topology.Dictionary(edge)
594
- keys = Dictionary.Keys(d)
595
- if isinstance(keys, list):
596
- if len(keys) > 0:
597
- _ = Topology.SetDictionary(new_edge, d, silent=True)
598
- graph_edges.append(new_edge)
599
- new_graph = Graph.ByVerticesEdges(graph_vertices, graph_edges)
600
- return new_graph
705
+ print("Graph.AdjacentVertices - Error: The input vertex is not a valid vertex. Returning None.")
706
+ return None
707
+ vertices = []
708
+ _ = graph.AdjacentVertices(vertex, vertices) # Hook to Core
709
+ return list(vertices)
601
710
 
602
711
  @staticmethod
603
- def AddVertex(graph, vertex, tolerance: float = 0.0001, silent: bool = False):
712
+ def AdjacentVerticesByCompassDirection(graph, vertex, compassDirection: str = "Up", tolerance: float = 0.0001, silent: bool = False):
604
713
  """
605
- Adds the input vertex to the input graph.
714
+ Returns the list of vertices connected to the input vertex that are in the input compass direction.
606
715
 
607
716
  Parameters
608
717
  ----------
609
718
  graph : topologic_core.Graph
610
719
  The input graph.
611
720
  vertex : topologic_core.Vertex
612
- The input vertex.
721
+ the input vertex.
722
+ compassDirection : str , optional
723
+ The compass direction. See Vector.CompassDirections(). The default is "Up".
613
724
  tolerance : float , optional
614
- The desired tolerance. The default is 0.0001.
725
+ The desired tolerance. The default is 0.0001.
615
726
  silent : bool , optional
616
727
  If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
617
728
 
618
729
  Returns
619
730
  -------
620
- topologic_core.Graph
621
- The input graph with the input vertex added to it.
731
+ list
732
+ The list of adjacent vertices that are in the compass direction.
622
733
 
623
734
  """
735
+ from topologicpy.Vector import Vector
736
+ from topologicpy.Edge import Edge
624
737
  from topologicpy.Topology import Topology
625
-
626
- if not Topology.IsInstance(graph, "Graph"):
738
+
739
+ if not Topology.IsInstance(graph, "graph"):
627
740
  if not silent:
628
- print("Graph.AddVertex - Error: The input graph is not a valid graph. Returning None.")
741
+ print("Graph.AdjacentVerticesByCompassDirection - Error: The input graph parameter is not a valid graph. Returning None.")
629
742
  return None
630
- if not Topology.IsInstance(vertex, "Vertex"):
743
+ if not Topology.IsInstance(vertex, "vertex"):
631
744
  if not silent:
632
- print("Graph.AddVertex - Error: The input vertex is not a valid vertex. Returning the input graph.")
633
- return graph
634
- _ = graph.AddVertices([vertex], tolerance) # Hook to Core
635
- return graph
636
-
637
- @staticmethod
638
- def AddVertices(graph, vertices, tolerance: float = 0.0001, silent: bool = False):
639
- """
640
- Adds the input vertex to the input graph.
641
-
642
- Parameters
643
- ----------
644
- graph : topologic_core.Graph
645
- The input graph.
646
- vertices : list
647
- The input list of vertices.
648
- tolerance : float , optional
649
- The desired tolerance. The default is 0.0001.
650
- silent : bool , optional
651
- If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
652
-
653
- Returns
654
- -------
655
- topologic_core.Graph
656
- The input graph with the input vertex added to it.
657
-
658
- """
659
- from topologicpy.Topology import Topology
660
-
661
- if not Topology.IsInstance(graph, "Graph"):
662
- if not silent:
663
- print("Graph.AddVertices - Error: The input graph is not a valid graph. Returning None.")
745
+ print("Graph.AdjacentVerticesByCompassDirection - Error: The input vertex parameter is not a valid vertex. Returning None.")
664
746
  return None
665
- if not isinstance(vertices, list):
747
+ if not isinstance(compassDirection, str):
666
748
  if not silent:
667
- print("Graph.AddVertices - Error: The input list of vertices is not a valid list. Returning None.")
749
+ print("Graph.AdjacentVerticesByCompassDirection - Error: The input compassDirection parameter is not a valid string. Returning None.")
668
750
  return None
669
- vertices = [v for v in vertices if Topology.IsInstance(v, "Vertex")]
670
- if len(vertices) < 1:
751
+
752
+ directions = [v.lower() for v in Vector.CompassDirections()]
753
+
754
+ if not compassDirection.lower() in directions:
671
755
  if not silent:
672
- print("Graph.AddVertices - Error: Could not find any valid vertices in the input list of vertices. Returning None.")
756
+ print("Graph.AdjacentVerticesByCompassDirection - Error: The input compassDirection parameter is not a valid compass direction. Returning None.")
673
757
  return None
674
- _ = graph.AddVertices(vertices, tolerance) # Hook to Core
675
- return graph
676
-
758
+
759
+ adjacent_vertices = Graph.AdjacentVertices(graph, vertex)
760
+ return_vertices = []
761
+ for v in adjacent_vertices:
762
+ e = Edge.ByVertices(vertex, v)
763
+ vector = Edge.Direction(e)
764
+ compass_direction = Vector.CompassDirection(vector, tolerance=tolerance)
765
+ if compass_direction.lower() == compassDirection.lower():
766
+ return_vertices.append(v)
767
+ return return_vertices
768
+
677
769
  @staticmethod
678
- def AdjacentVertices(graph, vertex, silent: bool = False):
770
+ def AdjacentVerticesByVector(graph, vertex, vector: list = [0,0,1], tolerance: float = 0.0001, silent: bool = False):
679
771
  """
680
- Returns the list of vertices connected to the input vertex.
772
+ Returns the list of vertices connected to the input vertex that are in the input vector direction.
681
773
 
682
774
  Parameters
683
775
  ----------
@@ -685,28 +777,48 @@ class Graph:
685
777
  The input graph.
686
778
  vertex : topologic_core.Vertex
687
779
  the input vertex.
780
+ vector : list , optional
781
+ The vector direction. The default is [0,0,1].
782
+ tolerance : float , optional
783
+ The desired tolerance. The default is 0.0001.
688
784
  silent : bool , optional
689
785
  If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
690
786
 
691
787
  Returns
692
788
  -------
693
789
  list
694
- The list of adjacent vertices.
790
+ The list of adjacent vertices that are in the vector direction.
695
791
 
696
792
  """
793
+ from topologicpy.Vector import Vector
794
+ from topologicpy.Edge import Edge
697
795
  from topologicpy.Topology import Topology
698
-
699
- if not Topology.IsInstance(graph, "Graph"):
796
+
797
+ if not Topology.IsInstance(graph, "graph"):
700
798
  if not silent:
701
- print("Graph.AdjacentVertices - Error: The input graph is not a valid graph. Returning None.")
799
+ print("Graph.AdjacentVerticesByVector- Error: The input graph parameter is not a valid graph. Returning None.")
702
800
  return None
703
- if not Topology.IsInstance(vertex, "Vertex"):
801
+ if not Topology.IsInstance(vertex, "vertex"):
704
802
  if not silent:
705
- print("Graph.AdjacentVertices - Error: The input vertex is not a valid vertex. Returning None.")
803
+ print("Graph.AdjacentVerticesByVector- Error: The input vertex parameter is not a valid vertex. Returning None.")
706
804
  return None
707
- vertices = []
708
- _ = graph.AdjacentVertices(vertex, vertices) # Hook to Core
709
- return list(vertices)
805
+ if not isinstance(vector, list):
806
+ if not silent:
807
+ print("Graph.AdjacentVerticesByVector- Error: The input vector parameter is not a valid vector. Returning None.")
808
+ return None
809
+ if len(vector) != 3:
810
+ if not silent:
811
+ print("Graph.AdjacentVerticesByVector- Error: The input vector parameter is not a valid vector. Returning None.")
812
+ return None
813
+
814
+ adjacent_vertices = Graph.AdjacentVertices(graph, vertex)
815
+ return_vertices = []
816
+ for v in adjacent_vertices:
817
+ e = Edge.ByVertices(vertex, v)
818
+ edge_vector = Edge.Direction(e)
819
+ if Vector.CompassDirection(vector, tolerance=tolerance).lower() == Vector.CompassDirection(edge_vector, tolerance=tolerance).lower():
820
+ return_vertices.append(v)
821
+ return return_vertices
710
822
 
711
823
  @staticmethod
712
824
  def AllPaths(graph, vertexA, vertexB, timeLimit=10, silent: bool = False):
@@ -8789,7 +8901,7 @@ class Graph:
8789
8901
  return max_flow
8790
8902
 
8791
8903
  @staticmethod
8792
- def MeshData(g, tolerance: float = 0.0001):
8904
+ def MeshData(graph, tolerance: float = 0.0001):
8793
8905
  """
8794
8906
  Returns the mesh data of the input graph.
8795
8907
 
@@ -8815,14 +8927,14 @@ class Graph:
8815
8927
  from topologicpy.Dictionary import Dictionary
8816
8928
  from topologicpy.Topology import Topology
8817
8929
 
8818
- g_vertices = Graph.Vertices(g)
8930
+ g_vertices = Graph.Vertices(graph)
8819
8931
  m_vertices = []
8820
8932
  v_dicts = []
8821
8933
  for g_vertex in g_vertices:
8822
8934
  m_vertices.append(Vertex.Coordinates(g_vertex))
8823
8935
  d = Dictionary.PythonDictionary(Topology.Dictionary(g_vertex))
8824
8936
  v_dicts.append(d)
8825
- g_edges = Graph.Edges(g)
8937
+ g_edges = Graph.Edges(graph)
8826
8938
  m_edges = []
8827
8939
  e_dicts = []
8828
8940
  for g_edge in g_edges:
topologicpy/Vector.py CHANGED
@@ -359,6 +359,120 @@ class Vector(list):
359
359
  ang2 = arctan2(*p2[::-1])
360
360
  return round(rad2deg((ang1 - ang2) % (2 * pi)), mantissa)
361
361
 
362
+ @staticmethod
363
+ def CompassDirection(vector, tolerance: float = 0.0001, silent: bool = False):
364
+ """
365
+ Returns the compass direction of the input direction.
366
+ The possible returned values are:
367
+ - North, East, South, West
368
+ - Northeast, Southeast, Southwest, Northwest
369
+ - A combination of the above (e.g. Up_Noertheast)
370
+ - Up, Down
371
+ - Origin
372
+
373
+ Parameters
374
+ ----------
375
+ vector : list
376
+ The input vector.
377
+ tolerance : float , optional
378
+ The desired tolerance. The default is 0.0001.
379
+ silent : bool , optional
380
+ If set to True, no error and warning messages are printed. Otherwise, they are. The default is False.
381
+
382
+ Returns
383
+ -------
384
+ str
385
+ The compass direction of the input vector. The possible values are:
386
+ - North, East, South, West
387
+ - Northeast, Southeast, Southwest, Northwest
388
+ - A combination of the above (e.g. Up_Noertheast)
389
+ - Up, Down
390
+ - Origin
391
+
392
+ """
393
+ import math
394
+
395
+ if not isinstance(vector, list):
396
+ if not silent:
397
+ print("Vector.CompassDirection - Error: The input vector parameter is not a valid vector. Returning None.")
398
+ return None
399
+ if len(vector) != 3:
400
+ if not silent:
401
+ print("Vector.CompassDirection - Error: The input vector parameter is not a valid vector. Returning None.")
402
+ return None
403
+
404
+ x, y, z = vector
405
+
406
+ # Handle the origin
407
+ if abs(x) < tolerance and abs(y) < tolerance and abs(z) < tolerance:
408
+ return "Origin"
409
+
410
+ # Normalize vector to prevent magnitude bias
411
+ magnitude = math.sqrt(x**2 + y**2 + z**2)
412
+ x, y, z = x / magnitude, y / magnitude, z / magnitude
413
+
414
+ # Apply tolerance to components
415
+ x = 0 if abs(x) < tolerance else x
416
+ y = 0 if abs(y) < tolerance else y
417
+ z = 0 if abs(z) < tolerance else z
418
+
419
+ # Compass-based direction in the XY-plane
420
+ if x == 0 and y > 0:
421
+ horizontal_dir = "North"
422
+ elif x == 0 and y < 0:
423
+ horizontal_dir = "South"
424
+ elif y == 0 and x > 0:
425
+ horizontal_dir = "East"
426
+ elif y == 0 and x < 0:
427
+ horizontal_dir = "West"
428
+ elif x > 0 and y > 0:
429
+ horizontal_dir = "Northeast"
430
+ elif x < 0 and y > 0:
431
+ horizontal_dir = "Northwest"
432
+ elif x < 0 and y < 0:
433
+ horizontal_dir = "Southwest"
434
+ elif x > 0 and y < 0:
435
+ horizontal_dir = "Southeast"
436
+ else:
437
+ horizontal_dir = ""
438
+
439
+ # Add vertical direction
440
+ if z > 0:
441
+ if horizontal_dir:
442
+ return f"Up_{horizontal_dir}"
443
+ return "Up"
444
+ elif z < 0:
445
+ if horizontal_dir:
446
+ return f"Down_{horizontal_dir}"
447
+ return "Down"
448
+ else:
449
+ return horizontal_dir
450
+
451
+ @staticmethod
452
+ def CompassDirections():
453
+ """
454
+ Returns the list of allowed compass directions.
455
+
456
+ Parameters
457
+ ----------
458
+
459
+ Returns
460
+ -------
461
+ list
462
+ The list of compass directions. These are:
463
+ - ["Origin", "Up", "Down",
464
+ "North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest",
465
+ "Up_North", "Up_Northeast", "Up_East", "Up_Southeast", "Up_South", "Up_Southwest", "Up_West", "Up_Northwest",
466
+ "Down_North", "Down_Northeast", "Down_East", "Down_Southeast", "Down_South", "Down_Southwest", "Down_West", "Down_Northwest",
467
+ ]
468
+
469
+ """
470
+ return ["Origin", "Up", "Down",
471
+ "North", "Northeast", "East", "Southeast", "South", "Southwest", "West", "Northwest",
472
+ "Up_North", "Up_Northeast", "Up_East", "Up_Southeast", "Up_South", "Up_Southwest", "Up_West", "Up_Northwest",
473
+ "Down_North", "Down_Northeast", "Down_East", "Down_Southeast", "Down_South", "Down_Southwest", "Down_West", "Down_Northwest"
474
+ ]
475
+
362
476
  @staticmethod
363
477
  def Coordinates(vector, outputType="xyz", mantissa: int = 6, silent: bool = False):
364
478
  """
topologicpy/Vertex.py CHANGED
@@ -35,7 +35,7 @@ except:
35
35
 
36
36
  class Vertex():
37
37
  @staticmethod
38
- def AlignCoordinates(vertex, xList=None, yList=None, zList=None, transferDictionary=False, mantissa=6, silent=False):
38
+ def AlignCoordinates(vertex, xList: list = None, yList: list = None, zList: list = None, xEpsilon: float = 0.0001, yEpsilon: float = 0.0001, zEpsilon: float = 0.0001, transferDictionary: bool = False, mantissa: int = 6, silent: bool = False):
39
39
  """
40
40
  Aligns the coordinates of the input vertex with the list of x,y, and z coordinates.
41
41
 
@@ -49,6 +49,12 @@ class Vertex():
49
49
  The input numerical list of y-coordinates. The default is None.
50
50
  zList : list , optional
51
51
  The input numerical list of z-coordinates. The default is None.
52
+ xEpsilon : float , optional
53
+ The desired tolerance for the x coordinates. The default is 0.0001.
54
+ yEpsilon : float , optional
55
+ The desired tolerance for the y coordinates. The default is 0.0001.
56
+ zEpsilon : float , optional
57
+ The desired tolerance for the z coordinates. The default is 0.0001.
52
58
  transferDictionary : bool , optional
53
59
  if set to True, the dictionary of the input vertex is transferred to the new vertex.
54
60
  mantissa : int , optional
@@ -70,17 +76,24 @@ class Vertex():
70
76
  print("Vertex.AlignCoordinates - Error: The input vertex parameter is not a topologic vertex. Returning None.")
71
77
  return None
72
78
 
73
- closest_x, closest_y, closest_z = Vertex.Coordinates(vertex, mantissa=mantissa)
79
+ x, y, z = Vertex.Coordinates(vertex, mantissa=mantissa)
74
80
  if isinstance(xList, list):
75
81
  if len(xList) > 0:
76
- closest_x = xList[Helper.ClosestMatch(closest_x, xList)]
82
+ closest_x = round(xList[Helper.ClosestMatch(x, xList)], mantissa)
77
83
  if isinstance(yList, list):
78
84
  if len(yList) > 0:
79
- closest_y = yList[Helper.ClosestMatch(closest_y, yList)]
85
+ closest_y = round(yList[Helper.ClosestMatch(y, yList)], mantissa)
80
86
  if isinstance(zList, list):
81
87
  if len(zList) > 0:
82
- closest_z = zList[Helper.ClosestMatch(closest_z, zList)]
83
- return_vertex = Vertex.ByCoordinates(closest_x, closest_y, closest_z)
88
+ closest_z = round(zList[Helper.ClosestMatch(z, zList)], mantissa)
89
+
90
+ if abs(x - closest_x) < xEpsilon:
91
+ x = closest_x
92
+ if abs(y - closest_y) < yEpsilon:
93
+ y = closest_y
94
+ if abs(z - closest_z) < zEpsilon:
95
+ z = closest_z
96
+ return_vertex = Vertex.ByCoordinates(x, y, z)
84
97
  if transferDictionary == True:
85
98
  return_vertex = Topology.SetDictionary(return_vertex, Topology.Dictionary(vertex), silent=silent)
86
99
  return return_vertex
topologicpy/Wire.py CHANGED
@@ -51,7 +51,6 @@ class Wire():
51
51
 
52
52
  """
53
53
  from topologicpy.Vertex import Vertex
54
- from topologicpy.Wire import Wire
55
54
  from topologicpy.Topology import Topology
56
55
  import numpy as np
57
56
 
@@ -183,7 +182,6 @@ class Wire():
183
182
 
184
183
  """
185
184
  from topologicpy.Edge import Edge
186
- from topologicpy.Wire import Wire
187
185
  from topologicpy.Topology import Topology
188
186
 
189
187
  if not Topology.IsInstance(edge, "Edge"):
@@ -233,7 +231,6 @@ class Wire():
233
231
 
234
232
  """
235
233
  from topologicpy.Vertex import Vertex
236
- from topologicpy.Wire import Wire
237
234
  from topologicpy.Face import Face
238
235
  from topologicpy.Topology import Topology
239
236
  from topologicpy.Dictionary import Dictionary
@@ -453,7 +450,6 @@ class Wire():
453
450
  from topologicpy.Edge import Edge
454
451
  from topologicpy.Face import Face
455
452
  from topologicpy.Dictionary import Dictionary
456
- from topologicpy.Wire import Wire
457
453
  from topologicpy.Cluster import Cluster
458
454
  from topologicpy.Topology import Topology
459
455
  from topologicpy.Vector import Vector
@@ -724,7 +720,6 @@ class Wire():
724
720
  The created wire.
725
721
 
726
722
  """
727
- from topologicpy.Wire import Wire
728
723
  from topologicpy.Face import Face
729
724
  from topologicpy.Topology import Topology
730
725
  from topologicpy.Dictionary import Dictionary
@@ -1472,7 +1467,6 @@ class Wire():
1472
1467
 
1473
1468
  """
1474
1469
  from topologicpy.Vertex import Vertex
1475
- from topologicpy.Wire import Wire
1476
1470
  from topologicpy.Topology import Topology
1477
1471
 
1478
1472
  if not isinstance(width, int) and not isinstance(width, float):
@@ -1595,7 +1589,7 @@ class Wire():
1595
1589
  else:
1596
1590
  yScale = 1
1597
1591
  if xScale == -1 or yScale == -1:
1598
- cross_shape = Topology.Scale(cross_shape, x=xScale, y=yScale, z=1)
1592
+ cross_shape = Topology.Scale(cross_shape, origin=origin, x=xScale, y=yScale, z=1)
1599
1593
  if reverse == True:
1600
1594
  cross_shape = Wire.Reverse(cross_shape)
1601
1595
  if placement.lower() == "lowerleft":
@@ -1657,7 +1651,6 @@ class Wire():
1657
1651
 
1658
1652
  """
1659
1653
  from topologicpy.Vertex import Vertex
1660
- from topologicpy.Wire import Wire
1661
1654
  from topologicpy.Topology import Topology
1662
1655
 
1663
1656
  if not isinstance(width, int) and not isinstance(width, float):
@@ -1745,7 +1738,7 @@ class Wire():
1745
1738
  else:
1746
1739
  yScale = 1
1747
1740
  if xScale == -1 or yScale == -1:
1748
- c_shape = Topology.Scale(c_shape, x=xScale, y=yScale, z=1)
1741
+ c_shape = Topology.Scale(c_shape, origin=origin, x=xScale, y=yScale, z=1)
1749
1742
  if reverse == True:
1750
1743
  c_shape = Wire.Reverse(c_shape)
1751
1744
  if placement.lower() == "lowerleft":
@@ -2287,7 +2280,6 @@ class Wire():
2287
2280
  import math
2288
2281
  from topologicpy.Vertex import Vertex
2289
2282
  from topologicpy.Edge import Edge
2290
- from topologicpy.Wire import Wire
2291
2283
  from topologicpy.Face import Face
2292
2284
  from topologicpy.Topology import Topology
2293
2285
  from topologicpy.Vector import Vector
@@ -2777,7 +2769,6 @@ class Wire():
2777
2769
 
2778
2770
  """
2779
2771
  from topologicpy.Vertex import Vertex
2780
- from topologicpy.Wire import Wire
2781
2772
  from topologicpy.Topology import Topology
2782
2773
 
2783
2774
  if not isinstance(width, int) and not isinstance(width, float):
@@ -2869,7 +2860,7 @@ class Wire():
2869
2860
  else:
2870
2861
  yScale = 1
2871
2862
  if xScale == -1 or yScale == -1:
2872
- i_shape = Topology.Scale(i_shape, x=xScale, y=yScale, z=1)
2863
+ i_shape = Topology.Scale(i_shape, origin=origin, x=xScale, y=yScale, z=1)
2873
2864
  if reverse == True:
2874
2865
  i_shape = Wire.Reverse(i_shape)
2875
2866
  if placement.lower() == "lowerleft":
@@ -3024,7 +3015,6 @@ class Wire():
3024
3015
 
3025
3016
  """
3026
3017
  from topologicpy.Vertex import Vertex
3027
- from topologicpy.Wire import Wire
3028
3018
  from topologicpy.Topology import Topology
3029
3019
 
3030
3020
  if not isinstance(width, int) and not isinstance(width, float):
@@ -3106,7 +3096,7 @@ class Wire():
3106
3096
  else:
3107
3097
  yScale = 1
3108
3098
  if xScale == -1 or yScale == -1:
3109
- l_shape = Topology.Scale(l_shape, x=xScale, y=yScale, z=1)
3099
+ l_shape = Topology.Scale(l_shape, origin=origing, x=xScale, y=yScale, z=1)
3110
3100
  if reverse == True:
3111
3101
  l_shape = Wire.Reverse(l_shape)
3112
3102
  if placement.lower() == "lowerleft":
@@ -3163,9 +3153,7 @@ class Wire():
3163
3153
  import math
3164
3154
  from topologicpy.Vertex import Vertex
3165
3155
  from topologicpy.Edge import Edge
3166
- from topologicpy.Wire import Wire
3167
3156
  from topologicpy.Face import Face
3168
- from topologicpy.Cluster import Cluster
3169
3157
  from topologicpy.Topology import Topology
3170
3158
  from topologicpy.Vector import Vector
3171
3159
  from topologicpy.Dictionary import Dictionary
@@ -3632,7 +3620,6 @@ class Wire():
3632
3620
  """
3633
3621
  from topologicpy.Vertex import Vertex
3634
3622
  from topologicpy.Edge import Edge
3635
- from topologicpy.Wire import Wire
3636
3623
  from topologicpy.Cluster import Cluster
3637
3624
  from topologicpy.Topology import Topology
3638
3625
 
@@ -3727,7 +3714,6 @@ class Wire():
3727
3714
  """
3728
3715
  from topologicpy.Vertex import Vertex
3729
3716
  from topologicpy.Edge import Edge
3730
- from topologicpy.Wire import Wire
3731
3717
  from topologicpy.Cluster import Cluster
3732
3718
  from topologicpy.Topology import Topology
3733
3719
  import inspect
@@ -4537,7 +4523,6 @@ class Wire():
4537
4523
  return x*radius, y*radius
4538
4524
 
4539
4525
  from topologicpy.Vertex import Vertex
4540
- from topologicpy.Wire import Wire
4541
4526
  from topologicpy.Topology import Topology
4542
4527
 
4543
4528
  if not Topology.IsInstance(origin, "Vertex"):
@@ -4788,7 +4773,6 @@ class Wire():
4788
4773
  baseWire = Topology.Orient(baseWire, origin=origin, dirA=[0, 0, 1], dirB=direction)
4789
4774
  return baseWire
4790
4775
 
4791
-
4792
4776
  @staticmethod
4793
4777
  def TShape(origin=None,
4794
4778
  width=1,
@@ -4832,7 +4816,6 @@ class Wire():
4832
4816
 
4833
4817
  """
4834
4818
  from topologicpy.Vertex import Vertex
4835
- from topologicpy.Wire import Wire
4836
4819
  from topologicpy.Topology import Topology
4837
4820
 
4838
4821
  if not isinstance(width, int) and not isinstance(width, float):
@@ -4916,7 +4899,7 @@ class Wire():
4916
4899
  else:
4917
4900
  yScale = 1
4918
4901
  if xScale == -1 or yScale == -1:
4919
- t_shape = Topology.Scale(t_shape, x=xScale, y=yScale, z=1)
4902
+ t_shape = Topology.Scale(t_shape, origin=origin, x=xScale, y=yScale, z=1)
4920
4903
  if reverse == True:
4921
4904
  t_shape = Wire.Reverse(t_shape)
4922
4905
  if placement.lower() == "lowerleft":
topologicpy/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.8.7'
1
+ __version__ = '0.8.9'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: topologicpy
3
- Version: 0.8.7
3
+ Version: 0.8.9
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
@@ -1,7 +1,7 @@
1
1
  topologicpy/ANN.py,sha256=m_WxD1lgQqDhUpaM20Lia6TmJACDYaAE96wigsi-99U,47932
2
2
  topologicpy/Aperture.py,sha256=p9pUzTQSBWoUaDiug1V1R1hnEIEwYSXFg2t7iRAmNRY,2723
3
3
  topologicpy/BVH.py,sha256=mKVCAu9K8qzcWXtPDVH5usXZV1DNNNJl4n3rU5Lh1ZM,12931
4
- topologicpy/Cell.py,sha256=o5CxsBXxtnV439I4f8VMUoDMVwO5o3q0lHinHHMSmFg,108571
4
+ topologicpy/Cell.py,sha256=9bF1pS0oyYmUzyXZ4zAQrwJPrQ7KeHRAo8OZudp_2Kg,114341
5
5
  topologicpy/CellComplex.py,sha256=-s8RKGa2H1eqLO7g6qyQvvuFMFJ0aIgXvIr9kOVgpjA,51608
6
6
  topologicpy/Cluster.py,sha256=o5jdMRpcGfSGGiXQdFg-e9XcnBF5AqTj3xb1nSpwJWE,58606
7
7
  topologicpy/Color.py,sha256=q9xsGmxFMz7sQKmygwSVS12GaTRB-OT0-_i6t3-cthE,20307
@@ -11,7 +11,7 @@ topologicpy/Dictionary.py,sha256=t0O7Du-iPq46FyKqZfcjHfsUK1E8GS_e67R2V5cpkbw,331
11
11
  topologicpy/Edge.py,sha256=lWwJdQkAhiH5POB7TN6HSLv03g2jXHzBU7e2fE3eAno,71340
12
12
  topologicpy/EnergyModel.py,sha256=UoQ9Jm-hYsN383CbcLKw-y6BKitRHj0uyh84yQ-8ACg,53856
13
13
  topologicpy/Face.py,sha256=D1g4O5i5QMPZvIoX06Z-FsyNsYBDkCiHWJp00uqnr5o,180742
14
- topologicpy/Graph.py,sha256=rq7QGgb2eTJucFT6YeQujs1zoZg-KHMvHOWPjG1btG4,492418
14
+ topologicpy/Graph.py,sha256=yjD778MyWFLmUEryGFEzFZOJmnrZwkqrVYvpmH76Oxs,497462
15
15
  topologicpy/Grid.py,sha256=2s9cSlWldivn1i9EUz4OOokJyANveqmRe_vR93CAndI,18245
16
16
  topologicpy/Helper.py,sha256=DAAE_Ie_ekeMnCvcW08xXRwSAGCkjrS4lbz-o3ELuY4,27172
17
17
  topologicpy/Honeybee.py,sha256=Y_El6M8x3ixvvIe_VcRiwj_4C89ZZg5_WlT7adbCkpw,21849
@@ -24,13 +24,13 @@ topologicpy/Shell.py,sha256=fLRnQ79vtdBDRW1Xn8Gaap34XheGbw7UBFd-ALJ2Y1g,87978
24
24
  topologicpy/Speckle.py,sha256=AlsGlSDuKRtX5jhVsPNSSjjbZis079HbUchDH_5RJmE,18187
25
25
  topologicpy/Sun.py,sha256=42tDWMYpwRG7Z2Qjtp94eRgBuqySq7k8TgNUZDK7QxQ,36837
26
26
  topologicpy/Topology.py,sha256=qw64d3Ct6u7W8Fy_-JIg3_xsyOzDIQ1hdnpxF2p_wH4,463931
27
- topologicpy/Vector.py,sha256=Cl7besf20cAGmyNPh-9gbFAHnRU5ZWSMChJ3VyFIDs4,35416
28
- topologicpy/Vertex.py,sha256=tv6C-rbuNgXHDGgVLT5fbalynLdXqlUuiCDKtkeQ0vk,77814
29
- topologicpy/Wire.py,sha256=Gl3Jpygwp8775SG57ua5r5ffTHcN4FOAkeI87yP1cok,234001
27
+ topologicpy/Vector.py,sha256=3gW0Y7mTcpc6ctjSfRWQXGKjIyHASKrMyIyPDT0kO2E,39573
28
+ topologicpy/Vertex.py,sha256=8_7iGDPlNWsiNfxcuNRO5u7P07i1Y58Gprw7KtA2Wmw,78505
29
+ topologicpy/Wire.py,sha256=Pt2li4cZ1omQKcMDCOqdB01ZKqjA4KBR0K3lGNVUoDs,233398
30
30
  topologicpy/__init__.py,sha256=vlPCanUbxe5NifC4pHcnhSzkmmYcs_UrZrTlVMsxcFs,928
31
- topologicpy/version.py,sha256=JGCf_Ym2Ht0sZ3u8dNB1-xTLbDj-N0D-i99vGQQMfWs,22
32
- topologicpy-0.8.7.dist-info/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
33
- topologicpy-0.8.7.dist-info/METADATA,sha256=uDBR73QF2TnGhpaMNI-vIBGeZTF-c7IMM5DI7AxwzEI,10512
34
- topologicpy-0.8.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
35
- topologicpy-0.8.7.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
36
- topologicpy-0.8.7.dist-info/RECORD,,
31
+ topologicpy/version.py,sha256=NlRwwFdz-gLvpPJ1P15liW62rdqtILNRJEm3y_yv3z8,22
32
+ topologicpy-0.8.9.dist-info/LICENSE,sha256=FK0vJ73LuE8PYJAn7LutsReWR47-Ooovw2dnRe5yV6Q,681
33
+ topologicpy-0.8.9.dist-info/METADATA,sha256=cFgD49CaDIZRj1a8FDEMkyw2dINg6WQZxTqbp55p--4,10512
34
+ topologicpy-0.8.9.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
35
+ topologicpy-0.8.9.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
36
+ topologicpy-0.8.9.dist-info/RECORD,,