Skip to content

Commit

Permalink
fixing graph performance issue (invoking @Property only once)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zigur committed Jul 19, 2021
1 parent 8e72046 commit 8c2d09d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 16 deletions.
34 changes: 18 additions & 16 deletions isatools/isatab.py
Original file line number Diff line number Diff line change
Expand Up @@ -1179,23 +1179,24 @@ def write_study_table_files(inv_obj, output_dir):
if not isinstance(inv_obj, Investigation):
raise NotImplementedError
for study_obj in inv_obj.studies:
if study_obj.graph is None:
s_graph = study_obj.graph
if s_graph is None:
break
protrefcount = 0
protnames = dict()

def flatten(l): return [item for sublist in l for item in sublist]
columns = []

# start_nodes, end_nodes = _get_start_end_nodes(study_obj.graph)
# start_nodes, end_nodes = _get_start_end_nodes(s_graph)
paths = _all_end_to_end_paths(
study_obj.graph,
[x for x in study_obj.graph.nodes() if isinstance(study_obj.graph.indexes[x], Source)])
log.warning(study_obj.graph.nodes())
s_graph,
[x for x in s_graph.nodes() if isinstance(s_graph.indexes[x], Source)])
log.warning(s_graph.nodes())
sample_in_path_count = 0
longest_path = _longest_path_and_attrs(paths, study_obj.graph.indexes)
longest_path = _longest_path_and_attrs(paths, s_graph.indexes)
for node_index in longest_path:
node = study_obj.graph.indexes[node_index]
node = s_graph.indexes[node_index]
if isinstance(node, Source):
olabel = "Source Name"
columns.append(olabel)
Expand Down Expand Up @@ -1252,7 +1253,7 @@ def pbar(x): return x"""

sample_in_path_count = 0
for node_index in path:
node = study_obj.graph.indexes[node_index]
node = s_graph.indexes[node_index]
if isinstance(node, Source):
olabel = "Source Name"
df_dict[olabel][-1] = node.name
Expand Down Expand Up @@ -1376,26 +1377,27 @@ def write_assay_table_files(inv_obj, output_dir, write_factor_values=False):
protocol_types_dict = load_protocol_types_info()
for study_obj in inv_obj.studies:
for assay_obj in study_obj.assays:
if assay_obj.graph is None:
a_graph = assay_obj.graph
if a_graph is None:
break
protrefcount = 0
protnames = dict()

def flatten(l): return [item for sublist in l for item in sublist]
columns = []

# start_nodes, end_nodes = _get_start_end_nodes(assay_obj.graph)
# start_nodes, end_nodes = _get_start_end_nodes(a_graph)
paths = _all_end_to_end_paths(
assay_obj.graph, [x for x in assay_obj.graph.nodes()
if isinstance(assay_obj.graph.indexes[x], Sample)])
a_graph, [x for x in a_graph.nodes()
if isinstance(a_graph.indexes[x], Sample)])
if len(paths) == 0:
log.info("No paths found, skipping writing assay file")
continue
if _longest_path_and_attrs(paths, assay_obj.graph.indexes) is None:
if _longest_path_and_attrs(paths, a_graph.indexes) is None:
raise IOError(
"Could not find any valid end-to-end paths in assay graph")
for node_index in _longest_path_and_attrs(paths, assay_obj.graph.indexes):
node = assay_obj.graph.indexes[node_index]
for node_index in _longest_path_and_attrs(paths, a_graph.indexes):
node = a_graph.indexes[node_index]
if isinstance(node, Sample):
olabel = "Sample Name"
columns.append(olabel)
Expand Down Expand Up @@ -1474,7 +1476,7 @@ def pbar(x): return x
df_dict[k].extend([""])

for node_index in path:
node = assay_obj.graph.indexes[node_index]
node = a_graph.indexes[node_index]
if isinstance(node, Process):
olabel = "Protocol REF.{}".format(
node.executes_protocol.name
Expand Down
3 changes: 3 additions & 0 deletions tests/test_create_connectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,9 @@ def test_generate_study_design(self):
separators=(',', ': ')
)
self.assertIsInstance(inv_json, str)
isatab_txt = isatab.dumps(investigation)
print(isatab_txt)
self.assertTrue(isatab_txt)
if SLOW_TESTS:
data_frames = isatab.dump_tables_to_dataframes(investigation)
self.assertIsInstance(data_frames, dict)
Expand Down

0 comments on commit 8c2d09d

Please sign in to comment.