Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
BioFlow-Insight
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
shareFAIR
BioFlow-Insight
Commits
bdde5807
Commit
bdde5807
authored
7 months ago
by
George Marchment
Browse files
Options
Downloads
Patches
Plain Diff
update to user view
parent
f335b0f8
No related branches found
No related tags found
No related merge requests found
Pipeline
#14040
passed with stage
Stage:
in 2 minutes and 17 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/graph.py
+1
-1
1 addition, 1 deletion
src/graph.py
src/outils_graph.py
+201
-26
201 additions, 26 deletions
src/outils_graph.py
with
202 additions
and
27 deletions
src/graph.py
+
1
−
1
View file @
bdde5807
...
...
@@ -296,7 +296,7 @@ class Graph():
relev_user_view_builder
(
dico
,
relevant_modules
=
relevant_processes
)
generate_graph
(
self
.
get_output_dir
()
/
'
graphs
'
/
"
temp
"
,
dico
,
label_edge
=
True
,
label_node
=
True
,
render_graphs
=
render_graphs
)
#
generate_graph(self.get_output_dir()/'graphs'/"temp", dico, label_edge=True, label_node=True, render_graphs = render_graphs)
...
...
This diff is collapsed.
Click to expand it.
src/outils_graph.py
+
201
−
26
View file @
bdde5807
...
...
@@ -361,6 +361,10 @@ def get_name_from_id(dico, ID):
for
n
in
dico
[
"
nodes
"
]:
if
(
n
[
'
id
'
]
==
ID
):
names
.
append
(
n
[
'
name
'
])
if
(
ID
==
"
output
"
):
names
.
append
(
"
output
"
)
if
(
ID
==
"
input
"
):
names
.
append
(
"
input
"
)
return
names
def
get_output_nodes
(
dico
):
...
...
@@ -371,10 +375,23 @@ def get_output_nodes(dico):
for
e
in
dico
[
"
edges
"
]:
none_outputs
.
append
(
e
[
'
A
'
])
outputs
=
list
(
set
(
N
)
-
set
(
none_outputs
))
outputs_names
=
[]
for
o
in
outputs
:
outputs_names
+=
get_name_from_id
(
dico
=
dico
,
ID
=
o
)
return
outputs_names
#outputs_names = []
#for o in outputs:
# outputs_names+=get_name_from_id(dico=dico, ID=o)
return
outputs
def
get_input_nodes
(
dico
):
N
=
[]
for
n
in
dico
[
"
nodes
"
]:
N
.
append
(
n
[
'
id
'
])
none_inputs
=
[]
for
e
in
dico
[
"
edges
"
]:
none_inputs
.
append
(
e
[
'
B
'
])
inputs
=
list
(
set
(
N
)
-
set
(
none_inputs
))
#inputs_names = []
#for o in inputs:
# inputs_names+=get_name_from_id(dico=dico, ID=o)
return
inputs
def
remove_edges_with_node
(
edges
,
nodes
):
edges_without_node
=
[]
...
...
@@ -411,44 +428,202 @@ def exist_path(A, B, edges):
return
False
def
nr_path
(
n
,
r
,
dico
,
R
,
outputs
):
def
nr_path_succ
(
n
,
r
,
dico
,
R
):
rest_of_R
=
set
(
R
)
-
set
([
r
])
rest_of_R_ids
=
[]
for
r_p
in
rest_of_R
:
rest_of_R_ids
+=
get_id_from_name
(
dico
,
r_p
)
edges
=
remove_edges_with_node
(
dico
[
"
edges
"
],
rest_of_R_ids
)
for
n_ids
in
get_id_from_name
(
dico
,
n
):
for
r_ids
in
get_id_from_name
(
dico
,
r
):
if
(
exist_path
(
n_ids
,
r_ids
,
edges
)):
return
True
edges
=
remove_edges_with_node
(
dico
[
"
edges
"
],
rest_of_R
)
if
(
exist_path
(
n
,
r
,
edges
)):
return
True
return
False
def
nr_path_pred
(
r
,
n
,
dico
,
R
):
rest_of_R
=
set
(
R
)
-
set
([
r
])
edges
=
remove_edges_with_node
(
dico
[
"
edges
"
],
rest_of_R
)
if
(
exist_path
(
r
,
n
,
edges
)):
return
True
return
False
def
rSucc
(
n
,
dico
,
R
,
outputs
):
tab
=
[]
for
r
in
set
(
R
).
union
(
set
(
outputs
)):
if
(
nr_path
(
n
,
r
,
dico
,
R
,
outputs
)):
if
(
nr_path_succ
(
n
,
r
,
dico
,
R
+
list
(
outputs
))):
tab
.
append
(
r
)
return
tab
def
rSuccM
(
M
,
dico
,
R
,
outputs
):
tab
=
[]
for
n
in
M
:
tab
+=
rSucc
(
n
,
dico
,
R
,
outputs
)
return
list
(
set
(
tab
))
def
rPred
(
n
,
dico
,
R
,
inputs
):
tab
=
[]
for
r
in
set
(
R
).
union
(
set
(
inputs
)):
if
(
nr_path_pred
(
r
,
n
,
dico
,
R
+
list
(
inputs
))):
tab
.
append
(
r
)
return
tab
def
rPredM
(
M
,
dico
,
R
,
inputs
):
tab
=
[]
for
n
in
M
:
tab
+=
rPred
(
n
,
dico
,
R
,
inputs
)
return
list
(
set
(
tab
))
def
generate_subsets
(
original_set
):
# Base case: If the set is empty, return a set with the empty subset
if
not
original_set
:
return
[[]]
# Recursive step: Take one element from the set
first_element
=
original_set
[
0
]
rest_set
=
original_set
[
1
:]
# Recursively find all subsets of the remaining elements
subsets_without_first
=
generate_subsets
(
rest_set
)
# For each subset, add the first element to create new subsets
subsets_with_first
=
[
subset
+
first_element
for
subset
in
subsets_without_first
]
# Return all subsets (with and without the first element)
return
subsets_without_first
+
subsets_with_first
def
set_has_incoming_edge_different_M
(
dico
,
M
):
tab
=
[]
for
n
in
M
:
for
edge
in
dico
[
"
edges
"
]:
if
(
edge
[
'
B
'
]
==
n
and
(
edge
[
'
A
'
]
not
in
M
)):
tab
.
append
(
n
)
return
list
(
set
(
tab
))
def
set_has_outcoming_edge_different_M
(
dico
,
M
):
tab
=
[]
for
n
in
M
:
for
edge
in
dico
[
"
edges
"
]:
if
(
edge
[
'
A
'
]
==
n
and
(
edge
[
'
B
'
]
not
in
M
)):
tab
.
append
(
n
)
return
list
(
set
(
tab
))
def
get_names_tab
(
dico
,
tab
):
final
=
[]
for
group
in
tab
:
if
(
type
(
group
)
==
str
):
names
=
get_name_from_id
(
dico
,
group
)
else
:
names
=
[]
for
node
in
group
:
names
+=
get_name_from_id
(
dico
,
node
)
final
.
append
(
names
)
return
final
def
relev_user_view_builder
(
dico
,
relevant_modules
):
R
=
relevant_modules
R
=
[]
for
r
in
relevant_modules
:
R
+=
get_id_from_name
(
dico
,
r
)
outputs
=
get_output_nodes
(
dico
)
inputs
=
get_input_nodes
(
dico
)
#dico['nodes'].append({'id':"input", 'name':"input"})
#dico['nodes'].append({'id':"output", 'name':"output"})
for
out
in
outputs
:
dico
[
"
edges
"
].
append
({
'
A
'
:
out
,
'
B
'
:
'
output
'
})
#TODO remove this -> it's to replicate the one in the algortihm demo
dico
[
"
edges
"
].
append
({
'
A
'
:
get_id_from_name
(
dico
,
"
M5
"
)[
0
],
'
B
'
:
'
output
'
})
for
input
in
inputs
:
dico
[
"
edges
"
].
append
({
'
A
'
:
"
input
"
,
'
B
'
:
input
})
U
=
[]
markes_statues
=
{}
#Step 1
marked_statues
=
{}
N
=
[]
for
n
in
dico
[
"
nodes
"
]:
# marke
s
_statues[n['name']] = "marked"
N
.
append
(
n
[
'
name
'
])
# marke
d
_statues[n['name']] = "marked"
N
.
append
(
n
[
'
id
'
])
N_minus_R
=
set
(
N
)
-
set
(
R
)
for
n
in
N_minus_R
:
markes_statues
[
n
]
=
"
unmarked
"
#print(N_minus_R)
marked_statues
[
n
]
=
"
unmarked
"
#Line 3, 4 and 5
in_r
=
{}
for
r
in
R
:
in_r
[
r
]
=
[]
for
n
in
set
(
N
)
-
set
(
R
):
if
(
rSucc
(
n
,
dico
,
R
,
[
"
output
"
])
==
[
r
]):
in_r
[
r
].
append
(
n
)
marked_statues
[
n
]
=
"
marked
"
#Line 6, 7 and 8
out_r
=
{}
for
r
in
R
:
in_r
=
[]
out_r
[
r
]
=
[]
for
n
in
set
(
N
)
-
set
(
R
):
if
(
rSucc
(
n
,
dico
,
R
,
outputs
)
==
[
r
]):
in_r
.
append
(
n
)
print
(
r
,
in_r
)
\ No newline at end of file
if
(
rPred
(
n
,
dico
,
R
,
[
"
input
"
])
==
[
r
]
and
marked_statues
[
n
]
==
"
unmarked
"
):
out_r
[
r
].
append
(
n
)
marked_statues
[
n
]
=
"
marked
"
#Line 10
for
r
in
R
:
M
=
set
([
r
]).
union
(
set
(
in_r
[
r
])).
union
(
set
(
out_r
[
r
]))
U
=
set
(
U
).
union
(
M
)
#Step 2
NRC
=
[]
order
=
list
(
set
(
N
)
-
set
(
R
))
order
.
sort
()
for
n
in
order
:
if
(
marked_statues
[
n
]
==
'
unmarked
'
):
print
(
get_name_from_id
(
dico
,
n
))
def
condition_line_13
(
NRC
,
n
,
dico
,
R
,
inputs
,
outputs
):
#Ms = generate_subsets(NRC)
for
i
in
range
(
len
(
NRC
)):
M
=
NRC
[
i
]
print
(
"
M
"
,
get_names_tab
(
dico
,
M
),
"
-> rPredM
"
,
get_names_tab
(
dico
,
rPredM
(
M
,
dico
,
R
,
[
"
input
"
])))
print
(
'
n
'
,
get_name_from_id
(
dico
,
n
),
'
-> rPred
'
,
get_names_tab
(
dico
,
rPred
(
n
,
dico
,
R
,
[
'
input
'
])))
print
(
"
M
"
,
get_names_tab
(
dico
,
M
),
"
-> rSuccM
"
,
get_names_tab
(
dico
,
rSuccM
(
M
,
dico
,
R
,
[
"
output
"
])))
print
(
'
n
'
,
get_name_from_id
(
dico
,
n
),
'
-> rSucc
'
,
get_names_tab
(
dico
,
rSucc
(
n
,
dico
,
R
,
[
'
output
'
])))
print
()
if
(
rPredM
(
M
,
dico
,
R
,
[
"
input
"
])
==
rPred
(
n
,
dico
,
R
,
[
"
input
"
])
and
rSuccM
(
M
,
dico
,
R
,
[
'
output
'
])
==
rSucc
(
n
,
dico
,
R
,
[
'
output
'
])):
return
True
,
i
return
False
,
-
1
#print('n', get_name_from_id(dico, n), '-> rPred', get_names_tab(dico, rPred(n, dico, R, ['input'])))
#print('n', get_name_from_id(dico, n), '-> rSucc', get_names_tab(dico, rSucc(n, dico, R, ['output'])))
check
,
index
=
condition_line_13
(
NRC
,
n
,
dico
,
R
,
[
"
input
"
],
[
'
output
'
])
if
(
check
):
NRC
[
index
].
append
(
n
)
print
(
"
here
"
)
else
:
M
=
[
n
]
NRC
.
append
(
M
)
print
(
get_names_tab
(
dico
,
NRC
))
1
/
0
#Step 3
changes_in_NRC
=
True
while
(
changes_in_NRC
):
changes_in_NRC
=
False
temp_NRC
=
copy
.
deepcopy
(
NRC
)
for
i
in
range
(
len
(
temp_NRC
)):
M1
=
temp_NRC
[
i
]
for
y
in
range
(
len
(
temp_NRC
)):
M2
=
temp_NRC
[
y
]
if
(
i
>
y
):
M
=
M1
+
M2
#set(M1).union(set(M2))
V_minus
=
set_has_incoming_edge_different_M
(
dico
,
M
)
V_plus
=
set_has_outcoming_edge_different_M
(
dico
,
M
)
#Line 23
condition_left
,
condition_right
=
True
,
True
for
n
in
V_plus
:
if
(
rPred
(
n
,
dico
,
R
,
[
'
input
'
])
!=
rPredM
(
M
,
dico
,
R
,
[
"
input
"
])):
condition_left
=
False
for
n
in
V_minus
:
if
(
rSucc
(
n
,
dico
,
R
,
[
'
output
'
])
!=
rSuccM
(
M
,
dico
,
R
,
[
"
output
"
])):
condition_left
=
False
if
(
condition_left
and
condition_right
):
NRC
.
remove
(
M1
)
NRC
.
remove
(
M2
)
NRC
.
append
(
M
)
changes_in_NRC
=
True
tab
=
list
(
U
)
+
NRC
print
(
tab
)
print
(
get_names_tab
(
dico
,
tab
))
return
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment