kalpa/tests/read_bin_csv/test_read_bin_csv.py

89 lines
2.8 KiB
Python

import re
import kalpaa.read_bin_csv
import pathlib
import dataclasses
import logging
import numpy
_logger = logging.getLogger(__name__)
TEST_DATA_DIR = pathlib.Path(__file__).resolve().parent / "test_files"
def test_regex_matches():
apsd_v_1 = "APSD_V_dot1_mean"
actual_match1 = re.match(kalpaa.read_bin_csv.BINNED_HEADER_REGEX, apsd_v_1)
# For reference, REGEX is currently: APSD_(?P<measurement_type>\w+)_(?P<dot_name>\w+)_(?P<summary_stat>mean|stdev)\s*
assert actual_match1 is not None
groups = actual_match1.groupdict()
assert groups["measurement_type"] == "V"
assert groups["dot_name"] == "dot1"
assert groups["summary_stat"] == "mean"
def test_parse_headers(snapshot):
example_headers = [
# using these headers from recent run: APSD_V_dot1_mean, APSD_V_dot1_stdev, APSD_V_dot2_mean, APSD_V_dot2_stdev, APSD_V_line_mean, APSD_V_line_stdev, APSD_V_triangle1_mean, APSD_V_triangle1_stdev, APSD_V_triangle2_mean, APSD_V_triangle2_stdev, APSD_V_uprise1_mean, APSD_V_uprise1_stdev, APSD_V_uprise2_mean, APSD_V_uprise2_stdev
"APSD_V_dot1_mean",
"APSD_V_dot1_stdev",
"APSD_V_dot2_mean",
"APSD_V_dot2_stdev",
"APSD_V_line_mean",
"APSD_V_line_stdev",
"APSD_V_triangle1_mean",
"APSD_V_triangle1_stdev",
"APSD_V_triangle2_mean",
"APSD_V_triangle2_stdev",
"APSD_V_uprise1_mean",
"This is not a valid header",
]
# force logger to be used for now
_logger.debug("parsing headers for test")
actual_parsed = [kalpaa.read_bin_csv._parse_bin_header(h) for h in example_headers]
assert actual_parsed == snapshot
def test_binned_data_dot_measurement(snapshot):
dots_json = TEST_DATA_DIR / "dots.json"
csv_file = TEST_DATA_DIR / "binned_apsd_0.csv"
actual_read = kalpaa.read_bin_csv.read_dots_and_binned(dots_json, csv_file)
assert dataclasses.asdict(actual_read) == snapshot
def test_binned_data_dot_measurement_costs(snapshot):
dots_json = TEST_DATA_DIR / "dots.json"
csv_file = TEST_DATA_DIR / "binned_apsd_0.csv"
# it's overkill but while we have the mental model of what the input form is of these numpy arrays we should record it!
test_dipole_1 = [10, 20, 30, 0.4, 0.5, 0.6, 0.7]
test_dipole_2 = [15, 25, 35, -4, 0, 0, 0.11]
test_dipoles_configuration_1 = [test_dipole_1]
test_one_dipole_config2 = [test_dipole_2]
all_one_dipole_configs = numpy.array(
[test_dipoles_configuration_1, test_one_dipole_config2]
)
test_two_dipole_config1 = [test_dipole_1, test_dipole_2]
all_two_dipole_configs = numpy.array([test_two_dipole_config1])
binned = kalpaa.read_bin_csv.read_dots_and_binned(dots_json, csv_file)
measurements = binned.measurements(["dot1"])
# _logger.warning(measurements)
log_noise_stdev_cost_func = binned._stdev_cost_function(measurements, True)
result_dict = {
"one": log_noise_stdev_cost_func(all_one_dipole_configs),
"two": log_noise_stdev_cost_func(all_two_dipole_configs),
}
assert result_dict == snapshot