Skip to content
Snippets Groups Projects

Set of commits to be tagged v0.18

Merged François LAURENT requested to merge dev into main
4 files
+ 82
39
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -24,6 +24,7 @@ else:
logging.warning("Failed to set PyCall with compiled_modules=False")
try:
from julia import TaggingBackends
from julia import PlanarLarvae
except ImportError:
logging.warning(f"TaggingBackends not found in JULIA_PROJECT={JULIA_PROJECT}; \
please see https://gitlab.pasteur.fr/nyx/TaggingBackends#recommended-installation")
@@ -443,11 +444,16 @@ run `poetry add {pkg}` from directory: \n
files = dict(files_)
return files
def prepare_labels(self, input_files):
def prepare_labels(self, input_files, allowed_file_extensions=None,
single_input=False):
if isinstance(input_files, dict):
input_files_and_labels = dict()
for parent in input_files.keys():
input_files_and_labels[parent] = self.prepare_labels(input_files[parent])
input_files_and_labels[parent] = self.prepare_labels(
input_files[parent],
single_input=single_input,
allowed_file_extensions=allowed_file_extensions,
)
return input_files_and_labels
#
from .data.labels import Labels, labels_file_extension
@@ -456,30 +462,61 @@ run `poetry add {pkg}` from directory: \n
# note: these *metadata* files are pushed by LarvaTagger.jl and form an
# undocumented mechanism to preserve metadata that are generated
# on the Julia side.
found = 0
metadata_found = 0
for file in list(input_files):
if file.name == "metadata":
input_files.remove(file)
with open(file, "r") as f:
labels.metadata = json.load(f)
if found == 1:
if metadata_found == 1:
logging.warning("multiple metadata files found")
found += 1
assert 0 < len(input_files)
# if any labels file is found, assume the other files are its data
# dependencies, and exclude the labels file from the list of input files
found = 0
for file in list(input_files):
if any([file.name.endswith(ext) for ext in labels_file_extension]):
labels.input_labels = file
input_files.remove(file)
if found == 1:
logging.warning("multiple label files found")
found += 1
metadata_found += 1
# check whether an input data file has been designated
primary_input = None
if metadata_found and 'filename' in labels.metadata.keys():
primary_input = labels.metadata['filename']
for file in input_files:
if file.name == primary_input:
primary_input = file
break
if isinstance(primary_input, str):
logging.warning(f'file not found: {primary_input}')
primary_input = None
# identify existing labels (label files only)
labels_found = 0
if primary_input is None:
for file in input_files:
if any(file.name.endswith(ext) for ext in labels_file_extension):
labels.input_labels = file
if labels_found == 1:
logging.warning("multiple label files found")
labels_found += 1
elif any(primary_input.name.endswith(ext) for ext in labels_file_extension):
labels.input_labels = primary_input
labels_found = 1
# filter out likely unsupported files
if allowed_file_extensions:
input_files = [f for f in input_files
if any(f.name.endswith(ext) for ext in allowed_file_extensions)]
# force-identify the input data files
assert 0 < len(input_files)
if single_input and primary_input is None:
primary_input = input_files[0]
logging.info(f'selecting file: {primary_input}')
input_files = [pathlib.Path(f.source)
for f in PlanarLarvae.Formats.find_associated_files(str(primary_input))]
# ensure the primary input file comes first in the list of input files
if not (primary_input is None or input_files[0] == primary_input):
input_files = [f for f in input_files if f != primary_input]
input_files.insert(0, primary_input)
#
labels.tracking = input_files
#
if not labels.metadata:
if labels.metadata:
if labels.metadata.get('date_time', None) == 'NA':
logging.debug('discarding metadata entry "date_time"')
del labels.metadata['date_time']
else:
file = input_files[0]
labels.metadata = {'filename': file.name}
#