Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ extra-dependencies = [
"pandas-stubs == 2.1.4.231227",
"types-olefile",
# For pytest types
"pytest >= 7.4.0",
"pytest >= 8.4.1",
# For check graph generation
"networkx-stubs",
]
Expand Down Expand Up @@ -207,9 +207,10 @@ extra-dependencies = [
"coverage[toml] >= 6.5",
"deepdiff >= 6.5.0",
"more-itertools >= 10.1.0",
"pytest >= 7.4.0",
"pytest-xdist >= 3.6.1",
"types-olefile"
"pluggy >= 1.6.0",
"pytest >= 8.4.1",
"pytest-xdist >= 3.8.0",
"types-olefile",
]

[tool.hatch.envs.test.scripts]
Expand All @@ -230,6 +231,7 @@ cov = [
pythonpath = "src"
markers = [
"long: mark a test that takes a long time to run",
"skip_ignore_unread_warnings: mark a test should warn for unread data - only intended to be used in to_allotrope_test.py",
]

[tool.ruff]
Expand Down
4 changes: 4 additions & 0 deletions src/allotropy/parser_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ class Vendor(Enum):
def display_name(self) -> str:
return self.get_parser().DISPLAY_NAME

@property
def unread_data_handled(self) -> bool:
return self.get_parser().UNREAD_DATA_HANDLED

@property
def release_state(self) -> ReleaseState:
return self.get_parser().RELEASE_STATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class AgilentGen5Parser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = AgilentGen5Reader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = AgilentGen5Reader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class AgilentGen5ImageParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = AgilentGen5Reader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = AgilentGen5Reader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class AgilentOpenLabCDSParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "rslt"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
structured_data = decode_data(named_file_contents.get_bytes_stream())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class AgilentTapestationAnalysisParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "xml"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class AppbioAbsoluteQParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = AppbioAbsoluteQReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = AppbioAbsoluteQReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class AppBioQuantStudioParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = AppBioQuantStudioReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def parse_data(
self, reader: AppBioQuantStudioReader, original_file_path: str
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class AppBioQuantStudioDesignandanalysisParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = DesignQuantstudioReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def parse_rt_pcr(
self, reader: DesignQuantstudioReader, original_file_path: str
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class BDFACSDivaParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "xml"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class BeckmanCoulterBiomekParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BeckmanCoulterBiomekReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BeckmanCoulterBiomekReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class BeckmanEchoPlateReformatParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BeckmanEchoPlateReformatReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BeckmanEchoPlateReformatReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class PharmSpecParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BeckmanPharmspecReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BeckmanPharmspecReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class ViCellBluParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = ViCellBluReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
return Data(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class ViCellXRParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "txt,xls,xlsx"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader_data = create_reader_data(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ def _get_file_info(self) -> SeriesData:
usecols=[0],
).squeeze()
info.index = pd.Index(["model", "filepath", "serial"])
return SeriesData(info)
data = SeriesData(info)
data.mark_read("filepath")
return data


class ViCellXRTXTReader:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class BenchlingChromeleonParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BenchlingChromeleonReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BenchlingChromeleonReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class BenchlingEmpowerParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BenchlingEmpowerReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BenchlingEmpowerReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class BioradBioplexParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "xml"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BioradBioplexReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class BmgLabtechSmartControlParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = BmgLabtechSmartControlReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BmgLabtechSmartControlReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def create_calculated_data_documents(
measurements = [group.measurements[0] for group in measurement_groups]
calc_data_measurements = []
for idx, measurement in enumerate(measurements):
corrected_value = SeriesData(reader.data.iloc[idx]).get(
corrected_value = SeriesData(reader.data.iloc[idx], ignore_unread=True).get(
float, "Blank corrected based on Raw Data (480-14/520-30)"
)
calc_data_measurements.append(
Expand Down
1 change: 1 addition & 0 deletions src/allotropy/parsers/bmg_mars/bmg_mars_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class BmgMarsParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "csv"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = BmgMarsReader(named_file_contents)
Expand Down
1 change: 1 addition & 0 deletions src/allotropy/parsers/cfxmaestro/cfxmaestro_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class CfxmaestroParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = CFXMaestroReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = CFXMaestroReader(named_file_contents)
Expand Down
7 changes: 1 addition & 6 deletions src/allotropy/parsers/cfxmaestro/cfxmaestro_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,7 @@ def create_measurement_group(
set(constants.PROCESSED_DATA_DOCUMENT_CUSTOM_KEYS)
)
# these fields are not need in the asm
data.mark_read(
{
"Cq Mean",
"Unnamed: 0",
}
)
data.mark_read({"Cq Mean", "Unnamed: 0"})
measurements.append(
Measurement(
# Measurement metadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class ChemometecNcViewParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = ChemometecNcViewReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = ChemometecNcViewReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class ChemometecNucleoviewParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = NucleoviewReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
df = NucleoviewReader.read(named_file_contents.contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class CtlImmunospotParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = CtlImmunospotReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = CtlImmunospotReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class CytivaBiacoreT200ControlParser(VendorParser[MapperData, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "blr"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> MapperData:
data = Data.create(decode_data(named_file_contents))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class CytivaUnicornParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "zip"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
handler = UnicornZipHandler(named_file_contents.get_bytes_stream())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class ExampleWeylandYutaniParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.WORKING_DRAFT
SUPPORTED_EXTENSIONS = ExampleWeylandYutaniReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = ExampleWeylandYutaniReader(named_file_contents)
Expand Down
1 change: 1 addition & 0 deletions src/allotropy/parsers/flowjo/flowjo_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class FlowjoParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "wsp"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class LuminexIntelliflexParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = LuminexXponentReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = LuminexXponentReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class LuminexXponentParser(VendorParser[MapperData, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = LuminexXponentReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> MapperData:
reader = LuminexXponentReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class MabtechApexParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = MabtechApexReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = MabtechApexReader.create(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class MethodicalMindParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "txt"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = MethodicalMindReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class SoftmaxproParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "txt"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
lines = read_to_lines(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class MSDWorkbenchParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = MSDWorkbenchReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
if named_file_contents.extension == "txt":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class NovaBioFlexParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "csv"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class PerkinElmerEnvisionParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = "csv"
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
lines = read_to_lines(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class QiacuitydPCRParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = QiacuitydPCRReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = QiacuitydPCRReader(named_file_contents)
Expand Down
1 change: 1 addition & 0 deletions src/allotropy/parsers/revvity_kaleido/kaleido_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class KaleidoParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SCHEMA_MAPPER = Mapper
SUPPORTED_EXTENSIONS = "csv"
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
data = create_data(CsvReader(read_to_lines(named_file_contents)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class RevvityMatrixParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = RevvityMatrixReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = RevvityMatrixReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class RocheCedexBiohtParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = RocheCedexBiohtReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = RocheCedexBiohtReader(named_file_contents.contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class RocheCedexHiResParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = RocheCedexHiResReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = True

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = RocheCedexHiResReader(named_file_contents)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class TecanMagellanParser(VendorParser[Data, Model]):
RELEASE_STATE = ReleaseState.RECOMMENDED
SUPPORTED_EXTENSIONS = TecanMagellanReader.SUPPORTED_EXTENSIONS
SCHEMA_MAPPER = Mapper
UNREAD_DATA_HANDLED = False

def create_data(self, named_file_contents: NamedFileContents) -> Data:
reader = TecanMagellanReader(named_file_contents)
Expand Down
Loading
Loading