def test_that_add_states_to_pmds(self): self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 0) states = {0: get_example_state(), 1: get_example_state()} pms = PropertyManagerService() pms.add_states_to_pmds(states) self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 2) self._remove_all_property_managers()
def test_that_add_states_to_pmds(self): self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 0) states = {0: get_example_state(), 1: get_example_state()} pms = PropertyManagerService() pms.add_states_to_pmds(states) self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 2) self._remove_all_property_managers()
def test_that_does_not_delete_pms_which_are_not_sans(self): property_manager = self._get_property_manager() PropertyManagerDataService.addOrReplace("test", property_manager) pms = PropertyManagerService() pms.remove_sans_property_managers() self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 1) self._remove_all_property_managers()
def test_that_does_not_delete_pms_which_are_not_sans(self): property_manager = self._get_property_manager() PropertyManagerDataService.addOrReplace("test", property_manager) pms = PropertyManagerService() pms.remove_sans_property_managers() self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 1) self._remove_all_property_managers()
def remove_sans_property_managers(self): property_manager_names_to_delete = [] for name in PropertyManagerDataService.getObjectNames(): if name.startswith(self.sans_property_manager_prefix): property_manager_names_to_delete.append(name) for element in property_manager_names_to_delete: PropertyManagerDataService.remove(element)
def test_that_removes_sans_property_managers_from_pmds(self): self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 0) states = {0: get_example_state(), 1: get_example_state()} pms = PropertyManagerService() pms.add_states_to_pmds(states) pms.remove_sans_property_managers() self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 0) self._remove_all_property_managers()
def test_that_can_retrieve_states_from_pmds(self): self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 0) states = {0: get_example_state(), 1: get_example_state()} pms = PropertyManagerService() pms.add_states_to_pmds(states) retrieved_states = pms.get_states_from_pmds() self.assertEqual(len(retrieved_states), 2) self.assertTrue(isinstance(retrieved_states[0], type(states[0]))) self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 2) self._remove_all_property_managers()
def test_that_can_retrieve_states_from_pmds(self): self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 0) states = {0: get_example_state(), 1: get_example_state()} pms = PropertyManagerService() pms.add_states_to_pmds(states) retrieved_states = pms.get_states_from_pmds() self.assertTrue(len(retrieved_states) == 2) self.assertTrue(isinstance(retrieved_states[0], type(states[0]))) self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 2) self._remove_all_property_managers()
def get_states_from_pmds(self): # 1. Find all sans state names sans_property_managers = {} for name in PropertyManagerDataService.getObjectNames(): if name.startswith(self.sans_property_manager_prefix): property_manager = PropertyManagerDataService.retrieve(name) index = self._get_index_from_name(name) sans_property_managers.update({index: property_manager}) # 2. Convert property managers to states states_map = self._convert_property_manager_to_state(sans_property_managers) # 3. Create a sequence container return self._get_states_list(states_map)
def test_cache(self): fname = "PG3_46577.nxs.h5" props = PropertyManagerDataService.retrieve("props") cachedirs = [tempfile.gettempdir()] * 3 abs_s, _ = absorptioncorrutils.calculate_absorption_correction( fname, "SampleOnly", props, "Si", 1.165, element_size=2, cache_dirs=cachedirs, ) self.assertIsNotNone(abs_s) abs_s, _ = absorptioncorrutils.calculate_absorption_correction( fname, "SampleOnly", props, "Si", 1.165, element_size=2, cache_dirs=cachedirs, ) self.assertIsNotNone(abs_s)
def _do_addOrReplace_test(self, name, value, value2): pmds = PropertyManagerDataService.Instance() pmds.add(name, value) pmds.addOrReplace(name, value2) pmgr = pmds[name] self.assertEqual(value2['key2'], pmgr['key2'].value) pmds.remove(name)
def test_that_it_adds_nothing_when_empty_list_is_passed_in(self): pms = PropertyManagerService() number_of_elements_on_pmds_after = len( PropertyManagerDataService.getObjectNames()) pms.add_states_to_pmds({}) self.assertEqual(number_of_elements_on_pmds_after, 0) self._remove_all_property_managers()
def __getCacheName(self, wkspname, additional_props=None): """additional_props: list. additional properties to be hashed """ cachedir = self.getProperty('CacheDir').value if len(cachedir) <= 0: return None # fix up the workspace name prefix = wkspname.replace('__', '') propman_properties = [ 'bank', 'd_min', 'd_max', 'tof_min', 'tof_max', 'wavelength_min', 'wavelength_max' ] alignandfocusargs = [] # calculate general properties for name in PROPS_FOR_ALIGN + PROPS_IN_PD_CHARACTER: # skip these because this has been reworked to only worry about information in workspaces if name in (CAL_FILE, GROUP_FILE, CAL_WKSP, GRP_WKSP, MASK_WKSP): continue prop = self.getProperty(name) if name == 'PreserveEvents' or not prop.isDefault: value = prop.valueAsStr # default representation for everything alignandfocusargs.append('%s=%s' % (name, value)) # special calculations for workspaces if self.absorption: alignandfocusargs.append( uniqueDescription('AbsorptionWorkspace', self.absorption)) if self.__calWksp: alignandfocusargs.append( uniqueDescription(CAL_WKSP, self.__calWksp)) if self.__grpWksp: alignandfocusargs.append( uniqueDescription(GRP_WKSP, self.__grpWksp)) if self.__mskWksp: alignandfocusargs.append( uniqueDescription(MASK_WKSP, self.__mskWksp)) alignandfocusargs += additional_props or [] reductionPropertiesName = self.getProperty( 'ReductionProperties').valueAsStr if not PropertyManagerDataService.doesExist(reductionPropertiesName): reductionPropertiesName = '' # do not specify non-existant manager return CreateCacheFilename(Prefix=prefix, PropertyManager=reductionPropertiesName, Properties=propman_properties, OtherProperties=alignandfocusargs, CacheDir=cachedir).OutputFilename
def test_correction_props(self): self.assertRaises(RuntimeError, absorptioncorrutils.create_absorption_input, '', None) props = PropertyManagerDataService.retrieve("props") # Sample only absorption correction abs_sample = absorptioncorrutils.calculate_absorption_correction( "PG3_46577.nxs.h5", "SampleOnly", props, "Si", 1.165, element_size=2) self.assertIsNotNone(abs_sample[0]) DeleteWorkspaces([abs_sample[0]])
def __getCacheName(self, wkspname, additional_props=None): """additional_props: list. additional properties to be hashed """ cachedir = self.getProperty('CacheDir').value if len(cachedir) <= 0: return None # fix up the workspace name prefix = wkspname.replace('__', '') propman_properties = ['bank', 'd_min', 'd_max', 'tof_min', 'tof_max', 'wavelength_min', 'wavelength_max'] alignandfocusargs = [] # calculate general properties for name in PROPS_FOR_ALIGN + PROPS_IN_PD_CHARACTER: # skip these because this has been reworked to only worry about information in workspaces if name in (CAL_FILE, GROUP_FILE, CAL_WKSP, GRP_WKSP, MASK_WKSP): continue prop = self.getProperty(name) if name == 'PreserveEvents' or not prop.isDefault: value = prop.valueAsStr # default representation for everything alignandfocusargs.append('%s=%s' % (name, value)) # special calculations for workspaces if self.absorption: alignandfocusargs.append(uniqueDescription('AbsorptionWorkspace', self.absorption)) if self.__calWksp: alignandfocusargs.append(uniqueDescription(CAL_WKSP, self.__calWksp)) if self.__grpWksp: alignandfocusargs.append(uniqueDescription(GRP_WKSP, self.__grpWksp)) if self.__mskWksp: alignandfocusargs.append(uniqueDescription(MASK_WKSP, self.__mskWksp)) alignandfocusargs += additional_props or [] reductionPropertiesName = self.getProperty('ReductionProperties').valueAsStr if not PropertyManagerDataService.doesExist(reductionPropertiesName): reductionPropertiesName = '' # do not specify non-existant manager return CreateCacheFilename(Prefix=prefix, PropertyManager=reductionPropertiesName, Properties=propman_properties, OtherProperties=alignandfocusargs, CacheDir=cachedir).OutputFilename
def test_that_populates_the_property_manager_data_service_when_processing_is_called(self): # Arrange self._clear_property_manager_data_service() batch_file_path, user_file_path, presenter, _ = self._get_files_and_mock_presenter(BATCH_FILE_TEST_CONTENT_2) # This is not the nicest of tests, but better to test this functionality than not presenter.on_user_file_load() presenter.on_batch_file_load() # Act presenter.on_processed_clicked() # Assert # We should have two states in the PropertyManagerDataService self.assertTrue(len(PropertyManagerDataService.getObjectNames()) == 2) # clean up self._remove_files(user_file_path=user_file_path, batch_file_path=batch_file_path) self._clear_property_manager_data_service()
def test_that_populates_the_property_manager_data_service_when_processing_is_called(self): # Arrange self._clear_property_manager_data_service() batch_file_path, user_file_path, presenter, _ = self._get_files_and_mock_presenter(BATCH_FILE_TEST_CONTENT_2) # This is not the nicest of tests, but better to test this functionality than not presenter.on_user_file_load() presenter.on_batch_file_load() # Act presenter.on_processed_clicked() # Assert # We should have two states in the PropertyManagerDataService self.assertEqual(len(PropertyManagerDataService.getObjectNames()), 2) # clean up self._remove_files(user_file_path=user_file_path, batch_file_path=batch_file_path) self._clear_property_manager_data_service()
def test_correction_props(self): # must supply the filename self.assertRaises(ValueError, absorptioncorrutils.create_absorption_input, '', None) # must supply some way of determining wavelength range self.assertRaises(ValueError, absorptioncorrutils.create_absorption_input, 'PG3_46577.nxs.h5', None) props = PropertyManagerDataService.retrieve("props") # Sample only absorption correction abs_sample = absorptioncorrutils.calculate_absorption_correction( "PG3_46577.nxs.h5", "SampleOnly", props, "Si", 1.165, element_size=2) self.assertIsNotNone(abs_sample[0]) DeleteWorkspaces([abs_sample[0]])
def _remove_all_property_managers(): for element in PropertyManagerDataService.getObjectNames(): PropertyManagerDataService.remove(element)
def _add_property_managers_to_pmds(self, states): for index, state in states.items(): name = self.sans_property_manager_prefix + str(index) PropertyManagerDataService.addOrReplace(name, state.property_manager)
def _do_add_test(self, name, value): pmds = PropertyManagerDataService.Instance() pmds.add(name, value) self.assertTrue(name in pmds) pmds.remove(name)
def tearDownClass(cls): mtd.clear() PropertyManagerDataService.remove('props')
def _clear_property_manager_data_service(): for element in PropertyManagerDataService.getObjectNames(): if PropertyManagerDataService.doesExist(element): PropertyManagerDataService.remove(element)
def _remove_all_property_managers(): for element in PropertyManagerDataService.getObjectNames(): PropertyManagerDataService.remove(element)
def test_that_it_adds_nothing_when_empty_list_is_passed_in(self): pms = PropertyManagerService() number_of_elements_on_pmds_after = len(PropertyManagerDataService.getObjectNames()) pms.add_states_to_pmds({}) self.assertTrue(number_of_elements_on_pmds_after == 0) self._remove_all_property_managers()
def _clear_property_manager_data_service(): for element in PropertyManagerDataService.getObjectNames(): if PropertyManagerDataService.doesExist(element): PropertyManagerDataService.remove(element)