1212 BackgroundRun ,
1313 Choppers ,
1414 DetectorData ,
15+ EmptyBeamRun ,
1516 Filename ,
1617 Monitor1 ,
1718 Monitor2 ,
1819 Monitor3 ,
1920 MonitorData ,
21+ MonitorType ,
2022 NeXusComponentLocationSpec ,
2123 NeXusName ,
2224 NeXusTransformation ,
25+ RunType ,
2326 SampleRun ,
2427 TimeInterval ,
28+ TransmissionMonitor ,
2529)
2630from ess .reduce .nexus .workflow import (
2731 GenericNeXusWorkflow ,
@@ -574,16 +578,11 @@ def test_generic_nexus_workflow_load_analyzers() -> None:
574578 assert analyzer ['usage' ] == 'Bragg'
575579
576580
577- def test_generic_nexus_workflow_raises_if_monitor_types_but_not_run_types_given () -> (
578- None
579- ):
580- with pytest .raises (ValueError , match = 'run_types' ):
581- GenericNeXusWorkflow (monitor_types = [Monitor1 ])
582-
583-
584581def test_generic_nexus_workflow_includes_only_given_run_and_monitor_types () -> None :
585582 wf = GenericNeXusWorkflow (run_types = [SampleRun ], monitor_types = [Monitor1 , Monitor3 ])
586583 graph = wf .underlying_graph
584+
585+ # Check some examples to avoid relying entirely on complicated loops below.
587586 assert DetectorData [SampleRun ] in graph
588587 assert DetectorData [BackgroundRun ] not in graph
589588 assert MonitorData [SampleRun , Monitor1 ] in graph
@@ -592,7 +591,11 @@ def test_generic_nexus_workflow_includes_only_given_run_and_monitor_types() -> N
592591 assert MonitorData [BackgroundRun , Monitor1 ] not in graph
593592 assert MonitorData [BackgroundRun , Monitor2 ] not in graph
594593 assert MonitorData [BackgroundRun , Monitor3 ] not in graph
595- # Many other keys are also removed, this is just an example
594+ assert Choppers [SampleRun ] in graph
595+ assert Choppers [BackgroundRun ] not in graph
596+ assert Analyzers [SampleRun ] in graph
597+ assert Analyzers [BackgroundRun ] not in graph
598+
596599 assert NeXusComponentLocationSpec [Monitor1 , SampleRun ] in graph
597600 assert NeXusComponentLocationSpec [Monitor2 , SampleRun ] not in graph
598601 assert NeXusComponentLocationSpec [Monitor3 , SampleRun ] in graph
@@ -605,3 +608,66 @@ def test_generic_nexus_workflow_includes_only_given_run_and_monitor_types() -> N
605608 assert NeXusComponentLocationSpec [snx .NXdetector , BackgroundRun ] not in graph
606609 assert NeXusComponentLocationSpec [snx .NXsample , BackgroundRun ] not in graph
607610 assert NeXusComponentLocationSpec [snx .NXsource , BackgroundRun ] not in graph
611+
612+ excluded_run_types = set (RunType .__constraints__ ) - {SampleRun }
613+ excluded_monitor_types = set (MonitorType .__constraints__ ) - {Monitor1 , Monitor3 }
614+ for node in graph :
615+ assert_not_contains_type_arg (node , excluded_run_types )
616+ assert_not_contains_type_arg (node , excluded_monitor_types )
617+
618+
619+ def test_generic_nexus_workflow_includes_only_given_run_types () -> None :
620+ wf = GenericNeXusWorkflow (run_types = [EmptyBeamRun ])
621+ graph = wf .underlying_graph
622+
623+ # Check some examples to avoid relying entirely on complicated loops below.
624+ assert DetectorData [EmptyBeamRun ] in graph
625+ assert DetectorData [SampleRun ] not in graph
626+ assert MonitorData [EmptyBeamRun , Monitor1 ] in graph
627+ assert MonitorData [EmptyBeamRun , Monitor2 ] in graph
628+ assert MonitorData [EmptyBeamRun , Monitor3 ] in graph
629+ assert MonitorData [SampleRun , Monitor1 ] not in graph
630+ assert MonitorData [SampleRun , Monitor2 ] not in graph
631+ assert MonitorData [SampleRun , Monitor3 ] not in graph
632+ assert Choppers [EmptyBeamRun ] in graph
633+ assert Choppers [SampleRun ] not in graph
634+ assert Analyzers [EmptyBeamRun ] in graph
635+ assert Analyzers [SampleRun ] not in graph
636+
637+ excluded_run_types = set (RunType .__constraints__ ) - {EmptyBeamRun }
638+ for node in graph :
639+ assert_not_contains_type_arg (node , excluded_run_types )
640+
641+
642+ def test_generic_nexus_workflow_includes_only_given_monitor_types () -> None :
643+ wf = GenericNeXusWorkflow (monitor_types = [TransmissionMonitor , Monitor1 ])
644+ graph = wf .underlying_graph
645+
646+ # Check some examples to avoid relying entirely on complicated loops below.
647+ assert DetectorData [SampleRun ] in graph
648+ assert DetectorData [BackgroundRun ] in graph
649+ assert MonitorData [SampleRun , TransmissionMonitor ] in graph
650+ assert MonitorData [SampleRun , Monitor1 ] in graph
651+ assert MonitorData [SampleRun , Monitor2 ] not in graph
652+ assert MonitorData [SampleRun , Monitor3 ] not in graph
653+ assert MonitorData [BackgroundRun , TransmissionMonitor ] in graph
654+ assert MonitorData [BackgroundRun , Monitor1 ] in graph
655+ assert MonitorData [BackgroundRun , Monitor2 ] not in graph
656+ assert MonitorData [BackgroundRun , Monitor3 ] not in graph
657+ assert Choppers [SampleRun ] in graph
658+ assert Choppers [BackgroundRun ] in graph
659+ assert Analyzers [SampleRun ] in graph
660+ assert Analyzers [BackgroundRun ] in graph
661+
662+ excluded_monitor_types = set (MonitorType .__constraints__ ) - {
663+ Monitor1 ,
664+ TransmissionMonitor ,
665+ }
666+ for node in graph :
667+ assert_not_contains_type_arg (node , excluded_monitor_types )
668+
669+
670+ def assert_not_contains_type_arg (node : object , excluded : set [type ]) -> None :
671+ assert not any (
672+ arg in excluded for arg in getattr (node , "__args__" , ())
673+ ), f"Node { node } contains one of { excluded !r} "
0 commit comments