From 218e8d941332bca24510c2eda75e31c3e2c928fc Mon Sep 17 00:00:00 2001 From: Remi Gau Date: Fri, 30 Aug 2024 10:49:59 +0200 Subject: [PATCH] improve --- src/schema/rules/checks/asl.yaml | 10 ++--- src/schema/rules/checks/micr.yaml | 8 ++-- .../bidsschematools/tests/test_expressions.py | 41 +++++++++++++++---- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/schema/rules/checks/asl.yaml b/src/schema/rules/checks/asl.yaml index 1b42593212..2ae11ebeb0 100644 --- a/src/schema/rules/checks/asl.yaml +++ b/src/schema/rules/checks/asl.yaml @@ -196,21 +196,21 @@ ASLBackgroundSuppressionNumberPulses: - length(sidecar.BackgroundSuppressionPulseTime) == sidecar.BackgroundSuppressionNumberPulses # 181 -ASLTotalAcquiredVolumesASLContextLength: +ASLTotalAcquiredPairsASLContextLength: issue: code: TOTAL_ACQUIRED_VOLUMES_NOT_CONSISTENT message: | - The number of values for 'TotalAcquiredVolumes' for this file does not match number of + The number of values for 'TotalAcquiredPairs' for this file does not match number of volumes in the associated 'aslcontext.tsv'. - 'TotalAcquiredVolumes' is the original number of 3D volumes acquired for each volume defined in the + 'TotalAcquiredPairs' is the original number of 3D volumes acquired for each volume defined in the associated 'aslcontext.tsv'. level: warning selectors: - suffix == "asl" - type(associations.aslcontext) != "null" - - '"TotalAcquiredVolumes" in sidecar' + - '"TotalAcquiredPairs" in sidecar' checks: - - aslcontext.n_rows == sidecar.TotalAcquiredVolumes + - aslcontext.n_rows == sidecar.TotalAcquiredPairs # 184 PostLabelingDelayGreater: diff --git a/src/schema/rules/checks/micr.yaml b/src/schema/rules/checks/micr.yaml index bf2f4c55c3..7e78ab905a 100644 --- a/src/schema/rules/checks/micr.yaml +++ b/src/schema/rules/checks/micr.yaml @@ -10,17 +10,17 @@ PixelSizeInconsistent: selectors: - ome != null - sidecar.PixelSize != null - - sidecar.PixelSizeUnit != null + - sidecar.PixelSizeUnits != null checks: - | ome.PhysicalSizeX * 10 ** (-3 * index(["mm", "um", "nm"], ome.PhysicalSizeXUnit)) - == sidecar.PixelSize[0] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnit)) + == sidecar.PixelSize[0] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnits)) - | ome.PhysicalSizeY * 10 ** (-3 * index(["mm", "um", "nm"], ome.PhysicalSizeYUnit)) - == sidecar.PixelSize[1] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnit)) + == sidecar.PixelSize[1] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnits)) - | ome.PhysicalSizeZ * 10 ** (-3 * index(["mm", "um", "nm"], ome.PhysicalSizeZUnit)) - == sidecar.PixelSize[2] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnit)) + == sidecar.PixelSize[2] * 10 ** (-3 * index(["mm", "um", "nm"], sidecar.PixelSizeUnits)) # 227 InconsistentTiffExtension: diff --git a/tools/schemacode/bidsschematools/tests/test_expressions.py b/tools/schemacode/bidsschematools/tests/test_expressions.py index 6370468453..3c32cda023 100644 --- a/tools/schemacode/bidsschematools/tests/test_expressions.py +++ b/tools/schemacode/bidsschematools/tests/test_expressions.py @@ -1,7 +1,16 @@ import pytest from pyparsing.exceptions import ParseException -from ..expressions import Array, ASTNode, BinOp, Function, Property, expression +from ..expressions import ( + Array, + ASTNode, + BinOp, + Element, + Function, + Property, + RightOp, + expression, +) def test_schema_expressions(schema_obj): @@ -97,13 +106,29 @@ def check_fields(schema_obj, rules, keys): for rule in rules[key]: ast = expression.parse_string(rule)[0] if isinstance(ast, BinOp): - for half in [ast.lh, ast.rh]: - if isinstance(half, Function): - check_function(schema_obj, half) + check_binop(schema_obj, ast) elif isinstance(ast, Function): check_function(schema_obj, ast) elif isinstance(ast, Property): check_property(schema_obj, ast) + elif isinstance(ast, RightOp): + check_half(schema_obj, ast.rh) + + +def check_binop(schema_obj, binop): + for half in [binop.lh, binop.rh]: + check_half(schema_obj, half) + + +def check_half(schema_obj, half): + if isinstance(half, BinOp): + check_binop(schema_obj, half) + elif isinstance(half, Function): + check_function(schema_obj, half) + elif isinstance(half, Property): + check_property(schema_obj, half) + elif isinstance(half, Element): + check_property(schema_obj, half.name) def check_function(schema_obj, function): @@ -117,11 +142,9 @@ def check_function(schema_obj, function): def check_array(schema_obj, array): - ( - check_property(schema_obj, element) - for element in array.elements - if isinstance(element, Property) - ) + for element in array.elements: + if isinstance(element, Property): + check_property(schema_obj, element) def check_property(schema_obj, property):