Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
Inflow
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Package Registry
Model registry
Operate
Terraform modules
Analyze
Contributor 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
HaissLab
Analysis Packages
Inflow
Commits
1cf876a6
Commit
1cf876a6
authored
1 year ago
by
Timothe Jost
Browse files
Options
Downloads
Patches
Plain Diff
updating pipelining multisession packing
parent
af66d438
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
Inflow/__init__.py
+1
-1
1 addition, 1 deletion
Inflow/__init__.py
Inflow/core/pipelining.py
+67
-33
67 additions, 33 deletions
Inflow/core/pipelining.py
Inflow/ios/helpers.py
+1
-28
1 addition, 28 deletions
Inflow/ios/helpers.py
Inflow/ios/load.py
+0
-39
0 additions, 39 deletions
Inflow/ios/load.py
with
69 additions
and
101 deletions
Inflow/__init__.py
+
1
−
1
View file @
1cf876a6
__version__
=
"
1.1.2
8
"
__version__
=
"
1.1.2
9
"
def
ask_for_session_label_gui
():
import
tkinter
as
tk
...
...
This diff is collapsed.
Click to expand it.
Inflow/core/pipelining.py
+
67
−
33
View file @
1cf876a6
...
...
@@ -13,7 +13,7 @@ import inspect
from
.logging
import
get_local_logger
,
LogSession
,
session_log_decorator
from
..ios.load
import
preprocessed_data
as
load_preprocessed_data
from
..ios.save
import
preprocessed_data
as
save_preprocessed_data
from
..ios.helpers
import
get_preprocessed_filename
,
get_multi_session_df
from
..ios.helpers
import
get_preprocessed_filename
from
.optimization
import
job_context_decorator
class
Pipelines
:
...
...
@@ -264,37 +264,13 @@ class MultisessionGetter:
@staticmethod
def
multisession_getter
(
function
):
def
multisession_wrapper
(
sessions
,
*
args
,
add_session_level
=
False
,
**
kwargs
):
if
add_session_level
:
multi_session_data
=
{}
for
_
,
session
in
sessions
.
iterrows
():
with
LogSession
(
session
):
multi_session_data
[
session
.
u_alias
]
=
function
(
*
args
,
session_details
=
session
,
**
kwargs
)
if
isinstance
(
multi_session_data
[
list
(
multi_session_data
.
keys
())[
0
]],
pd
.
core
.
frame
.
DataFrame
,
):
multi_session_data
=
get_multi_session_df
(
multi_session_data
.
values
(),
multi_session_data
.
keys
()
)
else
:
multi_session_data
=
[]
for
_
,
session
in
sessions
.
iterrows
():
with
LogSession
(
session
):
session_data
=
function
(
*
args
,
session_details
=
session
,
**
kwargs
)
session_data
.
index
=
MultisessionGetter
.
merge_index
(
session_data
.
index
,
session
)
session_data
.
loc
[:,
"
session#
"
]
=
session
.
u_alias
multi_session_data
.
append
(
session_data
)
multi_session_data
=
pd
.
concat
(
multi_session_data
)
return
multi_session_data
multi_session_data
=
{}
for
_
,
session
in
sessions
.
iterrows
():
with
LogSession
(
session
):
multi_session_data
[
session
.
u_alias
]
=
function
(
session
,
*
args
,
**
kwargs
)
return
MultisessionGetter
.
aggregate_multisession_data
(
multi_session_data
,
add_session_level
=
add_session_level
)
return
multisession_wrapper
...
...
@@ -314,8 +290,13 @@ class MultisessionGetter:
@staticmethod
def
multisession_generater
(
function
):
def
multisession_wrapper
(
*
args
,
**
kwargs
):
raise
NotImplementedError
def
multisession_wrapper
(
sessions
,
*
args
,
add_session_level
=
False
,
**
kwargs
):
multi_session_data
=
{}
for
_
,
session
in
sessions
.
iterrows
():
with
LogSession
(
session
):
multi_session_data
[
session
.
u_alias
]
=
function
(
session
,
*
args
,
**
kwargs
)
return
MultisessionGetter
.
aggregate_multisession_data
(
multi_session_data
,
add_session_level
=
add_session_level
)
return
multisession_wrapper
...
...
@@ -342,6 +323,59 @@ class MultisessionGetter:
return
pd
.
MultiIndex
.
from_tuples
(
new_index
,
names
=
index
.
names
)
return
pd
.
Index
(
new_index
,
name
=
index
.
name
)
@staticmethod
def
aggregate_multisession_data
(
multisession_data_dict
,
add_session_level
=
False
):
are_dataframe
=
[
isinstance
(
item
,
pd
.
core
.
frame
.
DataFrame
)
for
item
in
multisession_data_dict
.
values
()]
if
not
all
(
are_dataframe
):
return
multisession_data_dict
return
MultisessionGetter
.
get_multi_session_df
(
multisession_data_dict
,
add_session_level
=
add_session_level
)
@staticmethod
def
get_multi_session_df
(
multisession_data_dict
,
add_session_level
=
False
):
dataframes
=
[]
for
session_name
,
dataframe
in
multisession_data_dict
.
items
()
:
level_names
=
list
(
dataframe
.
index
.
names
)
dataframe
=
dataframe
.
reset_index
()
if
add_session_level
:
dataframe
[
"
session#
"
]
=
[
session_name
]
*
len
(
dataframe
)
dataframe
=
dataframe
.
set_index
([
"
session#
"
]
+
level_names
,
inplace
=
False
)
else
:
level_0_copy
=
dataframe
[
level_names
[
0
]
].
copy
()
dataframe
[
level_names
[
0
].
replace
(
"
#
"
,
""
)
]
=
level_0_copy
dataframe
[
"
session
"
]
=
[
session_name
]
*
len
(
dataframe
)
dataframe
[
level_names
[
0
]
]
=
dataframe
[
level_names
[
0
]
].
apply
(
MultisessionGetter
.
merge_index_element
,
session_name
=
session_name
)
dataframe
=
dataframe
.
set_index
(
level_names
)
dataframes
.
append
(
dataframe
)
multisession_dataframe
=
pd
.
concat
(
dataframes
)
return
multisession_dataframe
@staticmethod
def
merge_index_element
(
values
,
session_name
):
if
not
isinstance
(
values
,
tuple
):
values
=
(
values
,)
new_values
=
[]
for
value
in
values
:
value
=
str
(
value
)
+
"
_
"
+
session_name
new_values
.
append
(
value
)
if
len
(
new_values
)
==
1
:
return
new_values
[
0
]
return
tuple
(
new_values
)
def
load_preprocessing
(
func
,
getter
,
checker
,
block_name
=
"
<pipeline_block>
"
...
...
This diff is collapsed.
Click to expand it.
Inflow/ios/helpers.py
+
1
−
28
View file @
1cf876a6
...
...
@@ -12,7 +12,6 @@ from ..core.logging import get_local_logger
import
os
import
pandas
as
pd
#@session_to_path_argument(0,"session_details")
def
get_suite2p_path
(
session_details
,
collection
=
"
suite2p
"
,
plane
=
0
,
file
=
r
"
.*\.npy$
"
):
#collection allow to force finding only in a give subfolder of the session_path
if
not
isinstance
(
collection
,(
tuple
,
list
)):
...
...
@@ -21,11 +20,6 @@ def get_suite2p_path(session_details, collection = "suite2p", plane = 0, file =
return
findfiles
(
os
.
path
.
join
(
session_details
.
path
,
*
collection
),
re_pattern
=
fr
"
plane
{
plane
}
\\
{
file
}
"
)
except
FileNotFoundError
:
return
[]
# def get_suite2p_binpath(session_details, collection = "", plane = 0):
# if not isinstance(collection,(list,tuple)):
# collection = [collection]
# return findfiles(os.path.join(session_details,*collection),re_pattern = fr"plane{plane}\\data(?:_chan\d+)?\.bin$")
def
get_preprocessed_filename
(
session_details
,
alf_identifier
,
extra
=
""
,
collection
=
"
preprocessing_saves
"
,
makedirs
=
False
):
if
extra
is
None
or
extra
==
""
:
...
...
@@ -53,25 +47,4 @@ def cast_preprocessed_file_to_revision(session_details, alf_identifier, extra =
logger
.
debug
(
f
"
Newly revised file path :
{
new_file_name
}
"
)
os
.
rename
(
filename
,
new_file_name
)
else
:
raise
OSError
(
f
"
File
{
filename
}
does not exist, cannot cast file to revision
"
)
# def get_endresults_filenames(session_details, makedirs = False):
# filenames = {}
# possible_end_results = {"rois_df":{"collections":"end_results"},
# "trials_df":{"collections":"end_results"},
# "trials_roi_df":{"collections":"end_results"}
# }
# for end_result_name in possible_end_results.keys() :
# filenames[end_result_name] = get_preprocessed_filename(session_details,
# f"{end_result_name}_{session_details.u_alias}",
# collections = possible_end_results[end_result_name]["collections"],
# makedirs = makedirs)
# return filenames
def
get_multi_session_df
(
dataframe_list
,
session_short_names_list
):
multindex_list
=
[]
for
dataframe
,
session_name
in
zip
(
dataframe_list
,
session_short_names_list
)
:
index_tuples
=
[
(
session_name
,)
+
item
if
hasattr
(
item
,
"
index
"
)
else
(
session_name
,
item
)
for
item
in
dataframe
.
index
]
index_names
=
[
"
session#
"
]
+
list
(
dataframe
.
index
.
names
)
multindex_list
.
append
(
pd
.
MultiIndex
.
from_tuples
(
index_tuples
,
names
=
index_names
))
return
pd
.
concat
(
[
dataframe
.
set_index
(
multindex
,
inplace
=
False
)
for
dataframe
,
multindex
in
zip
(
dataframe_list
,
multindex_list
)
]
)
\ No newline at end of file
raise
OSError
(
f
"
File
{
filename
}
does not exist, cannot cast file to revision
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Inflow/ios/load.py
+
0
−
39
View file @
1cf876a6
...
...
@@ -14,8 +14,6 @@ from ..core.decorators import hide_unused_kwargs
from
..core.special_types
import
AttrDict
from
.helpers
import
(
get_preprocessed_filename
,
#get_endresults_filenames,
get_multi_session_df
,
get_suite2p_path
,
)
import
numpy
as
np
,
pandas
as
pd
,
pickle
,
os
...
...
@@ -234,43 +232,6 @@ def mat_file(filepath):
_recursively_add_key
(
result
,
filehandle
)
return
result
# def pipeline_end_result(session_details):
# local_log = get_local_logger()
# if isinstance(session_details, pd.core.frame.DataFrame):
# multi_session_data = AttrDict()
# for _, session in session_details.iterrows():
# multi_session_data[session.u_alias] = pipeline_end_result(session)
# multi_session_data = pd.DataFrame.from_dict(multi_session_data, orient="index")
# results = AttrDict()
# for column_name in multi_session_data.columns:
# results[column_name] = get_multi_session_df(
# multi_session_data[column_name].tolist(),
# multi_session_data.index.tolist(),
# )
# return results
# else:
# filenames = get_endresults_filenames(session_details)
# kept_files = {
# key: value for key, value in filenames.items() if os.path.isfile(value)
# }
# local_log.load_info(
# f"About to load len(kept_files) pandas table files from {[file for file in kept_files.values()]}"
# )
# results = AttrDict()
# for itemname, filename in kept_files.items():
# results[itemname] = pd.read_pickle(filename)
# local_log.load_info("Loading successfull")
# return results
def
commented_json_file
(
json_file
):
with
open
(
json_file
,
"
r
"
)
as
file
:
json_string
=
file
.
read
()
...
...
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