topologicpy 0.7.43__py3-none-any.whl → 0.7.44__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/EnergyModel.py +34 -21
- topologicpy/PyG.py +132 -30
- topologicpy/Topology.py +2 -2
- topologicpy/version.py +1 -1
- {topologicpy-0.7.43.dist-info → topologicpy-0.7.44.dist-info}/METADATA +1 -1
- {topologicpy-0.7.43.dist-info → topologicpy-0.7.44.dist-info}/RECORD +9 -9
- {topologicpy-0.7.43.dist-info → topologicpy-0.7.44.dist-info}/LICENSE +0 -0
- {topologicpy-0.7.43.dist-info → topologicpy-0.7.44.dist-info}/WHEEL +0 -0
- {topologicpy-0.7.43.dist-info → topologicpy-0.7.44.dist-info}/top_level.txt +0 -0
topologicpy/EnergyModel.py
CHANGED
@@ -20,7 +20,7 @@ import math
|
|
20
20
|
from collections import OrderedDict
|
21
21
|
import os
|
22
22
|
from os.path import exists
|
23
|
-
from datetime import datetime
|
23
|
+
from datetime import datetime, timezone
|
24
24
|
import warnings
|
25
25
|
|
26
26
|
try:
|
@@ -249,18 +249,24 @@ class EnergyModel:
|
|
249
249
|
weatherFilePath = os.path.join(os.path.dirname(os.path.realpath(__file__)), "assets", "EnergyModel", "GBR_London.Gatwick.037760_IWEC.epw")
|
250
250
|
designDayFilePath = os.path.join(os.path.dirname(os.path.realpath(__file__)), "assets", "EnergyModel", "GBR_London.Gatwick.037760_IWEC.ddy")
|
251
251
|
translator = openstudio.osversion.VersionTranslator()
|
252
|
-
|
253
|
-
|
252
|
+
# DEBUGGING
|
253
|
+
#osmFile = openstudio.openstudioutilitiescore.toPath(osModelPath)
|
254
|
+
#osModel = translator.loadModel(osmFile)
|
255
|
+
osModel = translator.loadModel(osModelPath)
|
254
256
|
if osModel.isNull():
|
255
257
|
print("EnergyModel.ByTopology - Error: The openstudio model is null. Returning None.")
|
256
258
|
return None
|
257
259
|
else:
|
258
260
|
osModel = osModel.get()
|
259
|
-
|
261
|
+
# DEBUGGING
|
262
|
+
#osEPWFile = openstudio.openstudioutilitiesfiletypes.EpwFile.load(openstudio.toPath(weatherFilePath))
|
263
|
+
osEPWFile = openstudio.openstudioutilitiesfiletypes.EpwFile.load(weatherFilePath)
|
260
264
|
if osEPWFile.is_initialized():
|
261
265
|
osEPWFile = osEPWFile.get()
|
262
266
|
openstudio.model.WeatherFile.setWeatherFile(osModel, osEPWFile)
|
263
|
-
|
267
|
+
# DEBUGGING
|
268
|
+
#ddyModel = openstudio.openstudioenergyplus.loadAndTranslateIdf(openstudio.toPath(designDayFilePath))
|
269
|
+
ddyModel = openstudio.openstudioenergyplus.loadAndTranslateIdf(designDayFilePath)
|
264
270
|
if ddyModel.is_initialized():
|
265
271
|
ddyModel = ddyModel.get()
|
266
272
|
for ddy in ddyModel.getObjectsByType(openstudio.IddObjectType("OS:SizingPeriod:DesignDay")):
|
@@ -578,8 +584,9 @@ class EnergyModel:
|
|
578
584
|
if not overwrite and exists(path):
|
579
585
|
print("EnergyModel.ExportToGBXML - Error: a file already exists at the specified path and overwrite is set to False. Returning None.")
|
580
586
|
return None
|
581
|
-
|
582
|
-
return openstudio.gbxml.GbXMLForwardTranslator().modelToGbXML(model, openstudio.openstudioutilitiescore.toPath(path))
|
587
|
+
# DEBUGGING
|
588
|
+
#return openstudio.gbxml.GbXMLForwardTranslator().modelToGbXML(model, openstudio.openstudioutilitiescore.toPath(path))
|
589
|
+
return openstudio.gbxml.GbXMLForwardTranslator().modelToGbXML(model, path)
|
583
590
|
|
584
591
|
|
585
592
|
@staticmethod
|
@@ -629,8 +636,10 @@ class EnergyModel:
|
|
629
636
|
print("EnergyModel.ExportToOSM - Error: a file already exists at the specified path and overwrite is set to False. Returning None.")
|
630
637
|
return None
|
631
638
|
osCondition = False
|
632
|
-
|
633
|
-
|
639
|
+
# DEBUGGING
|
640
|
+
#osPath = openstudio.openstudioutilitiescore.toPath(path)
|
641
|
+
#osCondition = model.save(osPath, overwrite)
|
642
|
+
osCondition = model.save(path, overwrite)
|
634
643
|
return osCondition
|
635
644
|
|
636
645
|
@staticmethod
|
@@ -821,7 +830,7 @@ class EnergyModel:
|
|
821
830
|
if removeFiles:
|
822
831
|
deleteOldFiles(outputFolder)
|
823
832
|
pbar = tqdm(desc='Running Simulation', total=100, leave=False)
|
824
|
-
utcnow = datetime.
|
833
|
+
utcnow = datetime.now(timezone.utc)
|
825
834
|
timestamp = utcnow.strftime("UTC-%Y-%m-%d-%H-%M-%S")
|
826
835
|
if not outputFolder:
|
827
836
|
home = os.path.expanduser('~')
|
@@ -831,28 +840,32 @@ class EnergyModel:
|
|
831
840
|
os.mkdir(outputFolder)
|
832
841
|
pbar.update(10)
|
833
842
|
osmPath = os.path.join(outputFolder, model.getBuilding().name().get() + ".osm")
|
834
|
-
|
843
|
+
# DEBUGGING
|
844
|
+
#model.save(openstudio.openstudioutilitiescore.toPath(osmPath), True)
|
845
|
+
model.save(osmPath, True)
|
835
846
|
oswPath = os.path.join(outputFolder, model.getBuilding().name().get() + ".osw")
|
836
847
|
pbar.update(20)
|
837
|
-
#print("oswPath = "+oswPath)
|
838
848
|
workflow = model.workflowJSON()
|
839
|
-
|
849
|
+
# DEBUGGING
|
850
|
+
#workflow.setSeedFile(openstudio.openstudioutilitiescore.toPath(osmPath))
|
851
|
+
workflow.setSeedFile(osmPath)
|
840
852
|
pbar.update(30)
|
841
|
-
#
|
842
|
-
workflow.setWeatherFile(openstudio.openstudioutilitiescore.toPath(weatherFilePath))
|
853
|
+
# DEBUGGING
|
854
|
+
#workflow.setWeatherFile(openstudio.openstudioutilitiescore.toPath(weatherFilePath))
|
855
|
+
workflow.setWeatherFile(weatherFilePath)
|
843
856
|
pbar.update(40)
|
844
|
-
#
|
845
|
-
workflow.saveAs(openstudio.openstudioutilitiescore.toPath(oswPath))
|
857
|
+
# DEBUGGING
|
858
|
+
#workflow.saveAs(openstudio.openstudioutilitiescore.toPath(oswPath))
|
859
|
+
workflow.saveAs(oswPath)
|
846
860
|
pbar.update(50)
|
847
|
-
#print("OSW File Saved")
|
848
861
|
cmd = osBinaryPath+" run -w " + "\"" + oswPath + "\""
|
849
862
|
pbar.update(60)
|
850
863
|
os.system(cmd)
|
851
|
-
#print("Simulation DONE")
|
852
864
|
sqlPath = os.path.join(os.path.join(outputFolder,"run"), "eplusout.sql")
|
853
865
|
pbar.update(100)
|
854
|
-
#
|
855
|
-
osSqlFile = openstudio.SqlFile(openstudio.openstudioutilitiescore.toPath(sqlPath))
|
866
|
+
# DEBUGGING
|
867
|
+
#osSqlFile = openstudio.SqlFile(openstudio.openstudioutilitiescore.toPath(sqlPath))
|
868
|
+
osSqlFile = openstudio.SqlFile(sqlPath)
|
856
869
|
model.setSqlFile(osSqlFile)
|
857
870
|
pbar.close()
|
858
871
|
return model
|
topologicpy/PyG.py
CHANGED
@@ -30,11 +30,27 @@ from sklearn.metrics import accuracy_score
|
|
30
30
|
from tqdm.auto import tqdm
|
31
31
|
import gc
|
32
32
|
|
33
|
+
import torch
|
34
|
+
from torch.utils.data import Dataset
|
35
|
+
|
36
|
+
import torch
|
37
|
+
from torch.utils.data import Dataset
|
33
38
|
|
34
39
|
class CustomGraphDataset(Dataset):
|
35
|
-
def __init__(self, root, node_level=False, graph_level=True,
|
36
|
-
|
37
|
-
|
40
|
+
def __init__(self, root=None, data_list=None, indices=None, node_level=False, graph_level=True,
|
41
|
+
node_attr_key='feat', edge_attr_key='feat'):
|
42
|
+
"""
|
43
|
+
Initializes the CustomGraphDataset.
|
44
|
+
|
45
|
+
Parameters:
|
46
|
+
- root: Root directory of the dataset (used only if data_list is None)
|
47
|
+
- data_list: List of preprocessed data objects (used if provided)
|
48
|
+
- indices: List of indices to select a subset of the data
|
49
|
+
- node_level: Boolean flag indicating if the dataset is node-level
|
50
|
+
- graph_level: Boolean flag indicating if the dataset is graph-level
|
51
|
+
- node_attr_key: Key for node attributes
|
52
|
+
- edge_attr_key: Key for edge attributes
|
53
|
+
"""
|
38
54
|
assert not (node_level and graph_level), "Both node_level and graph_level cannot be True at the same time"
|
39
55
|
assert node_level or graph_level, "Both node_level and graph_level cannot be False at the same time"
|
40
56
|
|
@@ -43,15 +59,20 @@ class CustomGraphDataset(Dataset):
|
|
43
59
|
self.node_attr_key = node_attr_key
|
44
60
|
self.edge_attr_key = edge_attr_key
|
45
61
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
62
|
+
if data_list is not None:
|
63
|
+
self.data_list = data_list # Use the provided data list
|
64
|
+
elif root is not None:
|
65
|
+
# Load and process data from root directory if data_list is not provided
|
66
|
+
self.graph_df = pd.read_csv(os.path.join(root, 'graphs.csv'))
|
67
|
+
self.nodes_df = pd.read_csv(os.path.join(root, 'nodes.csv'))
|
68
|
+
self.edges_df = pd.read_csv(os.path.join(root, 'edges.csv'))
|
69
|
+
self.data_list = self.process_all()
|
70
|
+
else:
|
71
|
+
raise ValueError("Either a root directory or a data_list must be provided.")
|
51
72
|
|
52
|
-
|
53
|
-
|
54
|
-
|
73
|
+
# Filter data_list based on indices if provided
|
74
|
+
if indices is not None:
|
75
|
+
self.data_list = [self.data_list[i] for i in indices]
|
55
76
|
|
56
77
|
def process_all(self):
|
57
78
|
data_list = []
|
@@ -73,12 +94,9 @@ class CustomGraphDataset(Dataset):
|
|
73
94
|
else:
|
74
95
|
edge_attr = None
|
75
96
|
|
76
|
-
|
77
|
-
|
78
97
|
if self.graph_level:
|
79
98
|
label_value = self.graph_df[self.graph_df['graph_id'] == graph_id]['label'].values[0]
|
80
99
|
|
81
|
-
# Check if the label is an integer or a float and cast accordingly
|
82
100
|
if isinstance(label_value, int):
|
83
101
|
y = torch.tensor([label_value], dtype=torch.long)
|
84
102
|
elif isinstance(label_value, float):
|
@@ -89,7 +107,6 @@ class CustomGraphDataset(Dataset):
|
|
89
107
|
elif self.node_level:
|
90
108
|
label_values = graph_nodes['label'].values
|
91
109
|
|
92
|
-
# Check if the labels are integers or floats and cast accordingly
|
93
110
|
if issubclass(label_values.dtype.type, int):
|
94
111
|
y = torch.tensor(label_values, dtype=torch.long)
|
95
112
|
elif issubclass(label_values.dtype.type, float):
|
@@ -97,12 +114,6 @@ class CustomGraphDataset(Dataset):
|
|
97
114
|
else:
|
98
115
|
raise ValueError(f"Unexpected label types: {label_values.dtype}. Expected int or float.")
|
99
116
|
|
100
|
-
|
101
|
-
# if self.graph_level:
|
102
|
-
# y = torch.tensor([self.graph_df[self.graph_df['graph_id'] == graph_id]['label'].values[0]], dtype=torch.long)
|
103
|
-
# elif self.node_level:
|
104
|
-
# y = torch.tensor(graph_nodes['label'].values, dtype=torch.long)
|
105
|
-
|
106
117
|
data = Data(x=x, edge_index=edge_index, y=y)
|
107
118
|
if edge_attr is not None:
|
108
119
|
data.edge_attr = edge_attr
|
@@ -111,14 +122,103 @@ class CustomGraphDataset(Dataset):
|
|
111
122
|
|
112
123
|
return data_list
|
113
124
|
|
114
|
-
def
|
125
|
+
def __len__(self):
|
115
126
|
return len(self.data_list)
|
116
127
|
|
117
|
-
def
|
128
|
+
def __getitem__(self, idx):
|
118
129
|
return self.data_list[idx]
|
119
130
|
|
120
|
-
|
121
|
-
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
# class CustomGraphDataset(Dataset):
|
135
|
+
# def __init__(self, root, node_level=False, graph_level=True, node_attr_key='feat',
|
136
|
+
# edge_attr_key='feat', transform=None, pre_transform=None):
|
137
|
+
# super(CustomGraphDataset, self).__init__(root, transform, pre_transform)
|
138
|
+
# assert not (node_level and graph_level), "Both node_level and graph_level cannot be True at the same time"
|
139
|
+
# assert node_level or graph_level, "Both node_level and graph_level cannot be False at the same time"
|
140
|
+
|
141
|
+
# self.node_level = node_level
|
142
|
+
# self.graph_level = graph_level
|
143
|
+
# self.node_attr_key = node_attr_key
|
144
|
+
# self.edge_attr_key = edge_attr_key
|
145
|
+
|
146
|
+
# self.graph_df = pd.read_csv(os.path.join(root, 'graphs.csv'))
|
147
|
+
# self.nodes_df = pd.read_csv(os.path.join(root, 'nodes.csv'))
|
148
|
+
# self.edges_df = pd.read_csv(os.path.join(root, 'edges.csv'))
|
149
|
+
|
150
|
+
# self.data_list = self.process_all()
|
151
|
+
|
152
|
+
# @property
|
153
|
+
# def raw_file_names(self):
|
154
|
+
# return ['graphs.csv', 'nodes.csv', 'edges.csv']
|
155
|
+
|
156
|
+
# def process_all(self):
|
157
|
+
# data_list = []
|
158
|
+
# for graph_id in self.graph_df['graph_id'].unique():
|
159
|
+
# graph_nodes = self.nodes_df[self.nodes_df['graph_id'] == graph_id]
|
160
|
+
# graph_edges = self.edges_df[self.edges_df['graph_id'] == graph_id]
|
161
|
+
|
162
|
+
# if self.node_attr_key in graph_nodes.columns and not graph_nodes[self.node_attr_key].isnull().all():
|
163
|
+
# x = torch.tensor(graph_nodes[self.node_attr_key].values.tolist(), dtype=torch.float)
|
164
|
+
# if x.ndim == 1:
|
165
|
+
# x = x.unsqueeze(1) # Ensure x has shape [num_nodes, *]
|
166
|
+
# else:
|
167
|
+
# x = None
|
168
|
+
|
169
|
+
# edge_index = torch.tensor(graph_edges[['src_id', 'dst_id']].values.T, dtype=torch.long)
|
170
|
+
|
171
|
+
# if self.edge_attr_key in graph_edges.columns and not graph_edges[self.edge_attr_key].isnull().all():
|
172
|
+
# edge_attr = torch.tensor(graph_edges[self.edge_attr_key].values.tolist(), dtype=torch.float)
|
173
|
+
# else:
|
174
|
+
# edge_attr = None
|
175
|
+
|
176
|
+
|
177
|
+
|
178
|
+
# if self.graph_level:
|
179
|
+
# label_value = self.graph_df[self.graph_df['graph_id'] == graph_id]['label'].values[0]
|
180
|
+
|
181
|
+
# # Check if the label is an integer or a float and cast accordingly
|
182
|
+
# if isinstance(label_value, int):
|
183
|
+
# y = torch.tensor([label_value], dtype=torch.long)
|
184
|
+
# elif isinstance(label_value, float):
|
185
|
+
# y = torch.tensor([label_value], dtype=torch.float)
|
186
|
+
# else:
|
187
|
+
# raise ValueError(f"Unexpected label type: {type(label_value)}. Expected int or float.")
|
188
|
+
|
189
|
+
# elif self.node_level:
|
190
|
+
# label_values = graph_nodes['label'].values
|
191
|
+
|
192
|
+
# # Check if the labels are integers or floats and cast accordingly
|
193
|
+
# if issubclass(label_values.dtype.type, int):
|
194
|
+
# y = torch.tensor(label_values, dtype=torch.long)
|
195
|
+
# elif issubclass(label_values.dtype.type, float):
|
196
|
+
# y = torch.tensor(label_values, dtype=torch.float)
|
197
|
+
# else:
|
198
|
+
# raise ValueError(f"Unexpected label types: {label_values.dtype}. Expected int or float.")
|
199
|
+
|
200
|
+
|
201
|
+
# # if self.graph_level:
|
202
|
+
# # y = torch.tensor([self.graph_df[self.graph_df['graph_id'] == graph_id]['label'].values[0]], dtype=torch.long)
|
203
|
+
# # elif self.node_level:
|
204
|
+
# # y = torch.tensor(graph_nodes['label'].values, dtype=torch.long)
|
205
|
+
|
206
|
+
# data = Data(x=x, edge_index=edge_index, y=y)
|
207
|
+
# if edge_attr is not None:
|
208
|
+
# data.edge_attr = edge_attr
|
209
|
+
|
210
|
+
# data_list.append(data)
|
211
|
+
|
212
|
+
# return data_list
|
213
|
+
|
214
|
+
# def len(self):
|
215
|
+
# return len(self.data_list)
|
216
|
+
|
217
|
+
# def get(self, idx):
|
218
|
+
# return self.data_list[idx]
|
219
|
+
|
220
|
+
# def __getitem__(self, idx):
|
221
|
+
# return self.get(idx)
|
122
222
|
|
123
223
|
class _Hparams:
|
124
224
|
def __init__(self, model_type="ClassifierHoldout", optimizer_str="Adam", amsgrad=False, betas=(0.9, 0.999), eps=1e-6, lr=0.001, lr_decay= 0, maximize=False, rho=0.9, weight_decay=0, cv_type="Holdout", split=[0.8,0.1, 0.1], k_folds=5, hl_widths=[32], conv_layer_type='SAGEConv', pooling="AvgPooling", batch_size=32, epochs=1,
|
@@ -375,7 +475,8 @@ class _GraphRegressorKFold:
|
|
375
475
|
|
376
476
|
def _initialize_model(self, hparams, dataset):
|
377
477
|
if hparams.conv_layer_type.lower() == 'sageconv':
|
378
|
-
return _SAGEConv(dataset.num_node_features, hparams.hl_widths, 1, hparams.pooling).to(self.device)
|
478
|
+
return _SAGEConv(dataset[0].num_node_features, hparams.hl_widths, 1, hparams.pooling).to(self.device)
|
479
|
+
#return _SAGEConv(dataset.num_node_features, hparams.hl_widths, 1, hparams.pooling).to(self.device)
|
379
480
|
else:
|
380
481
|
raise NotImplementedError
|
381
482
|
|
@@ -1485,7 +1586,7 @@ class PyG:
|
|
1485
1586
|
"""
|
1486
1587
|
|
1487
1588
|
import torch
|
1488
|
-
from torch.utils.data import random_split
|
1589
|
+
from torch.utils.data import random_split
|
1489
1590
|
train_ratio, val_ratio, test_ratio = split
|
1490
1591
|
assert abs(train_ratio + val_ratio + test_ratio - 1.0) < 1e-6, "Ratios must add up to 1."
|
1491
1592
|
|
@@ -1506,9 +1607,10 @@ class PyG:
|
|
1506
1607
|
val_indices = indices[train_len:train_len + val_len]
|
1507
1608
|
test_indices = indices[train_len + val_len:train_len + val_len + test_len]
|
1508
1609
|
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1610
|
+
# Create new instances of CustomGraphDataset using the indices
|
1611
|
+
train_dataset = CustomGraphDataset(data_list=dataset.data_list, indices=train_indices)
|
1612
|
+
val_dataset = CustomGraphDataset(data_list=dataset.data_list, indices=val_indices)
|
1613
|
+
test_dataset = CustomGraphDataset(data_list=dataset.data_list, indices=test_indices)
|
1512
1614
|
|
1513
1615
|
return train_dataset, val_dataset, test_dataset
|
1514
1616
|
|
topologicpy/Topology.py
CHANGED
@@ -2627,6 +2627,7 @@ class Topology():
|
|
2627
2627
|
if ap != None:
|
2628
2628
|
apertures.append(ap)
|
2629
2629
|
context = Context.ByTopologyParameters(topology, u=0.5, v=0.5, w=0.5)
|
2630
|
+
|
2630
2631
|
for ap in apertures:
|
2631
2632
|
_ = Aperture.ByTopologyContext(ap, context)
|
2632
2633
|
return topology
|
@@ -6308,7 +6309,7 @@ class Topology():
|
|
6308
6309
|
rot_vertices = [Vertex.ByCoordinates(rot_v) for rot_v in rot_vertices]
|
6309
6310
|
new_topology = Topology.ReplaceVertices(topology, verticesA=Topology.Vertices(topology), verticesB=rot_vertices)
|
6310
6311
|
new_topology = Topology.SelfMerge(new_topology, tolerance=tolerance)
|
6311
|
-
if len(Dictionary.Keys(d) > 0
|
6312
|
+
if len(Dictionary.Keys(d)) > 0:
|
6312
6313
|
new_topology = Topology.SetDictionary(new_topology, d)
|
6313
6314
|
return new_topology
|
6314
6315
|
if len(Dictionary.Keys(d)) > 0:
|
@@ -7875,7 +7876,6 @@ class Topology():
|
|
7875
7876
|
if Topology.IsInstance(topology, "Cell"):
|
7876
7877
|
sinkCells = [topology]
|
7877
7878
|
elif hidimSink >= Topology.TypeID("Cell"):
|
7878
|
-
print("Transfering Dictionaries to Cells")
|
7879
7879
|
sinkCells = Topology.Cells(topology)
|
7880
7880
|
_ = Topology.TransferDictionaries(selectors, sinkCells, tolerance=tolerance, numWorkers=numWorkers)
|
7881
7881
|
return topology
|
topologicpy/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '0.7.
|
1
|
+
__version__ = '0.7.44'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: topologicpy
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.44
|
4
4
|
Summary: An Advanced Spatial Modelling and Analysis Software Library for Architecture, Engineering, and Construction.
|
5
5
|
Author-email: Wassim Jabi <wassim.jabi@gmail.com>
|
6
6
|
License: MIT License
|
@@ -8,7 +8,7 @@ topologicpy/Context.py,sha256=ppApYKngZZCQBFWaxIMi2z2dokY23c935IDCBosxDAE,3055
|
|
8
8
|
topologicpy/DGL.py,sha256=Dd6O08D-vSxpjHYgKm45JpKiaeGvWlg1BRMzYMAXGNc,138991
|
9
9
|
topologicpy/Dictionary.py,sha256=KqJ29YyE23Y3Xc6XmKLSCZXRfBvm-OEOxlMZ4dt-rfM,27094
|
10
10
|
topologicpy/Edge.py,sha256=vhYHkobSLGSWV-oe2oJFFDobqFToDyb7s71yQ840AAA,65166
|
11
|
-
topologicpy/EnergyModel.py,sha256=
|
11
|
+
topologicpy/EnergyModel.py,sha256=XcCP55VW5WHDIIKcURijmBOZEgNUDEn_V9h5EejkntA,53876
|
12
12
|
topologicpy/Face.py,sha256=d1Im4ogxuaVmZyb6hgv5muwQwahLtGzOar_a3og1a_I,115376
|
13
13
|
topologicpy/Graph.py,sha256=p3VoVH6yygNV2wwzpsi4tm6yOfwRbtmsbnsAu2opLjQ,393517
|
14
14
|
topologicpy/Grid.py,sha256=3-sn7CHWGcXk18XCnHjsUttNJTWwmN63g_Insj__p04,18218
|
@@ -18,18 +18,18 @@ topologicpy/Matrix.py,sha256=umgR7An919-wGInXJ1wpqnoQ2jCPdyMe2rcWTZ16upk,8079
|
|
18
18
|
topologicpy/Neo4j.py,sha256=YvtF7RYUMATEZ8iHwFwK_MOxEDyARby2DTI2CCK6-cI,19694
|
19
19
|
topologicpy/Plotly.py,sha256=U6Lo7hyDoStRKQXqlhb2LM-rR_bfBulxetRT2wMBmhI,105391
|
20
20
|
topologicpy/Polyskel.py,sha256=EFsuh2EwQJGPLiFUjvtXmAwdX-A4r_DxP5hF7Qd3PaU,19829
|
21
|
-
topologicpy/PyG.py,sha256=
|
21
|
+
topologicpy/PyG.py,sha256=0yeECsMz-dqhhZSv52s_xPCO_3BcEXUK7z1YFDN9qoo,106987
|
22
22
|
topologicpy/Shell.py,sha256=NZyHYTvV0pXx18AoMbVs8y-7if8teETItv5ZOJq6gzE,84672
|
23
23
|
topologicpy/Speckle.py,sha256=rUS6PCaxIjEF5_fUruxvMH47FMKg-ohcoU0qAUb-yNM,14267
|
24
24
|
topologicpy/Sun.py,sha256=InnKtX8eKwtAgcScuABH6yp0ljmWh5m_fDR4-n3jJMY,36869
|
25
|
-
topologicpy/Topology.py,sha256=
|
25
|
+
topologicpy/Topology.py,sha256=RFZPKx15qM53skLavdMwL_YnJkDIinOnz3CLAY5OsWE,366001
|
26
26
|
topologicpy/Vector.py,sha256=WQQUbwrg7VKImtxuBUi2i-FRiPT77WlrzLP05gdXKM8,33079
|
27
27
|
topologicpy/Vertex.py,sha256=EQdVYHmW85_pZdHZB3N8pEi0GiadCCkF3z_oqohA7B0,71161
|
28
28
|
topologicpy/Wire.py,sha256=9EJE0Iq3nGz5X7Suy6xxjmuOpfV49By6WH98UAL_7m4,153532
|
29
29
|
topologicpy/__init__.py,sha256=D7ky87CAQMiS2KE6YLvcTLkTgA2PY7rASe6Z23pjp9k,872
|
30
|
-
topologicpy/version.py,sha256=
|
31
|
-
topologicpy-0.7.
|
32
|
-
topologicpy-0.7.
|
33
|
-
topologicpy-0.7.
|
34
|
-
topologicpy-0.7.
|
35
|
-
topologicpy-0.7.
|
30
|
+
topologicpy/version.py,sha256=2Sw5dX1m7XzP13Ernw7oNdPR5WsUzOMJ7VZ-QyJpf9o,23
|
31
|
+
topologicpy-0.7.44.dist-info/LICENSE,sha256=BRNw73R2WdDBICtwhI3wm3cxsaVqLTAGuRwrTltcfxs,1068
|
32
|
+
topologicpy-0.7.44.dist-info/METADATA,sha256=N7KPudecCpJl9CdmpNEfoLiXYGpxcXZwegs6AvC1HTo,10916
|
33
|
+
topologicpy-0.7.44.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
34
|
+
topologicpy-0.7.44.dist-info/top_level.txt,sha256=J30bDzW92Ob7hw3zA8V34Jlp-vvsfIkGzkr8sqvb4Uw,12
|
35
|
+
topologicpy-0.7.44.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|