def test_nxobject_getting_item_that_does_not_exists_raises_KeyError( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: root = nexus.NXroot(f, loader) with pytest.raises(KeyError): root['abcde']
def test_nxobject_grandchild_can_be_accessed_using_path( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: root = nexus.NXroot(f, loader) assert root['entry/log'].name == '/entry/log' assert root['/entry/log'].name == '/entry/log'
def test_field_properties(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset'] assert field.dtype == np.array(1).dtype assert field.name == '/entry/events_0/event_time_offset' assert field.shape == (6, ) assert field.unit == sc.Unit('ns')
def test_raises_if_no_data_found(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group builder = NexusBuilder() builder.add_detector(Detector(detector_numbers=np.array([1, 2, 3, 4]))) with resource(builder)() as f: detector = nexus.NXroot(f, loader)['entry/detector_0'] with pytest.raises(KeyError): detector[...]
def test_nxobject_event_data(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: event_data = nexus.NXroot(f, loader)['entry']['events_0'] assert set(event_data.keys()) == set([ 'event_id', 'event_index', 'event_time_offset', 'event_time_zero' ]) assert event_data.nx_class == nexus.NX_class.NXevent_data
def test_event_mode_monitor_without_event_id_can_be_loaded( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource( builder_with_events_and_events_monitor_without_event_id())() as f: monitor = nexus.NXroot(f, loader)['monitor'] da = monitor[...] assert len(da.bins.coords) == 1 assert 'event_time_offset' in da.bins.coords
def test_nxobject_name_property_is_full_path( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: root = nexus.NXroot(f, loader) assert root.name == '/' assert root['monitor'].name == '/monitor' assert root['entry'].name == '/entry' assert root['entry']['log'].name == '/entry/log' assert root['entry']['events_0'].name == '/entry/events_0'
def test_nxobject_by_nx_class_contains_only_children( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: root = nexus.NXroot(f, loader) classes = root['entry'].by_nx_class() assert list(classes[nexus.NX_class.NXentry]) == [] assert list(classes[nexus.NX_class.NXmonitor]) == [] assert list(classes[nexus.NX_class.NXlog]) == ['log'] assert set(classes[nexus.NX_class.NXevent_data]) == set( ['events_0', 'events_1'])
def test_field_getitem_returns_numpy_array_with_correct_size_and_values( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset'] assert np.array_equal( field[...], np.array([456, 743, 347, 345, 632, 23], dtype='int64')) assert np.array_equal( field[1:], np.array([743, 347, 345, 632, 23], dtype='int64')) assert np.array_equal( field[:-1], np.array([456, 743, 347, 345, 632], dtype='int64'))
def test_loads_data_with_coords(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group builder = NexusBuilder() da = sc.DataArray( sc.array(dims=['xx', 'yy'], unit='K', values=[[1.1, 2.2], [3.3, 4.4]])) da.coords['xx'] = sc.array(dims=['xx'], unit='m', values=[0.1, 0.2]) builder.add_detector( Detector(detector_numbers=np.array([1, 2, 3, 4]), data=da)) with resource(builder)() as f: detector = nexus.NXroot(f, loader)['entry/detector_0'] loaded = detector[...] assert sc.identical(loaded, da.rename_dims({'yy': 'dim_1'}))
def test_nxobject_monitor(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: monitor = nexus.NXroot(f, loader)['monitor'] assert monitor.nx_class == nexus.NX_class.NXmonitor assert sc.identical( monitor[...], sc.DataArray(sc.array(dims=['time_of_flight'], values=[1.0]), coords={ 'time_of_flight': sc.array(dims=['time_of_flight'], values=[1.0]) }))
def test_nxobject_log(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: log = nexus.NXroot(f, loader)['entry']['log'] assert log.nx_class == nexus.NX_class.NXlog assert sc.identical( log[...], sc.DataArray( sc.array(dims=['time'], values=[1.1, 2.2, 3.3]), coords={ 'time': sc.epoch(unit='ns') + sc.array( dims=['time'], unit='s', values=[4.4, 5.5, 6.6]).to( unit='ns', dtype='int64') }))
def test_raises_if_data_and_event_data_found( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group da = sc.DataArray( sc.array(dims=['xx', 'yy'], values=[[1.1, 2.2], [3.3, 4.4]])) event_data = EventData( event_id=np.array([1, 2, 4, 1, 2, 2]), event_time_offset=np.array([456, 743, 347, 345, 632, 23]), event_time_zero=np.array([1, 2, 3, 4]), event_index=np.array([0, 3, 3, 5]), ) builder = NexusBuilder() builder.add_detector( Detector(detector_numbers=np.array([1, 2, 3, 4]), data=da, event_data=event_data)) with resource(builder)() as f: detector = nexus.NXroot(f, loader)['entry/detector_0'] with pytest.raises(nexus.NexusStructureError): detector[...]
def test_negative_event_index_converted_to_num_event( nexus_group: Tuple[Callable, LoadFromNexus]): event_time_offsets = np.array([456, 743, 347, 345, 632, 23]) event_data = EventData( event_id=np.array([1, 2, 3, 1, 3, 2]), event_time_offset=event_time_offsets, event_time_zero=np.array([ 1600766730000000000, 1600766731000000000, 1600766732000000000, 1600766733000000000 ]), event_index=np.array([0, 3, 3, -1000]), ) builder = NexusBuilder() builder.add_event_data(event_data) resource, loader = nexus_group with resource(builder)() as f: root = nexus.NXroot(f, loader) events = root['entry/events_0'][...] assert events.bins.size().values[2] == 3 assert events.bins.size().values[3] == 0
def test_loading_event_data_creates_automatic_detector_numbers_if_not_present_in_file( nexus_group: Tuple[Callable, LoadFromNexus]): event_time_offsets = np.array([456, 743, 347, 345, 632, 23]) event_data = EventData( event_id=np.array([1, 2, 4, 1, 2, 2]), event_time_offset=event_time_offsets, event_time_zero=np.array([1, 2, 3]), event_index=np.array([0, 3, 5]), ) builder = NexusBuilder() builder.add_detector(Detector(event_data=event_data)) resource, loader = nexus_group with resource(builder)() as f: detector = nexus.NXroot(f, loader)['entry/detector_0'] assert detector.dims == ['detector_number'] with pytest.raises(nexus.NexusStructureError): assert detector.shape == (4, ) loaded = detector[...] assert sc.identical( loaded.bins.size().data, sc.array(dims=['detector_number'], dtype='int64', values=[2, 3, 0, 1]))
def test_loads_event_data_mapped_to_detector_numbers_based_on_their_event_id( nexus_group: Tuple[Callable, LoadFromNexus]): event_time_offsets = np.array([456, 743, 347, 345, 632, 23]) event_data = EventData( event_id=np.array([1, 2, 3, 1, 2, 2]), event_time_offset=event_time_offsets, event_time_zero=np.array([1, 2, 3, 4]), event_index=np.array([0, 3, 3, 5]), ) builder = NexusBuilder() builder.add_detector( Detector(detector_numbers=np.array([1, 2, 3, 4]), event_data=event_data)) resource, loader = nexus_group with resource(builder)() as f: detector = nexus.NXroot(f, loader)['entry/detector_0'] assert detector.dims == ['detector_number'] assert detector.shape == (4, ) loaded = detector[...] assert sc.identical( loaded.bins.size().data, sc.array(dims=['detector_number'], dtype='int64', values=[2, 3, 1, 0]))
def test_nxobject_entry(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: entry = nexus.NXroot(f, loader)['entry'] assert entry.nx_class == nexus.NX_class.NXentry assert set(entry.keys()) == {'events_0', 'events_1', 'log'}
def test_nxobject_root(nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: root = nexus.NXroot(f, loader) assert root.nx_class == nexus.NX_class.NXroot assert set(root.keys()) == {'entry', 'monitor'}
def test_field_unit_is_none_if_no_units_attribute( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: field = nexus.NXroot(f, loader)['entry/log'] assert field.unit is None
def test_nxobject_dataset_items_are_returned_as_Field( nexus_group: Tuple[Callable, LoadFromNexus]): resource, loader = nexus_group with resource(builder_with_events_monitor_and_log())() as f: field = nexus.NXroot(f, loader)['entry/events_0/event_time_offset'] assert isinstance(field, nexus.Field)