def test_load_xrf_quant_fluor_json_file1(tmp_path): # 'load_xrf_quant_fluor_json_file' - non-existing file _, json_path = _get_data_and_json_path(tmp_path) with pytest.raises(IOError, match=f"File '{json_path}' does not exist"): load_xrf_quant_fluor_json_file(json_path)
def test_load_xrf_quant_fluor_json_file1(tmp_path): # 'load_xrf_quant_fluor_json_file' - non-existing file _, json_path = _get_data_and_json_path(tmp_path) # 're.escape' is necessary if test is run on Windows with pytest.raises(IOError, match=f"File '{re.escape(json_path)}' does not exist"): load_xrf_quant_fluor_json_file(json_path)
def test_load_xrf_quant_fluor_json_file2(tmp_path): # 'load_xrf_quant_fluor_json_file' - schema is not matched data, json_path = _get_data_and_json_path(tmp_path) # Create file save_xrf_quant_fluor_json_file(json_path, data) schema = copy.deepcopy(_xrf_quant_fluor_schema) # Modify schema, so that it is incorrect schema["properties"]["scaler_name"] = {"type": "number"} # Supposed to be a string with pytest.raises(jsonschema.ValidationError): load_xrf_quant_fluor_json_file(json_path, schema=schema)
def test_save_xrf_quant_fluor_json_file1(tmp_path): r"""Basic test of function 'save_xrf_standard_yaml_file' and 'load_xrf_standard_yaml_file'""" data, json_path = _get_data_and_json_path(tmp_path) # Sample data save_xrf_quant_fluor_json_file(json_path, data) data_loaded = load_xrf_quant_fluor_json_file(json_path) assert data_loaded == data, "Loaded data is not equal to the original data"
def test_save_xrf_quant_fluor_json_file4(tmp_path): r"""Schema allows some data fields to hold value of ``None``. Test if this works.""" data, json_path = _get_data_and_json_path(tmp_path) # Modify some elements of the dictionary data = copy.deepcopy(data) data["detector_channel"] = None data["scaler_name"] = None data["distance_to_sample"] = None # Sample data save_xrf_quant_fluor_json_file(json_path, data) data_loaded = load_xrf_quant_fluor_json_file(json_path) assert data_loaded == data, "Loaded data is not equal to the original data"
def test_ParamQuantEstimation_3(tmp_path): standard_data = _standard_data_sample # 'home_dir' is typically '~', but for testing it is set to 'tmp_dir' home_dir = tmp_path config_dir = ".pyxrf" standards_fln = "quantitative_standards.yaml" # Create the file with user-defined reference definitions file_path = os.path.join(home_dir, config_dir, standards_fln) save_xrf_standard_yaml_file(file_path, standard_data) # Create the object and load references pqe = ParamQuantEstimation(home_dir=home_dir) pqe.load_standards() # Select first 'user-defined' sample (from '_standard_data_sample' list) incident_energy = 12.0 img = gen_xrf_map_dict() # Generate and fill fluorescence data dictionary pqe.set_selected_standard() pqe.gen_fluorescence_data_dict(incident_energy=incident_energy) scaler_name = "sclr" pqe.fill_fluorescence_data_dict(xrf_map_dict=img, scaler_name=scaler_name) # Equivalent transformations using functions that are already tested. The sequence # must give the same result (same functions are called). qfdd = get_quant_fluor_data_dict(standard_data[0], incident_energy) fill_quant_fluor_data_dict(qfdd, xrf_map_dict=img, scaler_name=scaler_name) assert ( pqe.fluorescence_data_dict == qfdd ), "The filled fluorescence data dictionary does not match the expected" # Test generation of preview (superficial) pview, msg_warnings = pqe.get_fluorescence_data_dict_text_preview() # It is expected that the preview will contain 'WARNING:' assert len(msg_warnings), "Warning is not found in preview" # Disable warnings pview, msg_warnings = pqe.get_fluorescence_data_dict_text_preview( enable_warnings=False) assert not len(msg_warnings), "Warnings are disabled, but still generated" # Test function for setting detector channel name pqe.set_detector_channel_in_data_dict(detector_channel="sum") assert pqe.fluorescence_data_dict[ "detector_channel"] == "sum", "Detector channel was not set correctly" # Test function for setting distance to sample distance_to_sample = 2.5 pqe.set_distance_to_sample_in_data_dict( distance_to_sample=distance_to_sample) assert (pqe.fluorescence_data_dict["distance_to_sample"] == distance_to_sample), "Distance-to-sample was not set correctly" # Function for setting Scan ID and Scan UID scan_id = 65476 scan_uid = "abcdef-12345678" # Some string qfdd = copy.deepcopy(pqe.fluorescence_data_dict) pqe.set_optional_parameters(scan_id=scan_id, scan_uid=scan_uid) set_quant_fluor_data_dict_optional(qfdd, scan_id=scan_id, scan_uid=scan_uid) # We don't check if time is computed correctly (this was checked at different place) # Time computed at different function calls may be different qfdd["creation_time_local"] = pqe.fluorescence_data_dict[ "creation_time_local"] assert pqe.fluorescence_data_dict == qfdd, "Optional parameters are not set correctly" # Try generating preview again: there should be no warnings pview, msg_warnings = pqe.get_fluorescence_data_dict_text_preview() # There should be no warnings in preview (all parameters are set) assert not len(msg_warnings), "Preview is expected to contain no warnings" # Test the method 'get_suggested_json_fln' fln_suggested = pqe.get_suggested_json_fln() assert ( f"_{pqe.fluorescence_data_dict['serial']}." in fln_suggested ), f"Serial of the reference is not found in the suggested file name {fln_suggested}" # Test saving calibration data file_path = os.path.join(tmp_path, fln_suggested) pqe.save_fluorescence_data_dict(file_path=file_path) qfdd = load_xrf_quant_fluor_json_file(file_path=file_path) assert qfdd == prune_quant_fluor_data_dict( pqe.fluorescence_data_dict ), "Error occurred while saving and loading calibration data dictionary. Dictionaries don't match"