diff --git a/.gitignore b/.gitignore index 4485f2bcb..ff18e7a00 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,11 @@ venv tests.log /.pytest_cache +# Unit test / coverage reports +htmlcov/ +.coverage +.cache/ + # Installer files /installers/build /installers/dist diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e75be384f..b92d96596 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ default_install_hook_types: [pre-commit, pre-push] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.1 + rev: v0.12.9 hooks: # Run the linter, applying any available fixes - id: ruff-check diff --git a/requirements.txt b/requirements.txt index 463703b10..64bfe29a4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,4 +16,4 @@ html5lib # Other stuff matplotlib -pre-commit +pre-commit \ No newline at end of file diff --git a/sasdata/ascii_reader_metadata.py b/sasdata/ascii_reader_metadata.py index 7a2fa01ad..850492a84 100644 --- a/sasdata/ascii_reader_metadata.py +++ b/sasdata/ascii_reader_metadata.py @@ -26,7 +26,7 @@ T = TypeVar('T') # TODO: There may be a better place for this. -pairings = {'I': 'dI', 'Q': 'dQ', 'Qx': 'dQx', 'Qy': 'dQy'} +pairings = {'I': 'dI', 'Q': 'dQ', 'Qx': 'dQx', 'Qy': 'dQy', 'Qz': 'dQz'} pairing_error = {value: key for key, value in pairings.items()} # Allows this to be bidirectional. bidirectional_pairings = pairings | pairing_error diff --git a/sasdata/checklist.txt b/sasdata/checklist.txt new file mode 100644 index 000000000..c25c7d895 --- /dev/null +++ b/sasdata/checklist.txt @@ -0,0 +1,3 @@ +Things to check once everything is in place: + +1) Do any centigrade fields read in incorrectly? \ No newline at end of file diff --git a/sasdata/data.py b/sasdata/data.py index fd294a432..788f3d7f5 100644 --- a/sasdata/data.py +++ b/sasdata/data.py @@ -69,7 +69,7 @@ def abscissae(self) -> Quantity: # TODO: Won't work when there's errors involved. On reflection, we # probably want to avoid creating a new Quantity but at the moment I # can't see a way around it. - return Quantity(data_contents, reference_data_content.units) + return Quantity(data_contents, reference_data_content.units, name=self._data_contents["Qx"].name, id_header=self._data_contents["Qx"]._id_header) case dataset_types.sesans: return self._data_contents["SpinEchoLength"] case _: diff --git a/sasdata/data_backing.py b/sasdata/data_backing.py index 8553cd5dd..210ac33ca 100644 --- a/sasdata/data_backing.py +++ b/sasdata/data_backing.py @@ -27,7 +27,7 @@ def summary(self, indent_amount: int = 0, indent: str = " ") -> str: s += f"{indent*(indent_amount+1)}{shorten_string(str(self.data))}\n" for key in self.attributes: value = self.attributes[key] - if isinstance(value, (Group | Dataset)): + if isinstance(value, (Group, Dataset)): value_string = value.summary(indent_amount+1, indent) else: value_string = f"{indent * (indent_amount+1)}{key}: {shorten_string(repr(value))}\n" diff --git a/sasdata/data_util/manipulations.py b/sasdata/data_util/manipulations.py index b7d17f41c..315824612 100644 --- a/sasdata/data_util/manipulations.py +++ b/sasdata/data_util/manipulations.py @@ -51,6 +51,23 @@ "sasdata.data_util.averaging.", DeprecationWarning, stacklevel=2) +def deduce_qz(qx: float, qy: float, wavelength: float) -> float: + """ + If you know qx, qy, and the wavelength, you can derive qz + + :param qx: qx [inverse length] + :param dy: qy [inverse length] + :param wavelength: neutron wavelength [length] + + :return: qz + """ + + k0 = 2*np.pi/wavelength + twotheta = np.arcsin((qx**2 + qy**2) / k0) + qz = (1 - np.cos(twotheta)) * k0 + return qz + + def position_and_wavelength_to_q(dx: float, dy: float, detector_distance: float, wavelength: float) -> float: """ :param dx: x-distance from beam center [mm] diff --git a/sasdata/data_util/nxsunit.py b/sasdata/data_util/nxsunit.py index a5c3ab536..2fa8891cb 100644 --- a/sasdata/data_util/nxsunit.py +++ b/sasdata/data_util/nxsunit.py @@ -51,8 +51,8 @@ __all__ = ['Converter', 'standardize_units'] T = TypeVar('T') ConversionType = float | tuple[float, float] -DIMENSIONS = {} # type: Dict[str, Dict[str, ConversionType]] -AMBIGUITIES = {} # type: Dict[str, str] +DIMENSIONS: dict[str, dict[str, ConversionType]] = {} +AMBIGUITIES: dict[str, str] = {} PREFIX = dict(peta=1e15, tera=1e12, giga=1e9, mega=1e6, kilo=1e3, deci=1e-1, centi=1e-2, milli=1e-3, mili=1e-3, micro=1e-6, nano=1e-9, pico=1e-12, femto=1e-15) SHORT_PREFIX = dict(P=1e15, T=1e12, G=1e9, M=1e6, k=1e3, d=1e-1, c=1e-2, m=1e-3, u=1e-6, n=1e-9, p=1e-12, f=1e-15) @@ -258,7 +258,7 @@ def _build_all_units(): # APS files may be using 'a.u.' for 'arbitrary units'. Other # facilities are leaving the units blank, using ??? or not even # writing the units attributes. - unknown = {} # type: Dict[str, ConversionType] + unknown: dict[str, ConversionType] = {} unknown.update( {'None': 1, '???': 1, '': 1, 'A.U.': 1, 'a.u.': 1, 'arbitrary': 1, 'arbitrary units': 1, 'Counts': 1, 'counts': 1, 'Cts': 1, 'cts': 1, 'unitless': 1, 'unknown': 1, 'Unknown': 1, 'Unk': 1} @@ -356,15 +356,15 @@ class Converter: value name. """ #: Name of the source units (km, Ang, us, ...) - _units = None # type: List[str] + _units: list[str] = None #: Type of the source units (distance, time, frequency, ...) - dimension = None # type: List[str] + dimension: list[str] = None #: Scale converter, mapping unit name to scale factor or (scale, offset) #: for temperature units. - scalemap = None # type: List[Dict[str, ConversionType]] + scalemap: list[dict[str, ConversionType]] = None #: Scale base for the source units - scalebase = None # type: float - scaleoffset = None # type: float + scalebase: float = None + scaleoffset: float = None @property def units(self) -> str: @@ -375,7 +375,7 @@ def units(self, unit: str): self._units = standardize_units(unit) def __init__(self, units: str | None = None, dimension: list[str] | None = None): - self.units = units if units is not None else 'a.u.' # type: str + self.units: str = units if units is not None else 'a.u.' # Lookup dimension if not given if dimension: diff --git a/sasdata/dataloader/data_info.py b/sasdata/dataloader/data_info.py index 8c3a199ed..95fcac281 100644 --- a/sasdata/dataloader/data_info.py +++ b/sasdata/dataloader/data_info.py @@ -768,7 +768,7 @@ def is_slit_smeared(self): :return: True is slit smearing info is present, False otherwise """ def _check(v): - return (isinstance(v.__class__ == list | np.ndarray) + return (isinstance(v.__class__, list | np.ndarray) and len(v) > 0 and min(v) > 0) return _check(self.dxl) or _check(self.dxw) diff --git a/sasdata/dataloader/readers/red2d_reader.py b/sasdata/dataloader/readers/red2d_reader.py index 3d468911d..d84af6155 100644 --- a/sasdata/dataloader/readers/red2d_reader.py +++ b/sasdata/dataloader/readers/red2d_reader.py @@ -82,7 +82,6 @@ def get_file_contents(self): wavelength = None distance = None - transmission = None pixel_x = None pixel_y = None diff --git a/sasdata/dataset_types.py b/sasdata/dataset_types.py index ffccd9653..cbe36825d 100644 --- a/sasdata/dataset_types.py +++ b/sasdata/dataset_types.py @@ -27,12 +27,21 @@ class DatasetType: two_dim = DatasetType( name="2D I vs Q", required=["Qx", "Qy", "I"], - optional=["dQx", "dQy", "dI", "Qz", "ShadowFactor", "mask"], + optional=["dQx", "dQy", "dQz", "dI", "Qz", "ShadowFactor", "mask"], expected_orders=[ ["Qx", "Qy", "I"], ["Qx", "Qy", "I", "dI"], ["Qx", "Qy", "dQx", "dQy", "I", "dI"]]) +three_dim = DatasetType( + name="3D I vs Q", + required=["Qx", "Qy", "Qz", "I"], + optional=["dQx", "dQy", "dQz", "dI", "ShadowFactor", "mask"], + expected_orders=[ + ["Qx", "Qy", "Qz", "I"], + ["Qx", "Qy", "Qz", "I", "dI"], + ["Qx", "Qy", "Qz", "dQx", "dQy", "dQz", "I", "dI"]]) + sesans = DatasetType( name="SESANS", required=["SpinEchoLength", "Depolarisation", "Wavelength"], diff --git a/sasdata/distributions.py b/sasdata/distributions.py new file mode 100644 index 000000000..6ad149e0e --- /dev/null +++ b/sasdata/distributions.py @@ -0,0 +1,11 @@ + + +class DistributionModel: + + + @property + def is_density(self) -> bool: + return False + + def standard_deviation(self) -> Quantity: + return NotImplementedError("Variance not implemented yet") diff --git a/sasdata/manual_tests/__init__.py b/sasdata/manual_tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/manual_tests/interpolation.py b/sasdata/manual_tests/interpolation.py new file mode 100644 index 000000000..59d53815c --- /dev/null +++ b/sasdata/manual_tests/interpolation.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import numpy as np + +from sasdata.quantities import units +from sasdata.quantities.plotting import quantity_plot +from sasdata.quantities.quantity import NamedQuantity +from sasdata.transforms.rebinning import InterpolationOptions, calculate_interpolation_matrix_1d + + +def linear_interpolation_check(): + + for from_bins in [(-10, 10, 10), + (-10, 10, 1000), + (-15, 5, 10), + (15,5, 10)]: + for to_bins in [ + (-15, 0, 10), + (-15, 15, 10), + (0, 20, 100)]: + + plt.figure() + + x = NamedQuantity("x", np.linspace(*from_bins), units=units.meters) + y = x**2 + + quantity_plot(x, y) + + new_x = NamedQuantity("x_new", np.linspace(*to_bins), units=units.meters) + + rebin_mat = calculate_interpolation_matrix_1d(x, new_x, order=InterpolationOptions.LINEAR) + + new_y = y @ rebin_mat + + quantity_plot(new_x, new_y) + + print(new_y.history.summary()) + + plt.show() + + + + +linear_interpolation_check() diff --git a/sasdata/metadata.py b/sasdata/metadata.py index 588a4de76..d53c3102c 100644 --- a/sasdata/metadata.py +++ b/sasdata/metadata.py @@ -538,7 +538,7 @@ class Metadata: process: list[Process] sample: Sample | None instrument: Instrument | None - raw: MetaNode + raw: MetaNode | None def summary(self): run_string = str(self.run[0] if len(self.run) == 1 else self.run) @@ -567,6 +567,14 @@ def from_json(obj): raw=MetaNode.from_json(obj["raw"]), ) + @property + def id_header(self): + """Generate a header for used in the unique_id for datasets""" + title = "" + if self.title is not None: + title = self.title + return f"{title}:{",".join(self.run)}" + def as_h5(self, f: h5py.Group): """Export data onto an HDF5 group""" for idx, run in enumerate(self.run): diff --git a/sasdata/postprocess.py b/sasdata/postprocess.py new file mode 100644 index 000000000..1d7866098 --- /dev/null +++ b/sasdata/postprocess.py @@ -0,0 +1,57 @@ +""" + +Post processing for loaded files + +""" + +import numpy as np + +from sasdata.data import SasData + + +def fix_mantid_units_error(data: SasData) -> SasData: + pass + + + +def apply_fixes(data: SasData, mantid_unit_error=True): + if mantid_unit_error: + data = fix_mantid_units_error(data) + + return data + + +def deduce_qz(data: SasData): + """Calculates and appends Qz to SasData if Qx, Qy, and wavelength are all present""" + # if Qz is not already in the dataset, but Qx and Qy are + if 'Qz' not in data._data_contents and 'Qx' in data._data_contents and 'Qy' in data._data_contents: + # we start by making the approximation that qz=0 + data._data_contents['Qz'] = 0*data._data_contents['Qx'] + + # now check if metadata has wavelength information + wavelength = getattr( + getattr( + getattr( + getattr(data, "metadata", None), + "instrument", + None + ), + "source", + None + ), + "wavelength", + None + ) + + if wavelength is not None: + # we can deduce the value of qz from qx and qy + # if we have the wavelength + qx = data._data_contents['Qx'] + qy = data._data_contents['Qy'] + + # this is how you convert qx, qy, and wavelength to qz + k0 = 2*np.pi/wavelength + qz = k0-(k0**2-qx**2-qy**2)**(0.5) + + data._data_contents['Qz'] = qz + diff --git a/sasdata/quantities/__init__.py b/sasdata/quantities/__init__.py index e69de29bb..a49ce6237 100644 --- a/sasdata/quantities/__init__.py +++ b/sasdata/quantities/__init__.py @@ -0,0 +1,484 @@ +""" +Builds a data file containing details of units +""" + +import importlib +import os.path +from collections import defaultdict, namedtuple +from io import StringIO + +import numpy as np + +from ._units_base import Dimensions + +Magnitude = namedtuple("Magnitude", ["symbol", "special_symbol", "latex_symbol", "name", "scale"]) + +bigger_magnitudes: list[Magnitude] = [ + Magnitude("E", None, None, "exa", 1e18), + Magnitude("P", None, None, "peta", 1e15), + Magnitude("T", None, None, "tera", 1e12), + Magnitude("G", None, None, "giga", 1e9), + Magnitude("M", None, None, "mega", 1e6), + Magnitude("k", None, None, "kilo", 1e3), +] + +smaller_magnitudes: list[Magnitude] = [ + Magnitude("m", None, None, "milli", 1e-3), + Magnitude("u", "µ", r"\mu", "micro", 1e-6), + Magnitude("n", None, None, "nano", 1e-9), + Magnitude("p", None, None, "pico", 1e-12), + Magnitude("f", None, None, "femto", 1e-15), + Magnitude("a", None, None, "atto", 1e-18), +] + +unusual_magnitudes: list[Magnitude] = [ + Magnitude("d", None, None, "deci", 1e-1), + Magnitude("c", None, None, "centi", 1e-2), +] + +all_magnitudes = bigger_magnitudes + smaller_magnitudes + +UnitData = namedtuple( + "UnitData", + [ + "symbol", + "special_symbol", + "latex_symbol", + "singular", + "plural", + "scale", + "length", + "time", + "mass", + "current", + "temperature", + "moles_hint", + "angle_hint", + "magnitudes", + ], +) + +# Length, time, mass, current, temperature +base_si_units = [ + UnitData("m", None, None, "meter", "meters", 1, 1, 0, 0, 0, 0, 0, 0, all_magnitudes + unusual_magnitudes), + UnitData("s", None, None, "second", "seconds", 1, 0, 1, 0, 0, 0, 0, 0, smaller_magnitudes), + UnitData("g", None, None, "gram", "grams", 1e-3, 0, 0, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("A", None, None, "ampere", "amperes", 1, 0, 0, 0, 1, 0, 0, 0, all_magnitudes), + UnitData("K", None, None, "kelvin", "kelvin", 1, 0, 0, 0, 0, 1, 0, 0, all_magnitudes), +] + +derived_si_units = [ + UnitData("Hz", None, None, "hertz", "hertz", 1, 0, -1, 0, 0, 0, 0, 0, all_magnitudes), + UnitData("N", None, None, "newton", "newtons", 1, 1, -2, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("Pa", None, None, "pascal", "pascals", 1, -1, -2, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("J", None, None, "joule", "joules", 1, 2, -2, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("W", None, None, "watt", "watts", 1, 2, -3, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("C", None, None, "coulomb", "coulombs", 1, 0, 1, 0, 1, 0, 0, 0, all_magnitudes), + UnitData("V", None, None, "volts", "volts", 1, 2, -3, 1, -1, 0, 0, 0, all_magnitudes), + UnitData("Ohm", "Ω", r"\Omega", "ohm", "ohms", 1, 2, -3, 1, -2, 0, 0, 0, all_magnitudes), + UnitData("F", None, None, "farad", "farads", 1, -2, 4, -1, 2, 0, 0, 0, all_magnitudes), + UnitData("S", None, None, "siemens", "siemens", 1, -2, 3, -1, 2, 0, 0, 0, all_magnitudes), + UnitData("Wb", None, None, "weber", "webers", 1, 2, -2, 1, -1, 0, 0, 0, all_magnitudes), + UnitData("T", None, None, "tesla", "tesla", 1, 0, -2, 1, -1, 0, 0, 0, all_magnitudes), + UnitData("H", None, None, "henry", "henry", 1, 2, -2, 1, -2, 0, 0, 0, all_magnitudes), +] + +non_si_dimensioned_units: list[tuple[str, str | None, str, str, float, int, int, int, int, int, int, int, list]] = [ + UnitData("Ang", "Å", r"\AA", "angstrom", "angstroms", 1e-10, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("micron", None, None, "micron", "microns", 1e-6, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("min", None, None, "minute", "minutes", 60, 0, 1, 0, 0, 0, 0, 0, []), + UnitData("rpm", None, None, "revolutions per minute", "revolutions per minute", 1 / 60, 0, -1, 0, 0, 0, 0, 0, []), + UnitData("h", None, None, "hour", "hours", 3600, 0, 1, 0, 0, 0, 0, 0, []), + UnitData("d", None, None, "day", "days", 3600 * 24, 0, 1, 0, 0, 0, 0, 0, []), + UnitData("y", None, None, "year", "years", 3600 * 24 * 365.2425, 0, 1, 0, 0, 0, 0, 0, []), + UnitData("deg", None, None, "degree", "degrees", 180 / np.pi, 0, 0, 0, 0, 0, 0, 1, []), + UnitData("rad", None, None, "radian", "radians", 1, 0, 0, 0, 0, 0, 0, 1, []), + UnitData("rot", None, None, "rotation", "rotations", 2 * np.pi, 0, 0, 0, 0, 0, 0, 1, []), + UnitData("sr", None, None, "stradian", "stradians", 1, 0, 0, 0, 0, 0, 0, 2, []), + UnitData("l", None, None, "litre", "litres", 1e-3, 3, 0, 0, 0, 0, 0, 0, []), + UnitData("eV", None, None, "electronvolt", "electronvolts", 1.602176634e-19, 2, -2, 1, 0, 0, 0, 0, all_magnitudes), + UnitData("au", None, None, "atomic mass unit", "atomic mass units", 1.660538921e-27, 0, 0, 1, 0, 0, 0, 0, []), + UnitData("mol", None, None, "mole", "moles", 6.02214076e23, 0, 0, 0, 0, 0, 1, 0, smaller_magnitudes), + UnitData("kgForce", None, None, "kg force", "kg force", 9.80665, 1, -2, 1, 0, 0, 0, 0, []), + UnitData("C", None, None, "degree Celsius", "degrees Celsius", 1, 0, 0, 0, 0, 1, 0, 0, []), + UnitData("miles", None, None, "mile", "miles", 1760 * 3 * 0.3048, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("yrd", None, None, "yard", "yards", 3 * 0.3048, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("ft", None, None, "foot", "feet", 0.3048, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("in", None, None, "inch", "inches", 0.0254, 1, 0, 0, 0, 0, 0, 0, []), + UnitData("lb", None, None, "pound", "pounds", 0.45359237, 0, 0, 1, 0, 0, 0, 0, []), + UnitData("lbf", None, None, "pound force", "pounds force", 4.448222, 1, -2, 1, 0, 0, 0, 0, []), + UnitData("oz", None, None, "ounce", "ounces", 0.45359237 / 16, 0, 0, 1, 0, 0, 0, 0, []), + UnitData( + "psi", + None, + None, + "pound force per square inch", + "pounds force per square inch", + 4.448222 / (0.0254**2), + -1, + -2, + 1, + 0, + 0, + 0, + 0, + [], + ), +] + +non_si_dimensionless_units: list[tuple[str, str | None, str, str, float, int, int, int, int, int, int, int, list]] = [ + UnitData("none", None, None, "none", "none", 1, 0, 0, 0, 0, 0, 0, 0, []), + UnitData("percent", "%", r"\%", "percent", "percent", 0.01, 0, 0, 0, 0, 0, 0, 0, []), +] + +non_si_units = non_si_dimensioned_units + non_si_dimensionless_units + +# TODO: +# Add Hartree? Rydberg? Bohrs? +# Add CGS + +# Two stages of aliases, to make sure units don't get lost + +aliases_1 = {"A": ["Amps", "amps"], "C": ["Coulombs", "coulombs"]} + +aliases_2 = { + "y": ["yr", "year"], + "d": ["day"], + "h": ["hr", "hour"], + "Ang": ["A", "Å"], + "au": ["amu"], + "percent": ["%"], + "deg": ["degr", "Deg", "degree", "degrees", "Degrees"], + "none": ["Counts", "counts", "cnts", "Cnts", "a.u.", "fraction", "Fraction"], + "K": ["C"], # Ugh, cansas +} + + +all_units = base_si_units + derived_si_units + non_si_units + +encoding = "utf-8" + + +def format_name(name: str): + return name.lower().replace(" ", "_") + + +with StringIO() as fid: + # Write in class definitions + fid.write("\n\n#\n# Included from _units_base.py\n#\n\n") + + path = os.path.join(os.path.dirname(__file__), "_units_base.py") + with open(path,encoding="utf8") as base: + for line in base: + fid.write(line) + + # Write in unit definitions + fid.write("\n\n#\n# Specific units\n#\n\n") + + symbol_lookup = {} + unit_types_temp = defaultdict(list) # Keep track of unit types + unit_types = defaultdict(list) + + for unit_def in all_units: + formatted_plural = format_name(unit_def.plural) + formatted_singular = format_name(unit_def.singular) + + dimensions = Dimensions( + unit_def.length, + unit_def.time, + unit_def.mass, + unit_def.current, + unit_def.temperature, + unit_def.moles_hint, + unit_def.angle_hint, + ) + fid.write( + f"{formatted_plural} = NamedUnit({unit_def.scale}, Dimensions({unit_def.length}, {unit_def.time}, {unit_def.mass}, {unit_def.current}, {unit_def.temperature}, {unit_def.moles_hint}, {unit_def.angle_hint})," + f"name='{formatted_plural}'," + f"ascii_symbol='{unit_def.symbol}'," + f"{'' if unit_def.latex_symbol is None else f"latex_symbol=r'{unit_def.latex_symbol}',"}" + f"symbol='{unit_def.symbol if unit_def.special_symbol is None else unit_def.special_symbol}')\n" + ) + + symbol_lookup[unit_def.symbol] = formatted_plural + if unit_def.special_symbol is not None: + symbol_lookup[unit_def.special_symbol] = formatted_plural + + unit_types_temp[hash(dimensions)].append( + (unit_def.symbol, unit_def.special_symbol, formatted_singular, formatted_plural, unit_def.scale, dimensions) + ) + + unit_types[hash(dimensions)].append(formatted_plural) + + for mag in unit_def.magnitudes: + # Work out the combined symbol, accounts for unicode or not + combined_special_symbol = (mag.symbol if mag.special_symbol is None else mag.special_symbol) + ( + unit_def.symbol if unit_def.special_symbol is None else unit_def.special_symbol + ) + + combined_symbol = mag.symbol + unit_def.symbol + + # Combined unit name + combined_name_singular = f"{mag.name}{formatted_singular}" + combined_name_plural = f"{mag.name}{formatted_plural}" + + combined_scale = unit_def.scale * mag.scale + + latex_symbol = None + if unit_def.latex_symbol is not None and mag.latex_symbol is not None: + latex_symbol = f"{{{mag.latex_symbol}}}{unit_def.latex_symbol}" + elif unit_def.latex_symbol is not None: + latex_symbol = f"{mag.symbol}{unit_def.latex_symbol}" + elif mag.latex_symbol is not None: + latex_symbol = f"{{{mag.latex_symbol}}}{unit_def.symbol}" + + # Units + dimensions = Dimensions( + unit_def.length, + unit_def.time, + unit_def.mass, + unit_def.current, + unit_def.temperature, + unit_def.moles_hint, + unit_def.angle_hint, + ) + fid.write( + f"{combined_name_plural} = NamedUnit({combined_scale}, " + f"Dimensions({unit_def.length}, {unit_def.time}, {unit_def.mass}, {unit_def.current}, {unit_def.temperature}, {unit_def.moles_hint}, {unit_def.angle_hint})," + f"name='{combined_name_plural}'," + f"ascii_symbol='{combined_symbol}'," + f"{'' if latex_symbol is None else f"latex_symbol=r'{latex_symbol}',"}" + f"symbol='{combined_special_symbol}')\n" + ) + + symbol_lookup[combined_symbol] = combined_name_plural + symbol_lookup[combined_special_symbol] = combined_name_plural + + unit_types_temp[hash(dimensions)].append( + ( + combined_symbol, + combined_special_symbol, + combined_name_singular, + combined_name_plural, + combined_scale, + dimensions, + ) + ) + + unit_types[hash(dimensions)].append(combined_name_plural) + + # + # Higher dimensioned types + # + + length_units = unit_types_temp[hash(Dimensions(length=1))] + time_units = unit_types_temp[hash(Dimensions(time=1))] + mass_units = unit_types_temp[hash(Dimensions(mass=1))] + amount_units = unit_types_temp[hash(Dimensions(moles_hint=1))] + + # Length based + for symbol, special_symbol, singular, plural, scale, _ in length_units: + for prefix, power, name, unicode_suffix in [ + ("square_", 2, plural, "²"), + ("cubic_", 3, plural, "³"), + ("per_", -1, singular, "⁻¹"), + ("per_square_", -2, singular, "⁻²"), + ("per_cubic_", -3, singular, "⁻³"), + ]: + dimensions = Dimensions(length=power) + unit_name = prefix + name + unit_special_symbol = (symbol if special_symbol is None else special_symbol) + unicode_suffix + unit_symbol = symbol + f"^{power}" + fid.write( + f"{unit_name} = NamedUnit({scale**power}, Dimensions(length={power}), " + f"name='{unit_name}', " + f"ascii_symbol='{unit_symbol}', " + f"symbol='{unit_special_symbol}')\n" + ) + + unit_types[hash(dimensions)].append(unit_name) + + # Speed and acceleration + for length_symbol, length_special_symbol, _, length_name, length_scale, _ in length_units: + for time_symbol, time_special_symbol, time_name, _, time_scale, _ in time_units: + speed_name = length_name + "_per_" + time_name + accel_name = length_name + "_per_square_" + time_name + + speed_dimensions = Dimensions(length=1, time=-1) + accel_dimensions = Dimensions(length=1, time=-2) + + length_special = length_special_symbol if length_special_symbol is not None else length_symbol + time_special = time_special_symbol if time_special_symbol is not None else time_symbol + + fid.write( + f"{speed_name} " + f"= NamedUnit({length_scale / time_scale}, " + f"Dimensions(length=1, time=-1), " + f"name='{speed_name}', " + f"ascii_symbol='{length_symbol}/{time_symbol}', " + f"symbol='{length_special}{time_special}⁻¹')\n" + ) + + fid.write( + f"{accel_name} = NamedUnit({length_scale / time_scale**2}, " + f"Dimensions(length=1, time=-2), " + f"name='{accel_name}', " + f"ascii_symbol='{length_symbol}/{time_symbol}^2', " + f"symbol='{length_special}{time_special}⁻²')\n" + ) + + unit_types[hash(speed_dimensions)].append(speed_name) + unit_types[hash(accel_dimensions)].append(accel_name) + + # Density + for length_symbol, length_special_symbol, length_name, _, length_scale, _ in length_units: + for mass_symbol, mass_special_symbol, _, mass_name, mass_scale, _ in mass_units: + name = mass_name + "_per_cubic_" + length_name + + dimensions = Dimensions(length=-3, mass=1) + + mass_special = mass_symbol if mass_special_symbol is None else mass_special_symbol + length_special = length_symbol if length_special_symbol is None else length_special_symbol + + fid.write( + f"{name} " + f"= NamedUnit({mass_scale / length_scale**3}, " + f"Dimensions(length=-3, mass=1), " + f"name='{name}', " + f"ascii_symbol='{mass_symbol} {length_symbol}^-3', " + f"symbol='{mass_special}{length_special}⁻³')\n" + ) + + unit_types[hash(dimensions)].append(name) + + # Concentration + for length_symbol, length_special_symbol, length_name, _, length_scale, _ in length_units: + for amount_symbol, amount_special_symbol, _, amount_name, amount_scale, _ in amount_units: + name = amount_name + "_per_cubic_" + length_name + + dimensions = Dimensions(length=-3, moles_hint=1) + + length_special = length_symbol if length_special_symbol is None else length_special_symbol + amount_special = amount_symbol if amount_special_symbol is None else amount_special_symbol + + fid.write( + f"{name} " + f"= NamedUnit({amount_scale / length_scale**3}, " + f"Dimensions(length=-3, moles_hint=1), " + f"name='{name}', " + f"ascii_symbol='{amount_symbol} {length_symbol}^-3', " + f"symbol='{amount_special}{length_special}⁻³')\n" + ) + + unit_types[hash(dimensions)].append(name) + + # TODO: Torque, Momentum, Entropy + + # + # Add aliases to symbol lookup table + # + + # Apply the alias transforms sequentially + for aliases in [aliases_1, aliases_2]: + for base_name in aliases: + alias_list = aliases[base_name] + for alias in alias_list: + symbol_lookup[alias] = symbol_lookup[base_name] + + # + # Write out the symbol lookup table + # + fid.write("\n#\n# Lookup table from symbols to units\n#\n\n") + fid.write("symbol_lookup = {\n") + for k in symbol_lookup: + if k != "none": + fid.write(f' "{k}": {symbol_lookup[k]},\n') + fid.write("}\n\n") + + # + # Collections of units by type + # + + dimension_names = [ + ("length", Dimensions(length=1)), + ("area", Dimensions(length=2)), + ("volume", Dimensions(length=3)), + ("inverse_length", Dimensions(length=-1)), + ("inverse_area", Dimensions(length=-2)), + ("inverse_volume", Dimensions(length=-3)), + ("time", Dimensions(time=1)), + ("rate", Dimensions(time=-1)), + ("speed", Dimensions(length=1, time=-1)), + ("acceleration", Dimensions(length=1, time=-2)), + ("density", Dimensions(length=-3, mass=1)), + ("force", Dimensions(1, -2, 1, 0, 0)), + ("pressure", Dimensions(-1, -2, 1, 0, 0)), + ("energy", Dimensions(2, -2, 1, 0, 0)), + ("power", Dimensions(2, -3, 1, 0, 0)), + ("charge", Dimensions(0, 1, 0, 1, 0)), + ("potential", Dimensions(2, -3, 1, -1, 0)), + ("resistance", Dimensions(2, -3, 1, -2, 0)), + ("capacitance", Dimensions(-2, 4, -1, 2, 0)), + ("conductance", Dimensions(-2, 3, -1, 2, 0)), + ("magnetic_flux", Dimensions(2, -2, 1, -1, 0)), + ("magnetic_flux_density", Dimensions(0, -2, 1, -1, 0)), + ("inductance", Dimensions(2, -2, 1, -2, 0)), + ("temperature", Dimensions(temperature=1)), + ("dimensionless", Dimensions()), + ("angle", Dimensions(angle_hint=1)), + ("solid_angle", Dimensions(angle_hint=2)), + ("amount", Dimensions(moles_hint=1)), + ("concentration", Dimensions(length=-3, moles_hint=1)), + ] + + fid.write("\n#\n# Units by type\n#\n\n") + + for dimension_name, dimensions in dimension_names: + fid.write(f"\n{dimension_name} = UnitGroup(\n name = '{dimension_name}',\n units = [\n") + + for unit_name in unit_types[hash(dimensions)]: + fid.write(" " + unit_name + ",\n") + + fid.write("])\n") + + # List of dimensions + fid.write("\n\n") + fid.write("unit_group_names = [\n") + for dimension_name, _ in dimension_names: + fid.write(f" '{dimension_name}',\n") + fid.write("]\n\n") + + fid.write("unit_groups = {\n") + for dimension_name, _ in dimension_names: + fid.write(f" '{dimension_name}': {dimension_name},\n") + fid.write("}\n\n") + + # Load the units module + units = importlib.import_module(".units", "sasdata.quantities") + # Execute the code that we've created within that module + exec(fid.getvalue(), units.__dict__) + + +with StringIO() as fid: + si_unit_names = [values.plural for values in base_si_units + derived_si_units if values.plural != "grams"] + [ + "kilograms" + ] + si_unit_names.sort() + + fid.write("from sasdata.quantities.units import (\n") + + for name in si_unit_names: + fid.write(f" {name},\n") + + fid.write(")\n") + fid.write("\nall_si = [\n") + + for name in si_unit_names: + fid.write(f" {name},\n") + + fid.write("]\n") + + # Load the units module + si = importlib.import_module(".si", "sasdata.quantities") + # Execute the code that we've created within that module + exec(fid.getvalue(), si.__dict__) diff --git a/sasdata/quantities/_accessor_base.py b/sasdata/quantities/_accessor_base.py new file mode 100644 index 000000000..09a1b6e01 --- /dev/null +++ b/sasdata/quantities/_accessor_base.py @@ -0,0 +1,152 @@ +from typing import TypeVar + +import sasdata.quantities.units as units +from sasdata.data_backing import Dataset, Group +from sasdata.quantities.quantity import Quantity +from sasdata.quantities.unit_parser import parse_unit +from sasdata.quantities.units import Unit + + +# logger = logging.getLogger("Accessors") +class LoggerDummy: + def info(self, data): + print(data) +logger = LoggerDummy() + +DataType = TypeVar("DataType") +OutputType = TypeVar("OutputType") + + +class AccessorTarget: + def __init__(self, data: Group, verbose=False, prefix_tokens: tuple=()): + self._data = data + self.verbose = verbose + + self.prefix_tokens = list(prefix_tokens) + + def with_path_prefix(self, path_prexix: str): + """ Get an accessor that looks at a subtree of the metadata with the supplied prefix + + For example, accessors aiming at a.b, when the target it c.d will look at c.d.a.b + """ + return AccessorTarget(self._data, + verbose=self.verbose, + prefix_tokens=tuple(self.prefix_tokens + [path_prexix])) + + def get_value(self, path: str): + + tokens = self.prefix_tokens + path.split(".") + + if self.verbose: + logger.info(f"Finding: {path}") + logger.info(f"Full path: {tokens}") + + # Navigate the tree from the entry we need + + current_tree_position: Group | Dataset = self._data + + for token in tokens: + + options = token.split("|") + + if isinstance(current_tree_position, Group): + + found = False + for option in options: + if option in current_tree_position.children: + current_tree_position = current_tree_position.children[option] + found = True + + if self.verbose: + logger.info(f"Found option: {option}") + + if not found: + if self.verbose: + logger.info(f"Failed to find any of {options} on group {current_tree_position.name}. Options: " + + ",".join([key for key in current_tree_position.children])) + return None + + elif isinstance(current_tree_position, Dataset): + + found = False + for option in options: + if option in current_tree_position.attributes: + current_tree_position = current_tree_position.attributes[option] + found = True + + if self.verbose: + logger.info(f"Found option: {option}") + + if not found: + if self.verbose: + logger.info(f"Failed to find any of {options} on attribute {current_tree_position.name}. Options: " + + ",".join([key for key in current_tree_position.attributes])) + return None + + if self.verbose: + logger.info(f"Found value: {current_tree_position}") + + return current_tree_position.data + + + +class Accessor[DataType, OutputType]: + """ Base class """ + def __init__(self, target_object: AccessorTarget, value_target: str): + self.target_object = target_object + self.value_target = value_target + + @property + def value(self) -> OutputType | None: + return self.target_object.get_value(self.value_target) + +class StringAccessor(Accessor[str, str]): + """ String based fields """ + @property + def value(self) -> str | None: + return self.target_object.get_value(self.value_target) + +class FloatAccessor(Accessor[float, float]): + """ Float based fields """ + @property + def value(self) -> float | None: + return self.target_object.get_value(self.value_target) + + + + +class QuantityAccessor[DataType](Accessor[DataType, Quantity[DataType]]): + """ Base class for accessors that work with quantities that have units """ + def __init__(self, target_object: AccessorTarget, value_target: str, unit_target: str, default_unit=units.none): + super().__init__(target_object, value_target) + self._unit_target = unit_target + self.default_unit = default_unit + + def _numerical_part(self) -> DataType | None: + """ Numerical part of the data """ + return self.target_object.get_value(self.value_target) + + def _unit_part(self) -> str | None: + """ String form of units for the data """ + return self.target_object.get_value(self._unit_target) + + @property + def unit(self) -> Unit: + u = self._unit_part() + if u is None: + return self.default_unit + else: + return parse_unit(u) + + @property + def value(self) -> Quantity[DataType] | None: + if self._unit_part() is not None and self._numerical_part() is not None: + return Quantity(self._numerical_part(), self.unit) + return None + + @property + def quantity(self): + if self._unit_part() is not None and self._numerical_part() is not None: + return Quantity(self._numerical_part(), self.unit) + return None + diff --git a/sasdata/quantities/_autogen_warning.py b/sasdata/quantities/_autogen_warning.py deleted file mode 100644 index 9a8c9372e..000000000 --- a/sasdata/quantities/_autogen_warning.py +++ /dev/null @@ -1,79 +0,0 @@ -warning_text = """ - -This file is autogenerated! - -Do not edit by hand, instead edit the files that build it (%s) - - - - -DDDDDDDDDDDDD NNNNNNNN NNNNNNNN tttt -D::::::::::::DDD N:::::::N N::::::N ttt:::t -D:::::::::::::::DD N::::::::N N::::::N t:::::t -DDD:::::DDDDD:::::D N:::::::::N N::::::N t:::::t - D:::::D D:::::D ooooooooooo N::::::::::N N::::::N ooooooooooo ttttttt:::::ttttttt - D:::::D D:::::D oo:::::::::::oo N:::::::::::N N::::::N oo:::::::::::oo t:::::::::::::::::t - D:::::D D:::::Do:::::::::::::::o N:::::::N::::N N::::::No:::::::::::::::ot:::::::::::::::::t - D:::::D D:::::Do:::::ooooo:::::o N::::::N N::::N N::::::No:::::ooooo:::::otttttt:::::::tttttt - D:::::D D:::::Do::::o o::::o N::::::N N::::N:::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N:::::::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N::::::::::No::::o o::::o t:::::t - D:::::D D:::::D o::::o o::::o N::::::N N:::::::::No::::o o::::o t:::::t tttttt -DDD:::::DDDDD:::::D o:::::ooooo:::::o N::::::N N::::::::No:::::ooooo:::::o t::::::tttt:::::t -D:::::::::::::::DD o:::::::::::::::o N::::::N N:::::::No:::::::::::::::o tt::::::::::::::t -D::::::::::::DDD oo:::::::::::oo N::::::N N::::::N oo:::::::::::oo tt:::::::::::tt -DDDDDDDDDDDDD ooooooooooo NNNNNNNN NNNNNNN ooooooooooo ttttttttttt - - - - - - - - - dddddddd -EEEEEEEEEEEEEEEEEEEEEE d::::::d iiii tttt BBBBBBBBBBBBBBBBB -E::::::::::::::::::::E d::::::d i::::i ttt:::t B::::::::::::::::B -E::::::::::::::::::::E d::::::d iiii t:::::t B::::::BBBBBB:::::B -EE::::::EEEEEEEEE::::E d:::::d t:::::t BB:::::B B:::::B - E:::::E EEEEEE ddddddddd:::::d iiiiiiittttttt:::::ttttttt B::::B B:::::Byyyyyyy yyyyyyy - E:::::E dd::::::::::::::d i:::::it:::::::::::::::::t B::::B B:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d::::::::::::::::d i::::it:::::::::::::::::t B::::BBBBBB:::::B y:::::y y:::::y - E:::::::::::::::E d:::::::ddddd:::::d i::::itttttt:::::::tttttt B:::::::::::::BB y:::::y y:::::y - E:::::::::::::::E d::::::d d:::::d i::::i t:::::t B::::BBBBBB:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y y:::::y - E:::::E d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y:::::y - E:::::E EEEEEEd:::::d d:::::d i::::i t:::::t tttttt B::::B B:::::B y:::::::::y -EE::::::EEEEEEEE:::::Ed::::::ddddd::::::ddi::::::i t::::::tttt:::::t BB:::::BBBBBB::::::B y:::::::y -E::::::::::::::::::::E d:::::::::::::::::di::::::i tt::::::::::::::t B:::::::::::::::::B y:::::y -E::::::::::::::::::::E d:::::::::ddd::::di::::::i tt:::::::::::tt B::::::::::::::::B y:::::y -EEEEEEEEEEEEEEEEEEEEEE ddddddddd dddddiiiiiiii ttttttttttt BBBBBBBBBBBBBBBBB y:::::y - y:::::y - y:::::y - y:::::y - y:::::y - yyyyyyy - - - - dddddddd -HHHHHHHHH HHHHHHHHH d::::::d -H:::::::H H:::::::H d::::::d -H:::::::H H:::::::H d::::::d -HH::::::H H::::::HH d:::::d - H:::::H H:::::H aaaaaaaaaaaaa nnnn nnnnnnnn ddddddddd:::::d - H:::::H H:::::H a::::::::::::a n:::nn::::::::nn dd::::::::::::::d - H::::::HHHHH::::::H aaaaaaaaa:::::an::::::::::::::nn d::::::::::::::::d - H:::::::::::::::::H a::::ann:::::::::::::::nd:::::::ddddd:::::d - H:::::::::::::::::H aaaaaaa:::::a n:::::nnnn:::::nd::::::d d:::::d - H::::::HHHHH::::::H aa::::::::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::aaaa::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::a a:::::a n::::n n::::nd:::::d d:::::d -HH::::::H H::::::HHa::::a a:::::a n::::n n::::nd::::::ddddd::::::dd -H:::::::H H:::::::Ha:::::aaaa::::::a n::::n n::::n d:::::::::::::::::d -H:::::::H H:::::::H a::::::::::aa:::a n::::n n::::n d:::::::::ddd::::d -HHHHHHHHH HHHHHHHHH aaaaaaaaaa aaaa nnnnnn nnnnnn ddddddddd ddddd - - - -""" diff --git a/sasdata/quantities/_build_tables.py b/sasdata/quantities/_build_tables.py deleted file mode 100644 index ba07aee80..000000000 --- a/sasdata/quantities/_build_tables.py +++ /dev/null @@ -1,448 +0,0 @@ -""" -Builds a data file containing details of units -""" - -from collections import defaultdict, namedtuple - -import numpy as np -from _autogen_warning import warning_text -from _units_base import Dimensions - -Magnitude = namedtuple("Magnitude", ["symbol", "special_symbol", "latex_symbol", "name", "scale"]) - -bigger_magnitudes: list[Magnitude] = [ - Magnitude("E", None, None, "exa", 1e18), - Magnitude("P", None, None, "peta", 1e15), - Magnitude("T", None, None, "tera", 1e12), - Magnitude("G", None, None, "giga", 1e9), - Magnitude("M", None, None, "mega", 1e6), - Magnitude("k", None, None, "kilo", 1e3) ] - -smaller_magnitudes: list[Magnitude] = [ - Magnitude("m", None, None, "milli", 1e-3), - Magnitude("u", "µ", r"\mu", "micro", 1e-6), - Magnitude("n", None, None, "nano", 1e-9), - Magnitude("p", None, None, "pico", 1e-12), - Magnitude("f", None, None, "femto", 1e-15), - Magnitude("a", None, None, "atto", 1e-18)] - -unusual_magnitudes: list[Magnitude] = [ - Magnitude("d", None, None, "deci", 1e-1), - Magnitude("c", None, None, "centi", 1e-2) -] - -all_magnitudes = bigger_magnitudes + smaller_magnitudes - -UnitData = namedtuple("UnitData", ["symbol", "special_symbol", "latex_symbol", "singular", "plural", "scale", "length", "time", "mass", "current", "temperature", "moles_hint", "angle_hint", "magnitudes"]) - -# Length, time, mass, current, temperature -base_si_units = [ - UnitData("m", None, None, "meter", "meters", 1, 1, 0, 0, 0, 0, 0, 0, all_magnitudes + unusual_magnitudes), - UnitData("s", None, None, "second", "seconds", 1, 0, 1, 0, 0, 0, 0, 0, smaller_magnitudes), - UnitData("g", None, None, "gram", "grams", 1e-3, 0, 0, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("A", None, None, "ampere", "amperes", 1, 0, 0, 0, 1, 0, 0, 0, all_magnitudes), - UnitData("K", None, None, "kelvin", "kelvin", 1, 0, 0, 0, 0, 1, 0, 0, all_magnitudes) ] - -derived_si_units = [ - UnitData("Hz", None, None, "hertz", "hertz", 1, 0, -1, 0, 0, 0, 0, 0, all_magnitudes), - UnitData("N", None, None, "newton", "newtons", 1, 1, -2, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("Pa", None, None, "pascal", "pascals", 1, -1, -2, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("J", None, None, "joule", "joules", 1, 2, -2, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("W", None, None, "watt", "watts", 1, 2, -3, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("C", None, None, "coulomb", "coulombs", 1, 0, 1, 0, 1, 0, 0, 0, all_magnitudes), - UnitData("V", None, None, "volts", "volts", 1, 2, -3, 1, -1, 0, 0, 0, all_magnitudes), - UnitData("Ohm", "Ω", r"\Omega", "ohm", "ohms", 1, 2, -3, 1, -2, 0, 0, 0, all_magnitudes), - UnitData("F", None, None, "farad", "farads", 1, -2, 4, -1, 2, 0, 0, 0, all_magnitudes), - UnitData("S", None, None, "siemens", "siemens", 1, -2, 3, -1, 2, 0, 0, 0, all_magnitudes), - UnitData("Wb", None, None, "weber", "webers", 1, 2, -2, 1, -1, 0, 0, 0, all_magnitudes), - UnitData("T", None, None, "tesla", "tesla", 1, 0, -2, 1, -1, 0, 0, 0, all_magnitudes), - UnitData("H", None, None, "henry", "henry", 1, 2, -2, 1, -2, 0, 0, 0, all_magnitudes), -] - -non_si_dimensioned_units: list[tuple[str, str | None, str, str, float, int, int, int, int, int, int, int, list]] = [ - UnitData("Ang", "Å", r"\AA", "angstrom", "angstroms", 1e-10, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("micron", None, None, "micron", "microns", 1e-6, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("min", None, None, "minute", "minutes", 60, 0, 1, 0, 0, 0, 0, 0, []), - UnitData("h", None, None, "hour", "hours", 3600, 0, 1, 0, 0, 0, 0, 0, []), - UnitData("d", None, None, "day", "days", 3600*24, 0, 1, 0, 0, 0, 0, 0, []), - UnitData("y", None, None, "year", "years", 3600*24*365.2425, 0, 1, 0, 0, 0, 0, 0, []), - UnitData("deg", None, None, "degree", "degrees", 180/np.pi, 0, 0, 0, 0, 0, 0, 1, []), - UnitData("rad", None, None, "radian", "radians", 1, 0, 0, 0, 0, 0, 0, 1, []), - UnitData("rot", None, None, "rotation", "rotations", 2*np.pi, 0, 0, 0, 0, 0, 0, 1, []), - UnitData("sr", None, None, "stradian", "stradians", 1, 0, 0, 0, 0, 0, 0, 2, []), - UnitData("l", None, None, "litre", "litres", 1e-3, 3, 0, 0, 0, 0, 0, 0, []), - UnitData("eV", None, None, "electronvolt", "electronvolts", 1.602176634e-19, 2, -2, 1, 0, 0, 0, 0, all_magnitudes), - UnitData("au", None, None, "atomic mass unit", "atomic mass units", 1.660538921e-27, 0, 0, 1, 0, 0, 0, 0, []), - UnitData("mol", None, None, "mole", "moles", 6.02214076e23, 0, 0, 0, 0, 0, 1, 0, smaller_magnitudes), - UnitData("kgForce", None, None, "kg force", "kg force", 9.80665, 1, -2, 1, 0, 0, 0, 0, []), - UnitData("C", None, None, "degree Celsius", "degrees Celsius", 1, 0, 0, 0, 0, 1, 0, 0, []), - UnitData("miles", None, None, "mile", "miles", 1760*3*0.3048, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("yrd", None, None, "yard", "yards", 3*0.3048, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("ft", None, None, "foot", "feet", 0.3048, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("in", None, None, "inch", "inches", 0.0254, 1, 0, 0, 0, 0, 0, 0, []), - UnitData("lb", None, None, "pound", "pounds", 0.45359237, 0, 0, 1, 0, 0, 0, 0, []), - UnitData("lbf", None, None, "pound force", "pounds force", 4.448222, 1, -2, 1, 0, 0, 0, 0, []), - UnitData("oz", None, None, "ounce", "ounces", 0.45359237/16, 0, 0, 1, 0, 0, 0, 0, []), - UnitData("psi", None, None, "pound force per square inch", "pounds force per square inch", 4.448222/(0.0254**2), -1, -2, 1, 0, 0, 0, 0, []), -] - -non_si_dimensionless_units: list[tuple[str, str | None, str, str, float, int, int, int, int, int, int, int, list]] = [ - UnitData("none", None, None, "none", "none", 1, 0, 0, 0, 0, 0, 0, 0, []), - UnitData("percent", "%", r"\%", "percent", "percent", 0.01, 0, 0, 0, 0, 0, 0, 0, []) -] - -non_si_units = non_si_dimensioned_units + non_si_dimensionless_units - -# TODO: -# Add Hartree? Rydberg? Bohrs? -# Add CGS - -# Two stages of aliases, to make sure units don't get lost - -aliases_1 = { - "A": ["Amps", "amps"], - "C": ["Coulombs", "coulombs"] -} - -aliases_2 = { - "y": ["yr", "year"], - "d": ["day"], - "h": ["hr", "hour"], - "Ang": ["A", "Å"], - "au": ["amu"], - "percent": ["%"], - "deg": ["degr", "Deg", "degree", "degrees", "Degrees"], - "none": ["Counts", "counts", "cnts", "Cnts", "a.u.", "fraction", "Fraction"], - "K": ["C"] # Ugh, cansas -} - - - -all_units = base_si_units + derived_si_units + non_si_units - -encoding = "utf-8" - -def format_name(name: str): - return name.lower().replace(" ", "_") - -with open("units.py", 'w', encoding=encoding) as fid: - - # Write warning header - fid.write('"""'+(warning_text%"_build_tables.py, _units_base.py")+'"""') - - # Write in class definitions - fid.write("\n\n" - "#\n" - "# Included from _units_base.py\n" - "#\n\n") - - with open("_units_base.py") as base: - for line in base: - # unicode_superscript is a local module when called from - # _unit_tables.py but a submodule of sasdata.quantities - # when called from units.py. This condition patches the - # line when the copy is made. - if line.startswith("from unicode_superscript"): - fid.write(line.replace("from unicode_superscript", "from sasdata.quantities.unicode_superscript")) - else: - fid.write(line) - - # Write in unit definitions - fid.write("\n\n" - "#\n" - "# Specific units \n" - "#\n\n") - - symbol_lookup = {} - unit_types_temp = defaultdict(list) # Keep track of unit types - unit_types = defaultdict(list) - - for unit_def in all_units: - - formatted_plural = format_name(unit_def.plural) - formatted_singular = format_name(unit_def.singular) - - dimensions = Dimensions(unit_def.length, unit_def.time, unit_def.mass, unit_def.current, unit_def.temperature, unit_def.moles_hint, unit_def.angle_hint) - fid.write(f"{formatted_plural} = NamedUnit({unit_def.scale}, Dimensions({unit_def.length}, {unit_def.time}, {unit_def.mass}, {unit_def.current}, {unit_def.temperature}, {unit_def.moles_hint}, {unit_def.angle_hint})," - f"name='{formatted_plural}'," - f"ascii_symbol='{unit_def.symbol}'," - f"{'' if unit_def.latex_symbol is None else f"""latex_symbol=r'{unit_def.latex_symbol}',""" }" - f"symbol='{unit_def.symbol if unit_def.special_symbol is None else unit_def.special_symbol}')\n") - - symbol_lookup[unit_def.symbol] = formatted_plural - if unit_def.special_symbol is not None: - symbol_lookup[unit_def.special_symbol] = formatted_plural - - unit_types_temp[hash(dimensions)].append( - (unit_def.symbol, unit_def.special_symbol, formatted_singular, formatted_plural, unit_def.scale, dimensions)) - - unit_types[hash(dimensions)].append(formatted_plural) - - for mag in unit_def.magnitudes: - - # Work out the combined symbol, accounts for unicode or not - combined_special_symbol = (mag.symbol if mag.special_symbol is None else mag.special_symbol) + \ - (unit_def.symbol if unit_def.special_symbol is None else unit_def.special_symbol) - - combined_symbol = mag.symbol + unit_def.symbol - - # Combined unit name - combined_name_singular = f"{mag.name}{formatted_singular}" - combined_name_plural = f"{mag.name}{formatted_plural}" - - combined_scale = unit_def.scale * mag.scale - - latex_symbol = None - if unit_def.latex_symbol is not None and mag.latex_symbol is not None: - latex_symbol = f"{{{mag.latex_symbol}}}{unit_def.latex_symbol}" - elif unit_def.latex_symbol is not None: - latex_symbol = f"{mag.symbol}{unit_def.latex_symbol}" - elif mag.latex_symbol is not None: - latex_symbol = f"{{{mag.latex_symbol}}}{unit_def.symbol}" - - # Units - dimensions = Dimensions(unit_def.length, unit_def.time, unit_def.mass, unit_def.current, unit_def.temperature, unit_def.moles_hint, unit_def.angle_hint) - fid.write(f"{combined_name_plural} = NamedUnit({combined_scale}, " - f"Dimensions({unit_def.length}, {unit_def.time}, {unit_def.mass}, {unit_def.current}, {unit_def.temperature}, {unit_def.moles_hint}, {unit_def.angle_hint})," - f"name='{combined_name_plural}'," - f"ascii_symbol='{combined_symbol}'," - f"{'' if latex_symbol is None else f"""latex_symbol=r'{latex_symbol}',""" }" - f"symbol='{combined_special_symbol}')\n") - - symbol_lookup[combined_symbol] = combined_name_plural - symbol_lookup[combined_special_symbol] = combined_name_plural - - unit_types_temp[hash(dimensions)].append( - (combined_symbol, combined_special_symbol, combined_name_singular, - combined_name_plural, combined_scale, dimensions)) - - unit_types[hash(dimensions)].append(combined_name_plural) - - # - # Higher dimensioned types - # - - length_units = unit_types_temp[hash(Dimensions(length=1))] - time_units = unit_types_temp[hash(Dimensions(time=1))] - mass_units = unit_types_temp[hash(Dimensions(mass=1))] - amount_units = unit_types_temp[hash(Dimensions(moles_hint=1))] - - # Length based - for symbol, special_symbol, singular, plural, scale, _ in length_units: - for prefix, power, name, unicode_suffix in [ - ("square_", 2, plural, '²'), - ("cubic_", 3, plural, '³'), - ("per_", -1, singular, '⁻¹'), - ("per_square_", -2, singular,'⁻²'), - ("per_cubic_", -3, singular,'⁻³')]: - - dimensions = Dimensions(length=power) - unit_name = prefix + name - unit_special_symbol = (symbol if special_symbol is None else special_symbol) + unicode_suffix - unit_symbol = symbol + f"^{power}" - fid.write(f"{unit_name} = NamedUnit({scale**power}, Dimensions(length={power}), " - f"name='{unit_name}', " - f"ascii_symbol='{unit_symbol}', " - f"symbol='{unit_special_symbol}')\n") - - unit_types[hash(dimensions)].append(unit_name) - - # Speed and acceleration - for length_symbol, length_special_symbol, _, length_name, length_scale, _ in length_units: - for time_symbol, time_special_symbol, time_name, _, time_scale, _ in time_units: - speed_name = length_name + "_per_" + time_name - accel_name = length_name + "_per_square_" + time_name - - speed_dimensions = Dimensions(length=1, time=-1) - accel_dimensions = Dimensions(length=1, time=-2) - - length_special = length_special_symbol if length_special_symbol is not None else length_symbol - time_special = time_special_symbol if time_special_symbol is not None else time_symbol - - fid.write(f"{speed_name} " - f"= NamedUnit({length_scale / time_scale}, " - f"Dimensions(length=1, time=-1), " - f"name='{speed_name}', " - f"ascii_symbol='{length_symbol}/{time_symbol}', " - f"symbol='{length_special}{time_special}⁻¹')\n") - - fid.write(f"{accel_name} = NamedUnit({length_scale / time_scale**2}, " - f"Dimensions(length=1, time=-2), " - f"name='{accel_name}', " - f"ascii_symbol='{length_symbol}/{time_symbol}^2', " - f"symbol='{length_special}{time_special}⁻²')\n") - - unit_types[hash(speed_dimensions)].append(speed_name) - unit_types[hash(accel_dimensions)].append(accel_name) - - # Density - for length_symbol, length_special_symbol, length_name, _, length_scale, _ in length_units: - for mass_symbol, mass_special_symbol, _, mass_name, mass_scale, _ in mass_units: - - name = mass_name + "_per_cubic_" + length_name - - dimensions = Dimensions(length=-3, mass=1) - - mass_special = mass_symbol if mass_special_symbol is None else mass_special_symbol - length_special = length_symbol if length_special_symbol is None else length_special_symbol - - fid.write(f"{name} " - f"= NamedUnit({mass_scale / length_scale**3}, " - f"Dimensions(length=-3, mass=1), " - f"name='{name}', " - f"ascii_symbol='{mass_symbol} {length_symbol}^-3', " - f"symbol='{mass_special}{length_special}⁻³')\n") - - unit_types[hash(dimensions)].append(name) - - # Concentration - for length_symbol, length_special_symbol, length_name, _, length_scale, _ in length_units: - for amount_symbol, amount_special_symbol, _, amount_name, amount_scale, _ in amount_units: - - name = amount_name + "_per_cubic_" + length_name - - dimensions = Dimensions(length=-3, moles_hint=1) - - length_special = length_symbol if length_special_symbol is None else length_special_symbol - amount_special = amount_symbol if amount_special_symbol is None else amount_special_symbol - - fid.write(f"{name} " - f"= NamedUnit({amount_scale / length_scale**3}, " - f"Dimensions(length=-3, moles_hint=1), " - f"name='{name}', " - f"ascii_symbol='{amount_symbol} {length_symbol}^-3', " - f"symbol='{amount_special}{length_special}⁻³')\n") - - unit_types[hash(dimensions)].append(name) - - # TODO: Torque, Momentum, Entropy - - # - # Add aliases to symbol lookup table - # - - # Apply the alias transforms sequentially - for aliases in [aliases_1, aliases_2]: - for base_name in aliases: - alias_list = aliases[base_name] - for alias in alias_list: - symbol_lookup[alias] = symbol_lookup[base_name] - - # - # Write out the symbol lookup table - # - fid.write("\n#\n# Lookup table from symbols to units\n#\n\n") - fid.write("symbol_lookup = {\n") - for k in symbol_lookup: - if k != "none": - fid.write(f' "{k}": {symbol_lookup[k]},\n') - fid.write("}\n\n") - - # - # Collections of units by type - # - - dimension_names = [ - ("length", Dimensions(length=1)), - ("area", Dimensions(length=2)), - ("volume", Dimensions(length=3)), - ("inverse_length", Dimensions(length=-1)), - ("inverse_area", Dimensions(length=-2)), - ("inverse_volume", Dimensions(length=-3)), - ("time", Dimensions(time=1)), - ("rate", Dimensions(time=-1)), - ("speed", Dimensions(length=1, time=-1)), - ("acceleration", Dimensions(length=1, time=-2)), - ("density", Dimensions(length=-3, mass=1)), - ("force", Dimensions(1, -2, 1, 0, 0)), - ("pressure", Dimensions(-1, -2, 1, 0, 0)), - ("energy", Dimensions(2, -2, 1, 0, 0)), - ("power", Dimensions(2, -3, 1, 0, 0)), - ("charge", Dimensions(0, 1, 0, 1, 0)), - ("potential", Dimensions(2, -3, 1, -1, 0)), - ("resistance", Dimensions(2, -3, 1, -2, 0)), - ("capacitance", Dimensions(-2, 4, -1, 2, 0)), - ("conductance", Dimensions(-2, 3, -1, 2, 0)), - ("magnetic_flux", Dimensions(2, -2, 1, -1, 0)), - ("magnetic_flux_density", Dimensions(0, -2, 1, -1, 0)), - ("inductance", Dimensions(2, -2, 1, -2, 0)), - ("temperature", Dimensions(temperature=1)), - ("dimensionless", Dimensions()), - ("angle", Dimensions(angle_hint=1)), - ("solid_angle", Dimensions(angle_hint=2)), - ("amount", Dimensions(moles_hint=1)), - ("concentration", Dimensions(length=-3, moles_hint=1)), - ] - - fid.write("\n#\n# Units by type \n#\n\n") - - for dimension_name, dimensions in dimension_names: - - - fid.write(f"\n" - f"{dimension_name} = UnitGroup(\n" - f" name = '{dimension_name}', \n" - f" units = [\n") - - for unit_name in unit_types[hash(dimensions)]: - fid.write(" " + unit_name + ",\n") - - fid.write("])\n") - - - # List of dimensions - fid.write("\n\n") - fid.write("unit_group_names = [\n") - for dimension_name, _ in dimension_names: - fid.write(f" '{dimension_name}',\n") - fid.write("]\n\n") - - fid.write("unit_groups = {\n") - for dimension_name, _ in dimension_names: - fid.write(f" '{dimension_name}': {dimension_name},\n") - fid.write("}\n\n") - - -with open("accessors.py", 'w', encoding=encoding) as fid: - - - fid.write('"""'+(warning_text%"_build_tables.py, _accessor_base.py")+'"""\n\n') - - with open("_accessor_base.py") as base: - for line in base: - fid.write(line) - - for dimension_name, dimensions in dimension_names: - - accessor_name = dimension_name.capitalize().replace("_", "") + "Accessor" - - fid.write(f"\n" - f"class {accessor_name}[T](QuantityAccessor[T]):\n" - f" dimension_name = '{dimension_name}'\n" - f" \n") - - for unit_name in unit_types[hash(dimensions)]: - fid.write(f" @property\n" - f" def {unit_name}(self) -> T:\n" - f" quantity = self.quantity\n" - f" if quantity is None:\n" - f" return None\n" - f" else:\n" - f" return quantity.in_units_of(units.{unit_name})\n" - f"\n") - - fid.write("\n") - -with open("si.py", 'w') as fid: - - fid.write('"""'+(warning_text%"_build_tables.py")+'"""\n\n') - si_unit_names = [values.plural for values in base_si_units + derived_si_units if values.plural != "grams"] + ["kilograms"] - - for name in si_unit_names: - - fid.write(f"from sasdata.quantities.units import {name}\n") - - fid.write("\nall_si = [\n") - for name in si_unit_names: - fid.write(f" {name},\n") - fid.write("]\n") diff --git a/sasdata/quantities/_units_base.py b/sasdata/quantities/_units_base.py index 9e6401b53..ece78eec5 100644 --- a/sasdata/quantities/_units_base.py +++ b/sasdata/quantities/_units_base.py @@ -1,11 +1,28 @@ -from collections.abc import Sequence -from dataclasses import dataclass + + + + + + + + + +import re from fractions import Fraction from typing import Self import numpy as np -from unicode_superscript import int_as_unicode_superscript +_ascii_version = "0123456789-" +_unicode_version = "⁰¹²³⁴⁵⁶⁷⁸⁹⁻" + +def int_as_unicode_superscript(number: int): + string = str(number) + + for old, new in zip(_ascii_version, _unicode_version): + string = string.replace(old, new) + + return string class DimensionError(Exception): pass @@ -72,7 +89,7 @@ def __truediv__(self: Self, other: Self): def __pow__(self, power: int | float): - if not isinstance(power, (int | float)): + if not isinstance(power, (int, float)): return NotImplemented frac = Fraction(power).limit_denominator(500) # Probably way bigger than needed, 10 would probably be fine @@ -111,15 +128,15 @@ def __pow__(self, power: int | float): (self.moles_hint * numerator) // denominator, (self.angle_hint * numerator) // denominator) - def __eq__(self: Self, other: Self): + def __eq__(self: Self, other: object) -> bool: if isinstance(other, Dimensions): - return (self.length == other.length and - self.time == other.time and - self.mass == other.mass and - self.current == other.current and - self.temperature == other.temperature and - self.moles_hint == other.moles_hint and - self.angle_hint == other.angle_hint) + return (self.length == other.length + and self.time == other.time + and self.mass == other.mass + and self.current == other.current + and self.temperature == other.temperature + and self.moles_hint == other.moles_hint + and self.angle_hint == other.angle_hint) return NotImplemented @@ -210,9 +227,6 @@ def __init__(self, self.scale = si_scaling_factor self.dimensions = dimensions - def _components(self, tokens: Sequence["UnitToken"]): - pass - def __mul__(self: Self, other: "Unit"): if isinstance(other, Unit): return Unit(self.scale * other.scale, self.dimensions * other.dimensions) @@ -231,7 +245,7 @@ def __truediv__(self: Self, other: "Unit"): def __rtruediv__(self: Self, other: "Unit"): if isinstance(other, Unit): return Unit(other.scale / self.scale, other.dimensions / self.dimensions) - elif isinstance(other, (int | float)): + elif isinstance(other, (int, float)): return Unit(other / self.scale, self.dimensions ** -1) else: return NotImplemented @@ -246,17 +260,15 @@ def __pow__(self, power: int | float): def equivalent(self: Self, other: "Unit"): return self.dimensions == other.dimensions - def __eq__(self: Self, other: "Unit"): - return self.equivalent(other) and np.abs(np.log(self.scale/other.scale)) < 1e-5 + def __eq__(self: Self, other: object) -> bool: + if isinstance(other, Unit): + return self.equivalent(other) and np.abs(np.log(self.scale/other.scale)) < 1e-5 + return False def si_equivalent(self): """ Get the SI unit corresponding to this unit""" return Unit(1, self.dimensions) - def _format_unit(self, format_process: list["UnitFormatProcessor"]): - for processor in format_process: - pass - def __repr__(self): if self.scale == 1: # We're in SI @@ -265,9 +277,6 @@ def __repr__(self): else: return f"Unit[{self.scale}, {self.dimensions}]" - @staticmethod - def parse(unit_string: str) -> "Unit": - pass class NamedUnit(Unit): """ Units, but they have a name, and a symbol @@ -316,47 +325,198 @@ def startswith(self, prefix: str) -> bool: or (self.ascii_symbol is not None and self.ascii_symbol.lower().startswith(prefix)) \ or (self.symbol is not None and self.symbol.lower().startswith(prefix)) -# -# Parsing plan: -# Require unknown amounts of units to be explicitly positive or negative? -# -# - - - -@dataclass -class ProcessedUnitToken: - """ Mid processing representation of formatted units """ - base_string: str - exponent_string: str - latex_exponent_string: str - exponent: int - -class UnitFormatProcessor: - """ Represents a step in the unit processing pipeline""" - def apply(self, scale, dimensions) -> tuple[ProcessedUnitToken, float, Dimensions]: - """ This will be called to deal with each processing stage""" - -class RequiredUnitFormatProcessor(UnitFormatProcessor): - """ This unit is required to exist in the formatting """ - def __init__(self, unit: Unit, power: int = 1): - self.unit = unit - self.power = power - def apply(self, scale, dimensions) -> tuple[float, Dimensions, ProcessedUnitToken]: - new_scale = scale / (self.unit.scale * self.power) - new_dimensions = self.unit.dimensions / (dimensions**self.power) - token = ProcessedUnitToken(self.unit, self.power) - - return new_scale, new_dimensions, token - -class GreedyAbsDimensionUnitFormatProcessor(UnitFormatProcessor): - """ This processor minimises the dimensionality of the unit by multiplying by as many - units of the specified type as needed """ - def __init__(self, unit: Unit): - self.unit = unit - - def apply(self, scale, dimensions) -> tuple[ProcessedUnitToken, float, Dimensions]: - pass + +class UnknownUnit(NamedUnit): + """A unit for an unknown quantity + + While this library attempts to handle all known SI units, it is + likely that users will want to express quantities of arbitrary + units (for example, calculating donuts per person for a meeting). + The arbitrary unit allows for these unforseeable quantities.""" + + def __init__(self, + numerator: str | list[str] | dict[str, int | float], + denominator: None | list[str] | dict[str, int | float] = None): + if numerator is None: + return TypeError + self._numerator = UnknownUnit._parse_arg(numerator) + self._denominator = UnknownUnit._parse_arg(denominator) + self._unit = NamedUnit(1, Dimensions(), "") # Unitless + + super().__init__(si_scaling_factor=1, dimensions=self._unit.dimensions, symbol=self._name()) + + @staticmethod + def _parse_arg(arg: str | list[str] | dict[str, int | float] | None) -> dict[str, int | float]: + """Parse the different possibilities for constructor arguments + + Both the numerator and the denominator could be a string, a + list of strings, or a dict. Parse any of these values into a + dictionary of names and powers. + + """ + match arg: + case None: + return {} + case str(): + return {UnknownUnit._valid_name(arg): 1} + case list(): + result: dict[str, int | float] = {} + for key in arg: + if key in result: + result[key] += 1 + else: + UnknownUnit._valid_name(key) + result[key] = 1 + return result + case dict(): + for key in arg: + UnknownUnit._valid_name(key) + return arg + case _: + raise TypeError + + @staticmethod + def _valid_name(name: str) -> str: + """Confirms that the name of a unit is appropriate + + This mostly confirms that the unit does not contain math + operators that would act on other units, like / or ^ + """ + + if re.search(r"[*/^\s]", name): + raise RuntimeError(f'Unit name "{name}" contains invalid characters (*, /, ^, or whitespace)') + + return name + + def _name(self): + num = [] + for key, value in self._numerator.items(): + if value == 1: + num.append(key) + else: + num.append(f"{key}^{value}") + den = [] + for key, value in self._denominator.items(): + den.append(f"{key}^{-value}") + num.sort() + den.sort() + return " ".join(num + den) + + def __eq__(self, other): + match other: + case UnknownUnit(): + return self._numerator == other._numerator and self._denominator == other._denominator and self._unit == other._unit + case Unit(): + return not self._numerator and not self._denominator and self._unit == other + case _: + return False + + + def __mul__(self: Self, other: "Unit"): + match other: + case UnknownUnit(): + num = dict(self._numerator) + for key in other._numerator: + if key in num: + num[key] += other._numerator[key] + else: + num[key] = other._numerator[key] + den = dict(self._denominator) + for key in other._denominator: + if key in den: + den[key] += other._denominator[key] + else: + den[key] = other._denominator[key] + result = UnknownUnit(num, den) + result._unit *= other._unit + return result._reduce() + case NamedUnit() | Unit() | int() | float(): + result = UnknownUnit(self._numerator, self._denominator) + result._unit *= other + return result + case _: + return NotImplemented + + def __rmul__(self: Self, other): + return self * other + + def __truediv__(self: Self, other: "Unit") -> "UnknownUnit": + match other: + case UnknownUnit(): + num = dict(self._numerator) + for key in other._denominator: + if key in num: + num[key] += other._denominator[key] + else: + num[key] = other._denominator[key] + den = dict(self._denominator) + for key in other._numerator: + if key in den: + den[key] += other._numerator[key] + else: + den[key] = other._numerator[key] + result = UnknownUnit(num, den) + result._unit /= other._unit + return result._reduce() + case NamedUnit() | Unit() | int() | float(): + result = UnknownUnit(self._numerator, self._denominator) + result._unit /= other + return result + case _: + return NotImplemented + + def __rtruediv__(self: Self, other: "Unit") -> "UnknownUnit": + return (self/other) ** -1 + + def __pow__(self, power: int | float) -> "UnknownUnit": + match power: + case int() | float(): + num = {key: value * power for key, value in self._numerator.items()} + den = {key: value * power for key, value in self._denominator.items()} + if power < 0: + num, den = den, num + num = {k: -v for k,v in num.items()} + den = {k: -v for k,v in den.items()} + + result = UnknownUnit(num, den) + result._unit = self._unit ** power + return result + case _: + return NotImplemented + + def equivalent(self: Self, other: "Unit"): + match other: + case UnknownUnit(): + return self._unit.equivalent(other._unit) and sorted(self._numerator) == sorted(other._numerator) and sorted(self._denominator) == sorted(other._denominator) + case _: + return False + + def _reduce(self): + """Remove redundant units""" + for k in self._denominator: + if k in self._numerator: + common = min(self._numerator[k], self._denominator[k]) + self._numerator[k] -= common + self._denominator[k] -= common + dead_nums = [k for k in self._numerator if self._numerator[k] == 0] + for k in dead_nums: + del self._numerator[k] + dead_dens = [k for k in self._denominator if self._denominator[k] == 0] + for k in dead_dens: + del self._denominator[k] + return self + + def __str__(self): + result = self._name() + if type(self._unit) is NamedUnit and self._unit.name.strip(): + result += f" {self._unit.name.strip()}" + if type(self._unit) is Unit and str(self._unit).strip(): + result += f" {str(self._unit).strip()}" + return result + + def __repr__(self): + return str(self) + class UnitGroup: """ A group of units that all have the same dimensionality """ diff --git a/sasdata/quantities/numerical_encoding.py b/sasdata/quantities/numerical_encoding.py index cab930d55..6e2e53265 100644 --- a/sasdata/quantities/numerical_encoding.py +++ b/sasdata/quantities/numerical_encoding.py @@ -1,72 +1,72 @@ -import base64 -import struct - -import numpy as np -from scipy.sparse import coo_array, coo_matrix, csc_array, csc_matrix, csr_array, csr_matrix - - -def numerical_encode(obj: int | float | np.ndarray | coo_matrix | coo_array | csr_matrix | csr_array | csc_matrix | csc_array): - - if isinstance(obj, int): - return {"type": "int", - "value": obj} - - elif isinstance(obj, float): - return {"type": "float", - "value": base64.b64encode(bytearray(struct.pack('d', obj))).decode("utf-8")} - - elif isinstance(obj, np.ndarray): - return { - "type": "numpy", - "value": base64.b64encode(obj.tobytes()).decode("utf-8"), - "dtype": obj.dtype.str, - "shape": list(obj.shape) - } - - elif isinstance(obj, (coo_matrix | coo_array | csr_matrix | csr_array | csc_matrix | csc_array)): - - output = { - "type": obj.__class__.__name__, # not robust to name changes, but more concise - "dtype": obj.dtype.str, - "shape": list(obj.shape) - } - - if isinstance(obj, (coo_array | coo_matrix)): - - output["data"] = numerical_encode(obj.data) - output["coords"] = [numerical_encode(coord) for coord in obj.coords] - - - elif isinstance(obj, (csr_array | csr_matrix)): - pass - - - elif isinstance(obj, (csc_array | csc_matrix)): - - pass - - - return output - - else: - raise TypeError(f"Cannot serialise object of type: {type(obj)}") - -def numerical_decode(data: dict[str, str | int | list[int]]) -> int | float | np.ndarray | coo_matrix | coo_array | csr_matrix | csr_array | csc_matrix | csc_array: - obj_type = data["type"] - - match obj_type: - case "int": - return int(data["value"]) - - case "float": - return struct.unpack('d', base64.b64decode(data["value"]))[0] - - case "numpy": - value = base64.b64decode(data["value"]) - dtype = np.dtype(data["dtype"]) - shape = tuple(data["shape"]) - return np.frombuffer(value, dtype=dtype).reshape(*shape) - - case _: - raise ValueError(f"Cannot decode objects of type '{obj_type}'") - +import base64 +import struct + +import numpy as np +from scipy.sparse import coo_array, coo_matrix, csc_array, csc_matrix, csr_array, csr_matrix + + +def numerical_encode(obj: int | float | np.ndarray | coo_matrix | coo_array | csr_matrix | csr_array | csc_matrix | csc_array): + + if isinstance(obj, int): + return {"type": "int", + "value": obj} + + elif isinstance(obj, float): + return {"type": "float", + "value": base64.b64encode(bytearray(struct.pack('d', obj))).decode("utf-8")} + + elif isinstance(obj, np.ndarray): + return { + "type": "numpy", + "value": base64.b64encode(obj.tobytes()).decode("utf-8"), + "dtype": obj.dtype.str, + "shape": list(obj.shape) + } + + elif isinstance(obj, (coo_matrix, coo_array, csr_matrix, csr_array, csc_matrix, csc_array)): + + output = { + "type": obj.__class__.__name__, # not robust to name changes, but more concise + "dtype": obj.dtype.str, + "shape": list(obj.shape) + } + + if isinstance(obj, (coo_array, coo_matrix)): + + output["data"] = numerical_encode(obj.data) + output["coords"] = [numerical_encode(coord) for coord in obj.coords] + + + elif isinstance(obj, (csr_array, csr_matrix)): + pass + + + elif isinstance(obj, (csc_array, csc_matrix)): + + pass + + + return output + + else: + raise TypeError(f"Cannot serialise object of type: {type(obj)}") + +def numerical_decode(data: dict[str, str | int | list[int]]) -> int | float | np.ndarray | coo_matrix | coo_array | csr_matrix | csr_array | csc_matrix | csc_array: + obj_type = data["type"] + + match obj_type: + case "int": + return int(data["value"]) + + case "float": + return struct.unpack('d', base64.b64decode(data["value"]))[0] + + case "numpy": + value = base64.b64decode(data["value"]) + dtype = np.dtype(data["dtype"]) + shape = tuple(data["shape"]) + return np.frombuffer(value, dtype=dtype).reshape(*shape) + + case _: + raise ValueError(f"Cannot decode objects of type '{obj_type}'") + diff --git a/sasdata/quantities/operations_examples.py b/sasdata/quantities/operations_examples.py new file mode 100644 index 000000000..29b50ccc0 --- /dev/null +++ b/sasdata/quantities/operations_examples.py @@ -0,0 +1,11 @@ +from sasdata.quantities.operations import Mul, Variable + +x = Variable("x") +y = Variable("y") +z = Variable("z") +f = Mul(Mul(x, y), z) + + +dfdx = f.derivative(x).derivative(y).derivative(z) + +print(dfdx.summary()) diff --git a/sasdata/quantities/plotting.py b/sasdata/quantities/plotting.py index b90f017c2..d4a99295c 100644 --- a/sasdata/quantities/plotting.py +++ b/sasdata/quantities/plotting.py @@ -1,23 +1,23 @@ -import matplotlib.pyplot as plt -from numpy.typing import ArrayLike - -from sasdata.quantities.quantity import NamedQuantity, Quantity - - -def quantity_plot(x: Quantity[ArrayLike], y: Quantity[ArrayLike], *args, **kwargs): - plt.plot(x.value, y.value, *args, **kwargs) - - x_name = x.name if isinstance(x, NamedQuantity) else "x" - y_name = y.name if isinstance(y, NamedQuantity) else "y" - - plt.xlabel(f"{x_name} / {x.units}") - plt.ylabel(f"{y_name} / {y.units}") - -def quantity_scatter(x: Quantity[ArrayLike], y: Quantity[ArrayLike], *args, **kwargs): - plt.scatter(x.value, y.value, *args, **kwargs) - - x_name = x.name if isinstance(x, NamedQuantity) else "x" - y_name = y.name if isinstance(y, NamedQuantity) else "y" - - plt.xlabel(f"{x_name} / {x.units}") - plt.ylabel(f"{y_name} / {y.units}") +import matplotlib.pyplot as plt +from numpy.typing import ArrayLike + +from sasdata.quantities.quantity import NamedQuantity, Quantity + + +def quantity_plot(x: Quantity[ArrayLike], y: Quantity[ArrayLike], *args, **kwargs): + plt.plot(x.value, y.value, *args, **kwargs) + + x_name = x.name if isinstance(x, NamedQuantity) else "x" + y_name = y.name if isinstance(y, NamedQuantity) else "y" + + plt.xlabel(f"{x_name} / {x.units}") + plt.ylabel(f"{y_name} / {y.units}") + +def quantity_scatter(x: Quantity[ArrayLike], y: Quantity[ArrayLike], *args, **kwargs): + plt.scatter(x.value, y.value, *args, **kwargs) + + x_name = x.name if isinstance(x, NamedQuantity) else "x" + y_name = y.name if isinstance(y, NamedQuantity) else "y" + + plt.xlabel(f"{x_name} / {x.units}") + plt.ylabel(f"{y_name} / {y.units}") diff --git a/sasdata/quantities/quantity.py b/sasdata/quantities/quantity.py index 7cc8f853e..213c7aadd 100644 --- a/sasdata/quantities/quantity.py +++ b/sasdata/quantities/quantity.py @@ -1,5 +1,6 @@ import hashlib import json +import math from typing import Any, Self, TypeVar, Union import h5py @@ -14,36 +15,102 @@ T = TypeVar("T") +################### Quantity based operations, need to be here to avoid cyclic dependencies ##################### +def transpose(a: Union["Quantity[ArrayLike]", ArrayLike], axes: tuple | None = None): + """Transpose an array or an array based quantity, can also do reordering of axes""" + if isinstance(a, Quantity): + if axes is None: + return DerivedQuantity( + value=np.transpose(a.value, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Transpose, a.history), + ) -################### Quantity based operations, need to be here to avoid cyclic dependencies ##################### + else: + return DerivedQuantity( + value=np.transpose(a.value, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Transpose, a.history, axes=axes), + ) -def transpose(a: Union["Quantity[ArrayLike]", ArrayLike], axes: tuple | None = None): - """ Transpose an array or an array based quantity, can also do reordering of axes""" + else: + return np.transpose(a, axes=axes) + + +def trace(a: Union["Quantity[ArrayLike]", ArrayLike], offset: int = 0, axis1: int = 0, axis2: int = 1): + """Find the trace of an array or an array based quantity.""" if isinstance(a, Quantity): + return DerivedQuantity( + value=np.trace(a.value, offset, axis1, axis2), + units=a.units, + history=QuantityHistory.apply_operation(Trace, a.history, offset=offset, axis1=axis1, axis2=axis2), + ) + else: + return np.trace(a, offset, axis1, axis2) + + +def matinv(a: Union["Quantity[ArrayLike]", ArrayLike]): + """Find the inverse of a matrix.""" + if isinstance(a, Quantity): + return DerivedQuantity( + value=np.linalg.inv(a.value), + units=a.units, + history=QuantityHistory.apply_operation(MatInv, a.history), + ) + else: + return np.linalg.inv(a) + +def norm_1(a: Union["Quantity[ArrayLike]", ArrayLike], axes: int | tuple[int] | None = None): + """Caculate the 1-norm of an array or an array based quantity.""" + if isinstance(a, Quantity): if axes is None: - return DerivedQuantity(value=np.transpose(a.value, axes=axes), - units=a.units, - history=QuantityHistory.apply_operation(Transpose, a.history)) + return DerivedQuantity( + value=np.linalg.norm(a.value, ord=1, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Norm_1, a.history), + ) else: - return DerivedQuantity(value=np.transpose(a.value, axes=axes), - units=a.units, - history=QuantityHistory.apply_operation(Transpose, a.history, axes=axes)) + return DerivedQuantity( + value=np.linalg.norm(a.value, ord=1, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Norm_1, a.history, axes=axes), + ) else: - return np.transpose(a, axes=axes) + return np.linalg.norm(a.value, ord=1, axes=axes) + + +def norm_2(a: Union["Quantity[ArrayLike]", ArrayLike], axes: int | tuple[int] | None = None): + """Caculate the 2-norm of an array or an array based quantity.""" + if isinstance(a, Quantity): + if axes is None: + return DerivedQuantity( + value=np.linalg.norm(a.value, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Norm_2, a.history), + ) + + else: + return DerivedQuantity( + value=np.linalg.norm(a.value, axes=axes), + units=a.units, + history=QuantityHistory.apply_operation(Norm_2, a.history, axes=axes), + ) + + else: + return np.linalg.norm(a.value, axes=axes) def dot(a: Union["Quantity[ArrayLike]", ArrayLike], b: Union["Quantity[ArrayLike]", ArrayLike]): - """ Dot product of two arrays or two array based quantities """ + """Dot product of two arrays or two array based quantities""" a_is_quantity = isinstance(a, Quantity) b_is_quantity = isinstance(b, Quantity) if a_is_quantity or b_is_quantity: - # If its only one of them that is a quantity, convert the other one if not a_is_quantity: @@ -55,13 +122,20 @@ def dot(a: Union["Quantity[ArrayLike]", ArrayLike], b: Union["Quantity[ArrayLike return DerivedQuantity( value=np.dot(a.value, b.value), units=a.units * b.units, - history=QuantityHistory.apply_operation(Dot, a.history, b.history)) + history=QuantityHistory.apply_operation(Dot, a.history, b.history), + ) else: return np.dot(a, b) -def tensordot(a: Union["Quantity[ArrayLike]", ArrayLike] | ArrayLike, b: Union["Quantity[ArrayLike]", ArrayLike], a_index: int, b_index: int): - """ Tensor dot product - equivalent to contracting two tensors, such as + +def tensordot( + a: Union["Quantity[ArrayLike]", ArrayLike] | ArrayLike, + b: Union["Quantity[ArrayLike]", ArrayLike], + a_index: int, + b_index: int, +): + """Tensor dot product - equivalent to contracting two tensors, such as A_{i0, i1, i2, i3...} and B_{j0, j1, j2...} @@ -77,7 +151,6 @@ def tensordot(a: Union["Quantity[ArrayLike]", ArrayLike] | ArrayLike, b: Union[" b_is_quantity = isinstance(b, Quantity) if a_is_quantity or b_is_quantity: - # If its only one of them that is a quantity, convert the other one if not a_is_quantity: @@ -89,12 +162,8 @@ def tensordot(a: Union["Quantity[ArrayLike]", ArrayLike] | ArrayLike, b: Union[" return DerivedQuantity( value=np.tensordot(a.value, b.value, axes=(a_index, b_index)), units=a.units * b.units, - history=QuantityHistory.apply_operation( - TensorDot, - a.history, - b.history, - a_index=a_index, - b_index=b_index)) + history=QuantityHistory.apply_operation(TensorDot, a.history, b.history, a_index=a_index, b_index=b_index), + ) else: return np.tensordot(a, b, axes=(a_index, b_index)) @@ -102,8 +171,9 @@ def tensordot(a: Union["Quantity[ArrayLike]", ArrayLike] | ArrayLike, b: Union[" ################### Operation Definitions ####################################### + def hash_and_name(hash_or_name: int | str): - """ Infer the name of a variable from a hash, or the hash from the name + """Infer the name of a variable from a hash, or the hash from the name Note: hash_and_name(hash_and_name(number)[1]) is not the identity however: hash_and_name(hash_and_name(number)) is @@ -127,34 +197,35 @@ def hash_and_name(hash_or_name: int | str): else: raise TypeError("Variable name_or_hash_value must be either str or int") -class Operation: +class Operation: serialisation_name = "unknown" - def summary(self, indent_amount: int = 0, indent: str=" "): - """ Summary of the operation tree""" - s = f"{indent_amount*indent}{self._summary_open()}(\n" + def summary(self, indent_amount: int = 0, indent: str = " "): + """Summary of the operation tree""" + + s = f"{indent_amount * indent}{self.__class__.__name__}(\n" for chunk in self._summary_components(): - s += chunk.summary(indent_amount+1, indent) + "\n" + s += chunk.summary(indent_amount + 1, indent) + "\n" - s += f"{indent_amount*indent})" + s += f"{indent_amount * indent})" return s - def _summary_open(self): - """ First line of summary """ def _summary_components(self) -> list["Operation"]: return [] - def evaluate(self, variables: dict[int, T]) -> T: - """ Evaluate this operation """ + def evaluate(self, variables: dict[int, T]) -> T: + """Evaluate this operation""" + pass def _derivative(self, hash_value: int) -> "Operation": - """ Get the derivative of this operation """ + """Get the derivative of this operation""" + pass def _clean(self): - """ Clean up this operation - i.e. remove silly things like 1*x """ + """Clean up this operation - i.e. remove silly things like 1*x""" return self def derivative(self, variable: Union[str, int, "Variable"], simplify=True): @@ -176,8 +247,7 @@ def derivative(self, variable: Union[str, int, "Variable"], simplify=True): # print(derivative.summary()) # Inefficient way of doing repeated simplification, but it will work - for i in range(100): # set max iterations - + for i in range(100): # set max iterations derivative = derivative._clean() # # print("-------------------") @@ -202,16 +272,14 @@ def deserialise(data: str) -> "Operation": @staticmethod def deserialise_json(json_data: dict) -> "Operation": - operation = json_data["operation"] parameters = json_data["parameters"] - cls = _serialisation_lookup[operation] + class_ = _serialisation_lookup[operation] try: - return cls._deserialise(parameters) - + return class_._deserialise(parameters) except NotImplementedError: - raise NotImplementedError(f"No method to deserialise {operation} with {parameters} (cls={cls})") + raise NotImplementedError(f"No method to deserialise {operation} with {parameters} (class={class_})") @staticmethod def _deserialise(parameters: dict) -> "Operation": @@ -221,25 +289,26 @@ def serialise(self) -> str: return json.dumps(self._serialise_json()) def _serialise_json(self) -> dict[str, Any]: - return {"operation": self.serialisation_name, - "parameters": self._serialise_parameters()} + return {"operation": self.serialisation_name, "parameters": self._serialise_parameters()} def _serialise_parameters(self) -> dict[str, Any]: - raise NotImplementedError("_serialise_parameters not implemented") + raise NotImplementedError("_serialise_parameters not implemented for this class") def __eq__(self, other: "Operation"): return NotImplemented + class ConstantBase(Operation): pass -class AdditiveIdentity(ConstantBase): +class AdditiveIdentity(ConstantBase): serialisation_name = "zero" + def evaluate(self, variables: dict[int, T]) -> T: return 0 - def _derivative(self, hash_value: int) -> Operation: + def _derivative(self, hash_value: int) -> "Operation": return AdditiveIdentity() @staticmethod @@ -249,8 +318,8 @@ def _deserialise(parameters: dict) -> "Operation": def _serialise_parameters(self) -> dict[str, Any]: return {} - def summary(self, indent_amount: int=0, indent=" "): - return f"{indent_amount*indent}0 [Add.Id.]" + def summary(self, indent_amount: int = 0, indent=" "): + return f"{indent_amount * indent}0 [Add.Id.]" def __eq__(self, other): if isinstance(other, AdditiveIdentity): @@ -262,9 +331,7 @@ def __eq__(self, other): return False - class MultiplicativeIdentity(ConstantBase): - serialisation_name = "one" def evaluate(self, variables: dict[int, T]) -> T: @@ -277,13 +344,11 @@ def _derivative(self, hash_value: int): def _deserialise(parameters: dict) -> "Operation": return MultiplicativeIdentity() - def _serialise_parameters(self) -> dict[str, Any]: return {} - - def summary(self, indent_amount: int=0, indent=" "): - return f"{indent_amount*indent}1 [Mul.Id.]" + def summary(self, indent_amount: int = 0, indent=" "): + return f"{indent_amount * indent}1 [Mul.Id.]" def __eq__(self, other): if isinstance(other, MultiplicativeIdentity): @@ -295,9 +360,37 @@ def __eq__(self, other): return False -class Constant(ConstantBase): +class MatrixIdentity(ConstantBase): + serialisation_name = "identity" + + def __init__(self, size): + self.size = size + + def evaluate(self, variables: dict[int, T]) -> T: + return np.eye(self.size) + + def _derivative(self, hash_value: int): + return Constant(np.zeros((self.size, self.size))) + + @staticmethod + def _deserialise(parameters: dict) -> "Operation": + return MatrixIdentity(self.size) + + def _serialise_parameters(self) -> dict[str, Any]: + return {"size": numerical_encode(self.size)} + def summary(self, indent_amount: int = 0, indent=" "): + return f"{indent_amount * indent}{self.size} [Matrix Id.]" + + def __eq__(self, other): + if isinstance(other, MatrixIdentity): + return self.size == other.size + return False + + +class Constant(ConstantBase): serialisation_name = "constant" + def __init__(self, value): self.value = value @@ -308,7 +401,6 @@ def _derivative(self, hash_value: int): return AdditiveIdentity() def _clean(self): - if self.value == 0: return AdditiveIdentity() @@ -323,12 +415,11 @@ def _deserialise(parameters: dict) -> "Operation": value = numerical_decode(parameters["value"]) return Constant(value) - def _serialise_parameters(self) -> dict[str, Any]: return {"value": numerical_encode(self.value)} - def summary(self, indent_amount: int=0, indent=" "): - return f"{indent_amount*indent}{self.value}" + def summary(self, indent_amount: int = 0, indent=" "): + return f"{indent_amount * indent}{self.value}" def __eq__(self, other): if isinstance(other, AdditiveIdentity): @@ -338,15 +429,14 @@ def __eq__(self, other): return self.value == 1 elif isinstance(other, Constant): - if other.value == self.value: - return True + return other.value == self.value return False class Variable(Operation): - serialisation_name = "variable" + def __init__(self, name_or_hash_value: int | str | tuple[int, str]): self.hash_value, self.name = hash_and_name(name_or_hash_value) @@ -370,35 +460,40 @@ def _deserialise(parameters: dict) -> "Operation": return Variable((hash_value, name)) def _serialise_parameters(self) -> dict[str, Any]: - return {"hash_value": self.hash_value, - "name": self.name} + return {"hash_value": self.hash_value, "name": self.name} - def summary(self, indent_amount: int = 0, indent: str=" "): - return f"{indent_amount*indent}{self.name}" + def summary(self, indent_amount: int = 0, indent: str = " "): + return f"{indent_amount * indent}{self.name}" def __eq__(self, other): if isinstance(other, Variable): return self.hash_value == other.hash_value - return False -class UnaryOperation(Operation): +class UnaryOperation(Operation): def __init__(self, a: Operation): self.a = a def _serialise_parameters(self) -> dict[str, Any]: return {"a": self.a._serialise_json()} + @classmethod + def _deserialise(cls, parameters: dict) -> "UnaryOperation": + return cls(Operation.deserialise_json(parameters["a"])) + def _summary_components(self) -> list["Operation"]: return [self.a] - + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.a == other.a + return False class Neg(UnaryOperation): - serialisation_name = "neg" + def evaluate(self, variables: dict[int, T]) -> T: return -self.a.evaluate(variables) @@ -406,7 +501,6 @@ def _derivative(self, hash_value: int): return Neg(self.a._derivative(hash_value)) def _clean(self): - clean_a = self.a._clean() if isinstance(clean_a, Neg): @@ -419,25 +513,12 @@ def _clean(self): else: return Neg(clean_a) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return Neg(Operation.deserialise_json(parameters["a"])) - - - def _summary_open(self): - return "Neg" - - def __eq__(self, other): - if isinstance(other, Neg): - return other.a == self.a - class Inv(UnaryOperation): - serialisation_name = "reciprocal" def evaluate(self, variables: dict[int, T]) -> T: - return 1/self.a.evaluate(variables) + return 1.0 / self.a.evaluate(variables) def _derivative(self, hash_value: int) -> Operation: return Neg(Div(self.a._derivative(hash_value), Mul(self.a, self.a))) @@ -446,7 +527,7 @@ def _clean(self): clean_a = self.a._clean() if isinstance(clean_a, Inv): - # Removes double negations + # Removes double inversions return clean_a.a elif isinstance(clean_a, Neg): @@ -455,23 +536,217 @@ def _clean(self): return Neg(Inv(clean_a.a)) elif isinstance(clean_a, Constant): - return Constant(1/clean_a.value)._clean() + return Constant(1.0 / clean_a.value)._clean() else: return Inv(clean_a) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return Inv(Operation.deserialise_json(parameters["a"])) +class Ln(UnaryOperation): + serialisation_name = "ln" + + def evaluate(self, variables: dict[int, T]) -> T: + return math.log(self.a.evaluate(variables)) - def _summary_open(self): - return "Inv" + def _derivative(self, hash_value: int) -> Operation: + return Div(self.a._derivative(hash_value), self.a) + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, Exp): + # Convert ln(exp(x)) to x + return clean_a.a + + elif isinstance(clean_a, MultiplicativeIdentity): + # Convert ln(1) to 0 + return AdditiveIdentity() + + elif clean_a == math.e: + # Convert ln(e) to 1 + return MultiplicativeIdentity() + + else: + return Ln(clean_a) + + +class Exp(UnaryOperation): + serialisation_name = "exp" + + def evaluate(self, variables: dict[int, T]) -> T: + return math.exp(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Mul(self.a._derivative(hash_value), Exp(self.a)) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, Ln): + # Convert exp(ln(x)) to x + return clean_a.a + + elif isinstance(clean_a, MultiplicativeIdentity): + # Convert e**1 to e + return math.e + + elif isinstance(clean_a, AdditiveIdentity): + # Convert e**0 to 1 + return 1 + + else: + return Exp(clean_a) + + +class Sin(UnaryOperation): + serialisation_name = "sin" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.sin(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Mul(self.a._derivative(hash_value), Cos(self.a)) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, ArcSin): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert sin(0) to 0 + return AdditiveIdentity() + + else: + return Sin(clean_a) + + +class ArcSin(UnaryOperation): + serialisation_name = "arcsin" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.arcsin(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Div(self.a._derivative(hash_value), Sqrt(Sub(MultiplicativeIdentity(), Mul(self.a, self.a)))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, Sin): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert arcsin(0) to 0 + return AdditiveIdentity() + + elif isinstance(clean_a, MultiplicativeIdentity): + # Convert arcsin(1) to pi/2 + return Constant(0.5 * math.pi) + + else: + return ArcSin(clean_a) + + +class Cos(UnaryOperation): + serialisation_name = "cos" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.cos(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Mul(self.a._derivative(hash_value), Neg(Sin(self.a))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, ArcCos): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert cos(0) to 1 + return MultiplicativeIdentity() + + else: + return Cos(clean_a) + + +class ArcCos(UnaryOperation): + serialisation_name = "arccos" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.arccos(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Neg(Div(self.a._derivative(hash_value), Sqrt(Sub(MultiplicativeIdentity(), Mul(self.a, self.a))))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, Cos): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert arccos(0) to pi/2 + return Constant(0.5 * math.pi) + + elif isinstance(clean_a, MultiplicativeIdentity): + # Convert arccos(1) to 0 + return AdditiveIdentity() + + else: + return ArcCos(clean_a) + + +class Tan(UnaryOperation): + serialisation_name = "tan" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.tan(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Div(self.a._derivative(hash_value), Mul(Cos(self.a), Cos(self.a))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, ArcTan): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert tan(0) to 0 + return AdditiveIdentity() + + else: + return Tan(clean_a) + + +class ArcTan(UnaryOperation): + serialisation_name = "arctan" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.arctan(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Div(self.a._derivative(hash_value), Add(MultiplicativeIdentity(), Mul(self.a, self.a))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, Tan): + return clean_a.a + + elif isinstance(clean_a, AdditiveIdentity): + # Convert arctan(0) to 0 + return AdditiveIdentity() + + elif isinstance(clean_a, MultiplicativeIdentity): + # Convert arctan(1) to pi/4 + return Constant(0.25 * math.pi) + + else: + return ArcTan(clean_a) - def __eq__(self, other): - if isinstance(other, Inv): - return other.a == self.a class BinaryOperation(Operation): def __init__(self, a: Operation, b: Operation): @@ -485,30 +760,28 @@ def _clean_ab(self, a, b): raise NotImplementedError("_clean_ab not implemented") def _serialise_parameters(self) -> dict[str, Any]: - return {"a": self.a._serialise_json(), - "b": self.b._serialise_json()} + return {"a": self.a._serialise_json(), "b": self.b._serialise_json()} + + @classmethod + def _deserialise(cls, parameters: dict) -> "BinaryOperation": + return cls(*BinaryOperation._deserialise_ab(parameters)) @staticmethod def _deserialise_ab(parameters) -> tuple[Operation, Operation]: - return (Operation.deserialise_json(parameters["a"]), - Operation.deserialise_json(parameters["b"])) - + return (Operation.deserialise_json(parameters["a"]), Operation.deserialise_json(parameters["b"])) def _summary_components(self) -> list["Operation"]: return [self.a, self.b] - def _self_cls(self) -> type: - """ Own class""" def __eq__(self, other): - if isinstance(other, self._self_cls()): - return other.a == self.a and self.b == other.b + if isinstance(other, self.__class__): + return self.a == other.a and self.b == other.b + return False -class Add(BinaryOperation): +class Add(BinaryOperation): serialisation_name = "add" - def _self_cls(self) -> type: - return Add def evaluate(self, variables: dict[int, T]) -> T: return self.a.evaluate(variables) + self.b.evaluate(variables) @@ -516,7 +789,6 @@ def _derivative(self, hash_value: int) -> Operation: return Add(self.a._derivative(hash_value), self.b._derivative(hash_value)) def _clean_ab(self, a, b): - if isinstance(a, AdditiveIdentity): # Convert 0 + b to b return b @@ -547,20 +819,10 @@ def _clean_ab(self, a, b): else: return Add(a, b) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return Add(*BinaryOperation._deserialise_ab(parameters)) - - def _summary_open(self): - return "Add" class Sub(BinaryOperation): - serialisation_name = "sub" - - def _self_cls(self) -> type: - return Sub def evaluate(self, variables: dict[int, T]) -> T: return self.a.evaluate(variables) - self.b.evaluate(variables) @@ -598,21 +860,10 @@ def _clean_ab(self, a, b): else: return Sub(a, b) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return Sub(*BinaryOperation._deserialise_ab(parameters)) - - - def _summary_open(self): - return "Sub" class Mul(BinaryOperation): - serialisation_name = "mul" - - def _self_cls(self) -> type: - return Mul def evaluate(self, variables: dict[int, T]) -> T: return self.a.evaluate(variables) * self.b.evaluate(variables) @@ -620,7 +871,6 @@ def _derivative(self, hash_value: int) -> Operation: return Add(Mul(self.a, self.b._derivative(hash_value)), Mul(self.a._derivative(hash_value), self.b)) def _clean_ab(self, a, b): - if isinstance(a, AdditiveIdentity) or isinstance(b, AdditiveIdentity): # Convert 0*b or a*0 to 0 return AdditiveIdentity() @@ -668,28 +918,17 @@ def _clean_ab(self, a, b): return Mul(a, b) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return Mul(*BinaryOperation._deserialise_ab(parameters)) - - - def _summary_open(self): - return "Mul" - class Div(BinaryOperation): - serialisation_name = "div" - - def _self_cls(self) -> type: - return Div - def evaluate(self, variables: dict[int, T]) -> T: return self.a.evaluate(variables) / self.b.evaluate(variables) def _derivative(self, hash_value: int) -> Operation: - return Sub(Div(self.a.derivative(hash_value), self.b), - Div(Mul(self.a, self.b.derivative(hash_value)), Mul(self.b, self.b))) + return Div( + Sub(Mul(self.a.derivative(hash_value), self.b), Mul(self.a, self.b.derivative(hash_value))), + Mul(self.b, self.b), + ) def _clean_ab(self, a, b): if isinstance(a, AdditiveIdentity): @@ -708,7 +947,6 @@ def _clean_ab(self, a, b): # Convert constants "a"/"b" to "a/b" return Constant(self.a.evaluate({}) / self.b.evaluate({}))._clean() - elif isinstance(a, Inv) and isinstance(b, Inv): return Div(b.a, a.a) @@ -734,15 +972,56 @@ def _clean_ab(self, a, b): return Div(a, b) +class Log(Operation): + serialisation_name = "log" + + def __init__(self, a: Operation, base: float): + self.a = a + self.base = base + + def evaluate(self, variables: dict[int, T]) -> T: + return math.log(self.a.evaluate(variables), self.base) + + def _derivative(self, hash_value: int) -> Operation: + return Div(self.a.derivative(hash_value), Mul(self.a, Ln(Constant(self.base)))) + + def _clean_ab(self) -> Operation: + a = self.a._clean() + + if isinstance(a, MultiplicativeIdentity): + # Convert log(1) to 0 + return AdditiveIdentity() + + elif a == self.base: + # Convert log(base) to 1 + return MultiplicativeIdentity() + + else: + return Log(a, self.base) + + def _serialise_parameters(self) -> dict[str, Any]: + return {"a": Operation._serialise_json(self.a), "base": self.base} + @staticmethod def _deserialise(parameters: dict) -> "Operation": - return Div(*BinaryOperation._deserialise_ab(parameters)) + return Log(Operation.deserialise_json(parameters["a"]), parameters["base"]) - def _summary_open(self): - return "Div" + def summary(self, indent_amount: int = 0, indent=" "): + return ( + f"{indent_amount * indent}Log(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{self.base}\n" + + f"{indent_amount * indent})" + ) + + def __eq__(self, other): + if isinstance(other, Log): + return self.a == other.a and self.base == other.base + return False -class Pow(Operation): +class Pow(Operation): serialisation_name = "pow" def __init__(self, a: Operation, power: float): @@ -760,9 +1039,9 @@ def _derivative(self, hash_value: int) -> Operation: return self.a._derivative(hash_value) else: - return Mul(Constant(self.power), Mul(Pow(self.a, self.power-1), self.a._derivative(hash_value))) + return Mul(Constant(self.power), Mul(Pow(self.a, self.power - 1), self.a._derivative(hash_value))) - def _clean(self) -> Operation: + def _clean(self): a = self.a._clean() if self.power == 1: @@ -777,33 +1056,35 @@ def _clean(self) -> Operation: else: return Pow(a, self.power) - def _serialise_parameters(self) -> dict[str, Any]: - return {"a": Operation._serialise_json(self.a), - "power": self.power} + return {"a": Operation._serialise_json(self.a), "power": self.power} @staticmethod def _deserialise(parameters: dict) -> "Operation": return Pow(Operation.deserialise_json(parameters["a"]), parameters["power"]) - def summary(self, indent_amount: int=0, indent=" "): - return (f"{indent_amount*indent}Pow\n" + - self.a.summary(indent_amount+1, indent) + "\n" + - f"{(indent_amount+1)*indent}{self.power}\n" + - f"{indent_amount*indent})") + def summary(self, indent_amount: int = 0, indent=" "): + return ( + f"{indent_amount * indent}Pow(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{self.power}\n" + + f"{indent_amount * indent})" + ) def __eq__(self, other): if isinstance(other, Pow): return self.a == other.a and self.power == other.power - + return False # # Matrix operations # + class Transpose(Operation): - """ Transpose operation - as per numpy""" + """Transpose operation - as per numpy""" serialisation_name = "transpose" @@ -812,75 +1093,119 @@ def __init__(self, a: Operation, axes: tuple[int] | None = None): self.axes = axes def evaluate(self, variables: dict[int, T]) -> T: - return np.transpose(self.a.evaluate(variables)) + return np.transpose(self.a.evaluate(variables), self.axes) def _derivative(self, hash_value: int) -> Operation: - return Transpose(self.a.derivative(hash_value)) # TODO: Check! + return Transpose(self.a.derivative(hash_value), self.axes) # TODO: Check! def _clean(self): clean_a = self.a._clean() - return Transpose(clean_a) - + return Transpose(clean_a, self.axes) def _serialise_parameters(self) -> dict[str, Any]: if self.axes is None: - return { "a": self.a._serialise_json() } + return {"a": self.a._serialise_json()} else: - return { - "a": self.a._serialise_json(), - "axes": list(self.axes) - } - + return {"a": self.a._serialise_json(), "axes": list(self.axes)} @staticmethod def _deserialise(parameters: dict) -> "Operation": if "axes" in parameters: - return Transpose( - a=Operation.deserialise_json(parameters["a"]), - axes=tuple(parameters["axes"])) + return Transpose(a=Operation.deserialise_json(parameters["a"]), axes=tuple(parameters["axes"])) else: - return Transpose( - a=Operation.deserialise_json(parameters["a"])) + return Transpose(a=Operation.deserialise_json(parameters["a"])) - - def _summary_open(self): - return "Transpose" + def summary(self, indent_amount: int = 0, indent=" "): + if self.axes is None: + return ( + f"{indent_amount * indent}Transpose(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{indent_amount * indent})" + ) + else: + return ( + f"{indent_amount * indent}Transpose(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{list(self.axes)}\n" + + f"{indent_amount * indent})" + ) def __eq__(self, other): if isinstance(other, Transpose): return other.a == self.a + return False -class Dot(BinaryOperation): - """ Dot product - backed by numpy's dot method""" +class Trace(Operation): + """Trace operation - as per numpy""" - serialisation_name = "dot" + serialisation_name = "trace" + + def __init__(self, a: Operation, offset: int = 0, axis1: int = 0, axis2: int = 1): + self.a = a + self.offset = offset + self.axis1 = axis1 + self.axis2 = axis2 def evaluate(self, variables: dict[int, T]) -> T: - return dot(self.a.evaluate(variables), self.b.evaluate(variables)) + return np.trace(self.a.evaluate(variables), self.offset, self.axis1, self.axis2) def _derivative(self, hash_value: int) -> Operation: - return Add( - Dot(self.a, - self.b._derivative(hash_value)), - Dot(self.a._derivative(hash_value), - self.b)) + return Trace(self.a.derivative(hash_value), self.offset, self.axis1, self.axis2) - def _clean_ab(self, a, b): - return Dot(a, b) # Do nothing for now + def _clean(self): + clean_a = self.a._clean() + return Trace(clean_a, self.offset, self.axis1, self.axis2) + def _serialise_parameters(self) -> dict[str, Any]: + return {"a": self.a._serialise_json(), "offset": self.offset, "axis1": self.axis1, "axis2": self.axis2} @staticmethod def _deserialise(parameters: dict) -> "Operation": - return Dot(*BinaryOperation._deserialise_ab(parameters)) + return Trace( + a=Operation.deserialise_json(parameters["a"]), + offset=parameters["offset"], + axis1=parameters["axis1"], + axis2=parameters["axis2"], + ) + + def summary(self, indent_amount: int = 0, indent=" "): + return ( + f"{indent_amount * indent}Trace(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{self.offset}\n" + + f"{(indent_amount + 1) * indent}{self.axis1}\n" + + f"{(indent_amount + 1) * indent}{self.axis2}\n" + + f"{indent_amount * indent})" + ) + + def __eq__(self, other): + if isinstance(other, Trace): + return other.a == self.a + return False + + +class Dot(BinaryOperation): + """Dot product - backed by numpy's dot method""" - def _summary_open(self): - return "Dot" + serialisation_name = "dot" + + def evaluate(self, variables: dict[int, T]) -> T: + return dot(self.a.evaluate(variables), self.b.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Add(Dot(self.a, self.b._derivative(hash_value)), Dot(self.a._derivative(hash_value), self.b)) + + def _clean_ab(self, a, b): + return Dot(a, b) # Do nothing for now # TODO: Add to base operation class, and to quantities class MatMul(BinaryOperation): - """ Matrix multiplication, using __matmul__ dunder""" + """Matrix multiplication, using __matmul__ dunder""" serialisation_name = "matmul" @@ -888,14 +1213,9 @@ def evaluate(self, variables: dict[int, T]) -> T: return self.a.evaluate(variables) @ self.b.evaluate(variables) def _derivative(self, hash_value: int) -> Operation: - return Add( - MatMul(self.a, - self.b._derivative(hash_value)), - MatMul(self.a._derivative(hash_value), - self.b)) + return Add(MatMul(self.a, self.b._derivative(hash_value)), MatMul(self.a._derivative(hash_value), self.b)) def _clean_ab(self, a, b): - if isinstance(a, AdditiveIdentity) or isinstance(b, AdditiveIdentity): # Convert 0*b or a*0 to 0 return AdditiveIdentity() @@ -913,12 +1233,27 @@ def _clean_ab(self, a, b): return MatMul(a, b) - @staticmethod - def _deserialise(parameters: dict) -> "Operation": - return MatMul(*BinaryOperation._deserialise_ab(parameters)) +class MatInv(UnaryOperation): + """Matrix inversion, using numpy""" + + serialisation_name = "matinv" + + def evaluate(self, variables: dict[int, T]) -> T: + return np.linalg.inv(self.a.evaluate(variables)) + + def _derivative(self, hash_value: int) -> Operation: + return Neg(Matmul(MatMul(MatInv(self.a), self.a._derivative(hash_value)), MatInv(self.a))) + + def _clean(self): + clean_a = self.a._clean() + + if isinstance(clean_a, MatInv): + # Removes double inversions + return clean_a.a + + else: + return MatInv(clean_a) - def _summary_open(self): - return "MatMul" class TensorDot(Operation): serialisation_name = "tensor_product" @@ -932,39 +1267,173 @@ def __init__(self, a: Operation, b: Operation, a_index: int, b_index: int): def evaluate(self, variables: dict[int, T]) -> T: return tensordot(self.a, self.b, self.a_index, self.b_index) - def _serialise_parameters(self) -> dict[str, Any]: return { "a": self.a._serialise_json(), "b": self.b._serialise_json(), "a_index": self.a_index, - "b_index": self.b_index } + "b_index": self.b_index, + } + + @staticmethod + def _deserialise(parameters: dict) -> "Operation": + return TensorDot( + a=Operation.deserialise_json(parameters["a"]), + b=Operation.deserialise_json(parameters["b"]), + a_index=int(parameters["a_index"]), + b_index=int(parameters["b_index"]), + ) + + +class Norm_1(Operation): + """1-norm of a matrix from numpy""" + + serialisation_name = "norm_1" + + def __init__(self, a: Operation, axes: int | tuple[int] | None = None): + self.a = a + self.axes = axes + + def evaluate(self, variables: dict[int, T]) -> T: + return np.linalg.norm(self.a.evaluate(variables), ord=1, axis=self.axes) + + def _derivative(self, hash_value: int) -> Operation: + return np.sign(self.a) + + def _clean(self): + clean_a = self.a._clean() + return Norm_1(clean_a, self.axes) + + def _serialise_parameters(self) -> dict[str, Any]: + if self.axes is None: + return {"a": self.a._serialise_json()} + else: + return {"a": self.a._serialise_json(), "axes": list(self.axes)} + + @staticmethod + def _deserialise(parameters: dict) -> "Operation": + if "axes" in parameters: + return Norm_1(a=Operation.deserialise_json(parameters["a"]), axes=tuple(parameters["axes"])) + else: + return Norm_1(a=Operation.deserialise_json(parameters["a"])) + + def summary(self, indent_amount: int = 0, indent=" "): + if self.axes is None: + return ( + f"{indent_amount * indent}Norm_1(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{indent_amount * indent})" + ) + else: + return ( + f"{indent_amount * indent}Norm_1(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{list(self.axes)}\n" + + f"{indent_amount * indent})" + ) + + def __eq__(self, other): + if isinstance(other, Norm_1): + return other.a == self.a + return False + + +class Norm_2(Operation): + """2-norm of a matrix from numpy""" + + serialisation_name = "norm_2" + + def __init__(self, a: Operation, axes: int | tuple[int] | None = None): + self.a = a + self.axes = axes + + def evaluate(self, variables: dict[int, T]) -> T: + return np.linalg.norm(self.a.evaluate(variables), axis=self.axes) + + def _derivative(self, hash_value: int) -> Operation: + return Transpose(Div(self.a, Norm_2(self.a, self.axes))) + + def _clean(self): + clean_a = self.a._clean() + return Norm_2(clean_a, self.axes) + + def _serialise_parameters(self) -> dict[str, Any]: + if self.axes is None: + return {"a": self.a._serialise_json()} + else: + return {"a": self.a._serialise_json(), "axes": list(self.axes)} @staticmethod def _deserialise(parameters: dict) -> "Operation": - return TensorDot(a = Operation.deserialise_json(parameters["a"]), - b = Operation.deserialise_json(parameters["b"]), - a_index=int(parameters["a_index"]), - b_index=int(parameters["b_index"])) + if "axes" in parameters: + return Norm_2(a=Operation.deserialise_json(parameters["a"]), axes=tuple(parameters["axes"])) + else: + return Norm_2(a=Operation.deserialise_json(parameters["a"])) - def _summary_open(self): - return "TensorProduct" + def summary(self, indent_amount: int = 0, indent=" "): + if self.axes is None: + return ( + f"{indent_amount * indent}Norm_2(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{indent_amount * indent})" + ) + else: + return ( + f"{indent_amount * indent}Norm_2(\n" + + self.a.summary(indent_amount + 1, indent) + + "\n" + + f"{(indent_amount + 1) * indent}{list(self.axes)}\n" + + f"{indent_amount * indent})" + ) + def __eq__(self, other): + if isinstance(other, Norm_2): + return other.a == self.a + return False -_serialisable_classes = [AdditiveIdentity, MultiplicativeIdentity, Constant, - Variable, - Neg, Inv, - Add, Sub, Mul, Div, Pow, - Transpose, Dot, MatMul, TensorDot] -_serialisation_lookup = {cls.serialisation_name: cls for cls in _serialisable_classes} +_serialisable_classes = [ + AdditiveIdentity, + MultiplicativeIdentity, + Constant, + Variable, + Neg, + Inv, + Ln, + Exp, + Sin, + ArcSin, + Cos, + ArcCos, + Tan, + ArcTan, + Add, + Sub, + Mul, + Div, + Pow, + Log, + Transpose, + Trace, + Dot, + MatMul, + MatInv, + TensorDot, + Norm_1, + Norm_2, +] + +_serialisation_lookup = {class_.serialisation_name: class_ for class_ in _serialisable_classes} class UnitError(Exception): - """ Errors caused by unit specification not being correct """ + """Errors caused by unit specification not being correct""" -def hash_data_via_numpy(*data: ArrayLike): +def hash_data_via_numpy(*data: ArrayLike): md5_hash = hashlib.md5() for datum in data: @@ -975,7 +1444,6 @@ def hash_data_via_numpy(*data: ArrayLike): return int(md5_hash.hexdigest(), 16) - ##################################### # # # # @@ -987,12 +1455,11 @@ def hash_data_via_numpy(*data: ArrayLike): ##################################### - QuantityType = TypeVar("QuantityType") class QuantityHistory: - """ Class that holds the information for keeping track of operations done on quantities """ + """Class that holds the information for keeping track of operations done on quantities""" def __init__(self, operation_tree: Operation, references: dict[int, "Quantity"]): self.operation_tree = operation_tree @@ -1002,17 +1469,17 @@ def __init__(self, operation_tree: Operation, references: dict[int, "Quantity"]) self.si_reference_values = {key: self.references[key].in_si() for key in self.references} def jacobian(self) -> list[Operation]: - """ Derivative of this quantity's operation history with respect to each of the references """ + """Derivative of this quantity's operation history with respect to each of the references""" # Use the hash value to specify the variable of differentiation return [self.operation_tree.derivative(key) for key in self.reference_key_list] def _recalculate(self): - """ Recalculate the value of this object - primary use case is for testing """ + """Recalculate the value of this object - primary use case is for testing""" return self.operation_tree.evaluate(self.references) - def variance_propagate(self, quantity_units: Unit, covariances: dict[tuple[int, int]: "Quantity"] = {}): - """ Do standard error propagation to calculate the uncertainties associated with this quantity + def variance_propagate(self, quantity_units: Unit, covariances: dict[tuple[int, int] : "Quantity"] = {}): + """Do standard error propagation to calculate the uncertainties associated with this quantity :param quantity_units: units in which the output should be calculated :param covariances: off diagonal entries for the covariance matrix @@ -1036,15 +1503,16 @@ def variance_propagate(self, quantity_units: Unit, covariances: dict[tuple[int, return output - @staticmethod def variable(quantity: "Quantity"): - """ Create a history that starts with the provided data """ + """Create a history that starts with the provided data""" return QuantityHistory(Variable(quantity.hash_value), {quantity.hash_value: quantity}) @staticmethod - def apply_operation(operation: type[Operation], *histories: "QuantityHistory", **extra_parameters) -> "QuantityHistory": - """ Apply an operation to the history + def apply_operation( + operation: type[Operation], *histories: "QuantityHistory", **extra_parameters + ) -> "QuantityHistory": + """Apply an operation to the history This is slightly unsafe as it is possible to attempt to apply an n-ary operation to a number of trees other than n, but it is relatively concise. Because it is concise we'll go with this for now and see if it causes @@ -1060,8 +1528,8 @@ def apply_operation(operation: type[Operation], *histories: "QuantityHistory", * references.update(history.references) return QuantityHistory( - operation(*[history.operation_tree for history in histories], **extra_parameters), - references) + operation(*[history.operation_tree for history in histories], **extra_parameters), references + ) def has_variance(self): for key in self.references: @@ -1071,10 +1539,9 @@ def has_variance(self): return False def summary(self): - variable_strings = [self.references[key].string_repr for key in self.references] - s = "Variables: "+",".join(variable_strings) + s = "Variables: " + ",".join(variable_strings) s += "\n" s += self.operation_tree.summary() @@ -1082,14 +1549,15 @@ def summary(self): class Quantity[QuantityType]: - - - def __init__(self, - value: QuantityType, - units: Unit, - standard_error: QuantityType | None = None, - hash_seed = ""): - + def __init__( + self, + value: QuantityType, + units: Unit, + standard_error: QuantityType | None = None, + hash_seed="", + name="", + id_header="", + ): self.value = value """ Numerical value of this data, in the specified units""" @@ -1108,11 +1576,17 @@ def __init__(self, if standard_error is None: self.hash_value = hash_data_via_numpy(hash_seed, value) else: - self._variance = standard_error ** 2 + self._variance = standard_error**2 self.hash_value = hash_data_via_numpy(hash_seed, value, standard_error) self.history = QuantityHistory.variable(self) + self._id_header = id_header + self.name = name + + self._id_header = id_header + self.name = name + # TODO: Adding this method as a temporary measure but we need a single # method that does this. def with_standard_error(self, standard_error: "Quantity"): @@ -1120,10 +1594,14 @@ def with_standard_error(self, standard_error: "Quantity"): return Quantity( value=self.value, units=self.units, - standard_error=standard_error.in_units_of(self.units),) + standard_error=standard_error.in_units_of(self.units), + name=self.name, + id_header=self._id_header, + ) else: - raise UnitError(f"Standard error units ({standard_error.units}) " - f"are not compatible with value units ({self.units})") + raise UnitError( + f"Standard error units ({standard_error.units}) are not compatible with value units ({self.units})" + ) @property def has_variance(self): @@ -1131,17 +1609,38 @@ def has_variance(self): @property def variance(self) -> "Quantity": - """ Get the variance of this object""" + """Get the variance of this object""" if self._variance is None: - return Quantity(np.zeros_like(self.value), self.units**2) + return Quantity(np.zeros_like(self.value), self.units**2, name=self.name, id_header=self._id_header) else: return Quantity(self._variance, self.units**2) + + @property + def unique_id(self) -> str: + """Get a human readable unique id for a data set""" + return f"{self._id_header}:{self.name}:{self._base62_hash()}" + + def _base62_hash(self) -> str: + """Encode the hash_value in base62 for better readability""" + hashed = "" + current_hash = self.hash_value + while current_hash: + digit = current_hash % 62 + if digit < 10: + hashed = f"{digit}{hashed}" + elif digit < 36: + hashed = f"{chr(55 + digit)}{hashed}" + else: + hashed = f"{chr(61 + digit)}{hashed}" + current_hash = (current_hash - digit) // 62 + return hashed + def standard_deviation(self) -> "Quantity": - return self.variance ** 0.5 + return self.variance**0.5 def in_units_of(self, units: Unit) -> QuantityType: - """ Get this quantity in other units """ + """Get this quantity in other units""" if self.units.equivalent(units): return (self.units.scale / units.scale) * self.value else: @@ -1149,13 +1648,16 @@ def in_units_of(self, units: Unit) -> QuantityType: def to_units_of(self, new_units: Unit) -> "Quantity[QuantityType]": new_value, new_error = self.in_units_of_with_standard_error(new_units) - return Quantity(value=new_value, - units=new_units, - standard_error=new_error, - hash_seed=self._hash_seed) + return Quantity( + value=new_value, + units=new_units, + standard_error=new_error, + hash_seed=self._hash_seed, + id_header=self._id_header, + ) def variance_in_units_of(self, units: Unit) -> QuantityType: - """ Get the variance of quantity in other units """ + """Get the variance of quantity in other units""" variance = self.variance if variance.units.equivalent(units): return (variance.units.scale / units.scale) * variance @@ -1171,7 +1673,6 @@ def in_units_of_with_standard_error(self, units): units_squared = units**2 if variance.units.equivalent(units_squared): - return self.in_units_of(units), np.sqrt(self.variance.in_units_of(units_squared)) else: raise UnitError(f"Target units ({units}) not compatible with existing units ({variance.units}).") @@ -1187,7 +1688,7 @@ def explicitly_formatted(self, unit_string: str) -> str: Performs any necessary unit conversions, but maintains the exact unit formatting provided by the user. This can be useful if you have a - power expressed in horsepower and you want it expressed as "745.7 N m/s" and not as "745.7 W". """ + power expressed in horsepower and you want it expressed as "745.7 N m/s" and not as "745.7 W".""" unit = parse_unit(unit_string) quantity = self.in_units_of(unit) return f"{quantity} {unit_string}" @@ -1195,128 +1696,103 @@ def explicitly_formatted(self, unit_string: str) -> str: def __eq__(self: Self, other: Self) -> bool | np.ndarray: return self.value == other.in_units_of(self.units) - - def __mul__(self: Self, other: ArrayLike | Self ) -> Self: + def __mul__(self: Self, other: ArrayLike | Self) -> Self: if isinstance(other, Quantity): return DerivedQuantity( self.value * other.value, self.units * other.units, - history=QuantityHistory.apply_operation(Mul, self.history, other.history)) + history=QuantityHistory.apply_operation(Mul, self.history, other.history), + ) else: - return DerivedQuantity(self.value * other, self.units, - QuantityHistory( - Mul( - self.history.operation_tree, - Constant(other)), - self.history.references)) + return DerivedQuantity( + self.value * other, + self.units, + QuantityHistory(Mul(self.history.operation_tree, Constant(other)), self.history.references), + ) def __rmul__(self: Self, other: ArrayLike | Self): if isinstance(other, Quantity): return DerivedQuantity( - other.value * self.value, - other.units * self.units, - history=QuantityHistory.apply_operation( - Mul, - other.history, - self.history)) + other.value * self.value, + other.units * self.units, + history=QuantityHistory.apply_operation(Mul, other.history, self.history), + ) else: - return DerivedQuantity(other * self.value, self.units, - QuantityHistory( - Mul( - Constant(other), - self.history.operation_tree), - self.history.references)) - + return DerivedQuantity( + other * self.value, + self.units, + QuantityHistory(Mul(Constant(other), self.history.operation_tree), self.history.references), + ) def __matmul__(self, other: ArrayLike | Self): if isinstance(other, Quantity): return DerivedQuantity( self.value @ other.value, self.units * other.units, - history=QuantityHistory.apply_operation( - MatMul, - self.history, - other.history)) + history=QuantityHistory.apply_operation(MatMul, self.history, other.history), + ) else: return DerivedQuantity( - self.value @ other, - self.units, - QuantityHistory( - MatMul( - self.history.operation_tree, - Constant(other)), - self.history.references)) + self.value @ other, + self.units, + QuantityHistory(MatMul(self.history.operation_tree, Constant(other)), self.history.references), + ) def __rmatmul__(self, other: ArrayLike | Self): if isinstance(other, Quantity): return DerivedQuantity( - other.value @ self.value, - other.units * self.units, - history=QuantityHistory.apply_operation( - MatMul, - other.history, - self.history)) + other.value @ self.value, + other.units * self.units, + history=QuantityHistory.apply_operation(MatMul, other.history, self.history), + ) else: - return DerivedQuantity(other @ self.value, self.units, - QuantityHistory( - MatMul( - Constant(other), - self.history.operation_tree), - self.history.references)) - + return DerivedQuantity( + other @ self.value, + self.units, + QuantityHistory(MatMul(Constant(other), self.history.operation_tree), self.history.references), + ) def __truediv__(self: Self, other: float | Self) -> Self: if isinstance(other, Quantity): return DerivedQuantity( - self.value / other.value, - self.units / other.units, - history=QuantityHistory.apply_operation( - Div, - self.history, - other.history)) + self.value / other.value, + self.units / other.units, + history=QuantityHistory.apply_operation(Div, self.history, other.history), + ) else: - return DerivedQuantity(self.value / other, self.units, - QuantityHistory( - Div( - Constant(other), - self.history.operation_tree), - self.history.references)) + return DerivedQuantity( + self.value / other, + self.units, + QuantityHistory(Div(Constant(other), self.history.operation_tree), self.history.references), + ) def __rtruediv__(self: Self, other: float | Self) -> Self: if isinstance(other, Quantity): return DerivedQuantity( - other.value / self.value, - other.units / self.units, - history=QuantityHistory.apply_operation( - Div, - other.history, - self.history - )) + other.value / self.value, + other.units / self.units, + history=QuantityHistory.apply_operation(Div, other.history, self.history), + ) else: return DerivedQuantity( - other / self.value, - self.units ** -1, - QuantityHistory( - Div( - Constant(other), - self.history.operation_tree), - self.history.references)) + other / self.value, + self.units**-1, + QuantityHistory(Div(Constant(other), self.history.operation_tree), self.history.references), + ) def __add__(self: Self, other: Self | ArrayLike) -> Self: if isinstance(other, Quantity): if self.units.equivalent(other.units): return DerivedQuantity( - self.value + (other.value * other.units.scale) / self.units.scale, - self.units, - QuantityHistory.apply_operation( - Add, - self.history, - other.history)) + self.value + (other.value * other.units.scale) / self.units.scale, + self.units, + QuantityHistory.apply_operation(Add, self.history, other.history), + ) else: raise UnitError(f"Units do not have the same dimensionality: {self.units} vs {other.units}") @@ -1326,11 +1802,7 @@ def __add__(self: Self, other: Self | ArrayLike) -> Self: # Don't need __radd__ because only quantity/quantity operations should be allowed def __neg__(self): - return DerivedQuantity(-self.value, self.units, - QuantityHistory.apply_operation( - Neg, - self.history - )) + return DerivedQuantity(-self.value, self.units, QuantityHistory.apply_operation(Neg, self.history)) def __sub__(self: Self, other: Self | ArrayLike) -> Self: return self + (-other) @@ -1339,18 +1811,15 @@ def __rsub__(self: Self, other: Self | ArrayLike) -> Self: return (-self) + other def __pow__(self: Self, other: int | float): - return DerivedQuantity(self.value ** other, - self.units ** other, - QuantityHistory( - Pow( - self.history.operation_tree, - other), - self.history.references)) + return DerivedQuantity( + self.value**other, + self.units**other, + QuantityHistory(Pow(self.history.operation_tree, other), self.history.references), + ) @staticmethod def _array_repr_format(arr: np.ndarray): - - """ Format the array """ + """Format the array""" order = len(arr.shape) reshaped = arr.reshape(-1) if len(reshaped) <= 2: @@ -1363,12 +1832,10 @@ def _array_repr_format(arr: np.ndarray): # else: # numbers = f"{reshaped[0]}, {reshaped[1]} ... {reshaped[-2]}, {reshaped[-1]}" - return "["*order + numbers + "]"*order + return "[" * order + numbers + "]" * order def __repr__(self): - if isinstance(self.units, NamedUnit): - value = self.value error = self.standard_deviation().in_units_of(self.units) unit_string = self.units.symbol @@ -1407,24 +1874,17 @@ def as_h5(self, group: h5py.Group, name: str): class NamedQuantity[QuantityType](Quantity[QuantityType]): - def __init__(self, - name: str, - value: QuantityType, - units: Unit, - standard_error: QuantityType | None = None): - - super().__init__(value, units, standard_error=standard_error, hash_seed=name) - self.name = name + def __init__( + self, name: str, value: QuantityType, units: Unit, standard_error: QuantityType | None = None, id_header="" + ): + super().__init__(value, units, standard_error=standard_error, hash_seed=name, name=name, id_header=id_header) def __repr__(self): return f"[{self.name}] " + super().__repr__() def to_units_of(self, new_units: Unit) -> "NamedQuantity[QuantityType]": new_value, new_error = self.in_units_of_with_standard_error(new_units) - return NamedQuantity(value=new_value, - units=new_units, - standard_error=new_error, - name=self.name) + return NamedQuantity(value=new_value, units=new_units, standard_error=new_error, name=self.name) def with_standard_error(self, standard_error: Quantity): if standard_error.units.equivalent(self.units): @@ -1432,17 +1892,20 @@ def with_standard_error(self, standard_error: Quantity): value=self.value, units=self.units, standard_error=standard_error.in_units_of(self.units), - name=self.name) + name=self.name, + id_header=self._id_header, + ) else: - raise UnitError(f"Standard error units ({standard_error.units}) " - f"are not compatible with value units ({self.units})") - + raise UnitError( + f"Standard error units ({standard_error.units}) are not compatible with value units ({self.units})" + ) @property def string_repr(self): return self.name + class DerivedQuantity[QuantityType](Quantity[QuantityType]): def __init__(self, value: QuantityType, units: Unit, history: QuantityHistory): super().__init__(value, units, standard_error=None) @@ -1451,13 +1914,9 @@ def __init__(self, value: QuantityType, units: Unit, history: QuantityHistory): self._variance_cache = None self._has_variance = history.has_variance() - def to_units_of(self, new_units: Unit) -> "Quantity[QuantityType]": # TODO: Lots of tests needed for this - return DerivedQuantity( - value=self.in_units_of(new_units), - units=new_units, - history=self.history) + return DerivedQuantity(value=self.in_units_of(new_units), units=new_units, history=self.history) @property def has_variance(self): diff --git a/sasdata/quantities/quantity_examples.py b/sasdata/quantities/quantity_examples.py new file mode 100644 index 000000000..cc12640db --- /dev/null +++ b/sasdata/quantities/quantity_examples.py @@ -0,0 +1,8 @@ +from sasdata.quantities import units +from sasdata.quantities.quantity import NamedQuantity + +x = NamedQuantity("x", 1, units.meters, standard_error=1) +y = NamedQuantity("y", 1, units.decimeters, standard_error=1) + +print(x+y) +print((x+y).to_units_of(units.centimeters)) diff --git a/sasdata/quantities/si.py b/sasdata/quantities/si.py index 947cc4a11..cd71771e4 100644 --- a/sasdata/quantities/si.py +++ b/sasdata/quantities/si.py @@ -1,121 +1,3 @@ -""" - -This file is autogenerated! - -Do not edit by hand, instead edit the files that build it (_build_tables.py) - - - - -DDDDDDDDDDDDD NNNNNNNN NNNNNNNN tttt -D::::::::::::DDD N:::::::N N::::::N ttt:::t -D:::::::::::::::DD N::::::::N N::::::N t:::::t -DDD:::::DDDDD:::::D N:::::::::N N::::::N t:::::t - D:::::D D:::::D ooooooooooo N::::::::::N N::::::N ooooooooooo ttttttt:::::ttttttt - D:::::D D:::::D oo:::::::::::oo N:::::::::::N N::::::N oo:::::::::::oo t:::::::::::::::::t - D:::::D D:::::Do:::::::::::::::o N:::::::N::::N N::::::No:::::::::::::::ot:::::::::::::::::t - D:::::D D:::::Do:::::ooooo:::::o N::::::N N::::N N::::::No:::::ooooo:::::otttttt:::::::tttttt - D:::::D D:::::Do::::o o::::o N::::::N N::::N:::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N:::::::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N::::::::::No::::o o::::o t:::::t - D:::::D D:::::D o::::o o::::o N::::::N N:::::::::No::::o o::::o t:::::t tttttt -DDD:::::DDDDD:::::D o:::::ooooo:::::o N::::::N N::::::::No:::::ooooo:::::o t::::::tttt:::::t -D:::::::::::::::DD o:::::::::::::::o N::::::N N:::::::No:::::::::::::::o tt::::::::::::::t -D::::::::::::DDD oo:::::::::::oo N::::::N N::::::N oo:::::::::::oo tt:::::::::::tt -DDDDDDDDDDDDD ooooooooooo NNNNNNNN NNNNNNN ooooooooooo ttttttttttt - - - - - - - - - dddddddd -EEEEEEEEEEEEEEEEEEEEEE d::::::d iiii tttt BBBBBBBBBBBBBBBBB -E::::::::::::::::::::E d::::::d i::::i ttt:::t B::::::::::::::::B -E::::::::::::::::::::E d::::::d iiii t:::::t B::::::BBBBBB:::::B -EE::::::EEEEEEEEE::::E d:::::d t:::::t BB:::::B B:::::B - E:::::E EEEEEE ddddddddd:::::d iiiiiiittttttt:::::ttttttt B::::B B:::::Byyyyyyy yyyyyyy - E:::::E dd::::::::::::::d i:::::it:::::::::::::::::t B::::B B:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d::::::::::::::::d i::::it:::::::::::::::::t B::::BBBBBB:::::B y:::::y y:::::y - E:::::::::::::::E d:::::::ddddd:::::d i::::itttttt:::::::tttttt B:::::::::::::BB y:::::y y:::::y - E:::::::::::::::E d::::::d d:::::d i::::i t:::::t B::::BBBBBB:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y y:::::y - E:::::E d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y:::::y - E:::::E EEEEEEd:::::d d:::::d i::::i t:::::t tttttt B::::B B:::::B y:::::::::y -EE::::::EEEEEEEE:::::Ed::::::ddddd::::::ddi::::::i t::::::tttt:::::t BB:::::BBBBBB::::::B y:::::::y -E::::::::::::::::::::E d:::::::::::::::::di::::::i tt::::::::::::::t B:::::::::::::::::B y:::::y -E::::::::::::::::::::E d:::::::::ddd::::di::::::i tt:::::::::::tt B::::::::::::::::B y:::::y -EEEEEEEEEEEEEEEEEEEEEE ddddddddd dddddiiiiiiii ttttttttttt BBBBBBBBBBBBBBBBB y:::::y - y:::::y - y:::::y - y:::::y - y:::::y - yyyyyyy - - - - dddddddd -HHHHHHHHH HHHHHHHHH d::::::d -H:::::::H H:::::::H d::::::d -H:::::::H H:::::::H d::::::d -HH::::::H H::::::HH d:::::d - H:::::H H:::::H aaaaaaaaaaaaa nnnn nnnnnnnn ddddddddd:::::d - H:::::H H:::::H a::::::::::::a n:::nn::::::::nn dd::::::::::::::d - H::::::HHHHH::::::H aaaaaaaaa:::::an::::::::::::::nn d::::::::::::::::d - H:::::::::::::::::H a::::ann:::::::::::::::nd:::::::ddddd:::::d - H:::::::::::::::::H aaaaaaa:::::a n:::::nnnn:::::nd::::::d d:::::d - H::::::HHHHH::::::H aa::::::::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::aaaa::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::a a:::::a n::::n n::::nd:::::d d:::::d -HH::::::H H::::::HHa::::a a:::::a n::::n n::::nd::::::ddddd::::::dd -H:::::::H H:::::::Ha:::::aaaa::::::a n::::n n::::n d:::::::::::::::::d -H:::::::H H:::::::H a::::::::::aa:::a n::::n n::::n d:::::::::ddd::::d -HHHHHHHHH HHHHHHHHH aaaaaaaaaa aaaa nnnnnn nnnnnn ddddddddd ddddd - - - -""" - -from sasdata.quantities.units import ( - amperes, - coulombs, - farads, - henry, - hertz, - joules, - kelvin, - kilograms, - meters, - newtons, - ohms, - pascals, - seconds, - siemens, - tesla, - volts, - watts, - webers, -) - -all_si = [ - meters, - seconds, - amperes, - kelvin, - hertz, - newtons, - pascals, - joules, - watts, - coulombs, - volts, - ohms, - farads, - siemens, - webers, - tesla, - henry, - kilograms, -] +# This file is intentionally blank. It needs to exist so that the +# module loader can load it as a module, but the actual contents are +# dynamically created in __init__.py diff --git a/sasdata/quantities/test_numerical_encoding.py b/sasdata/quantities/test_numerical_encoding.py new file mode 100644 index 000000000..b7fb7cfed --- /dev/null +++ b/sasdata/quantities/test_numerical_encoding.py @@ -0,0 +1,66 @@ +""" Tests for the encoding and decoding of numerical data""" + +import numpy as np +import pytest + +from sasdata.quantities.numerical_encoding import numerical_decode, numerical_encode + + +@pytest.mark.parametrize("value", [-100.0, -10.0, -1.0, 0.0, 0.5, 1.0, 10.0, 100.0, 1e100]) +def test_float_encode_decode(value: float): + + assert isinstance(value, float) # Make sure we have the right inputs + + encoded = numerical_encode(value) + decoded = numerical_decode(encoded) + + assert isinstance(decoded, float) + assert value == decoded + +@pytest.mark.parametrize("value", [-100, -10, -1, 0, 1, 10, 100, 1000000000000000000000000000000000]) +def test_int_encode_decode(value: int): + + assert isinstance(value, int) # Make sure we have the right inputs + + encoded = numerical_encode(value) + decoded = numerical_decode(encoded) + + assert isinstance(decoded, int) + assert value == decoded + +@pytest.mark.parametrize("shape", [ + (2,3,4), + (1,2), + (10,5,10), + (1,), + (4,), + (0, ) ]) +def test_numpy_float_encode_decode(shape): + np.random.seed(1776) + test_matrix = np.random.rand(*shape) + + encoded = numerical_encode(test_matrix) + decoded = numerical_decode(encoded) + + assert decoded.dtype == test_matrix.dtype + assert decoded.shape == test_matrix.shape + assert np.all(decoded == test_matrix) + +@pytest.mark.parametrize("dtype", [int, float, complex]) +def test_numpy_dtypes_encode_decode(dtype): + test_matrix = np.zeros((3,3), dtype=dtype) + + encoded = numerical_encode(test_matrix) + decoded = numerical_decode(encoded) + + assert decoded.dtype == test_matrix.dtype + +@pytest.mark.parametrize("dtype", [int, float, complex]) +@pytest.mark.parametrize("shape, n, m", [ + ((8, 8), (1,3,5),(2,5,7)), + ((6, 8), (1,0,5),(0,5,0)), + ((6, 1), (1, 0, 5), (0, 0, 0)), +]) +def test_coo_matrix_encode_decode(shape, n, m, dtype): + + values = np.arange(10) diff --git a/sasdata/quantities/unicode_superscript.py b/sasdata/quantities/unicode_superscript.py deleted file mode 100644 index 81f90f2d4..000000000 --- a/sasdata/quantities/unicode_superscript.py +++ /dev/null @@ -1,12 +0,0 @@ - -_ascii_version = "0123456789-" -_unicode_version = "⁰¹²³⁴⁵⁶⁷⁸⁹⁻" - -def int_as_unicode_superscript(number: int): - string = str(number) - - for old, new in zip(_ascii_version, _unicode_version): - string = string.replace(old, new) - - return string - diff --git a/sasdata/quantities/units.py b/sasdata/quantities/units.py index 7d03abda0..cd71771e4 100644 --- a/sasdata/quantities/units.py +++ b/sasdata/quantities/units.py @@ -1,3630 +1,3 @@ -""" - -This file is autogenerated! - -Do not edit by hand, instead edit the files that build it (_build_tables.py, _units_base.py) - - - - -DDDDDDDDDDDDD NNNNNNNN NNNNNNNN tttt -D::::::::::::DDD N:::::::N N::::::N ttt:::t -D:::::::::::::::DD N::::::::N N::::::N t:::::t -DDD:::::DDDDD:::::D N:::::::::N N::::::N t:::::t - D:::::D D:::::D ooooooooooo N::::::::::N N::::::N ooooooooooo ttttttt:::::ttttttt - D:::::D D:::::D oo:::::::::::oo N:::::::::::N N::::::N oo:::::::::::oo t:::::::::::::::::t - D:::::D D:::::Do:::::::::::::::o N:::::::N::::N N::::::No:::::::::::::::ot:::::::::::::::::t - D:::::D D:::::Do:::::ooooo:::::o N::::::N N::::N N::::::No:::::ooooo:::::otttttt:::::::tttttt - D:::::D D:::::Do::::o o::::o N::::::N N::::N:::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N:::::::::::No::::o o::::o t:::::t - D:::::D D:::::Do::::o o::::o N::::::N N::::::::::No::::o o::::o t:::::t - D:::::D D:::::D o::::o o::::o N::::::N N:::::::::No::::o o::::o t:::::t tttttt -DDD:::::DDDDD:::::D o:::::ooooo:::::o N::::::N N::::::::No:::::ooooo:::::o t::::::tttt:::::t -D:::::::::::::::DD o:::::::::::::::o N::::::N N:::::::No:::::::::::::::o tt::::::::::::::t -D::::::::::::DDD oo:::::::::::oo N::::::N N::::::N oo:::::::::::oo tt:::::::::::tt -DDDDDDDDDDDDD ooooooooooo NNNNNNNN NNNNNNN ooooooooooo ttttttttttt - - - - - - - - - dddddddd -EEEEEEEEEEEEEEEEEEEEEE d::::::d iiii tttt BBBBBBBBBBBBBBBBB -E::::::::::::::::::::E d::::::d i::::i ttt:::t B::::::::::::::::B -E::::::::::::::::::::E d::::::d iiii t:::::t B::::::BBBBBB:::::B -EE::::::EEEEEEEEE::::E d:::::d t:::::t BB:::::B B:::::B - E:::::E EEEEEE ddddddddd:::::d iiiiiiittttttt:::::ttttttt B::::B B:::::Byyyyyyy yyyyyyy - E:::::E dd::::::::::::::d i:::::it:::::::::::::::::t B::::B B:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d::::::::::::::::d i::::it:::::::::::::::::t B::::BBBBBB:::::B y:::::y y:::::y - E:::::::::::::::E d:::::::ddddd:::::d i::::itttttt:::::::tttttt B:::::::::::::BB y:::::y y:::::y - E:::::::::::::::E d::::::d d:::::d i::::i t:::::t B::::BBBBBB:::::B y:::::y y:::::y - E::::::EEEEEEEEEE d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y y:::::y - E:::::E d:::::d d:::::d i::::i t:::::t B::::B B:::::B y:::::y:::::y - E:::::E EEEEEEd:::::d d:::::d i::::i t:::::t tttttt B::::B B:::::B y:::::::::y -EE::::::EEEEEEEE:::::Ed::::::ddddd::::::ddi::::::i t::::::tttt:::::t BB:::::BBBBBB::::::B y:::::::y -E::::::::::::::::::::E d:::::::::::::::::di::::::i tt::::::::::::::t B:::::::::::::::::B y:::::y -E::::::::::::::::::::E d:::::::::ddd::::di::::::i tt:::::::::::tt B::::::::::::::::B y:::::y -EEEEEEEEEEEEEEEEEEEEEE ddddddddd dddddiiiiiiii ttttttttttt BBBBBBBBBBBBBBBBB y:::::y - y:::::y - y:::::y - y:::::y - y:::::y - yyyyyyy - - - - dddddddd -HHHHHHHHH HHHHHHHHH d::::::d -H:::::::H H:::::::H d::::::d -H:::::::H H:::::::H d::::::d -HH::::::H H::::::HH d:::::d - H:::::H H:::::H aaaaaaaaaaaaa nnnn nnnnnnnn ddddddddd:::::d - H:::::H H:::::H a::::::::::::a n:::nn::::::::nn dd::::::::::::::d - H::::::HHHHH::::::H aaaaaaaaa:::::an::::::::::::::nn d::::::::::::::::d - H:::::::::::::::::H a::::ann:::::::::::::::nd:::::::ddddd:::::d - H:::::::::::::::::H aaaaaaa:::::a n:::::nnnn:::::nd::::::d d:::::d - H::::::HHHHH::::::H aa::::::::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::aaaa::::::a n::::n n::::nd:::::d d:::::d - H:::::H H:::::H a::::a a:::::a n::::n n::::nd:::::d d:::::d -HH::::::H H::::::HHa::::a a:::::a n::::n n::::nd::::::ddddd::::::dd -H:::::::H H:::::::Ha:::::aaaa::::::a n::::n n::::n d:::::::::::::::::d -H:::::::H H:::::::H a::::::::::aa:::a n::::n n::::n d:::::::::ddd::::d -HHHHHHHHH HHHHHHHHH aaaaaaaaaa aaaa nnnnnn nnnnnn ddddddddd ddddd - - - -""" - -# -# Included from _units_base.py -# - -from collections.abc import Sequence -from dataclasses import dataclass -from fractions import Fraction -from typing import Self - -import numpy as np - -from sasdata.quantities.unicode_superscript import int_as_unicode_superscript - - -class DimensionError(Exception): - pass - -class Dimensions: - """ - - Note that some SI Base units are not useful from the perspecive of the sasview project, and make things - behave badly. In particular: moles and angular measures are dimensionless, and candelas are really a weighted - measure of power. - - We do however track angle and amount, because its really useful for formatting units - - """ - def __init__(self, - length: int = 0, - time: int = 0, - mass: int = 0, - current: int = 0, - temperature: int = 0, - moles_hint: int = 0, - angle_hint: int = 0): - - self.length = length - self.time = time - self.mass = mass - self.current = current - self.temperature = temperature - self.moles_hint = moles_hint - self.angle_hint = angle_hint - - @property - def is_dimensionless(self): - """ Is this dimension dimensionless (ignores moles_hint and angle_hint) """ - return self.length == 0 and self.time == 0 and self.mass == 0 and self.current == 0 and self.temperature == 0 - - def __mul__(self: Self, other: Self): - - if not isinstance(other, Dimensions): - return NotImplemented - - return Dimensions( - self.length + other.length, - self.time + other.time, - self.mass + other.mass, - self.current + other.current, - self.temperature + other.temperature, - self.moles_hint + other.moles_hint, - self.angle_hint + other.angle_hint) - - def __truediv__(self: Self, other: Self): - - if not isinstance(other, Dimensions): - return NotImplemented - - return Dimensions( - self.length - other.length, - self.time - other.time, - self.mass - other.mass, - self.current - other.current, - self.temperature - other.temperature, - self.moles_hint - other.moles_hint, - self.angle_hint - other.angle_hint) - - def __pow__(self, power: int | float): - - if not isinstance(power, (int, float)): - return NotImplemented - - frac = Fraction(power).limit_denominator(500) # Probably way bigger than needed, 10 would probably be fine - denominator = frac.denominator - numerator = frac.numerator - - # Throw errors if dimension is not a multiple of the denominator - - if self.length % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with length dimensionality {self.length}") - - if self.time % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with time dimensionality {self.time}") - - if self.mass % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with mass dimensionality {self.mass}") - - if self.current % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with current dimensionality {self.current}") - - if self.temperature % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with temperature dimensionality {self.temperature}") - - if self.moles_hint % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with moles hint dimensionality of {self.moles_hint}") - - if self.angle_hint % denominator != 0: - raise DimensionError(f"Cannot apply power of {frac} to unit with angle hint dimensionality of {self.angle_hint}") - - return Dimensions( - (self.length * numerator) // denominator, - (self.time * numerator) // denominator, - (self.mass * numerator) // denominator, - (self.current * numerator) // denominator, - (self.temperature * numerator) // denominator, - (self.moles_hint * numerator) // denominator, - (self.angle_hint * numerator) // denominator) - - def __eq__(self: Self, other: Self): - if isinstance(other, Dimensions): - return (self.length == other.length and - self.time == other.time and - self.mass == other.mass and - self.current == other.current and - self.temperature == other.temperature and - self.moles_hint == other.moles_hint and - self.angle_hint == other.angle_hint) - - return NotImplemented - - def __hash__(self): - """ Unique representation of units using Godel like encoding""" - - two_powers = 0 - if self.length < 0: - two_powers += 1 - - if self.time < 0: - two_powers += 2 - - if self.mass < 0: - two_powers += 4 - - if self.current < 0: - two_powers += 8 - - if self.temperature < 0: - two_powers += 16 - - if self.moles_hint < 0: - two_powers += 32 - - if self.angle_hint < 0: - two_powers += 64 - - return 2**two_powers * 3**abs(self.length) * 5**abs(self.time) * \ - 7**abs(self.mass) * 11**abs(self.current) * 13**abs(self.temperature) * \ - 17**abs(self.moles_hint) * 19**abs(self.angle_hint) - - def __repr__(self): - tokens = [] - for name, size in [ - ("length", self.length), - ("time", self.time), - ("mass", self.mass), - ("current", self.current), - ("temperature", self.temperature), - ("amount", self.moles_hint), - ("angle", self.angle_hint)]: - - if size == 0: - pass - elif size == 1: - tokens.append(f"{name}") - else: - tokens.append(f"{name}{int_as_unicode_superscript(size)}") - - return ' '.join(tokens) - - def si_repr(self): - tokens = [] - for name, size in [ - ("kg", self.mass), - ("m", self.length), - ("s", self.time), - ("A", self.current), - ("K", self.temperature), - ("mol", self.moles_hint)]: - - if size == 0: - pass - elif size == 1: - tokens.append(f"{name}") - else: - tokens.append(f"{name}{int_as_unicode_superscript(size)}") - - match self.angle_hint: - case 0: - pass - case 2: - tokens.append("sr") - case -2: - tokens.append("sr" + int_as_unicode_superscript(-1)) - case _: - tokens.append("rad" + int_as_unicode_superscript(self.angle_hint)) - - return ''.join(tokens) - - -class Unit: - def __init__(self, - si_scaling_factor: float, - dimensions: Dimensions): - - self.scale = si_scaling_factor - self.dimensions = dimensions - - def _components(self, tokens: Sequence["UnitToken"]): - pass - - def __mul__(self: Self, other: "Unit"): - if isinstance(other, Unit): - return Unit(self.scale * other.scale, self.dimensions * other.dimensions) - elif isinstance(other, (int, float)): - return Unit(other * self.scale, self.dimensions) - return NotImplemented - - def __truediv__(self: Self, other: "Unit"): - if isinstance(other, Unit): - return Unit(self.scale / other.scale, self.dimensions / other.dimensions) - elif isinstance(other, (int, float)): - return Unit(self.scale / other, self.dimensions) - else: - return NotImplemented - - def __rtruediv__(self: Self, other: "Unit"): - if isinstance(other, Unit): - return Unit(other.scale / self.scale, other.dimensions / self.dimensions) - elif isinstance(other, (int, float)): - return Unit(other / self.scale, self.dimensions ** -1) - else: - return NotImplemented - - def __pow__(self, power: int | float): - if not isinstance(power, int | float): - return NotImplemented - - return Unit(self.scale**power, self.dimensions**power) - - - def equivalent(self: Self, other: "Unit"): - return self.dimensions == other.dimensions - - def __eq__(self: Self, other: "Unit"): - return self.equivalent(other) and np.abs(np.log(self.scale/other.scale)) < 1e-5 - - def si_equivalent(self): - """ Get the SI unit corresponding to this unit""" - return Unit(1, self.dimensions) - - def _format_unit(self, format_process: list["UnitFormatProcessor"]): - for processor in format_process: - pass - - def __repr__(self): - if self.scale == 1: - # We're in SI - return self.dimensions.si_repr() - - else: - return f"Unit[{self.scale}, {self.dimensions}]" - - @staticmethod - def parse(unit_string: str) -> "Unit": - pass - -class NamedUnit(Unit): - """ Units, but they have a name, and a symbol - - :si_scaling_factor: Number of these units per SI equivalent - :param dimensions: Dimensions object representing the dimensionality of these units - :param name: Name of unit - string without unicode - :param ascii_symbol: Symbol for unit without unicode - :param symbol: Unicode symbol - """ - def __init__(self, - si_scaling_factor: float, - dimensions: Dimensions, - name: str | None = None, - ascii_symbol: str | None = None, - latex_symbol: str | None = None, - symbol: str | None = None): - - super().__init__(si_scaling_factor, dimensions) - self.name = name - self.ascii_symbol = ascii_symbol - self.symbol = symbol - self.latex_symbol = latex_symbol if latex_symbol is not None else ascii_symbol - - def __repr__(self): - return self.name - - def __eq__(self, other): - """Match other units exactly or match strings against ANY of our names""" - match other: - case str(): - return self.name == other or self.name == f"{other}s" or self.ascii_symbol == other or self.symbol == other - case NamedUnit(): - return self.name == other.name \ - and self.ascii_symbol == other.ascii_symbol and self.symbol == other.symbol - case Unit(): - return self.equivalent(other) and np.abs(np.log(self.scale/other.scale)) < 1e-5 - case _: - return False - - - def startswith(self, prefix: str) -> bool: - """Check if any representation of the unit begins with the prefix string""" - prefix = prefix.lower() - return (self.name is not None and self.name.lower().startswith(prefix)) \ - or (self.ascii_symbol is not None and self.ascii_symbol.lower().startswith(prefix)) \ - or (self.symbol is not None and self.symbol.lower().startswith(prefix)) - -# -# Parsing plan: -# Require unknown amounts of units to be explicitly positive or negative? -# -# - - - -@dataclass -class ProcessedUnitToken: - """ Mid processing representation of formatted units """ - base_string: str - exponent_string: str - latex_exponent_string: str - exponent: int - -class UnitFormatProcessor: - """ Represents a step in the unit processing pipeline""" - def apply(self, scale, dimensions) -> tuple[ProcessedUnitToken, float, Dimensions]: - """ This will be called to deal with each processing stage""" - -class RequiredUnitFormatProcessor(UnitFormatProcessor): - """ This unit is required to exist in the formatting """ - def __init__(self, unit: Unit, power: int = 1): - self.unit = unit - self.power = power - def apply(self, scale, dimensions) -> tuple[float, Dimensions, ProcessedUnitToken]: - new_scale = scale / (self.unit.scale * self.power) - new_dimensions = self.unit.dimensions / (dimensions**self.power) - token = ProcessedUnitToken(self.unit, self.power) - - return new_scale, new_dimensions, token -class GreedyAbsDimensionUnitFormatProcessor(UnitFormatProcessor): - """ This processor minimises the dimensionality of the unit by multiplying by as many - units of the specified type as needed """ - def __init__(self, unit: Unit): - self.unit = unit - - def apply(self, scale, dimensions) -> tuple[ProcessedUnitToken, float, Dimensions]: - pass - -class GreedyAbsDimensionUnitFormatProcessor(UnitFormatProcessor): - pass - -class UnitGroup: - """ A group of units that all have the same dimensionality """ - def __init__(self, name: str, units: list[NamedUnit]): - self.name = name - self.units = sorted(units, key=lambda unit: unit.scale) - - - -# -# Specific units -# - -meters = NamedUnit(1, Dimensions(1, 0, 0, 0, 0, 0, 0),name='meters',ascii_symbol='m',symbol='m') -exameters = NamedUnit(1e+18, Dimensions(1, 0, 0, 0, 0, 0, 0),name='exameters',ascii_symbol='Em',symbol='Em') -petameters = NamedUnit(1000000000000000.0, Dimensions(1, 0, 0, 0, 0, 0, 0),name='petameters',ascii_symbol='Pm',symbol='Pm') -terameters = NamedUnit(1000000000000.0, Dimensions(1, 0, 0, 0, 0, 0, 0),name='terameters',ascii_symbol='Tm',symbol='Tm') -gigameters = NamedUnit(1000000000.0, Dimensions(1, 0, 0, 0, 0, 0, 0),name='gigameters',ascii_symbol='Gm',symbol='Gm') -megameters = NamedUnit(1000000.0, Dimensions(1, 0, 0, 0, 0, 0, 0),name='megameters',ascii_symbol='Mm',symbol='Mm') -kilometers = NamedUnit(1000.0, Dimensions(1, 0, 0, 0, 0, 0, 0),name='kilometers',ascii_symbol='km',symbol='km') -millimeters = NamedUnit(0.001, Dimensions(1, 0, 0, 0, 0, 0, 0),name='millimeters',ascii_symbol='mm',symbol='mm') -micrometers = NamedUnit(1e-06, Dimensions(1, 0, 0, 0, 0, 0, 0),name='micrometers',ascii_symbol='um',latex_symbol=r'{\mu}m',symbol='µm') -nanometers = NamedUnit(1e-09, Dimensions(1, 0, 0, 0, 0, 0, 0),name='nanometers',ascii_symbol='nm',symbol='nm') -picometers = NamedUnit(1e-12, Dimensions(1, 0, 0, 0, 0, 0, 0),name='picometers',ascii_symbol='pm',symbol='pm') -femtometers = NamedUnit(1e-15, Dimensions(1, 0, 0, 0, 0, 0, 0),name='femtometers',ascii_symbol='fm',symbol='fm') -attometers = NamedUnit(1e-18, Dimensions(1, 0, 0, 0, 0, 0, 0),name='attometers',ascii_symbol='am',symbol='am') -decimeters = NamedUnit(0.1, Dimensions(1, 0, 0, 0, 0, 0, 0),name='decimeters',ascii_symbol='dm',symbol='dm') -centimeters = NamedUnit(0.01, Dimensions(1, 0, 0, 0, 0, 0, 0),name='centimeters',ascii_symbol='cm',symbol='cm') -seconds = NamedUnit(1, Dimensions(0, 1, 0, 0, 0, 0, 0),name='seconds',ascii_symbol='s',symbol='s') -milliseconds = NamedUnit(0.001, Dimensions(0, 1, 0, 0, 0, 0, 0),name='milliseconds',ascii_symbol='ms',symbol='ms') -microseconds = NamedUnit(1e-06, Dimensions(0, 1, 0, 0, 0, 0, 0),name='microseconds',ascii_symbol='us',latex_symbol=r'{\mu}s',symbol='µs') -nanoseconds = NamedUnit(1e-09, Dimensions(0, 1, 0, 0, 0, 0, 0),name='nanoseconds',ascii_symbol='ns',symbol='ns') -picoseconds = NamedUnit(1e-12, Dimensions(0, 1, 0, 0, 0, 0, 0),name='picoseconds',ascii_symbol='ps',symbol='ps') -femtoseconds = NamedUnit(1e-15, Dimensions(0, 1, 0, 0, 0, 0, 0),name='femtoseconds',ascii_symbol='fs',symbol='fs') -attoseconds = NamedUnit(1e-18, Dimensions(0, 1, 0, 0, 0, 0, 0),name='attoseconds',ascii_symbol='as',symbol='as') -grams = NamedUnit(0.001, Dimensions(0, 0, 1, 0, 0, 0, 0),name='grams',ascii_symbol='g',symbol='g') -exagrams = NamedUnit(1000000000000000.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='exagrams',ascii_symbol='Eg',symbol='Eg') -petagrams = NamedUnit(1000000000000.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='petagrams',ascii_symbol='Pg',symbol='Pg') -teragrams = NamedUnit(1000000000.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='teragrams',ascii_symbol='Tg',symbol='Tg') -gigagrams = NamedUnit(1000000.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='gigagrams',ascii_symbol='Gg',symbol='Gg') -megagrams = NamedUnit(1000.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='megagrams',ascii_symbol='Mg',symbol='Mg') -kilograms = NamedUnit(1.0, Dimensions(0, 0, 1, 0, 0, 0, 0),name='kilograms',ascii_symbol='kg',symbol='kg') -milligrams = NamedUnit(1e-06, Dimensions(0, 0, 1, 0, 0, 0, 0),name='milligrams',ascii_symbol='mg',symbol='mg') -micrograms = NamedUnit(1e-09, Dimensions(0, 0, 1, 0, 0, 0, 0),name='micrograms',ascii_symbol='ug',latex_symbol=r'{\mu}g',symbol='µg') -nanograms = NamedUnit(1.0000000000000002e-12, Dimensions(0, 0, 1, 0, 0, 0, 0),name='nanograms',ascii_symbol='ng',symbol='ng') -picograms = NamedUnit(1e-15, Dimensions(0, 0, 1, 0, 0, 0, 0),name='picograms',ascii_symbol='pg',symbol='pg') -femtograms = NamedUnit(1e-18, Dimensions(0, 0, 1, 0, 0, 0, 0),name='femtograms',ascii_symbol='fg',symbol='fg') -attograms = NamedUnit(1.0000000000000001e-21, Dimensions(0, 0, 1, 0, 0, 0, 0),name='attograms',ascii_symbol='ag',symbol='ag') -amperes = NamedUnit(1, Dimensions(0, 0, 0, 1, 0, 0, 0),name='amperes',ascii_symbol='A',symbol='A') -exaamperes = NamedUnit(1e+18, Dimensions(0, 0, 0, 1, 0, 0, 0),name='exaamperes',ascii_symbol='EA',symbol='EA') -petaamperes = NamedUnit(1000000000000000.0, Dimensions(0, 0, 0, 1, 0, 0, 0),name='petaamperes',ascii_symbol='PA',symbol='PA') -teraamperes = NamedUnit(1000000000000.0, Dimensions(0, 0, 0, 1, 0, 0, 0),name='teraamperes',ascii_symbol='TA',symbol='TA') -gigaamperes = NamedUnit(1000000000.0, Dimensions(0, 0, 0, 1, 0, 0, 0),name='gigaamperes',ascii_symbol='GA',symbol='GA') -megaamperes = NamedUnit(1000000.0, Dimensions(0, 0, 0, 1, 0, 0, 0),name='megaamperes',ascii_symbol='MA',symbol='MA') -kiloamperes = NamedUnit(1000.0, Dimensions(0, 0, 0, 1, 0, 0, 0),name='kiloamperes',ascii_symbol='kA',symbol='kA') -milliamperes = NamedUnit(0.001, Dimensions(0, 0, 0, 1, 0, 0, 0),name='milliamperes',ascii_symbol='mA',symbol='mA') -microamperes = NamedUnit(1e-06, Dimensions(0, 0, 0, 1, 0, 0, 0),name='microamperes',ascii_symbol='uA',latex_symbol=r'{\mu}A',symbol='µA') -nanoamperes = NamedUnit(1e-09, Dimensions(0, 0, 0, 1, 0, 0, 0),name='nanoamperes',ascii_symbol='nA',symbol='nA') -picoamperes = NamedUnit(1e-12, Dimensions(0, 0, 0, 1, 0, 0, 0),name='picoamperes',ascii_symbol='pA',symbol='pA') -femtoamperes = NamedUnit(1e-15, Dimensions(0, 0, 0, 1, 0, 0, 0),name='femtoamperes',ascii_symbol='fA',symbol='fA') -attoamperes = NamedUnit(1e-18, Dimensions(0, 0, 0, 1, 0, 0, 0),name='attoamperes',ascii_symbol='aA',symbol='aA') -kelvin = NamedUnit(1, Dimensions(0, 0, 0, 0, 1, 0, 0),name='kelvin',ascii_symbol='K',symbol='K') -exakelvin = NamedUnit(1e+18, Dimensions(0, 0, 0, 0, 1, 0, 0),name='exakelvin',ascii_symbol='EK',symbol='EK') -petakelvin = NamedUnit(1000000000000000.0, Dimensions(0, 0, 0, 0, 1, 0, 0),name='petakelvin',ascii_symbol='PK',symbol='PK') -terakelvin = NamedUnit(1000000000000.0, Dimensions(0, 0, 0, 0, 1, 0, 0),name='terakelvin',ascii_symbol='TK',symbol='TK') -gigakelvin = NamedUnit(1000000000.0, Dimensions(0, 0, 0, 0, 1, 0, 0),name='gigakelvin',ascii_symbol='GK',symbol='GK') -megakelvin = NamedUnit(1000000.0, Dimensions(0, 0, 0, 0, 1, 0, 0),name='megakelvin',ascii_symbol='MK',symbol='MK') -kilokelvin = NamedUnit(1000.0, Dimensions(0, 0, 0, 0, 1, 0, 0),name='kilokelvin',ascii_symbol='kK',symbol='kK') -millikelvin = NamedUnit(0.001, Dimensions(0, 0, 0, 0, 1, 0, 0),name='millikelvin',ascii_symbol='mK',symbol='mK') -microkelvin = NamedUnit(1e-06, Dimensions(0, 0, 0, 0, 1, 0, 0),name='microkelvin',ascii_symbol='uK',latex_symbol=r'{\mu}K',symbol='µK') -nanokelvin = NamedUnit(1e-09, Dimensions(0, 0, 0, 0, 1, 0, 0),name='nanokelvin',ascii_symbol='nK',symbol='nK') -picokelvin = NamedUnit(1e-12, Dimensions(0, 0, 0, 0, 1, 0, 0),name='picokelvin',ascii_symbol='pK',symbol='pK') -femtokelvin = NamedUnit(1e-15, Dimensions(0, 0, 0, 0, 1, 0, 0),name='femtokelvin',ascii_symbol='fK',symbol='fK') -attokelvin = NamedUnit(1e-18, Dimensions(0, 0, 0, 0, 1, 0, 0),name='attokelvin',ascii_symbol='aK',symbol='aK') -hertz = NamedUnit(1, Dimensions(0, -1, 0, 0, 0, 0, 0),name='hertz',ascii_symbol='Hz',symbol='Hz') -exahertz = NamedUnit(1e+18, Dimensions(0, -1, 0, 0, 0, 0, 0),name='exahertz',ascii_symbol='EHz',symbol='EHz') -petahertz = NamedUnit(1000000000000000.0, Dimensions(0, -1, 0, 0, 0, 0, 0),name='petahertz',ascii_symbol='PHz',symbol='PHz') -terahertz = NamedUnit(1000000000000.0, Dimensions(0, -1, 0, 0, 0, 0, 0),name='terahertz',ascii_symbol='THz',symbol='THz') -gigahertz = NamedUnit(1000000000.0, Dimensions(0, -1, 0, 0, 0, 0, 0),name='gigahertz',ascii_symbol='GHz',symbol='GHz') -megahertz = NamedUnit(1000000.0, Dimensions(0, -1, 0, 0, 0, 0, 0),name='megahertz',ascii_symbol='MHz',symbol='MHz') -kilohertz = NamedUnit(1000.0, Dimensions(0, -1, 0, 0, 0, 0, 0),name='kilohertz',ascii_symbol='kHz',symbol='kHz') -millihertz = NamedUnit(0.001, Dimensions(0, -1, 0, 0, 0, 0, 0),name='millihertz',ascii_symbol='mHz',symbol='mHz') -microhertz = NamedUnit(1e-06, Dimensions(0, -1, 0, 0, 0, 0, 0),name='microhertz',ascii_symbol='uHz',latex_symbol=r'{\mu}Hz',symbol='µHz') -nanohertz = NamedUnit(1e-09, Dimensions(0, -1, 0, 0, 0, 0, 0),name='nanohertz',ascii_symbol='nHz',symbol='nHz') -picohertz = NamedUnit(1e-12, Dimensions(0, -1, 0, 0, 0, 0, 0),name='picohertz',ascii_symbol='pHz',symbol='pHz') -femtohertz = NamedUnit(1e-15, Dimensions(0, -1, 0, 0, 0, 0, 0),name='femtohertz',ascii_symbol='fHz',symbol='fHz') -attohertz = NamedUnit(1e-18, Dimensions(0, -1, 0, 0, 0, 0, 0),name='attohertz',ascii_symbol='aHz',symbol='aHz') -newtons = NamedUnit(1, Dimensions(1, -2, 1, 0, 0, 0, 0),name='newtons',ascii_symbol='N',symbol='N') -exanewtons = NamedUnit(1e+18, Dimensions(1, -2, 1, 0, 0, 0, 0),name='exanewtons',ascii_symbol='EN',symbol='EN') -petanewtons = NamedUnit(1000000000000000.0, Dimensions(1, -2, 1, 0, 0, 0, 0),name='petanewtons',ascii_symbol='PN',symbol='PN') -teranewtons = NamedUnit(1000000000000.0, Dimensions(1, -2, 1, 0, 0, 0, 0),name='teranewtons',ascii_symbol='TN',symbol='TN') -giganewtons = NamedUnit(1000000000.0, Dimensions(1, -2, 1, 0, 0, 0, 0),name='giganewtons',ascii_symbol='GN',symbol='GN') -meganewtons = NamedUnit(1000000.0, Dimensions(1, -2, 1, 0, 0, 0, 0),name='meganewtons',ascii_symbol='MN',symbol='MN') -kilonewtons = NamedUnit(1000.0, Dimensions(1, -2, 1, 0, 0, 0, 0),name='kilonewtons',ascii_symbol='kN',symbol='kN') -millinewtons = NamedUnit(0.001, Dimensions(1, -2, 1, 0, 0, 0, 0),name='millinewtons',ascii_symbol='mN',symbol='mN') -micronewtons = NamedUnit(1e-06, Dimensions(1, -2, 1, 0, 0, 0, 0),name='micronewtons',ascii_symbol='uN',latex_symbol=r'{\mu}N',symbol='µN') -nanonewtons = NamedUnit(1e-09, Dimensions(1, -2, 1, 0, 0, 0, 0),name='nanonewtons',ascii_symbol='nN',symbol='nN') -piconewtons = NamedUnit(1e-12, Dimensions(1, -2, 1, 0, 0, 0, 0),name='piconewtons',ascii_symbol='pN',symbol='pN') -femtonewtons = NamedUnit(1e-15, Dimensions(1, -2, 1, 0, 0, 0, 0),name='femtonewtons',ascii_symbol='fN',symbol='fN') -attonewtons = NamedUnit(1e-18, Dimensions(1, -2, 1, 0, 0, 0, 0),name='attonewtons',ascii_symbol='aN',symbol='aN') -pascals = NamedUnit(1, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='pascals',ascii_symbol='Pa',symbol='Pa') -exapascals = NamedUnit(1e+18, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='exapascals',ascii_symbol='EPa',symbol='EPa') -petapascals = NamedUnit(1000000000000000.0, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='petapascals',ascii_symbol='PPa',symbol='PPa') -terapascals = NamedUnit(1000000000000.0, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='terapascals',ascii_symbol='TPa',symbol='TPa') -gigapascals = NamedUnit(1000000000.0, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='gigapascals',ascii_symbol='GPa',symbol='GPa') -megapascals = NamedUnit(1000000.0, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='megapascals',ascii_symbol='MPa',symbol='MPa') -kilopascals = NamedUnit(1000.0, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='kilopascals',ascii_symbol='kPa',symbol='kPa') -millipascals = NamedUnit(0.001, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='millipascals',ascii_symbol='mPa',symbol='mPa') -micropascals = NamedUnit(1e-06, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='micropascals',ascii_symbol='uPa',latex_symbol=r'{\mu}Pa',symbol='µPa') -nanopascals = NamedUnit(1e-09, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='nanopascals',ascii_symbol='nPa',symbol='nPa') -picopascals = NamedUnit(1e-12, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='picopascals',ascii_symbol='pPa',symbol='pPa') -femtopascals = NamedUnit(1e-15, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='femtopascals',ascii_symbol='fPa',symbol='fPa') -attopascals = NamedUnit(1e-18, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='attopascals',ascii_symbol='aPa',symbol='aPa') -joules = NamedUnit(1, Dimensions(2, -2, 1, 0, 0, 0, 0),name='joules',ascii_symbol='J',symbol='J') -exajoules = NamedUnit(1e+18, Dimensions(2, -2, 1, 0, 0, 0, 0),name='exajoules',ascii_symbol='EJ',symbol='EJ') -petajoules = NamedUnit(1000000000000000.0, Dimensions(2, -2, 1, 0, 0, 0, 0),name='petajoules',ascii_symbol='PJ',symbol='PJ') -terajoules = NamedUnit(1000000000000.0, Dimensions(2, -2, 1, 0, 0, 0, 0),name='terajoules',ascii_symbol='TJ',symbol='TJ') -gigajoules = NamedUnit(1000000000.0, Dimensions(2, -2, 1, 0, 0, 0, 0),name='gigajoules',ascii_symbol='GJ',symbol='GJ') -megajoules = NamedUnit(1000000.0, Dimensions(2, -2, 1, 0, 0, 0, 0),name='megajoules',ascii_symbol='MJ',symbol='MJ') -kilojoules = NamedUnit(1000.0, Dimensions(2, -2, 1, 0, 0, 0, 0),name='kilojoules',ascii_symbol='kJ',symbol='kJ') -millijoules = NamedUnit(0.001, Dimensions(2, -2, 1, 0, 0, 0, 0),name='millijoules',ascii_symbol='mJ',symbol='mJ') -microjoules = NamedUnit(1e-06, Dimensions(2, -2, 1, 0, 0, 0, 0),name='microjoules',ascii_symbol='uJ',latex_symbol=r'{\mu}J',symbol='µJ') -nanojoules = NamedUnit(1e-09, Dimensions(2, -2, 1, 0, 0, 0, 0),name='nanojoules',ascii_symbol='nJ',symbol='nJ') -picojoules = NamedUnit(1e-12, Dimensions(2, -2, 1, 0, 0, 0, 0),name='picojoules',ascii_symbol='pJ',symbol='pJ') -femtojoules = NamedUnit(1e-15, Dimensions(2, -2, 1, 0, 0, 0, 0),name='femtojoules',ascii_symbol='fJ',symbol='fJ') -attojoules = NamedUnit(1e-18, Dimensions(2, -2, 1, 0, 0, 0, 0),name='attojoules',ascii_symbol='aJ',symbol='aJ') -watts = NamedUnit(1, Dimensions(2, -3, 1, 0, 0, 0, 0),name='watts',ascii_symbol='W',symbol='W') -exawatts = NamedUnit(1e+18, Dimensions(2, -3, 1, 0, 0, 0, 0),name='exawatts',ascii_symbol='EW',symbol='EW') -petawatts = NamedUnit(1000000000000000.0, Dimensions(2, -3, 1, 0, 0, 0, 0),name='petawatts',ascii_symbol='PW',symbol='PW') -terawatts = NamedUnit(1000000000000.0, Dimensions(2, -3, 1, 0, 0, 0, 0),name='terawatts',ascii_symbol='TW',symbol='TW') -gigawatts = NamedUnit(1000000000.0, Dimensions(2, -3, 1, 0, 0, 0, 0),name='gigawatts',ascii_symbol='GW',symbol='GW') -megawatts = NamedUnit(1000000.0, Dimensions(2, -3, 1, 0, 0, 0, 0),name='megawatts',ascii_symbol='MW',symbol='MW') -kilowatts = NamedUnit(1000.0, Dimensions(2, -3, 1, 0, 0, 0, 0),name='kilowatts',ascii_symbol='kW',symbol='kW') -milliwatts = NamedUnit(0.001, Dimensions(2, -3, 1, 0, 0, 0, 0),name='milliwatts',ascii_symbol='mW',symbol='mW') -microwatts = NamedUnit(1e-06, Dimensions(2, -3, 1, 0, 0, 0, 0),name='microwatts',ascii_symbol='uW',latex_symbol=r'{\mu}W',symbol='µW') -nanowatts = NamedUnit(1e-09, Dimensions(2, -3, 1, 0, 0, 0, 0),name='nanowatts',ascii_symbol='nW',symbol='nW') -picowatts = NamedUnit(1e-12, Dimensions(2, -3, 1, 0, 0, 0, 0),name='picowatts',ascii_symbol='pW',symbol='pW') -femtowatts = NamedUnit(1e-15, Dimensions(2, -3, 1, 0, 0, 0, 0),name='femtowatts',ascii_symbol='fW',symbol='fW') -attowatts = NamedUnit(1e-18, Dimensions(2, -3, 1, 0, 0, 0, 0),name='attowatts',ascii_symbol='aW',symbol='aW') -coulombs = NamedUnit(1, Dimensions(0, 1, 0, 1, 0, 0, 0),name='coulombs',ascii_symbol='C',symbol='C') -exacoulombs = NamedUnit(1e+18, Dimensions(0, 1, 0, 1, 0, 0, 0),name='exacoulombs',ascii_symbol='EC',symbol='EC') -petacoulombs = NamedUnit(1000000000000000.0, Dimensions(0, 1, 0, 1, 0, 0, 0),name='petacoulombs',ascii_symbol='PC',symbol='PC') -teracoulombs = NamedUnit(1000000000000.0, Dimensions(0, 1, 0, 1, 0, 0, 0),name='teracoulombs',ascii_symbol='TC',symbol='TC') -gigacoulombs = NamedUnit(1000000000.0, Dimensions(0, 1, 0, 1, 0, 0, 0),name='gigacoulombs',ascii_symbol='GC',symbol='GC') -megacoulombs = NamedUnit(1000000.0, Dimensions(0, 1, 0, 1, 0, 0, 0),name='megacoulombs',ascii_symbol='MC',symbol='MC') -kilocoulombs = NamedUnit(1000.0, Dimensions(0, 1, 0, 1, 0, 0, 0),name='kilocoulombs',ascii_symbol='kC',symbol='kC') -millicoulombs = NamedUnit(0.001, Dimensions(0, 1, 0, 1, 0, 0, 0),name='millicoulombs',ascii_symbol='mC',symbol='mC') -microcoulombs = NamedUnit(1e-06, Dimensions(0, 1, 0, 1, 0, 0, 0),name='microcoulombs',ascii_symbol='uC',latex_symbol=r'{\mu}C',symbol='µC') -nanocoulombs = NamedUnit(1e-09, Dimensions(0, 1, 0, 1, 0, 0, 0),name='nanocoulombs',ascii_symbol='nC',symbol='nC') -picocoulombs = NamedUnit(1e-12, Dimensions(0, 1, 0, 1, 0, 0, 0),name='picocoulombs',ascii_symbol='pC',symbol='pC') -femtocoulombs = NamedUnit(1e-15, Dimensions(0, 1, 0, 1, 0, 0, 0),name='femtocoulombs',ascii_symbol='fC',symbol='fC') -attocoulombs = NamedUnit(1e-18, Dimensions(0, 1, 0, 1, 0, 0, 0),name='attocoulombs',ascii_symbol='aC',symbol='aC') -volts = NamedUnit(1, Dimensions(2, -3, 1, -1, 0, 0, 0),name='volts',ascii_symbol='V',symbol='V') -exavolts = NamedUnit(1e+18, Dimensions(2, -3, 1, -1, 0, 0, 0),name='exavolts',ascii_symbol='EV',symbol='EV') -petavolts = NamedUnit(1000000000000000.0, Dimensions(2, -3, 1, -1, 0, 0, 0),name='petavolts',ascii_symbol='PV',symbol='PV') -teravolts = NamedUnit(1000000000000.0, Dimensions(2, -3, 1, -1, 0, 0, 0),name='teravolts',ascii_symbol='TV',symbol='TV') -gigavolts = NamedUnit(1000000000.0, Dimensions(2, -3, 1, -1, 0, 0, 0),name='gigavolts',ascii_symbol='GV',symbol='GV') -megavolts = NamedUnit(1000000.0, Dimensions(2, -3, 1, -1, 0, 0, 0),name='megavolts',ascii_symbol='MV',symbol='MV') -kilovolts = NamedUnit(1000.0, Dimensions(2, -3, 1, -1, 0, 0, 0),name='kilovolts',ascii_symbol='kV',symbol='kV') -millivolts = NamedUnit(0.001, Dimensions(2, -3, 1, -1, 0, 0, 0),name='millivolts',ascii_symbol='mV',symbol='mV') -microvolts = NamedUnit(1e-06, Dimensions(2, -3, 1, -1, 0, 0, 0),name='microvolts',ascii_symbol='uV',latex_symbol=r'{\mu}V',symbol='µV') -nanovolts = NamedUnit(1e-09, Dimensions(2, -3, 1, -1, 0, 0, 0),name='nanovolts',ascii_symbol='nV',symbol='nV') -picovolts = NamedUnit(1e-12, Dimensions(2, -3, 1, -1, 0, 0, 0),name='picovolts',ascii_symbol='pV',symbol='pV') -femtovolts = NamedUnit(1e-15, Dimensions(2, -3, 1, -1, 0, 0, 0),name='femtovolts',ascii_symbol='fV',symbol='fV') -attovolts = NamedUnit(1e-18, Dimensions(2, -3, 1, -1, 0, 0, 0),name='attovolts',ascii_symbol='aV',symbol='aV') -ohms = NamedUnit(1, Dimensions(2, -3, 1, -2, 0, 0, 0),name='ohms',ascii_symbol='Ohm',latex_symbol=r'\Omega',symbol='Ω') -exaohms = NamedUnit(1e+18, Dimensions(2, -3, 1, -2, 0, 0, 0),name='exaohms',ascii_symbol='EOhm',latex_symbol=r'E\Omega',symbol='EΩ') -petaohms = NamedUnit(1000000000000000.0, Dimensions(2, -3, 1, -2, 0, 0, 0),name='petaohms',ascii_symbol='POhm',latex_symbol=r'P\Omega',symbol='PΩ') -teraohms = NamedUnit(1000000000000.0, Dimensions(2, -3, 1, -2, 0, 0, 0),name='teraohms',ascii_symbol='TOhm',latex_symbol=r'T\Omega',symbol='TΩ') -gigaohms = NamedUnit(1000000000.0, Dimensions(2, -3, 1, -2, 0, 0, 0),name='gigaohms',ascii_symbol='GOhm',latex_symbol=r'G\Omega',symbol='GΩ') -megaohms = NamedUnit(1000000.0, Dimensions(2, -3, 1, -2, 0, 0, 0),name='megaohms',ascii_symbol='MOhm',latex_symbol=r'M\Omega',symbol='MΩ') -kiloohms = NamedUnit(1000.0, Dimensions(2, -3, 1, -2, 0, 0, 0),name='kiloohms',ascii_symbol='kOhm',latex_symbol=r'k\Omega',symbol='kΩ') -milliohms = NamedUnit(0.001, Dimensions(2, -3, 1, -2, 0, 0, 0),name='milliohms',ascii_symbol='mOhm',latex_symbol=r'm\Omega',symbol='mΩ') -microohms = NamedUnit(1e-06, Dimensions(2, -3, 1, -2, 0, 0, 0),name='microohms',ascii_symbol='uOhm',latex_symbol=r'{\mu}\Omega',symbol='µΩ') -nanoohms = NamedUnit(1e-09, Dimensions(2, -3, 1, -2, 0, 0, 0),name='nanoohms',ascii_symbol='nOhm',latex_symbol=r'n\Omega',symbol='nΩ') -picoohms = NamedUnit(1e-12, Dimensions(2, -3, 1, -2, 0, 0, 0),name='picoohms',ascii_symbol='pOhm',latex_symbol=r'p\Omega',symbol='pΩ') -femtoohms = NamedUnit(1e-15, Dimensions(2, -3, 1, -2, 0, 0, 0),name='femtoohms',ascii_symbol='fOhm',latex_symbol=r'f\Omega',symbol='fΩ') -attoohms = NamedUnit(1e-18, Dimensions(2, -3, 1, -2, 0, 0, 0),name='attoohms',ascii_symbol='aOhm',latex_symbol=r'a\Omega',symbol='aΩ') -farads = NamedUnit(1, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='farads',ascii_symbol='F',symbol='F') -exafarads = NamedUnit(1e+18, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='exafarads',ascii_symbol='EF',symbol='EF') -petafarads = NamedUnit(1000000000000000.0, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='petafarads',ascii_symbol='PF',symbol='PF') -terafarads = NamedUnit(1000000000000.0, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='terafarads',ascii_symbol='TF',symbol='TF') -gigafarads = NamedUnit(1000000000.0, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='gigafarads',ascii_symbol='GF',symbol='GF') -megafarads = NamedUnit(1000000.0, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='megafarads',ascii_symbol='MF',symbol='MF') -kilofarads = NamedUnit(1000.0, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='kilofarads',ascii_symbol='kF',symbol='kF') -millifarads = NamedUnit(0.001, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='millifarads',ascii_symbol='mF',symbol='mF') -microfarads = NamedUnit(1e-06, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='microfarads',ascii_symbol='uF',latex_symbol=r'{\mu}F',symbol='µF') -nanofarads = NamedUnit(1e-09, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='nanofarads',ascii_symbol='nF',symbol='nF') -picofarads = NamedUnit(1e-12, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='picofarads',ascii_symbol='pF',symbol='pF') -femtofarads = NamedUnit(1e-15, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='femtofarads',ascii_symbol='fF',symbol='fF') -attofarads = NamedUnit(1e-18, Dimensions(-2, 4, -1, 2, 0, 0, 0),name='attofarads',ascii_symbol='aF',symbol='aF') -siemens = NamedUnit(1, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='siemens',ascii_symbol='S',symbol='S') -exasiemens = NamedUnit(1e+18, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='exasiemens',ascii_symbol='ES',symbol='ES') -petasiemens = NamedUnit(1000000000000000.0, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='petasiemens',ascii_symbol='PS',symbol='PS') -terasiemens = NamedUnit(1000000000000.0, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='terasiemens',ascii_symbol='TS',symbol='TS') -gigasiemens = NamedUnit(1000000000.0, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='gigasiemens',ascii_symbol='GS',symbol='GS') -megasiemens = NamedUnit(1000000.0, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='megasiemens',ascii_symbol='MS',symbol='MS') -kilosiemens = NamedUnit(1000.0, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='kilosiemens',ascii_symbol='kS',symbol='kS') -millisiemens = NamedUnit(0.001, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='millisiemens',ascii_symbol='mS',symbol='mS') -microsiemens = NamedUnit(1e-06, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='microsiemens',ascii_symbol='uS',latex_symbol=r'{\mu}S',symbol='µS') -nanosiemens = NamedUnit(1e-09, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='nanosiemens',ascii_symbol='nS',symbol='nS') -picosiemens = NamedUnit(1e-12, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='picosiemens',ascii_symbol='pS',symbol='pS') -femtosiemens = NamedUnit(1e-15, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='femtosiemens',ascii_symbol='fS',symbol='fS') -attosiemens = NamedUnit(1e-18, Dimensions(-2, 3, -1, 2, 0, 0, 0),name='attosiemens',ascii_symbol='aS',symbol='aS') -webers = NamedUnit(1, Dimensions(2, -2, 1, -1, 0, 0, 0),name='webers',ascii_symbol='Wb',symbol='Wb') -exawebers = NamedUnit(1e+18, Dimensions(2, -2, 1, -1, 0, 0, 0),name='exawebers',ascii_symbol='EWb',symbol='EWb') -petawebers = NamedUnit(1000000000000000.0, Dimensions(2, -2, 1, -1, 0, 0, 0),name='petawebers',ascii_symbol='PWb',symbol='PWb') -terawebers = NamedUnit(1000000000000.0, Dimensions(2, -2, 1, -1, 0, 0, 0),name='terawebers',ascii_symbol='TWb',symbol='TWb') -gigawebers = NamedUnit(1000000000.0, Dimensions(2, -2, 1, -1, 0, 0, 0),name='gigawebers',ascii_symbol='GWb',symbol='GWb') -megawebers = NamedUnit(1000000.0, Dimensions(2, -2, 1, -1, 0, 0, 0),name='megawebers',ascii_symbol='MWb',symbol='MWb') -kilowebers = NamedUnit(1000.0, Dimensions(2, -2, 1, -1, 0, 0, 0),name='kilowebers',ascii_symbol='kWb',symbol='kWb') -milliwebers = NamedUnit(0.001, Dimensions(2, -2, 1, -1, 0, 0, 0),name='milliwebers',ascii_symbol='mWb',symbol='mWb') -microwebers = NamedUnit(1e-06, Dimensions(2, -2, 1, -1, 0, 0, 0),name='microwebers',ascii_symbol='uWb',latex_symbol=r'{\mu}Wb',symbol='µWb') -nanowebers = NamedUnit(1e-09, Dimensions(2, -2, 1, -1, 0, 0, 0),name='nanowebers',ascii_symbol='nWb',symbol='nWb') -picowebers = NamedUnit(1e-12, Dimensions(2, -2, 1, -1, 0, 0, 0),name='picowebers',ascii_symbol='pWb',symbol='pWb') -femtowebers = NamedUnit(1e-15, Dimensions(2, -2, 1, -1, 0, 0, 0),name='femtowebers',ascii_symbol='fWb',symbol='fWb') -attowebers = NamedUnit(1e-18, Dimensions(2, -2, 1, -1, 0, 0, 0),name='attowebers',ascii_symbol='aWb',symbol='aWb') -tesla = NamedUnit(1, Dimensions(0, -2, 1, -1, 0, 0, 0),name='tesla',ascii_symbol='T',symbol='T') -exatesla = NamedUnit(1e+18, Dimensions(0, -2, 1, -1, 0, 0, 0),name='exatesla',ascii_symbol='ET',symbol='ET') -petatesla = NamedUnit(1000000000000000.0, Dimensions(0, -2, 1, -1, 0, 0, 0),name='petatesla',ascii_symbol='PT',symbol='PT') -teratesla = NamedUnit(1000000000000.0, Dimensions(0, -2, 1, -1, 0, 0, 0),name='teratesla',ascii_symbol='TT',symbol='TT') -gigatesla = NamedUnit(1000000000.0, Dimensions(0, -2, 1, -1, 0, 0, 0),name='gigatesla',ascii_symbol='GT',symbol='GT') -megatesla = NamedUnit(1000000.0, Dimensions(0, -2, 1, -1, 0, 0, 0),name='megatesla',ascii_symbol='MT',symbol='MT') -kilotesla = NamedUnit(1000.0, Dimensions(0, -2, 1, -1, 0, 0, 0),name='kilotesla',ascii_symbol='kT',symbol='kT') -millitesla = NamedUnit(0.001, Dimensions(0, -2, 1, -1, 0, 0, 0),name='millitesla',ascii_symbol='mT',symbol='mT') -microtesla = NamedUnit(1e-06, Dimensions(0, -2, 1, -1, 0, 0, 0),name='microtesla',ascii_symbol='uT',latex_symbol=r'{\mu}T',symbol='µT') -nanotesla = NamedUnit(1e-09, Dimensions(0, -2, 1, -1, 0, 0, 0),name='nanotesla',ascii_symbol='nT',symbol='nT') -picotesla = NamedUnit(1e-12, Dimensions(0, -2, 1, -1, 0, 0, 0),name='picotesla',ascii_symbol='pT',symbol='pT') -femtotesla = NamedUnit(1e-15, Dimensions(0, -2, 1, -1, 0, 0, 0),name='femtotesla',ascii_symbol='fT',symbol='fT') -attotesla = NamedUnit(1e-18, Dimensions(0, -2, 1, -1, 0, 0, 0),name='attotesla',ascii_symbol='aT',symbol='aT') -henry = NamedUnit(1, Dimensions(2, -2, 1, -2, 0, 0, 0),name='henry',ascii_symbol='H',symbol='H') -exahenry = NamedUnit(1e+18, Dimensions(2, -2, 1, -2, 0, 0, 0),name='exahenry',ascii_symbol='EH',symbol='EH') -petahenry = NamedUnit(1000000000000000.0, Dimensions(2, -2, 1, -2, 0, 0, 0),name='petahenry',ascii_symbol='PH',symbol='PH') -terahenry = NamedUnit(1000000000000.0, Dimensions(2, -2, 1, -2, 0, 0, 0),name='terahenry',ascii_symbol='TH',symbol='TH') -gigahenry = NamedUnit(1000000000.0, Dimensions(2, -2, 1, -2, 0, 0, 0),name='gigahenry',ascii_symbol='GH',symbol='GH') -megahenry = NamedUnit(1000000.0, Dimensions(2, -2, 1, -2, 0, 0, 0),name='megahenry',ascii_symbol='MH',symbol='MH') -kilohenry = NamedUnit(1000.0, Dimensions(2, -2, 1, -2, 0, 0, 0),name='kilohenry',ascii_symbol='kH',symbol='kH') -millihenry = NamedUnit(0.001, Dimensions(2, -2, 1, -2, 0, 0, 0),name='millihenry',ascii_symbol='mH',symbol='mH') -microhenry = NamedUnit(1e-06, Dimensions(2, -2, 1, -2, 0, 0, 0),name='microhenry',ascii_symbol='uH',latex_symbol=r'{\mu}H',symbol='µH') -nanohenry = NamedUnit(1e-09, Dimensions(2, -2, 1, -2, 0, 0, 0),name='nanohenry',ascii_symbol='nH',symbol='nH') -picohenry = NamedUnit(1e-12, Dimensions(2, -2, 1, -2, 0, 0, 0),name='picohenry',ascii_symbol='pH',symbol='pH') -femtohenry = NamedUnit(1e-15, Dimensions(2, -2, 1, -2, 0, 0, 0),name='femtohenry',ascii_symbol='fH',symbol='fH') -attohenry = NamedUnit(1e-18, Dimensions(2, -2, 1, -2, 0, 0, 0),name='attohenry',ascii_symbol='aH',symbol='aH') -angstroms = NamedUnit(1e-10, Dimensions(1, 0, 0, 0, 0, 0, 0),name='angstroms',ascii_symbol='Ang',latex_symbol=r'\AA',symbol='Å') -microns = NamedUnit(1e-06, Dimensions(1, 0, 0, 0, 0, 0, 0),name='microns',ascii_symbol='micron',symbol='micron') -minutes = NamedUnit(60, Dimensions(0, 1, 0, 0, 0, 0, 0),name='minutes',ascii_symbol='min',symbol='min') -hours = NamedUnit(3600, Dimensions(0, 1, 0, 0, 0, 0, 0),name='hours',ascii_symbol='h',symbol='h') -days = NamedUnit(86400, Dimensions(0, 1, 0, 0, 0, 0, 0),name='days',ascii_symbol='d',symbol='d') -years = NamedUnit(31556952.0, Dimensions(0, 1, 0, 0, 0, 0, 0),name='years',ascii_symbol='y',symbol='y') -degrees = NamedUnit(57.29577951308232, Dimensions(0, 0, 0, 0, 0, 0, 1),name='degrees',ascii_symbol='deg',symbol='deg') -radians = NamedUnit(1, Dimensions(0, 0, 0, 0, 0, 0, 1),name='radians',ascii_symbol='rad',symbol='rad') -rotations = NamedUnit(6.283185307179586, Dimensions(0, 0, 0, 0, 0, 0, 1),name='rotations',ascii_symbol='rot',symbol='rot') -stradians = NamedUnit(1, Dimensions(0, 0, 0, 0, 0, 0, 2),name='stradians',ascii_symbol='sr',symbol='sr') -litres = NamedUnit(0.001, Dimensions(3, 0, 0, 0, 0, 0, 0),name='litres',ascii_symbol='l',symbol='l') -electronvolts = NamedUnit(1.602176634e-19, Dimensions(2, -2, 1, 0, 0, 0, 0),name='electronvolts',ascii_symbol='eV',symbol='eV') -exaelectronvolts = NamedUnit(0.1602176634, Dimensions(2, -2, 1, 0, 0, 0, 0),name='exaelectronvolts',ascii_symbol='EeV',symbol='EeV') -petaelectronvolts = NamedUnit(0.0001602176634, Dimensions(2, -2, 1, 0, 0, 0, 0),name='petaelectronvolts',ascii_symbol='PeV',symbol='PeV') -teraelectronvolts = NamedUnit(1.602176634e-07, Dimensions(2, -2, 1, 0, 0, 0, 0),name='teraelectronvolts',ascii_symbol='TeV',symbol='TeV') -gigaelectronvolts = NamedUnit(1.6021766339999998e-10, Dimensions(2, -2, 1, 0, 0, 0, 0),name='gigaelectronvolts',ascii_symbol='GeV',symbol='GeV') -megaelectronvolts = NamedUnit(1.6021766339999998e-13, Dimensions(2, -2, 1, 0, 0, 0, 0),name='megaelectronvolts',ascii_symbol='MeV',symbol='MeV') -kiloelectronvolts = NamedUnit(1.602176634e-16, Dimensions(2, -2, 1, 0, 0, 0, 0),name='kiloelectronvolts',ascii_symbol='keV',symbol='keV') -millielectronvolts = NamedUnit(1.6021766339999998e-22, Dimensions(2, -2, 1, 0, 0, 0, 0),name='millielectronvolts',ascii_symbol='meV',symbol='meV') -microelectronvolts = NamedUnit(1.602176634e-25, Dimensions(2, -2, 1, 0, 0, 0, 0),name='microelectronvolts',ascii_symbol='ueV',latex_symbol=r'{\mu}eV',symbol='µeV') -nanoelectronvolts = NamedUnit(1.602176634e-28, Dimensions(2, -2, 1, 0, 0, 0, 0),name='nanoelectronvolts',ascii_symbol='neV',symbol='neV') -picoelectronvolts = NamedUnit(1.6021766339999998e-31, Dimensions(2, -2, 1, 0, 0, 0, 0),name='picoelectronvolts',ascii_symbol='peV',symbol='peV') -femtoelectronvolts = NamedUnit(1.602176634e-34, Dimensions(2, -2, 1, 0, 0, 0, 0),name='femtoelectronvolts',ascii_symbol='feV',symbol='feV') -attoelectronvolts = NamedUnit(1.602176634e-37, Dimensions(2, -2, 1, 0, 0, 0, 0),name='attoelectronvolts',ascii_symbol='aeV',symbol='aeV') -atomic_mass_units = NamedUnit(1.660538921e-27, Dimensions(0, 0, 1, 0, 0, 0, 0),name='atomic_mass_units',ascii_symbol='au',symbol='au') -moles = NamedUnit(6.02214076e+23, Dimensions(0, 0, 0, 0, 0, 1, 0),name='moles',ascii_symbol='mol',symbol='mol') -millimoles = NamedUnit(6.02214076e+20, Dimensions(0, 0, 0, 0, 0, 1, 0),name='millimoles',ascii_symbol='mmol',symbol='mmol') -micromoles = NamedUnit(6.02214076e+17, Dimensions(0, 0, 0, 0, 0, 1, 0),name='micromoles',ascii_symbol='umol',latex_symbol=r'{\mu}mol',symbol='µmol') -nanomoles = NamedUnit(602214076000000.0, Dimensions(0, 0, 0, 0, 0, 1, 0),name='nanomoles',ascii_symbol='nmol',symbol='nmol') -picomoles = NamedUnit(602214076000.0, Dimensions(0, 0, 0, 0, 0, 1, 0),name='picomoles',ascii_symbol='pmol',symbol='pmol') -femtomoles = NamedUnit(602214076.0, Dimensions(0, 0, 0, 0, 0, 1, 0),name='femtomoles',ascii_symbol='fmol',symbol='fmol') -attomoles = NamedUnit(602214.076, Dimensions(0, 0, 0, 0, 0, 1, 0),name='attomoles',ascii_symbol='amol',symbol='amol') -kg_force = NamedUnit(9.80665, Dimensions(1, -2, 1, 0, 0, 0, 0),name='kg_force',ascii_symbol='kgForce',symbol='kgForce') -degrees_celsius = NamedUnit(1, Dimensions(0, 0, 0, 0, 1, 0, 0),name='degrees_celsius',ascii_symbol='C',symbol='C') -miles = NamedUnit(1609.344, Dimensions(1, 0, 0, 0, 0, 0, 0),name='miles',ascii_symbol='miles',symbol='miles') -yards = NamedUnit(0.9144000000000001, Dimensions(1, 0, 0, 0, 0, 0, 0),name='yards',ascii_symbol='yrd',symbol='yrd') -feet = NamedUnit(0.3048, Dimensions(1, 0, 0, 0, 0, 0, 0),name='feet',ascii_symbol='ft',symbol='ft') -inches = NamedUnit(0.0254, Dimensions(1, 0, 0, 0, 0, 0, 0),name='inches',ascii_symbol='in',symbol='in') -pounds = NamedUnit(0.45359237, Dimensions(0, 0, 1, 0, 0, 0, 0),name='pounds',ascii_symbol='lb',symbol='lb') -pounds_force = NamedUnit(4.448222, Dimensions(1, -2, 1, 0, 0, 0, 0),name='pounds_force',ascii_symbol='lbf',symbol='lbf') -ounces = NamedUnit(0.028349523125, Dimensions(0, 0, 1, 0, 0, 0, 0),name='ounces',ascii_symbol='oz',symbol='oz') -pounds_force_per_square_inch = NamedUnit(6894.757889515779, Dimensions(-1, -2, 1, 0, 0, 0, 0),name='pounds_force_per_square_inch',ascii_symbol='psi',symbol='psi') -none = NamedUnit(1, Dimensions(0, 0, 0, 0, 0, 0, 0),name='none',ascii_symbol='none',symbol='none') -percent = NamedUnit(0.01, Dimensions(0, 0, 0, 0, 0, 0, 0),name='percent',ascii_symbol='percent',latex_symbol=r'\%',symbol='%') -square_meters = NamedUnit(1, Dimensions(length=2), name='square_meters', ascii_symbol='m^2', symbol='m²') -cubic_meters = NamedUnit(1, Dimensions(length=3), name='cubic_meters', ascii_symbol='m^3', symbol='m³') -per_meter = NamedUnit(1.0, Dimensions(length=-1), name='per_meter', ascii_symbol='m^-1', symbol='m⁻¹') -per_square_meter = NamedUnit(1.0, Dimensions(length=-2), name='per_square_meter', ascii_symbol='m^-2', symbol='m⁻²') -per_cubic_meter = NamedUnit(1.0, Dimensions(length=-3), name='per_cubic_meter', ascii_symbol='m^-3', symbol='m⁻³') -square_exameters = NamedUnit(1e+36, Dimensions(length=2), name='square_exameters', ascii_symbol='Em^2', symbol='Em²') -cubic_exameters = NamedUnit(1e+54, Dimensions(length=3), name='cubic_exameters', ascii_symbol='Em^3', symbol='Em³') -per_exameter = NamedUnit(1e-18, Dimensions(length=-1), name='per_exameter', ascii_symbol='Em^-1', symbol='Em⁻¹') -per_square_exameter = NamedUnit(1e-36, Dimensions(length=-2), name='per_square_exameter', ascii_symbol='Em^-2', symbol='Em⁻²') -per_cubic_exameter = NamedUnit(1e-54, Dimensions(length=-3), name='per_cubic_exameter', ascii_symbol='Em^-3', symbol='Em⁻³') -square_petameters = NamedUnit(1e+30, Dimensions(length=2), name='square_petameters', ascii_symbol='Pm^2', symbol='Pm²') -cubic_petameters = NamedUnit(1e+45, Dimensions(length=3), name='cubic_petameters', ascii_symbol='Pm^3', symbol='Pm³') -per_petameter = NamedUnit(1e-15, Dimensions(length=-1), name='per_petameter', ascii_symbol='Pm^-1', symbol='Pm⁻¹') -per_square_petameter = NamedUnit(1e-30, Dimensions(length=-2), name='per_square_petameter', ascii_symbol='Pm^-2', symbol='Pm⁻²') -per_cubic_petameter = NamedUnit(1e-45, Dimensions(length=-3), name='per_cubic_petameter', ascii_symbol='Pm^-3', symbol='Pm⁻³') -square_terameters = NamedUnit(1e+24, Dimensions(length=2), name='square_terameters', ascii_symbol='Tm^2', symbol='Tm²') -cubic_terameters = NamedUnit(1e+36, Dimensions(length=3), name='cubic_terameters', ascii_symbol='Tm^3', symbol='Tm³') -per_terameter = NamedUnit(1e-12, Dimensions(length=-1), name='per_terameter', ascii_symbol='Tm^-1', symbol='Tm⁻¹') -per_square_terameter = NamedUnit(1e-24, Dimensions(length=-2), name='per_square_terameter', ascii_symbol='Tm^-2', symbol='Tm⁻²') -per_cubic_terameter = NamedUnit(1e-36, Dimensions(length=-3), name='per_cubic_terameter', ascii_symbol='Tm^-3', symbol='Tm⁻³') -square_gigameters = NamedUnit(1e+18, Dimensions(length=2), name='square_gigameters', ascii_symbol='Gm^2', symbol='Gm²') -cubic_gigameters = NamedUnit(1e+27, Dimensions(length=3), name='cubic_gigameters', ascii_symbol='Gm^3', symbol='Gm³') -per_gigameter = NamedUnit(1e-09, Dimensions(length=-1), name='per_gigameter', ascii_symbol='Gm^-1', symbol='Gm⁻¹') -per_square_gigameter = NamedUnit(1e-18, Dimensions(length=-2), name='per_square_gigameter', ascii_symbol='Gm^-2', symbol='Gm⁻²') -per_cubic_gigameter = NamedUnit(1e-27, Dimensions(length=-3), name='per_cubic_gigameter', ascii_symbol='Gm^-3', symbol='Gm⁻³') -square_megameters = NamedUnit(1000000000000.0, Dimensions(length=2), name='square_megameters', ascii_symbol='Mm^2', symbol='Mm²') -cubic_megameters = NamedUnit(1e+18, Dimensions(length=3), name='cubic_megameters', ascii_symbol='Mm^3', symbol='Mm³') -per_megameter = NamedUnit(1e-06, Dimensions(length=-1), name='per_megameter', ascii_symbol='Mm^-1', symbol='Mm⁻¹') -per_square_megameter = NamedUnit(1e-12, Dimensions(length=-2), name='per_square_megameter', ascii_symbol='Mm^-2', symbol='Mm⁻²') -per_cubic_megameter = NamedUnit(1e-18, Dimensions(length=-3), name='per_cubic_megameter', ascii_symbol='Mm^-3', symbol='Mm⁻³') -square_kilometers = NamedUnit(1000000.0, Dimensions(length=2), name='square_kilometers', ascii_symbol='km^2', symbol='km²') -cubic_kilometers = NamedUnit(1000000000.0, Dimensions(length=3), name='cubic_kilometers', ascii_symbol='km^3', symbol='km³') -per_kilometer = NamedUnit(0.001, Dimensions(length=-1), name='per_kilometer', ascii_symbol='km^-1', symbol='km⁻¹') -per_square_kilometer = NamedUnit(1e-06, Dimensions(length=-2), name='per_square_kilometer', ascii_symbol='km^-2', symbol='km⁻²') -per_cubic_kilometer = NamedUnit(1e-09, Dimensions(length=-3), name='per_cubic_kilometer', ascii_symbol='km^-3', symbol='km⁻³') -square_millimeters = NamedUnit(1e-06, Dimensions(length=2), name='square_millimeters', ascii_symbol='mm^2', symbol='mm²') -cubic_millimeters = NamedUnit(1e-09, Dimensions(length=3), name='cubic_millimeters', ascii_symbol='mm^3', symbol='mm³') -per_millimeter = NamedUnit(1000.0, Dimensions(length=-1), name='per_millimeter', ascii_symbol='mm^-1', symbol='mm⁻¹') -per_square_millimeter = NamedUnit(1000000.0, Dimensions(length=-2), name='per_square_millimeter', ascii_symbol='mm^-2', symbol='mm⁻²') -per_cubic_millimeter = NamedUnit(999999999.9999999, Dimensions(length=-3), name='per_cubic_millimeter', ascii_symbol='mm^-3', symbol='mm⁻³') -square_micrometers = NamedUnit(1e-12, Dimensions(length=2), name='square_micrometers', ascii_symbol='um^2', symbol='µm²') -cubic_micrometers = NamedUnit(9.999999999999999e-19, Dimensions(length=3), name='cubic_micrometers', ascii_symbol='um^3', symbol='µm³') -per_micrometer = NamedUnit(1000000.0, Dimensions(length=-1), name='per_micrometer', ascii_symbol='um^-1', symbol='µm⁻¹') -per_square_micrometer = NamedUnit(1000000000000.0001, Dimensions(length=-2), name='per_square_micrometer', ascii_symbol='um^-2', symbol='µm⁻²') -per_cubic_micrometer = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3), name='per_cubic_micrometer', ascii_symbol='um^-3', symbol='µm⁻³') -square_nanometers = NamedUnit(1e-18, Dimensions(length=2), name='square_nanometers', ascii_symbol='nm^2', symbol='nm²') -cubic_nanometers = NamedUnit(1.0000000000000002e-27, Dimensions(length=3), name='cubic_nanometers', ascii_symbol='nm^3', symbol='nm³') -per_nanometer = NamedUnit(999999999.9999999, Dimensions(length=-1), name='per_nanometer', ascii_symbol='nm^-1', symbol='nm⁻¹') -per_square_nanometer = NamedUnit(9.999999999999999e+17, Dimensions(length=-2), name='per_square_nanometer', ascii_symbol='nm^-2', symbol='nm⁻²') -per_cubic_nanometer = NamedUnit(9.999999999999999e+26, Dimensions(length=-3), name='per_cubic_nanometer', ascii_symbol='nm^-3', symbol='nm⁻³') -square_picometers = NamedUnit(1e-24, Dimensions(length=2), name='square_picometers', ascii_symbol='pm^2', symbol='pm²') -cubic_picometers = NamedUnit(1e-36, Dimensions(length=3), name='cubic_picometers', ascii_symbol='pm^3', symbol='pm³') -per_picometer = NamedUnit(1000000000000.0, Dimensions(length=-1), name='per_picometer', ascii_symbol='pm^-1', symbol='pm⁻¹') -per_square_picometer = NamedUnit(1e+24, Dimensions(length=-2), name='per_square_picometer', ascii_symbol='pm^-2', symbol='pm⁻²') -per_cubic_picometer = NamedUnit(1e+36, Dimensions(length=-3), name='per_cubic_picometer', ascii_symbol='pm^-3', symbol='pm⁻³') -square_femtometers = NamedUnit(1e-30, Dimensions(length=2), name='square_femtometers', ascii_symbol='fm^2', symbol='fm²') -cubic_femtometers = NamedUnit(1.0000000000000003e-45, Dimensions(length=3), name='cubic_femtometers', ascii_symbol='fm^3', symbol='fm³') -per_femtometer = NamedUnit(999999999999999.9, Dimensions(length=-1), name='per_femtometer', ascii_symbol='fm^-1', symbol='fm⁻¹') -per_square_femtometer = NamedUnit(9.999999999999999e+29, Dimensions(length=-2), name='per_square_femtometer', ascii_symbol='fm^-2', symbol='fm⁻²') -per_cubic_femtometer = NamedUnit(9.999999999999998e+44, Dimensions(length=-3), name='per_cubic_femtometer', ascii_symbol='fm^-3', symbol='fm⁻³') -square_attometers = NamedUnit(1.0000000000000001e-36, Dimensions(length=2), name='square_attometers', ascii_symbol='am^2', symbol='am²') -cubic_attometers = NamedUnit(1.0000000000000002e-54, Dimensions(length=3), name='cubic_attometers', ascii_symbol='am^3', symbol='am³') -per_attometer = NamedUnit(9.999999999999999e+17, Dimensions(length=-1), name='per_attometer', ascii_symbol='am^-1', symbol='am⁻¹') -per_square_attometer = NamedUnit(9.999999999999999e+35, Dimensions(length=-2), name='per_square_attometer', ascii_symbol='am^-2', symbol='am⁻²') -per_cubic_attometer = NamedUnit(9.999999999999997e+53, Dimensions(length=-3), name='per_cubic_attometer', ascii_symbol='am^-3', symbol='am⁻³') -square_decimeters = NamedUnit(0.010000000000000002, Dimensions(length=2), name='square_decimeters', ascii_symbol='dm^2', symbol='dm²') -cubic_decimeters = NamedUnit(0.0010000000000000002, Dimensions(length=3), name='cubic_decimeters', ascii_symbol='dm^3', symbol='dm³') -per_decimeter = NamedUnit(10.0, Dimensions(length=-1), name='per_decimeter', ascii_symbol='dm^-1', symbol='dm⁻¹') -per_square_decimeter = NamedUnit(99.99999999999999, Dimensions(length=-2), name='per_square_decimeter', ascii_symbol='dm^-2', symbol='dm⁻²') -per_cubic_decimeter = NamedUnit(999.9999999999999, Dimensions(length=-3), name='per_cubic_decimeter', ascii_symbol='dm^-3', symbol='dm⁻³') -square_centimeters = NamedUnit(0.0001, Dimensions(length=2), name='square_centimeters', ascii_symbol='cm^2', symbol='cm²') -cubic_centimeters = NamedUnit(1.0000000000000002e-06, Dimensions(length=3), name='cubic_centimeters', ascii_symbol='cm^3', symbol='cm³') -per_centimeter = NamedUnit(100.0, Dimensions(length=-1), name='per_centimeter', ascii_symbol='cm^-1', symbol='cm⁻¹') -per_square_centimeter = NamedUnit(10000.0, Dimensions(length=-2), name='per_square_centimeter', ascii_symbol='cm^-2', symbol='cm⁻²') -per_cubic_centimeter = NamedUnit(999999.9999999999, Dimensions(length=-3), name='per_cubic_centimeter', ascii_symbol='cm^-3', symbol='cm⁻³') -square_angstroms = NamedUnit(1.0000000000000001e-20, Dimensions(length=2), name='square_angstroms', ascii_symbol='Ang^2', symbol='Ų') -cubic_angstroms = NamedUnit(1e-30, Dimensions(length=3), name='cubic_angstroms', ascii_symbol='Ang^3', symbol='ų') -per_angstrom = NamedUnit(10000000000.0, Dimensions(length=-1), name='per_angstrom', ascii_symbol='Ang^-1', symbol='Å⁻¹') -per_square_angstrom = NamedUnit(1e+20, Dimensions(length=-2), name='per_square_angstrom', ascii_symbol='Ang^-2', symbol='Å⁻²') -per_cubic_angstrom = NamedUnit(9.999999999999999e+29, Dimensions(length=-3), name='per_cubic_angstrom', ascii_symbol='Ang^-3', symbol='Å⁻³') -square_microns = NamedUnit(1e-12, Dimensions(length=2), name='square_microns', ascii_symbol='micron^2', symbol='micron²') -cubic_microns = NamedUnit(9.999999999999999e-19, Dimensions(length=3), name='cubic_microns', ascii_symbol='micron^3', symbol='micron³') -per_micron = NamedUnit(1000000.0, Dimensions(length=-1), name='per_micron', ascii_symbol='micron^-1', symbol='micron⁻¹') -per_square_micron = NamedUnit(1000000000000.0001, Dimensions(length=-2), name='per_square_micron', ascii_symbol='micron^-2', symbol='micron⁻²') -per_cubic_micron = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3), name='per_cubic_micron', ascii_symbol='micron^-3', symbol='micron⁻³') -square_miles = NamedUnit(2589988.110336, Dimensions(length=2), name='square_miles', ascii_symbol='miles^2', symbol='miles²') -cubic_miles = NamedUnit(4168181825.44058, Dimensions(length=3), name='cubic_miles', ascii_symbol='miles^3', symbol='miles³') -per_mile = NamedUnit(0.0006213711922373339, Dimensions(length=-1), name='per_mile', ascii_symbol='miles^-1', symbol='miles⁻¹') -per_square_mile = NamedUnit(3.861021585424458e-07, Dimensions(length=-2), name='per_square_mile', ascii_symbol='miles^-2', symbol='miles⁻²') -per_cubic_mile = NamedUnit(2.399127585789277e-10, Dimensions(length=-3), name='per_cubic_mile', ascii_symbol='miles^-3', symbol='miles⁻³') -square_yards = NamedUnit(0.8361273600000002, Dimensions(length=2), name='square_yards', ascii_symbol='yrd^2', symbol='yrd²') -cubic_yards = NamedUnit(0.7645548579840002, Dimensions(length=3), name='cubic_yards', ascii_symbol='yrd^3', symbol='yrd³') -per_yard = NamedUnit(1.0936132983377076, Dimensions(length=-1), name='per_yard', ascii_symbol='yrd^-1', symbol='yrd⁻¹') -per_square_yard = NamedUnit(1.19599004630108, Dimensions(length=-2), name='per_square_yard', ascii_symbol='yrd^-2', symbol='yrd⁻²') -per_cubic_yard = NamedUnit(1.3079506193143917, Dimensions(length=-3), name='per_cubic_yard', ascii_symbol='yrd^-3', symbol='yrd⁻³') -square_feet = NamedUnit(0.09290304, Dimensions(length=2), name='square_feet', ascii_symbol='ft^2', symbol='ft²') -cubic_feet = NamedUnit(0.028316846592000004, Dimensions(length=3), name='cubic_feet', ascii_symbol='ft^3', symbol='ft³') -per_foot = NamedUnit(3.280839895013123, Dimensions(length=-1), name='per_foot', ascii_symbol='ft^-1', symbol='ft⁻¹') -per_square_foot = NamedUnit(10.763910416709722, Dimensions(length=-2), name='per_square_foot', ascii_symbol='ft^-2', symbol='ft⁻²') -per_cubic_foot = NamedUnit(35.314666721488585, Dimensions(length=-3), name='per_cubic_foot', ascii_symbol='ft^-3', symbol='ft⁻³') -square_inches = NamedUnit(0.00064516, Dimensions(length=2), name='square_inches', ascii_symbol='in^2', symbol='in²') -cubic_inches = NamedUnit(1.6387064e-05, Dimensions(length=3), name='cubic_inches', ascii_symbol='in^3', symbol='in³') -per_inch = NamedUnit(39.37007874015748, Dimensions(length=-1), name='per_inch', ascii_symbol='in^-1', symbol='in⁻¹') -per_square_inch = NamedUnit(1550.0031000062002, Dimensions(length=-2), name='per_square_inch', ascii_symbol='in^-2', symbol='in⁻²') -per_cubic_inch = NamedUnit(61023.74409473229, Dimensions(length=-3), name='per_cubic_inch', ascii_symbol='in^-3', symbol='in⁻³') -meters_per_second = NamedUnit(1.0, Dimensions(length=1, time=-1), name='meters_per_second', ascii_symbol='m/s', symbol='ms⁻¹') -meters_per_square_second = NamedUnit(1.0, Dimensions(length=1, time=-2), name='meters_per_square_second', ascii_symbol='m/s^2', symbol='ms⁻²') -meters_per_millisecond = NamedUnit(1000.0, Dimensions(length=1, time=-1), name='meters_per_millisecond', ascii_symbol='m/ms', symbol='mms⁻¹') -meters_per_square_millisecond = NamedUnit(1000000.0, Dimensions(length=1, time=-2), name='meters_per_square_millisecond', ascii_symbol='m/ms^2', symbol='mms⁻²') -meters_per_microsecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='meters_per_microsecond', ascii_symbol='m/us', symbol='mµs⁻¹') -meters_per_square_microsecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-2), name='meters_per_square_microsecond', ascii_symbol='m/us^2', symbol='mµs⁻²') -meters_per_nanosecond = NamedUnit(999999999.9999999, Dimensions(length=1, time=-1), name='meters_per_nanosecond', ascii_symbol='m/ns', symbol='mns⁻¹') -meters_per_square_nanosecond = NamedUnit(9.999999999999999e+17, Dimensions(length=1, time=-2), name='meters_per_square_nanosecond', ascii_symbol='m/ns^2', symbol='mns⁻²') -meters_per_picosecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-1), name='meters_per_picosecond', ascii_symbol='m/ps', symbol='mps⁻¹') -meters_per_square_picosecond = NamedUnit(1.0000000000000001e+24, Dimensions(length=1, time=-2), name='meters_per_square_picosecond', ascii_symbol='m/ps^2', symbol='mps⁻²') -meters_per_femtosecond = NamedUnit(999999999999999.9, Dimensions(length=1, time=-1), name='meters_per_femtosecond', ascii_symbol='m/fs', symbol='mfs⁻¹') -meters_per_square_femtosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-2), name='meters_per_square_femtosecond', ascii_symbol='m/fs^2', symbol='mfs⁻²') -meters_per_attosecond = NamedUnit(9.999999999999999e+17, Dimensions(length=1, time=-1), name='meters_per_attosecond', ascii_symbol='m/as', symbol='mas⁻¹') -meters_per_square_attosecond = NamedUnit(9.999999999999999e+35, Dimensions(length=1, time=-2), name='meters_per_square_attosecond', ascii_symbol='m/as^2', symbol='mas⁻²') -meters_per_minute = NamedUnit(0.016666666666666666, Dimensions(length=1, time=-1), name='meters_per_minute', ascii_symbol='m/min', symbol='mmin⁻¹') -meters_per_square_minute = NamedUnit(0.0002777777777777778, Dimensions(length=1, time=-2), name='meters_per_square_minute', ascii_symbol='m/min^2', symbol='mmin⁻²') -meters_per_hour = NamedUnit(0.0002777777777777778, Dimensions(length=1, time=-1), name='meters_per_hour', ascii_symbol='m/h', symbol='mh⁻¹') -meters_per_square_hour = NamedUnit(7.71604938271605e-08, Dimensions(length=1, time=-2), name='meters_per_square_hour', ascii_symbol='m/h^2', symbol='mh⁻²') -meters_per_day = NamedUnit(1.1574074074074073e-05, Dimensions(length=1, time=-1), name='meters_per_day', ascii_symbol='m/d', symbol='md⁻¹') -meters_per_square_day = NamedUnit(1.3395919067215363e-10, Dimensions(length=1, time=-2), name='meters_per_square_day', ascii_symbol='m/d^2', symbol='md⁻²') -meters_per_year = NamedUnit(3.168873850681143e-08, Dimensions(length=1, time=-1), name='meters_per_year', ascii_symbol='m/y', symbol='my⁻¹') -meters_per_square_year = NamedUnit(1.0041761481530735e-15, Dimensions(length=1, time=-2), name='meters_per_square_year', ascii_symbol='m/y^2', symbol='my⁻²') -exameters_per_second = NamedUnit(1e+18, Dimensions(length=1, time=-1), name='exameters_per_second', ascii_symbol='Em/s', symbol='Ems⁻¹') -exameters_per_square_second = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='exameters_per_square_second', ascii_symbol='Em/s^2', symbol='Ems⁻²') -exameters_per_millisecond = NamedUnit(1e+21, Dimensions(length=1, time=-1), name='exameters_per_millisecond', ascii_symbol='Em/ms', symbol='Emms⁻¹') -exameters_per_square_millisecond = NamedUnit(1e+24, Dimensions(length=1, time=-2), name='exameters_per_square_millisecond', ascii_symbol='Em/ms^2', symbol='Emms⁻²') -exameters_per_microsecond = NamedUnit(1e+24, Dimensions(length=1, time=-1), name='exameters_per_microsecond', ascii_symbol='Em/us', symbol='Emµs⁻¹') -exameters_per_square_microsecond = NamedUnit(1e+30, Dimensions(length=1, time=-2), name='exameters_per_square_microsecond', ascii_symbol='Em/us^2', symbol='Emµs⁻²') -exameters_per_nanosecond = NamedUnit(9.999999999999999e+26, Dimensions(length=1, time=-1), name='exameters_per_nanosecond', ascii_symbol='Em/ns', symbol='Emns⁻¹') -exameters_per_square_nanosecond = NamedUnit(9.999999999999999e+35, Dimensions(length=1, time=-2), name='exameters_per_square_nanosecond', ascii_symbol='Em/ns^2', symbol='Emns⁻²') -exameters_per_picosecond = NamedUnit(1e+30, Dimensions(length=1, time=-1), name='exameters_per_picosecond', ascii_symbol='Em/ps', symbol='Emps⁻¹') -exameters_per_square_picosecond = NamedUnit(1e+42, Dimensions(length=1, time=-2), name='exameters_per_square_picosecond', ascii_symbol='Em/ps^2', symbol='Emps⁻²') -exameters_per_femtosecond = NamedUnit(1e+33, Dimensions(length=1, time=-1), name='exameters_per_femtosecond', ascii_symbol='Em/fs', symbol='Emfs⁻¹') -exameters_per_square_femtosecond = NamedUnit(9.999999999999999e+47, Dimensions(length=1, time=-2), name='exameters_per_square_femtosecond', ascii_symbol='Em/fs^2', symbol='Emfs⁻²') -exameters_per_attosecond = NamedUnit(9.999999999999999e+35, Dimensions(length=1, time=-1), name='exameters_per_attosecond', ascii_symbol='Em/as', symbol='Emas⁻¹') -exameters_per_square_attosecond = NamedUnit(9.999999999999999e+53, Dimensions(length=1, time=-2), name='exameters_per_square_attosecond', ascii_symbol='Em/as^2', symbol='Emas⁻²') -exameters_per_minute = NamedUnit(1.6666666666666666e+16, Dimensions(length=1, time=-1), name='exameters_per_minute', ascii_symbol='Em/min', symbol='Emmin⁻¹') -exameters_per_square_minute = NamedUnit(277777777777777.78, Dimensions(length=1, time=-2), name='exameters_per_square_minute', ascii_symbol='Em/min^2', symbol='Emmin⁻²') -exameters_per_hour = NamedUnit(277777777777777.78, Dimensions(length=1, time=-1), name='exameters_per_hour', ascii_symbol='Em/h', symbol='Emh⁻¹') -exameters_per_square_hour = NamedUnit(77160493827.16049, Dimensions(length=1, time=-2), name='exameters_per_square_hour', ascii_symbol='Em/h^2', symbol='Emh⁻²') -exameters_per_day = NamedUnit(11574074074074.074, Dimensions(length=1, time=-1), name='exameters_per_day', ascii_symbol='Em/d', symbol='Emd⁻¹') -exameters_per_square_day = NamedUnit(133959190.67215364, Dimensions(length=1, time=-2), name='exameters_per_square_day', ascii_symbol='Em/d^2', symbol='Emd⁻²') -exameters_per_year = NamedUnit(31688738506.81143, Dimensions(length=1, time=-1), name='exameters_per_year', ascii_symbol='Em/y', symbol='Emy⁻¹') -exameters_per_square_year = NamedUnit(1004.1761481530735, Dimensions(length=1, time=-2), name='exameters_per_square_year', ascii_symbol='Em/y^2', symbol='Emy⁻²') -petameters_per_second = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='petameters_per_second', ascii_symbol='Pm/s', symbol='Pms⁻¹') -petameters_per_square_second = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-2), name='petameters_per_square_second', ascii_symbol='Pm/s^2', symbol='Pms⁻²') -petameters_per_millisecond = NamedUnit(1e+18, Dimensions(length=1, time=-1), name='petameters_per_millisecond', ascii_symbol='Pm/ms', symbol='Pmms⁻¹') -petameters_per_square_millisecond = NamedUnit(1e+21, Dimensions(length=1, time=-2), name='petameters_per_square_millisecond', ascii_symbol='Pm/ms^2', symbol='Pmms⁻²') -petameters_per_microsecond = NamedUnit(1e+21, Dimensions(length=1, time=-1), name='petameters_per_microsecond', ascii_symbol='Pm/us', symbol='Pmµs⁻¹') -petameters_per_square_microsecond = NamedUnit(1e+27, Dimensions(length=1, time=-2), name='petameters_per_square_microsecond', ascii_symbol='Pm/us^2', symbol='Pmµs⁻²') -petameters_per_nanosecond = NamedUnit(1e+24, Dimensions(length=1, time=-1), name='petameters_per_nanosecond', ascii_symbol='Pm/ns', symbol='Pmns⁻¹') -petameters_per_square_nanosecond = NamedUnit(1e+33, Dimensions(length=1, time=-2), name='petameters_per_square_nanosecond', ascii_symbol='Pm/ns^2', symbol='Pmns⁻²') -petameters_per_picosecond = NamedUnit(1e+27, Dimensions(length=1, time=-1), name='petameters_per_picosecond', ascii_symbol='Pm/ps', symbol='Pmps⁻¹') -petameters_per_square_picosecond = NamedUnit(1.0000000000000001e+39, Dimensions(length=1, time=-2), name='petameters_per_square_picosecond', ascii_symbol='Pm/ps^2', symbol='Pmps⁻²') -petameters_per_femtosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-1), name='petameters_per_femtosecond', ascii_symbol='Pm/fs', symbol='Pmfs⁻¹') -petameters_per_square_femtosecond = NamedUnit(1e+45, Dimensions(length=1, time=-2), name='petameters_per_square_femtosecond', ascii_symbol='Pm/fs^2', symbol='Pmfs⁻²') -petameters_per_attosecond = NamedUnit(1e+33, Dimensions(length=1, time=-1), name='petameters_per_attosecond', ascii_symbol='Pm/as', symbol='Pmas⁻¹') -petameters_per_square_attosecond = NamedUnit(9.999999999999998e+50, Dimensions(length=1, time=-2), name='petameters_per_square_attosecond', ascii_symbol='Pm/as^2', symbol='Pmas⁻²') -petameters_per_minute = NamedUnit(16666666666666.666, Dimensions(length=1, time=-1), name='petameters_per_minute', ascii_symbol='Pm/min', symbol='Pmmin⁻¹') -petameters_per_square_minute = NamedUnit(277777777777.7778, Dimensions(length=1, time=-2), name='petameters_per_square_minute', ascii_symbol='Pm/min^2', symbol='Pmmin⁻²') -petameters_per_hour = NamedUnit(277777777777.7778, Dimensions(length=1, time=-1), name='petameters_per_hour', ascii_symbol='Pm/h', symbol='Pmh⁻¹') -petameters_per_square_hour = NamedUnit(77160493.82716049, Dimensions(length=1, time=-2), name='petameters_per_square_hour', ascii_symbol='Pm/h^2', symbol='Pmh⁻²') -petameters_per_day = NamedUnit(11574074074.074074, Dimensions(length=1, time=-1), name='petameters_per_day', ascii_symbol='Pm/d', symbol='Pmd⁻¹') -petameters_per_square_day = NamedUnit(133959.19067215364, Dimensions(length=1, time=-2), name='petameters_per_square_day', ascii_symbol='Pm/d^2', symbol='Pmd⁻²') -petameters_per_year = NamedUnit(31688738.506811433, Dimensions(length=1, time=-1), name='petameters_per_year', ascii_symbol='Pm/y', symbol='Pmy⁻¹') -petameters_per_square_year = NamedUnit(1.0041761481530735, Dimensions(length=1, time=-2), name='petameters_per_square_year', ascii_symbol='Pm/y^2', symbol='Pmy⁻²') -terameters_per_second = NamedUnit(1000000000000.0, Dimensions(length=1, time=-1), name='terameters_per_second', ascii_symbol='Tm/s', symbol='Tms⁻¹') -terameters_per_square_second = NamedUnit(1000000000000.0, Dimensions(length=1, time=-2), name='terameters_per_square_second', ascii_symbol='Tm/s^2', symbol='Tms⁻²') -terameters_per_millisecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='terameters_per_millisecond', ascii_symbol='Tm/ms', symbol='Tmms⁻¹') -terameters_per_square_millisecond = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='terameters_per_square_millisecond', ascii_symbol='Tm/ms^2', symbol='Tmms⁻²') -terameters_per_microsecond = NamedUnit(1e+18, Dimensions(length=1, time=-1), name='terameters_per_microsecond', ascii_symbol='Tm/us', symbol='Tmµs⁻¹') -terameters_per_square_microsecond = NamedUnit(1e+24, Dimensions(length=1, time=-2), name='terameters_per_square_microsecond', ascii_symbol='Tm/us^2', symbol='Tmµs⁻²') -terameters_per_nanosecond = NamedUnit(1e+21, Dimensions(length=1, time=-1), name='terameters_per_nanosecond', ascii_symbol='Tm/ns', symbol='Tmns⁻¹') -terameters_per_square_nanosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-2), name='terameters_per_square_nanosecond', ascii_symbol='Tm/ns^2', symbol='Tmns⁻²') -terameters_per_picosecond = NamedUnit(1e+24, Dimensions(length=1, time=-1), name='terameters_per_picosecond', ascii_symbol='Tm/ps', symbol='Tmps⁻¹') -terameters_per_square_picosecond = NamedUnit(1e+36, Dimensions(length=1, time=-2), name='terameters_per_square_picosecond', ascii_symbol='Tm/ps^2', symbol='Tmps⁻²') -terameters_per_femtosecond = NamedUnit(9.999999999999999e+26, Dimensions(length=1, time=-1), name='terameters_per_femtosecond', ascii_symbol='Tm/fs', symbol='Tmfs⁻¹') -terameters_per_square_femtosecond = NamedUnit(9.999999999999999e+41, Dimensions(length=1, time=-2), name='terameters_per_square_femtosecond', ascii_symbol='Tm/fs^2', symbol='Tmfs⁻²') -terameters_per_attosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-1), name='terameters_per_attosecond', ascii_symbol='Tm/as', symbol='Tmas⁻¹') -terameters_per_square_attosecond = NamedUnit(9.999999999999999e+47, Dimensions(length=1, time=-2), name='terameters_per_square_attosecond', ascii_symbol='Tm/as^2', symbol='Tmas⁻²') -terameters_per_minute = NamedUnit(16666666666.666666, Dimensions(length=1, time=-1), name='terameters_per_minute', ascii_symbol='Tm/min', symbol='Tmmin⁻¹') -terameters_per_square_minute = NamedUnit(277777777.7777778, Dimensions(length=1, time=-2), name='terameters_per_square_minute', ascii_symbol='Tm/min^2', symbol='Tmmin⁻²') -terameters_per_hour = NamedUnit(277777777.7777778, Dimensions(length=1, time=-1), name='terameters_per_hour', ascii_symbol='Tm/h', symbol='Tmh⁻¹') -terameters_per_square_hour = NamedUnit(77160.49382716049, Dimensions(length=1, time=-2), name='terameters_per_square_hour', ascii_symbol='Tm/h^2', symbol='Tmh⁻²') -terameters_per_day = NamedUnit(11574074.074074075, Dimensions(length=1, time=-1), name='terameters_per_day', ascii_symbol='Tm/d', symbol='Tmd⁻¹') -terameters_per_square_day = NamedUnit(133.95919067215362, Dimensions(length=1, time=-2), name='terameters_per_square_day', ascii_symbol='Tm/d^2', symbol='Tmd⁻²') -terameters_per_year = NamedUnit(31688.73850681143, Dimensions(length=1, time=-1), name='terameters_per_year', ascii_symbol='Tm/y', symbol='Tmy⁻¹') -terameters_per_square_year = NamedUnit(0.0010041761481530736, Dimensions(length=1, time=-2), name='terameters_per_square_year', ascii_symbol='Tm/y^2', symbol='Tmy⁻²') -gigameters_per_second = NamedUnit(1000000000.0, Dimensions(length=1, time=-1), name='gigameters_per_second', ascii_symbol='Gm/s', symbol='Gms⁻¹') -gigameters_per_square_second = NamedUnit(1000000000.0, Dimensions(length=1, time=-2), name='gigameters_per_square_second', ascii_symbol='Gm/s^2', symbol='Gms⁻²') -gigameters_per_millisecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-1), name='gigameters_per_millisecond', ascii_symbol='Gm/ms', symbol='Gmms⁻¹') -gigameters_per_square_millisecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-2), name='gigameters_per_square_millisecond', ascii_symbol='Gm/ms^2', symbol='Gmms⁻²') -gigameters_per_microsecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='gigameters_per_microsecond', ascii_symbol='Gm/us', symbol='Gmµs⁻¹') -gigameters_per_square_microsecond = NamedUnit(1e+21, Dimensions(length=1, time=-2), name='gigameters_per_square_microsecond', ascii_symbol='Gm/us^2', symbol='Gmµs⁻²') -gigameters_per_nanosecond = NamedUnit(1e+18, Dimensions(length=1, time=-1), name='gigameters_per_nanosecond', ascii_symbol='Gm/ns', symbol='Gmns⁻¹') -gigameters_per_square_nanosecond = NamedUnit(9.999999999999999e+26, Dimensions(length=1, time=-2), name='gigameters_per_square_nanosecond', ascii_symbol='Gm/ns^2', symbol='Gmns⁻²') -gigameters_per_picosecond = NamedUnit(1e+21, Dimensions(length=1, time=-1), name='gigameters_per_picosecond', ascii_symbol='Gm/ps', symbol='Gmps⁻¹') -gigameters_per_square_picosecond = NamedUnit(1.0000000000000001e+33, Dimensions(length=1, time=-2), name='gigameters_per_square_picosecond', ascii_symbol='Gm/ps^2', symbol='Gmps⁻²') -gigameters_per_femtosecond = NamedUnit(1e+24, Dimensions(length=1, time=-1), name='gigameters_per_femtosecond', ascii_symbol='Gm/fs', symbol='Gmfs⁻¹') -gigameters_per_square_femtosecond = NamedUnit(1e+39, Dimensions(length=1, time=-2), name='gigameters_per_square_femtosecond', ascii_symbol='Gm/fs^2', symbol='Gmfs⁻²') -gigameters_per_attosecond = NamedUnit(9.999999999999999e+26, Dimensions(length=1, time=-1), name='gigameters_per_attosecond', ascii_symbol='Gm/as', symbol='Gmas⁻¹') -gigameters_per_square_attosecond = NamedUnit(1e+45, Dimensions(length=1, time=-2), name='gigameters_per_square_attosecond', ascii_symbol='Gm/as^2', symbol='Gmas⁻²') -gigameters_per_minute = NamedUnit(16666666.666666666, Dimensions(length=1, time=-1), name='gigameters_per_minute', ascii_symbol='Gm/min', symbol='Gmmin⁻¹') -gigameters_per_square_minute = NamedUnit(277777.77777777775, Dimensions(length=1, time=-2), name='gigameters_per_square_minute', ascii_symbol='Gm/min^2', symbol='Gmmin⁻²') -gigameters_per_hour = NamedUnit(277777.77777777775, Dimensions(length=1, time=-1), name='gigameters_per_hour', ascii_symbol='Gm/h', symbol='Gmh⁻¹') -gigameters_per_square_hour = NamedUnit(77.1604938271605, Dimensions(length=1, time=-2), name='gigameters_per_square_hour', ascii_symbol='Gm/h^2', symbol='Gmh⁻²') -gigameters_per_day = NamedUnit(11574.074074074075, Dimensions(length=1, time=-1), name='gigameters_per_day', ascii_symbol='Gm/d', symbol='Gmd⁻¹') -gigameters_per_square_day = NamedUnit(0.13395919067215364, Dimensions(length=1, time=-2), name='gigameters_per_square_day', ascii_symbol='Gm/d^2', symbol='Gmd⁻²') -gigameters_per_year = NamedUnit(31.688738506811433, Dimensions(length=1, time=-1), name='gigameters_per_year', ascii_symbol='Gm/y', symbol='Gmy⁻¹') -gigameters_per_square_year = NamedUnit(1.0041761481530736e-06, Dimensions(length=1, time=-2), name='gigameters_per_square_year', ascii_symbol='Gm/y^2', symbol='Gmy⁻²') -megameters_per_second = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='megameters_per_second', ascii_symbol='Mm/s', symbol='Mms⁻¹') -megameters_per_square_second = NamedUnit(1000000.0, Dimensions(length=1, time=-2), name='megameters_per_square_second', ascii_symbol='Mm/s^2', symbol='Mms⁻²') -megameters_per_millisecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-1), name='megameters_per_millisecond', ascii_symbol='Mm/ms', symbol='Mmms⁻¹') -megameters_per_square_millisecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-2), name='megameters_per_square_millisecond', ascii_symbol='Mm/ms^2', symbol='Mmms⁻²') -megameters_per_microsecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-1), name='megameters_per_microsecond', ascii_symbol='Mm/us', symbol='Mmµs⁻¹') -megameters_per_square_microsecond = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='megameters_per_square_microsecond', ascii_symbol='Mm/us^2', symbol='Mmµs⁻²') -megameters_per_nanosecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='megameters_per_nanosecond', ascii_symbol='Mm/ns', symbol='Mmns⁻¹') -megameters_per_square_nanosecond = NamedUnit(1e+24, Dimensions(length=1, time=-2), name='megameters_per_square_nanosecond', ascii_symbol='Mm/ns^2', symbol='Mmns⁻²') -megameters_per_picosecond = NamedUnit(1e+18, Dimensions(length=1, time=-1), name='megameters_per_picosecond', ascii_symbol='Mm/ps', symbol='Mmps⁻¹') -megameters_per_square_picosecond = NamedUnit(1e+30, Dimensions(length=1, time=-2), name='megameters_per_square_picosecond', ascii_symbol='Mm/ps^2', symbol='Mmps⁻²') -megameters_per_femtosecond = NamedUnit(9.999999999999999e+20, Dimensions(length=1, time=-1), name='megameters_per_femtosecond', ascii_symbol='Mm/fs', symbol='Mmfs⁻¹') -megameters_per_square_femtosecond = NamedUnit(9.999999999999999e+35, Dimensions(length=1, time=-2), name='megameters_per_square_femtosecond', ascii_symbol='Mm/fs^2', symbol='Mmfs⁻²') -megameters_per_attosecond = NamedUnit(1e+24, Dimensions(length=1, time=-1), name='megameters_per_attosecond', ascii_symbol='Mm/as', symbol='Mmas⁻¹') -megameters_per_square_attosecond = NamedUnit(9.999999999999999e+41, Dimensions(length=1, time=-2), name='megameters_per_square_attosecond', ascii_symbol='Mm/as^2', symbol='Mmas⁻²') -megameters_per_minute = NamedUnit(16666.666666666668, Dimensions(length=1, time=-1), name='megameters_per_minute', ascii_symbol='Mm/min', symbol='Mmmin⁻¹') -megameters_per_square_minute = NamedUnit(277.77777777777777, Dimensions(length=1, time=-2), name='megameters_per_square_minute', ascii_symbol='Mm/min^2', symbol='Mmmin⁻²') -megameters_per_hour = NamedUnit(277.77777777777777, Dimensions(length=1, time=-1), name='megameters_per_hour', ascii_symbol='Mm/h', symbol='Mmh⁻¹') -megameters_per_square_hour = NamedUnit(0.07716049382716049, Dimensions(length=1, time=-2), name='megameters_per_square_hour', ascii_symbol='Mm/h^2', symbol='Mmh⁻²') -megameters_per_day = NamedUnit(11.574074074074074, Dimensions(length=1, time=-1), name='megameters_per_day', ascii_symbol='Mm/d', symbol='Mmd⁻¹') -megameters_per_square_day = NamedUnit(0.00013395919067215364, Dimensions(length=1, time=-2), name='megameters_per_square_day', ascii_symbol='Mm/d^2', symbol='Mmd⁻²') -megameters_per_year = NamedUnit(0.031688738506811434, Dimensions(length=1, time=-1), name='megameters_per_year', ascii_symbol='Mm/y', symbol='Mmy⁻¹') -megameters_per_square_year = NamedUnit(1.0041761481530736e-09, Dimensions(length=1, time=-2), name='megameters_per_square_year', ascii_symbol='Mm/y^2', symbol='Mmy⁻²') -kilometers_per_second = NamedUnit(1000.0, Dimensions(length=1, time=-1), name='kilometers_per_second', ascii_symbol='km/s', symbol='kms⁻¹') -kilometers_per_square_second = NamedUnit(1000.0, Dimensions(length=1, time=-2), name='kilometers_per_square_second', ascii_symbol='km/s^2', symbol='kms⁻²') -kilometers_per_millisecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='kilometers_per_millisecond', ascii_symbol='km/ms', symbol='kmms⁻¹') -kilometers_per_square_millisecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-2), name='kilometers_per_square_millisecond', ascii_symbol='km/ms^2', symbol='kmms⁻²') -kilometers_per_microsecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-1), name='kilometers_per_microsecond', ascii_symbol='km/us', symbol='kmµs⁻¹') -kilometers_per_square_microsecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-2), name='kilometers_per_square_microsecond', ascii_symbol='km/us^2', symbol='kmµs⁻²') -kilometers_per_nanosecond = NamedUnit(999999999999.9999, Dimensions(length=1, time=-1), name='kilometers_per_nanosecond', ascii_symbol='km/ns', symbol='kmns⁻¹') -kilometers_per_square_nanosecond = NamedUnit(9.999999999999999e+20, Dimensions(length=1, time=-2), name='kilometers_per_square_nanosecond', ascii_symbol='km/ns^2', symbol='kmns⁻²') -kilometers_per_picosecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='kilometers_per_picosecond', ascii_symbol='km/ps', symbol='kmps⁻¹') -kilometers_per_square_picosecond = NamedUnit(1e+27, Dimensions(length=1, time=-2), name='kilometers_per_square_picosecond', ascii_symbol='km/ps^2', symbol='kmps⁻²') -kilometers_per_femtosecond = NamedUnit(9.999999999999999e+17, Dimensions(length=1, time=-1), name='kilometers_per_femtosecond', ascii_symbol='km/fs', symbol='kmfs⁻¹') -kilometers_per_square_femtosecond = NamedUnit(1e+33, Dimensions(length=1, time=-2), name='kilometers_per_square_femtosecond', ascii_symbol='km/fs^2', symbol='kmfs⁻²') -kilometers_per_attosecond = NamedUnit(9.999999999999999e+20, Dimensions(length=1, time=-1), name='kilometers_per_attosecond', ascii_symbol='km/as', symbol='kmas⁻¹') -kilometers_per_square_attosecond = NamedUnit(1e+39, Dimensions(length=1, time=-2), name='kilometers_per_square_attosecond', ascii_symbol='km/as^2', symbol='kmas⁻²') -kilometers_per_minute = NamedUnit(16.666666666666668, Dimensions(length=1, time=-1), name='kilometers_per_minute', ascii_symbol='km/min', symbol='kmmin⁻¹') -kilometers_per_square_minute = NamedUnit(0.2777777777777778, Dimensions(length=1, time=-2), name='kilometers_per_square_minute', ascii_symbol='km/min^2', symbol='kmmin⁻²') -kilometers_per_hour = NamedUnit(0.2777777777777778, Dimensions(length=1, time=-1), name='kilometers_per_hour', ascii_symbol='km/h', symbol='kmh⁻¹') -kilometers_per_square_hour = NamedUnit(7.716049382716049e-05, Dimensions(length=1, time=-2), name='kilometers_per_square_hour', ascii_symbol='km/h^2', symbol='kmh⁻²') -kilometers_per_day = NamedUnit(0.011574074074074073, Dimensions(length=1, time=-1), name='kilometers_per_day', ascii_symbol='km/d', symbol='kmd⁻¹') -kilometers_per_square_day = NamedUnit(1.3395919067215364e-07, Dimensions(length=1, time=-2), name='kilometers_per_square_day', ascii_symbol='km/d^2', symbol='kmd⁻²') -kilometers_per_year = NamedUnit(3.168873850681143e-05, Dimensions(length=1, time=-1), name='kilometers_per_year', ascii_symbol='km/y', symbol='kmy⁻¹') -kilometers_per_square_year = NamedUnit(1.0041761481530736e-12, Dimensions(length=1, time=-2), name='kilometers_per_square_year', ascii_symbol='km/y^2', symbol='kmy⁻²') -millimeters_per_second = NamedUnit(0.001, Dimensions(length=1, time=-1), name='millimeters_per_second', ascii_symbol='mm/s', symbol='mms⁻¹') -millimeters_per_square_second = NamedUnit(0.001, Dimensions(length=1, time=-2), name='millimeters_per_square_second', ascii_symbol='mm/s^2', symbol='mms⁻²') -millimeters_per_millisecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='millimeters_per_millisecond', ascii_symbol='mm/ms', symbol='mmms⁻¹') -millimeters_per_square_millisecond = NamedUnit(1000.0000000000001, Dimensions(length=1, time=-2), name='millimeters_per_square_millisecond', ascii_symbol='mm/ms^2', symbol='mmms⁻²') -millimeters_per_microsecond = NamedUnit(1000.0000000000001, Dimensions(length=1, time=-1), name='millimeters_per_microsecond', ascii_symbol='mm/us', symbol='mmµs⁻¹') -millimeters_per_square_microsecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-2), name='millimeters_per_square_microsecond', ascii_symbol='mm/us^2', symbol='mmµs⁻²') -millimeters_per_nanosecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='millimeters_per_nanosecond', ascii_symbol='mm/ns', symbol='mmns⁻¹') -millimeters_per_square_nanosecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-2), name='millimeters_per_square_nanosecond', ascii_symbol='mm/ns^2', symbol='mmns⁻²') -millimeters_per_picosecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-1), name='millimeters_per_picosecond', ascii_symbol='mm/ps', symbol='mmps⁻¹') -millimeters_per_square_picosecond = NamedUnit(1.0000000000000001e+21, Dimensions(length=1, time=-2), name='millimeters_per_square_picosecond', ascii_symbol='mm/ps^2', symbol='mmps⁻²') -millimeters_per_femtosecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-1), name='millimeters_per_femtosecond', ascii_symbol='mm/fs', symbol='mmfs⁻¹') -millimeters_per_square_femtosecond = NamedUnit(9.999999999999999e+26, Dimensions(length=1, time=-2), name='millimeters_per_square_femtosecond', ascii_symbol='mm/fs^2', symbol='mmfs⁻²') -millimeters_per_attosecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-1), name='millimeters_per_attosecond', ascii_symbol='mm/as', symbol='mmas⁻¹') -millimeters_per_square_attosecond = NamedUnit(1e+33, Dimensions(length=1, time=-2), name='millimeters_per_square_attosecond', ascii_symbol='mm/as^2', symbol='mmas⁻²') -millimeters_per_minute = NamedUnit(1.6666666666666667e-05, Dimensions(length=1, time=-1), name='millimeters_per_minute', ascii_symbol='mm/min', symbol='mmmin⁻¹') -millimeters_per_square_minute = NamedUnit(2.7777777777777776e-07, Dimensions(length=1, time=-2), name='millimeters_per_square_minute', ascii_symbol='mm/min^2', symbol='mmmin⁻²') -millimeters_per_hour = NamedUnit(2.7777777777777776e-07, Dimensions(length=1, time=-1), name='millimeters_per_hour', ascii_symbol='mm/h', symbol='mmh⁻¹') -millimeters_per_square_hour = NamedUnit(7.716049382716049e-11, Dimensions(length=1, time=-2), name='millimeters_per_square_hour', ascii_symbol='mm/h^2', symbol='mmh⁻²') -millimeters_per_day = NamedUnit(1.1574074074074074e-08, Dimensions(length=1, time=-1), name='millimeters_per_day', ascii_symbol='mm/d', symbol='mmd⁻¹') -millimeters_per_square_day = NamedUnit(1.3395919067215364e-13, Dimensions(length=1, time=-2), name='millimeters_per_square_day', ascii_symbol='mm/d^2', symbol='mmd⁻²') -millimeters_per_year = NamedUnit(3.168873850681143e-11, Dimensions(length=1, time=-1), name='millimeters_per_year', ascii_symbol='mm/y', symbol='mmy⁻¹') -millimeters_per_square_year = NamedUnit(1.0041761481530737e-18, Dimensions(length=1, time=-2), name='millimeters_per_square_year', ascii_symbol='mm/y^2', symbol='mmy⁻²') -micrometers_per_second = NamedUnit(1e-06, Dimensions(length=1, time=-1), name='micrometers_per_second', ascii_symbol='um/s', symbol='µms⁻¹') -micrometers_per_square_second = NamedUnit(1e-06, Dimensions(length=1, time=-2), name='micrometers_per_square_second', ascii_symbol='um/s^2', symbol='µms⁻²') -micrometers_per_millisecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='micrometers_per_millisecond', ascii_symbol='um/ms', symbol='µmms⁻¹') -micrometers_per_square_millisecond = NamedUnit(1.0, Dimensions(length=1, time=-2), name='micrometers_per_square_millisecond', ascii_symbol='um/ms^2', symbol='µmms⁻²') -micrometers_per_microsecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='micrometers_per_microsecond', ascii_symbol='um/us', symbol='µmµs⁻¹') -micrometers_per_square_microsecond = NamedUnit(1000000.0, Dimensions(length=1, time=-2), name='micrometers_per_square_microsecond', ascii_symbol='um/us^2', symbol='µmµs⁻²') -micrometers_per_nanosecond = NamedUnit(999.9999999999999, Dimensions(length=1, time=-1), name='micrometers_per_nanosecond', ascii_symbol='um/ns', symbol='µmns⁻¹') -micrometers_per_square_nanosecond = NamedUnit(999999999999.9999, Dimensions(length=1, time=-2), name='micrometers_per_square_nanosecond', ascii_symbol='um/ns^2', symbol='µmns⁻²') -micrometers_per_picosecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='micrometers_per_picosecond', ascii_symbol='um/ps', symbol='µmps⁻¹') -micrometers_per_square_picosecond = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='micrometers_per_square_picosecond', ascii_symbol='um/ps^2', symbol='µmps⁻²') -micrometers_per_femtosecond = NamedUnit(999999999.9999999, Dimensions(length=1, time=-1), name='micrometers_per_femtosecond', ascii_symbol='um/fs', symbol='µmfs⁻¹') -micrometers_per_square_femtosecond = NamedUnit(9.999999999999998e+23, Dimensions(length=1, time=-2), name='micrometers_per_square_femtosecond', ascii_symbol='um/fs^2', symbol='µmfs⁻²') -micrometers_per_attosecond = NamedUnit(999999999999.9999, Dimensions(length=1, time=-1), name='micrometers_per_attosecond', ascii_symbol='um/as', symbol='µmas⁻¹') -micrometers_per_square_attosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-2), name='micrometers_per_square_attosecond', ascii_symbol='um/as^2', symbol='µmas⁻²') -micrometers_per_minute = NamedUnit(1.6666666666666667e-08, Dimensions(length=1, time=-1), name='micrometers_per_minute', ascii_symbol='um/min', symbol='µmmin⁻¹') -micrometers_per_square_minute = NamedUnit(2.7777777777777777e-10, Dimensions(length=1, time=-2), name='micrometers_per_square_minute', ascii_symbol='um/min^2', symbol='µmmin⁻²') -micrometers_per_hour = NamedUnit(2.7777777777777777e-10, Dimensions(length=1, time=-1), name='micrometers_per_hour', ascii_symbol='um/h', symbol='µmh⁻¹') -micrometers_per_square_hour = NamedUnit(7.71604938271605e-14, Dimensions(length=1, time=-2), name='micrometers_per_square_hour', ascii_symbol='um/h^2', symbol='µmh⁻²') -micrometers_per_day = NamedUnit(1.1574074074074074e-11, Dimensions(length=1, time=-1), name='micrometers_per_day', ascii_symbol='um/d', symbol='µmd⁻¹') -micrometers_per_square_day = NamedUnit(1.3395919067215363e-16, Dimensions(length=1, time=-2), name='micrometers_per_square_day', ascii_symbol='um/d^2', symbol='µmd⁻²') -micrometers_per_year = NamedUnit(3.168873850681143e-14, Dimensions(length=1, time=-1), name='micrometers_per_year', ascii_symbol='um/y', symbol='µmy⁻¹') -micrometers_per_square_year = NamedUnit(1.0041761481530736e-21, Dimensions(length=1, time=-2), name='micrometers_per_square_year', ascii_symbol='um/y^2', symbol='µmy⁻²') -nanometers_per_second = NamedUnit(1e-09, Dimensions(length=1, time=-1), name='nanometers_per_second', ascii_symbol='nm/s', symbol='nms⁻¹') -nanometers_per_square_second = NamedUnit(1e-09, Dimensions(length=1, time=-2), name='nanometers_per_square_second', ascii_symbol='nm/s^2', symbol='nms⁻²') -nanometers_per_millisecond = NamedUnit(1e-06, Dimensions(length=1, time=-1), name='nanometers_per_millisecond', ascii_symbol='nm/ms', symbol='nmms⁻¹') -nanometers_per_square_millisecond = NamedUnit(0.001, Dimensions(length=1, time=-2), name='nanometers_per_square_millisecond', ascii_symbol='nm/ms^2', symbol='nmms⁻²') -nanometers_per_microsecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='nanometers_per_microsecond', ascii_symbol='nm/us', symbol='nmµs⁻¹') -nanometers_per_square_microsecond = NamedUnit(1000.0000000000001, Dimensions(length=1, time=-2), name='nanometers_per_square_microsecond', ascii_symbol='nm/us^2', symbol='nmµs⁻²') -nanometers_per_nanosecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='nanometers_per_nanosecond', ascii_symbol='nm/ns', symbol='nmns⁻¹') -nanometers_per_square_nanosecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-2), name='nanometers_per_square_nanosecond', ascii_symbol='nm/ns^2', symbol='nmns⁻²') -nanometers_per_picosecond = NamedUnit(1000.0000000000001, Dimensions(length=1, time=-1), name='nanometers_per_picosecond', ascii_symbol='nm/ps', symbol='nmps⁻¹') -nanometers_per_square_picosecond = NamedUnit(1000000000000000.1, Dimensions(length=1, time=-2), name='nanometers_per_square_picosecond', ascii_symbol='nm/ps^2', symbol='nmps⁻²') -nanometers_per_femtosecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='nanometers_per_femtosecond', ascii_symbol='nm/fs', symbol='nmfs⁻¹') -nanometers_per_square_femtosecond = NamedUnit(1e+21, Dimensions(length=1, time=-2), name='nanometers_per_square_femtosecond', ascii_symbol='nm/fs^2', symbol='nmfs⁻²') -nanometers_per_attosecond = NamedUnit(1000000000.0, Dimensions(length=1, time=-1), name='nanometers_per_attosecond', ascii_symbol='nm/as', symbol='nmas⁻¹') -nanometers_per_square_attosecond = NamedUnit(1e+27, Dimensions(length=1, time=-2), name='nanometers_per_square_attosecond', ascii_symbol='nm/as^2', symbol='nmas⁻²') -nanometers_per_minute = NamedUnit(1.6666666666666667e-11, Dimensions(length=1, time=-1), name='nanometers_per_minute', ascii_symbol='nm/min', symbol='nmmin⁻¹') -nanometers_per_square_minute = NamedUnit(2.777777777777778e-13, Dimensions(length=1, time=-2), name='nanometers_per_square_minute', ascii_symbol='nm/min^2', symbol='nmmin⁻²') -nanometers_per_hour = NamedUnit(2.777777777777778e-13, Dimensions(length=1, time=-1), name='nanometers_per_hour', ascii_symbol='nm/h', symbol='nmh⁻¹') -nanometers_per_square_hour = NamedUnit(7.71604938271605e-17, Dimensions(length=1, time=-2), name='nanometers_per_square_hour', ascii_symbol='nm/h^2', symbol='nmh⁻²') -nanometers_per_day = NamedUnit(1.1574074074074075e-14, Dimensions(length=1, time=-1), name='nanometers_per_day', ascii_symbol='nm/d', symbol='nmd⁻¹') -nanometers_per_square_day = NamedUnit(1.3395919067215365e-19, Dimensions(length=1, time=-2), name='nanometers_per_square_day', ascii_symbol='nm/d^2', symbol='nmd⁻²') -nanometers_per_year = NamedUnit(3.1688738506811435e-17, Dimensions(length=1, time=-1), name='nanometers_per_year', ascii_symbol='nm/y', symbol='nmy⁻¹') -nanometers_per_square_year = NamedUnit(1.0041761481530737e-24, Dimensions(length=1, time=-2), name='nanometers_per_square_year', ascii_symbol='nm/y^2', symbol='nmy⁻²') -picometers_per_second = NamedUnit(1e-12, Dimensions(length=1, time=-1), name='picometers_per_second', ascii_symbol='pm/s', symbol='pms⁻¹') -picometers_per_square_second = NamedUnit(1e-12, Dimensions(length=1, time=-2), name='picometers_per_square_second', ascii_symbol='pm/s^2', symbol='pms⁻²') -picometers_per_millisecond = NamedUnit(1e-09, Dimensions(length=1, time=-1), name='picometers_per_millisecond', ascii_symbol='pm/ms', symbol='pmms⁻¹') -picometers_per_square_millisecond = NamedUnit(1e-06, Dimensions(length=1, time=-2), name='picometers_per_square_millisecond', ascii_symbol='pm/ms^2', symbol='pmms⁻²') -picometers_per_microsecond = NamedUnit(1e-06, Dimensions(length=1, time=-1), name='picometers_per_microsecond', ascii_symbol='pm/us', symbol='pmµs⁻¹') -picometers_per_square_microsecond = NamedUnit(1.0, Dimensions(length=1, time=-2), name='picometers_per_square_microsecond', ascii_symbol='pm/us^2', symbol='pmµs⁻²') -picometers_per_nanosecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='picometers_per_nanosecond', ascii_symbol='pm/ns', symbol='pmns⁻¹') -picometers_per_square_nanosecond = NamedUnit(999999.9999999999, Dimensions(length=1, time=-2), name='picometers_per_square_nanosecond', ascii_symbol='pm/ns^2', symbol='pmns⁻²') -picometers_per_picosecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='picometers_per_picosecond', ascii_symbol='pm/ps', symbol='pmps⁻¹') -picometers_per_square_picosecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-2), name='picometers_per_square_picosecond', ascii_symbol='pm/ps^2', symbol='pmps⁻²') -picometers_per_femtosecond = NamedUnit(999.9999999999999, Dimensions(length=1, time=-1), name='picometers_per_femtosecond', ascii_symbol='pm/fs', symbol='pmfs⁻¹') -picometers_per_square_femtosecond = NamedUnit(9.999999999999999e+17, Dimensions(length=1, time=-2), name='picometers_per_square_femtosecond', ascii_symbol='pm/fs^2', symbol='pmfs⁻²') -picometers_per_attosecond = NamedUnit(999999.9999999999, Dimensions(length=1, time=-1), name='picometers_per_attosecond', ascii_symbol='pm/as', symbol='pmas⁻¹') -picometers_per_square_attosecond = NamedUnit(9.999999999999998e+23, Dimensions(length=1, time=-2), name='picometers_per_square_attosecond', ascii_symbol='pm/as^2', symbol='pmas⁻²') -picometers_per_minute = NamedUnit(1.6666666666666667e-14, Dimensions(length=1, time=-1), name='picometers_per_minute', ascii_symbol='pm/min', symbol='pmmin⁻¹') -picometers_per_square_minute = NamedUnit(2.7777777777777775e-16, Dimensions(length=1, time=-2), name='picometers_per_square_minute', ascii_symbol='pm/min^2', symbol='pmmin⁻²') -picometers_per_hour = NamedUnit(2.7777777777777775e-16, Dimensions(length=1, time=-1), name='picometers_per_hour', ascii_symbol='pm/h', symbol='pmh⁻¹') -picometers_per_square_hour = NamedUnit(7.716049382716049e-20, Dimensions(length=1, time=-2), name='picometers_per_square_hour', ascii_symbol='pm/h^2', symbol='pmh⁻²') -picometers_per_day = NamedUnit(1.1574074074074074e-17, Dimensions(length=1, time=-1), name='picometers_per_day', ascii_symbol='pm/d', symbol='pmd⁻¹') -picometers_per_square_day = NamedUnit(1.3395919067215362e-22, Dimensions(length=1, time=-2), name='picometers_per_square_day', ascii_symbol='pm/d^2', symbol='pmd⁻²') -picometers_per_year = NamedUnit(3.168873850681143e-20, Dimensions(length=1, time=-1), name='picometers_per_year', ascii_symbol='pm/y', symbol='pmy⁻¹') -picometers_per_square_year = NamedUnit(1.0041761481530736e-27, Dimensions(length=1, time=-2), name='picometers_per_square_year', ascii_symbol='pm/y^2', symbol='pmy⁻²') -femtometers_per_second = NamedUnit(1e-15, Dimensions(length=1, time=-1), name='femtometers_per_second', ascii_symbol='fm/s', symbol='fms⁻¹') -femtometers_per_square_second = NamedUnit(1e-15, Dimensions(length=1, time=-2), name='femtometers_per_square_second', ascii_symbol='fm/s^2', symbol='fms⁻²') -femtometers_per_millisecond = NamedUnit(1e-12, Dimensions(length=1, time=-1), name='femtometers_per_millisecond', ascii_symbol='fm/ms', symbol='fmms⁻¹') -femtometers_per_square_millisecond = NamedUnit(1e-09, Dimensions(length=1, time=-2), name='femtometers_per_square_millisecond', ascii_symbol='fm/ms^2', symbol='fmms⁻²') -femtometers_per_microsecond = NamedUnit(1e-09, Dimensions(length=1, time=-1), name='femtometers_per_microsecond', ascii_symbol='fm/us', symbol='fmµs⁻¹') -femtometers_per_square_microsecond = NamedUnit(0.001, Dimensions(length=1, time=-2), name='femtometers_per_square_microsecond', ascii_symbol='fm/us^2', symbol='fmµs⁻²') -femtometers_per_nanosecond = NamedUnit(1e-06, Dimensions(length=1, time=-1), name='femtometers_per_nanosecond', ascii_symbol='fm/ns', symbol='fmns⁻¹') -femtometers_per_square_nanosecond = NamedUnit(1000.0, Dimensions(length=1, time=-2), name='femtometers_per_square_nanosecond', ascii_symbol='fm/ns^2', symbol='fmns⁻²') -femtometers_per_picosecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='femtometers_per_picosecond', ascii_symbol='fm/ps', symbol='fmps⁻¹') -femtometers_per_square_picosecond = NamedUnit(1000000000.0000001, Dimensions(length=1, time=-2), name='femtometers_per_square_picosecond', ascii_symbol='fm/ps^2', symbol='fmps⁻²') -femtometers_per_femtosecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='femtometers_per_femtosecond', ascii_symbol='fm/fs', symbol='fmfs⁻¹') -femtometers_per_square_femtosecond = NamedUnit(1000000000000000.0, Dimensions(length=1, time=-2), name='femtometers_per_square_femtosecond', ascii_symbol='fm/fs^2', symbol='fmfs⁻²') -femtometers_per_attosecond = NamedUnit(1000.0, Dimensions(length=1, time=-1), name='femtometers_per_attosecond', ascii_symbol='fm/as', symbol='fmas⁻¹') -femtometers_per_square_attosecond = NamedUnit(1e+21, Dimensions(length=1, time=-2), name='femtometers_per_square_attosecond', ascii_symbol='fm/as^2', symbol='fmas⁻²') -femtometers_per_minute = NamedUnit(1.6666666666666667e-17, Dimensions(length=1, time=-1), name='femtometers_per_minute', ascii_symbol='fm/min', symbol='fmmin⁻¹') -femtometers_per_square_minute = NamedUnit(2.777777777777778e-19, Dimensions(length=1, time=-2), name='femtometers_per_square_minute', ascii_symbol='fm/min^2', symbol='fmmin⁻²') -femtometers_per_hour = NamedUnit(2.777777777777778e-19, Dimensions(length=1, time=-1), name='femtometers_per_hour', ascii_symbol='fm/h', symbol='fmh⁻¹') -femtometers_per_square_hour = NamedUnit(7.71604938271605e-23, Dimensions(length=1, time=-2), name='femtometers_per_square_hour', ascii_symbol='fm/h^2', symbol='fmh⁻²') -femtometers_per_day = NamedUnit(1.1574074074074075e-20, Dimensions(length=1, time=-1), name='femtometers_per_day', ascii_symbol='fm/d', symbol='fmd⁻¹') -femtometers_per_square_day = NamedUnit(1.3395919067215364e-25, Dimensions(length=1, time=-2), name='femtometers_per_square_day', ascii_symbol='fm/d^2', symbol='fmd⁻²') -femtometers_per_year = NamedUnit(3.1688738506811434e-23, Dimensions(length=1, time=-1), name='femtometers_per_year', ascii_symbol='fm/y', symbol='fmy⁻¹') -femtometers_per_square_year = NamedUnit(1.0041761481530736e-30, Dimensions(length=1, time=-2), name='femtometers_per_square_year', ascii_symbol='fm/y^2', symbol='fmy⁻²') -attometers_per_second = NamedUnit(1e-18, Dimensions(length=1, time=-1), name='attometers_per_second', ascii_symbol='am/s', symbol='ams⁻¹') -attometers_per_square_second = NamedUnit(1e-18, Dimensions(length=1, time=-2), name='attometers_per_square_second', ascii_symbol='am/s^2', symbol='ams⁻²') -attometers_per_millisecond = NamedUnit(1e-15, Dimensions(length=1, time=-1), name='attometers_per_millisecond', ascii_symbol='am/ms', symbol='amms⁻¹') -attometers_per_square_millisecond = NamedUnit(1.0000000000000002e-12, Dimensions(length=1, time=-2), name='attometers_per_square_millisecond', ascii_symbol='am/ms^2', symbol='amms⁻²') -attometers_per_microsecond = NamedUnit(1.0000000000000002e-12, Dimensions(length=1, time=-1), name='attometers_per_microsecond', ascii_symbol='am/us', symbol='amµs⁻¹') -attometers_per_square_microsecond = NamedUnit(1.0000000000000002e-06, Dimensions(length=1, time=-2), name='attometers_per_square_microsecond', ascii_symbol='am/us^2', symbol='amµs⁻²') -attometers_per_nanosecond = NamedUnit(1e-09, Dimensions(length=1, time=-1), name='attometers_per_nanosecond', ascii_symbol='am/ns', symbol='amns⁻¹') -attometers_per_square_nanosecond = NamedUnit(1.0, Dimensions(length=1, time=-2), name='attometers_per_square_nanosecond', ascii_symbol='am/ns^2', symbol='amns⁻²') -attometers_per_picosecond = NamedUnit(1.0000000000000002e-06, Dimensions(length=1, time=-1), name='attometers_per_picosecond', ascii_symbol='am/ps', symbol='amps⁻¹') -attometers_per_square_picosecond = NamedUnit(1000000.0000000001, Dimensions(length=1, time=-2), name='attometers_per_square_picosecond', ascii_symbol='am/ps^2', symbol='amps⁻²') -attometers_per_femtosecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='attometers_per_femtosecond', ascii_symbol='am/fs', symbol='amfs⁻¹') -attometers_per_square_femtosecond = NamedUnit(1000000000000.0, Dimensions(length=1, time=-2), name='attometers_per_square_femtosecond', ascii_symbol='am/fs^2', symbol='amfs⁻²') -attometers_per_attosecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='attometers_per_attosecond', ascii_symbol='am/as', symbol='amas⁻¹') -attometers_per_square_attosecond = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='attometers_per_square_attosecond', ascii_symbol='am/as^2', symbol='amas⁻²') -attometers_per_minute = NamedUnit(1.6666666666666668e-20, Dimensions(length=1, time=-1), name='attometers_per_minute', ascii_symbol='am/min', symbol='ammin⁻¹') -attometers_per_square_minute = NamedUnit(2.777777777777778e-22, Dimensions(length=1, time=-2), name='attometers_per_square_minute', ascii_symbol='am/min^2', symbol='ammin⁻²') -attometers_per_hour = NamedUnit(2.777777777777778e-22, Dimensions(length=1, time=-1), name='attometers_per_hour', ascii_symbol='am/h', symbol='amh⁻¹') -attometers_per_square_hour = NamedUnit(7.71604938271605e-26, Dimensions(length=1, time=-2), name='attometers_per_square_hour', ascii_symbol='am/h^2', symbol='amh⁻²') -attometers_per_day = NamedUnit(1.1574074074074075e-23, Dimensions(length=1, time=-1), name='attometers_per_day', ascii_symbol='am/d', symbol='amd⁻¹') -attometers_per_square_day = NamedUnit(1.3395919067215364e-28, Dimensions(length=1, time=-2), name='attometers_per_square_day', ascii_symbol='am/d^2', symbol='amd⁻²') -attometers_per_year = NamedUnit(3.1688738506811435e-26, Dimensions(length=1, time=-1), name='attometers_per_year', ascii_symbol='am/y', symbol='amy⁻¹') -attometers_per_square_year = NamedUnit(1.0041761481530737e-33, Dimensions(length=1, time=-2), name='attometers_per_square_year', ascii_symbol='am/y^2', symbol='amy⁻²') -decimeters_per_second = NamedUnit(0.1, Dimensions(length=1, time=-1), name='decimeters_per_second', ascii_symbol='dm/s', symbol='dms⁻¹') -decimeters_per_square_second = NamedUnit(0.1, Dimensions(length=1, time=-2), name='decimeters_per_square_second', ascii_symbol='dm/s^2', symbol='dms⁻²') -decimeters_per_millisecond = NamedUnit(100.0, Dimensions(length=1, time=-1), name='decimeters_per_millisecond', ascii_symbol='dm/ms', symbol='dmms⁻¹') -decimeters_per_square_millisecond = NamedUnit(100000.00000000001, Dimensions(length=1, time=-2), name='decimeters_per_square_millisecond', ascii_symbol='dm/ms^2', symbol='dmms⁻²') -decimeters_per_microsecond = NamedUnit(100000.00000000001, Dimensions(length=1, time=-1), name='decimeters_per_microsecond', ascii_symbol='dm/us', symbol='dmµs⁻¹') -decimeters_per_square_microsecond = NamedUnit(100000000000.0, Dimensions(length=1, time=-2), name='decimeters_per_square_microsecond', ascii_symbol='dm/us^2', symbol='dmµs⁻²') -decimeters_per_nanosecond = NamedUnit(100000000.0, Dimensions(length=1, time=-1), name='decimeters_per_nanosecond', ascii_symbol='dm/ns', symbol='dmns⁻¹') -decimeters_per_square_nanosecond = NamedUnit(1e+17, Dimensions(length=1, time=-2), name='decimeters_per_square_nanosecond', ascii_symbol='dm/ns^2', symbol='dmns⁻²') -decimeters_per_picosecond = NamedUnit(100000000000.0, Dimensions(length=1, time=-1), name='decimeters_per_picosecond', ascii_symbol='dm/ps', symbol='dmps⁻¹') -decimeters_per_square_picosecond = NamedUnit(1.0000000000000001e+23, Dimensions(length=1, time=-2), name='decimeters_per_square_picosecond', ascii_symbol='dm/ps^2', symbol='dmps⁻²') -decimeters_per_femtosecond = NamedUnit(100000000000000.0, Dimensions(length=1, time=-1), name='decimeters_per_femtosecond', ascii_symbol='dm/fs', symbol='dmfs⁻¹') -decimeters_per_square_femtosecond = NamedUnit(1e+29, Dimensions(length=1, time=-2), name='decimeters_per_square_femtosecond', ascii_symbol='dm/fs^2', symbol='dmfs⁻²') -decimeters_per_attosecond = NamedUnit(1e+17, Dimensions(length=1, time=-1), name='decimeters_per_attosecond', ascii_symbol='dm/as', symbol='dmas⁻¹') -decimeters_per_square_attosecond = NamedUnit(1e+35, Dimensions(length=1, time=-2), name='decimeters_per_square_attosecond', ascii_symbol='dm/as^2', symbol='dmas⁻²') -decimeters_per_minute = NamedUnit(0.0016666666666666668, Dimensions(length=1, time=-1), name='decimeters_per_minute', ascii_symbol='dm/min', symbol='dmmin⁻¹') -decimeters_per_square_minute = NamedUnit(2.777777777777778e-05, Dimensions(length=1, time=-2), name='decimeters_per_square_minute', ascii_symbol='dm/min^2', symbol='dmmin⁻²') -decimeters_per_hour = NamedUnit(2.777777777777778e-05, Dimensions(length=1, time=-1), name='decimeters_per_hour', ascii_symbol='dm/h', symbol='dmh⁻¹') -decimeters_per_square_hour = NamedUnit(7.71604938271605e-09, Dimensions(length=1, time=-2), name='decimeters_per_square_hour', ascii_symbol='dm/h^2', symbol='dmh⁻²') -decimeters_per_day = NamedUnit(1.1574074074074074e-06, Dimensions(length=1, time=-1), name='decimeters_per_day', ascii_symbol='dm/d', symbol='dmd⁻¹') -decimeters_per_square_day = NamedUnit(1.3395919067215364e-11, Dimensions(length=1, time=-2), name='decimeters_per_square_day', ascii_symbol='dm/d^2', symbol='dmd⁻²') -decimeters_per_year = NamedUnit(3.168873850681143e-09, Dimensions(length=1, time=-1), name='decimeters_per_year', ascii_symbol='dm/y', symbol='dmy⁻¹') -decimeters_per_square_year = NamedUnit(1.0041761481530736e-16, Dimensions(length=1, time=-2), name='decimeters_per_square_year', ascii_symbol='dm/y^2', symbol='dmy⁻²') -centimeters_per_second = NamedUnit(0.01, Dimensions(length=1, time=-1), name='centimeters_per_second', ascii_symbol='cm/s', symbol='cms⁻¹') -centimeters_per_square_second = NamedUnit(0.01, Dimensions(length=1, time=-2), name='centimeters_per_square_second', ascii_symbol='cm/s^2', symbol='cms⁻²') -centimeters_per_millisecond = NamedUnit(10.0, Dimensions(length=1, time=-1), name='centimeters_per_millisecond', ascii_symbol='cm/ms', symbol='cmms⁻¹') -centimeters_per_square_millisecond = NamedUnit(10000.0, Dimensions(length=1, time=-2), name='centimeters_per_square_millisecond', ascii_symbol='cm/ms^2', symbol='cmms⁻²') -centimeters_per_microsecond = NamedUnit(10000.0, Dimensions(length=1, time=-1), name='centimeters_per_microsecond', ascii_symbol='cm/us', symbol='cmµs⁻¹') -centimeters_per_square_microsecond = NamedUnit(10000000000.0, Dimensions(length=1, time=-2), name='centimeters_per_square_microsecond', ascii_symbol='cm/us^2', symbol='cmµs⁻²') -centimeters_per_nanosecond = NamedUnit(10000000.0, Dimensions(length=1, time=-1), name='centimeters_per_nanosecond', ascii_symbol='cm/ns', symbol='cmns⁻¹') -centimeters_per_square_nanosecond = NamedUnit(1e+16, Dimensions(length=1, time=-2), name='centimeters_per_square_nanosecond', ascii_symbol='cm/ns^2', symbol='cmns⁻²') -centimeters_per_picosecond = NamedUnit(10000000000.0, Dimensions(length=1, time=-1), name='centimeters_per_picosecond', ascii_symbol='cm/ps', symbol='cmps⁻¹') -centimeters_per_square_picosecond = NamedUnit(1e+22, Dimensions(length=1, time=-2), name='centimeters_per_square_picosecond', ascii_symbol='cm/ps^2', symbol='cmps⁻²') -centimeters_per_femtosecond = NamedUnit(10000000000000.0, Dimensions(length=1, time=-1), name='centimeters_per_femtosecond', ascii_symbol='cm/fs', symbol='cmfs⁻¹') -centimeters_per_square_femtosecond = NamedUnit(1e+28, Dimensions(length=1, time=-2), name='centimeters_per_square_femtosecond', ascii_symbol='cm/fs^2', symbol='cmfs⁻²') -centimeters_per_attosecond = NamedUnit(1e+16, Dimensions(length=1, time=-1), name='centimeters_per_attosecond', ascii_symbol='cm/as', symbol='cmas⁻¹') -centimeters_per_square_attosecond = NamedUnit(1e+34, Dimensions(length=1, time=-2), name='centimeters_per_square_attosecond', ascii_symbol='cm/as^2', symbol='cmas⁻²') -centimeters_per_minute = NamedUnit(0.00016666666666666666, Dimensions(length=1, time=-1), name='centimeters_per_minute', ascii_symbol='cm/min', symbol='cmmin⁻¹') -centimeters_per_square_minute = NamedUnit(2.777777777777778e-06, Dimensions(length=1, time=-2), name='centimeters_per_square_minute', ascii_symbol='cm/min^2', symbol='cmmin⁻²') -centimeters_per_hour = NamedUnit(2.777777777777778e-06, Dimensions(length=1, time=-1), name='centimeters_per_hour', ascii_symbol='cm/h', symbol='cmh⁻¹') -centimeters_per_square_hour = NamedUnit(7.71604938271605e-10, Dimensions(length=1, time=-2), name='centimeters_per_square_hour', ascii_symbol='cm/h^2', symbol='cmh⁻²') -centimeters_per_day = NamedUnit(1.1574074074074074e-07, Dimensions(length=1, time=-1), name='centimeters_per_day', ascii_symbol='cm/d', symbol='cmd⁻¹') -centimeters_per_square_day = NamedUnit(1.3395919067215364e-12, Dimensions(length=1, time=-2), name='centimeters_per_square_day', ascii_symbol='cm/d^2', symbol='cmd⁻²') -centimeters_per_year = NamedUnit(3.168873850681143e-10, Dimensions(length=1, time=-1), name='centimeters_per_year', ascii_symbol='cm/y', symbol='cmy⁻¹') -centimeters_per_square_year = NamedUnit(1.0041761481530737e-17, Dimensions(length=1, time=-2), name='centimeters_per_square_year', ascii_symbol='cm/y^2', symbol='cmy⁻²') -angstroms_per_second = NamedUnit(1e-10, Dimensions(length=1, time=-1), name='angstroms_per_second', ascii_symbol='Ang/s', symbol='Ås⁻¹') -angstroms_per_square_second = NamedUnit(1e-10, Dimensions(length=1, time=-2), name='angstroms_per_square_second', ascii_symbol='Ang/s^2', symbol='Ås⁻²') -angstroms_per_millisecond = NamedUnit(1e-07, Dimensions(length=1, time=-1), name='angstroms_per_millisecond', ascii_symbol='Ang/ms', symbol='Åms⁻¹') -angstroms_per_square_millisecond = NamedUnit(0.0001, Dimensions(length=1, time=-2), name='angstroms_per_square_millisecond', ascii_symbol='Ang/ms^2', symbol='Åms⁻²') -angstroms_per_microsecond = NamedUnit(0.0001, Dimensions(length=1, time=-1), name='angstroms_per_microsecond', ascii_symbol='Ang/us', symbol='ŵs⁻¹') -angstroms_per_square_microsecond = NamedUnit(100.0, Dimensions(length=1, time=-2), name='angstroms_per_square_microsecond', ascii_symbol='Ang/us^2', symbol='ŵs⁻²') -angstroms_per_nanosecond = NamedUnit(0.09999999999999999, Dimensions(length=1, time=-1), name='angstroms_per_nanosecond', ascii_symbol='Ang/ns', symbol='Åns⁻¹') -angstroms_per_square_nanosecond = NamedUnit(100000000.0, Dimensions(length=1, time=-2), name='angstroms_per_square_nanosecond', ascii_symbol='Ang/ns^2', symbol='Åns⁻²') -angstroms_per_picosecond = NamedUnit(100.0, Dimensions(length=1, time=-1), name='angstroms_per_picosecond', ascii_symbol='Ang/ps', symbol='Åps⁻¹') -angstroms_per_square_picosecond = NamedUnit(100000000000000.02, Dimensions(length=1, time=-2), name='angstroms_per_square_picosecond', ascii_symbol='Ang/ps^2', symbol='Åps⁻²') -angstroms_per_femtosecond = NamedUnit(100000.0, Dimensions(length=1, time=-1), name='angstroms_per_femtosecond', ascii_symbol='Ang/fs', symbol='Åfs⁻¹') -angstroms_per_square_femtosecond = NamedUnit(1e+20, Dimensions(length=1, time=-2), name='angstroms_per_square_femtosecond', ascii_symbol='Ang/fs^2', symbol='Åfs⁻²') -angstroms_per_attosecond = NamedUnit(100000000.0, Dimensions(length=1, time=-1), name='angstroms_per_attosecond', ascii_symbol='Ang/as', symbol='Åas⁻¹') -angstroms_per_square_attosecond = NamedUnit(9.999999999999999e+25, Dimensions(length=1, time=-2), name='angstroms_per_square_attosecond', ascii_symbol='Ang/as^2', symbol='Åas⁻²') -angstroms_per_minute = NamedUnit(1.6666666666666668e-12, Dimensions(length=1, time=-1), name='angstroms_per_minute', ascii_symbol='Ang/min', symbol='Åmin⁻¹') -angstroms_per_square_minute = NamedUnit(2.7777777777777778e-14, Dimensions(length=1, time=-2), name='angstroms_per_square_minute', ascii_symbol='Ang/min^2', symbol='Åmin⁻²') -angstroms_per_hour = NamedUnit(2.7777777777777778e-14, Dimensions(length=1, time=-1), name='angstroms_per_hour', ascii_symbol='Ang/h', symbol='Åh⁻¹') -angstroms_per_square_hour = NamedUnit(7.71604938271605e-18, Dimensions(length=1, time=-2), name='angstroms_per_square_hour', ascii_symbol='Ang/h^2', symbol='Åh⁻²') -angstroms_per_day = NamedUnit(1.1574074074074075e-15, Dimensions(length=1, time=-1), name='angstroms_per_day', ascii_symbol='Ang/d', symbol='Åd⁻¹') -angstroms_per_square_day = NamedUnit(1.3395919067215364e-20, Dimensions(length=1, time=-2), name='angstroms_per_square_day', ascii_symbol='Ang/d^2', symbol='Åd⁻²') -angstroms_per_year = NamedUnit(3.168873850681143e-18, Dimensions(length=1, time=-1), name='angstroms_per_year', ascii_symbol='Ang/y', symbol='Åy⁻¹') -angstroms_per_square_year = NamedUnit(1.0041761481530736e-25, Dimensions(length=1, time=-2), name='angstroms_per_square_year', ascii_symbol='Ang/y^2', symbol='Åy⁻²') -microns_per_second = NamedUnit(1e-06, Dimensions(length=1, time=-1), name='microns_per_second', ascii_symbol='micron/s', symbol='microns⁻¹') -microns_per_square_second = NamedUnit(1e-06, Dimensions(length=1, time=-2), name='microns_per_square_second', ascii_symbol='micron/s^2', symbol='microns⁻²') -microns_per_millisecond = NamedUnit(0.001, Dimensions(length=1, time=-1), name='microns_per_millisecond', ascii_symbol='micron/ms', symbol='micronms⁻¹') -microns_per_square_millisecond = NamedUnit(1.0, Dimensions(length=1, time=-2), name='microns_per_square_millisecond', ascii_symbol='micron/ms^2', symbol='micronms⁻²') -microns_per_microsecond = NamedUnit(1.0, Dimensions(length=1, time=-1), name='microns_per_microsecond', ascii_symbol='micron/us', symbol='micronµs⁻¹') -microns_per_square_microsecond = NamedUnit(1000000.0, Dimensions(length=1, time=-2), name='microns_per_square_microsecond', ascii_symbol='micron/us^2', symbol='micronµs⁻²') -microns_per_nanosecond = NamedUnit(999.9999999999999, Dimensions(length=1, time=-1), name='microns_per_nanosecond', ascii_symbol='micron/ns', symbol='micronns⁻¹') -microns_per_square_nanosecond = NamedUnit(999999999999.9999, Dimensions(length=1, time=-2), name='microns_per_square_nanosecond', ascii_symbol='micron/ns^2', symbol='micronns⁻²') -microns_per_picosecond = NamedUnit(1000000.0, Dimensions(length=1, time=-1), name='microns_per_picosecond', ascii_symbol='micron/ps', symbol='micronps⁻¹') -microns_per_square_picosecond = NamedUnit(1e+18, Dimensions(length=1, time=-2), name='microns_per_square_picosecond', ascii_symbol='micron/ps^2', symbol='micronps⁻²') -microns_per_femtosecond = NamedUnit(999999999.9999999, Dimensions(length=1, time=-1), name='microns_per_femtosecond', ascii_symbol='micron/fs', symbol='micronfs⁻¹') -microns_per_square_femtosecond = NamedUnit(9.999999999999998e+23, Dimensions(length=1, time=-2), name='microns_per_square_femtosecond', ascii_symbol='micron/fs^2', symbol='micronfs⁻²') -microns_per_attosecond = NamedUnit(999999999999.9999, Dimensions(length=1, time=-1), name='microns_per_attosecond', ascii_symbol='micron/as', symbol='micronas⁻¹') -microns_per_square_attosecond = NamedUnit(9.999999999999999e+29, Dimensions(length=1, time=-2), name='microns_per_square_attosecond', ascii_symbol='micron/as^2', symbol='micronas⁻²') -microns_per_minute = NamedUnit(1.6666666666666667e-08, Dimensions(length=1, time=-1), name='microns_per_minute', ascii_symbol='micron/min', symbol='micronmin⁻¹') -microns_per_square_minute = NamedUnit(2.7777777777777777e-10, Dimensions(length=1, time=-2), name='microns_per_square_minute', ascii_symbol='micron/min^2', symbol='micronmin⁻²') -microns_per_hour = NamedUnit(2.7777777777777777e-10, Dimensions(length=1, time=-1), name='microns_per_hour', ascii_symbol='micron/h', symbol='micronh⁻¹') -microns_per_square_hour = NamedUnit(7.71604938271605e-14, Dimensions(length=1, time=-2), name='microns_per_square_hour', ascii_symbol='micron/h^2', symbol='micronh⁻²') -microns_per_day = NamedUnit(1.1574074074074074e-11, Dimensions(length=1, time=-1), name='microns_per_day', ascii_symbol='micron/d', symbol='micrond⁻¹') -microns_per_square_day = NamedUnit(1.3395919067215363e-16, Dimensions(length=1, time=-2), name='microns_per_square_day', ascii_symbol='micron/d^2', symbol='micrond⁻²') -microns_per_year = NamedUnit(3.168873850681143e-14, Dimensions(length=1, time=-1), name='microns_per_year', ascii_symbol='micron/y', symbol='microny⁻¹') -microns_per_square_year = NamedUnit(1.0041761481530736e-21, Dimensions(length=1, time=-2), name='microns_per_square_year', ascii_symbol='micron/y^2', symbol='microny⁻²') -miles_per_second = NamedUnit(1609.344, Dimensions(length=1, time=-1), name='miles_per_second', ascii_symbol='miles/s', symbol='miless⁻¹') -miles_per_square_second = NamedUnit(1609.344, Dimensions(length=1, time=-2), name='miles_per_square_second', ascii_symbol='miles/s^2', symbol='miless⁻²') -miles_per_millisecond = NamedUnit(1609344.0, Dimensions(length=1, time=-1), name='miles_per_millisecond', ascii_symbol='miles/ms', symbol='milesms⁻¹') -miles_per_square_millisecond = NamedUnit(1609344000.0000002, Dimensions(length=1, time=-2), name='miles_per_square_millisecond', ascii_symbol='miles/ms^2', symbol='milesms⁻²') -miles_per_microsecond = NamedUnit(1609344000.0000002, Dimensions(length=1, time=-1), name='miles_per_microsecond', ascii_symbol='miles/us', symbol='milesµs⁻¹') -miles_per_square_microsecond = NamedUnit(1609344000000000.0, Dimensions(length=1, time=-2), name='miles_per_square_microsecond', ascii_symbol='miles/us^2', symbol='milesµs⁻²') -miles_per_nanosecond = NamedUnit(1609344000000.0, Dimensions(length=1, time=-1), name='miles_per_nanosecond', ascii_symbol='miles/ns', symbol='milesns⁻¹') -miles_per_square_nanosecond = NamedUnit(1.609344e+21, Dimensions(length=1, time=-2), name='miles_per_square_nanosecond', ascii_symbol='miles/ns^2', symbol='milesns⁻²') -miles_per_picosecond = NamedUnit(1609344000000000.0, Dimensions(length=1, time=-1), name='miles_per_picosecond', ascii_symbol='miles/ps', symbol='milesps⁻¹') -miles_per_square_picosecond = NamedUnit(1.609344e+27, Dimensions(length=1, time=-2), name='miles_per_square_picosecond', ascii_symbol='miles/ps^2', symbol='milesps⁻²') -miles_per_femtosecond = NamedUnit(1.609344e+18, Dimensions(length=1, time=-1), name='miles_per_femtosecond', ascii_symbol='miles/fs', symbol='milesfs⁻¹') -miles_per_square_femtosecond = NamedUnit(1.609344e+33, Dimensions(length=1, time=-2), name='miles_per_square_femtosecond', ascii_symbol='miles/fs^2', symbol='milesfs⁻²') -miles_per_attosecond = NamedUnit(1.609344e+21, Dimensions(length=1, time=-1), name='miles_per_attosecond', ascii_symbol='miles/as', symbol='milesas⁻¹') -miles_per_square_attosecond = NamedUnit(1.609344e+39, Dimensions(length=1, time=-2), name='miles_per_square_attosecond', ascii_symbol='miles/as^2', symbol='milesas⁻²') -miles_per_minute = NamedUnit(26.822400000000002, Dimensions(length=1, time=-1), name='miles_per_minute', ascii_symbol='miles/min', symbol='milesmin⁻¹') -miles_per_square_minute = NamedUnit(0.44704, Dimensions(length=1, time=-2), name='miles_per_square_minute', ascii_symbol='miles/min^2', symbol='milesmin⁻²') -miles_per_hour = NamedUnit(0.44704, Dimensions(length=1, time=-1), name='miles_per_hour', ascii_symbol='miles/h', symbol='milesh⁻¹') -miles_per_square_hour = NamedUnit(0.00012417777777777778, Dimensions(length=1, time=-2), name='miles_per_square_hour', ascii_symbol='miles/h^2', symbol='milesh⁻²') -miles_per_day = NamedUnit(0.018626666666666666, Dimensions(length=1, time=-1), name='miles_per_day', ascii_symbol='miles/d', symbol='milesd⁻¹') -miles_per_square_day = NamedUnit(2.1558641975308643e-07, Dimensions(length=1, time=-2), name='miles_per_square_day', ascii_symbol='miles/d^2', symbol='milesd⁻²') -miles_per_year = NamedUnit(5.099808118350594e-05, Dimensions(length=1, time=-1), name='miles_per_year', ascii_symbol='miles/y', symbol='milesy⁻¹') -miles_per_square_year = NamedUnit(1.61606485897326e-12, Dimensions(length=1, time=-2), name='miles_per_square_year', ascii_symbol='miles/y^2', symbol='milesy⁻²') -yards_per_second = NamedUnit(0.9144000000000001, Dimensions(length=1, time=-1), name='yards_per_second', ascii_symbol='yrd/s', symbol='yrds⁻¹') -yards_per_square_second = NamedUnit(0.9144000000000001, Dimensions(length=1, time=-2), name='yards_per_square_second', ascii_symbol='yrd/s^2', symbol='yrds⁻²') -yards_per_millisecond = NamedUnit(914.4000000000001, Dimensions(length=1, time=-1), name='yards_per_millisecond', ascii_symbol='yrd/ms', symbol='yrdms⁻¹') -yards_per_square_millisecond = NamedUnit(914400.0000000001, Dimensions(length=1, time=-2), name='yards_per_square_millisecond', ascii_symbol='yrd/ms^2', symbol='yrdms⁻²') -yards_per_microsecond = NamedUnit(914400.0000000001, Dimensions(length=1, time=-1), name='yards_per_microsecond', ascii_symbol='yrd/us', symbol='yrdµs⁻¹') -yards_per_square_microsecond = NamedUnit(914400000000.0001, Dimensions(length=1, time=-2), name='yards_per_square_microsecond', ascii_symbol='yrd/us^2', symbol='yrdµs⁻²') -yards_per_nanosecond = NamedUnit(914400000.0, Dimensions(length=1, time=-1), name='yards_per_nanosecond', ascii_symbol='yrd/ns', symbol='yrdns⁻¹') -yards_per_square_nanosecond = NamedUnit(9.144e+17, Dimensions(length=1, time=-2), name='yards_per_square_nanosecond', ascii_symbol='yrd/ns^2', symbol='yrdns⁻²') -yards_per_picosecond = NamedUnit(914400000000.0001, Dimensions(length=1, time=-1), name='yards_per_picosecond', ascii_symbol='yrd/ps', symbol='yrdps⁻¹') -yards_per_square_picosecond = NamedUnit(9.144000000000002e+23, Dimensions(length=1, time=-2), name='yards_per_square_picosecond', ascii_symbol='yrd/ps^2', symbol='yrdps⁻²') -yards_per_femtosecond = NamedUnit(914400000000000.0, Dimensions(length=1, time=-1), name='yards_per_femtosecond', ascii_symbol='yrd/fs', symbol='yrdfs⁻¹') -yards_per_square_femtosecond = NamedUnit(9.144e+29, Dimensions(length=1, time=-2), name='yards_per_square_femtosecond', ascii_symbol='yrd/fs^2', symbol='yrdfs⁻²') -yards_per_attosecond = NamedUnit(9.144e+17, Dimensions(length=1, time=-1), name='yards_per_attosecond', ascii_symbol='yrd/as', symbol='yrdas⁻¹') -yards_per_square_attosecond = NamedUnit(9.144e+35, Dimensions(length=1, time=-2), name='yards_per_square_attosecond', ascii_symbol='yrd/as^2', symbol='yrdas⁻²') -yards_per_minute = NamedUnit(0.015240000000000002, Dimensions(length=1, time=-1), name='yards_per_minute', ascii_symbol='yrd/min', symbol='yrdmin⁻¹') -yards_per_square_minute = NamedUnit(0.00025400000000000005, Dimensions(length=1, time=-2), name='yards_per_square_minute', ascii_symbol='yrd/min^2', symbol='yrdmin⁻²') -yards_per_hour = NamedUnit(0.00025400000000000005, Dimensions(length=1, time=-1), name='yards_per_hour', ascii_symbol='yrd/h', symbol='yrdh⁻¹') -yards_per_square_hour = NamedUnit(7.055555555555557e-08, Dimensions(length=1, time=-2), name='yards_per_square_hour', ascii_symbol='yrd/h^2', symbol='yrdh⁻²') -yards_per_day = NamedUnit(1.0583333333333334e-05, Dimensions(length=1, time=-1), name='yards_per_day', ascii_symbol='yrd/d', symbol='yrdd⁻¹') -yards_per_square_day = NamedUnit(1.224922839506173e-10, Dimensions(length=1, time=-2), name='yards_per_square_day', ascii_symbol='yrd/d^2', symbol='yrdd⁻²') -yards_per_year = NamedUnit(2.8976182490628376e-08, Dimensions(length=1, time=-1), name='yards_per_year', ascii_symbol='yrd/y', symbol='yrdy⁻¹') -yards_per_square_year = NamedUnit(9.182186698711705e-16, Dimensions(length=1, time=-2), name='yards_per_square_year', ascii_symbol='yrd/y^2', symbol='yrdy⁻²') -feet_per_second = NamedUnit(0.3048, Dimensions(length=1, time=-1), name='feet_per_second', ascii_symbol='ft/s', symbol='fts⁻¹') -feet_per_square_second = NamedUnit(0.3048, Dimensions(length=1, time=-2), name='feet_per_square_second', ascii_symbol='ft/s^2', symbol='fts⁻²') -feet_per_millisecond = NamedUnit(304.8, Dimensions(length=1, time=-1), name='feet_per_millisecond', ascii_symbol='ft/ms', symbol='ftms⁻¹') -feet_per_square_millisecond = NamedUnit(304800.00000000006, Dimensions(length=1, time=-2), name='feet_per_square_millisecond', ascii_symbol='ft/ms^2', symbol='ftms⁻²') -feet_per_microsecond = NamedUnit(304800.00000000006, Dimensions(length=1, time=-1), name='feet_per_microsecond', ascii_symbol='ft/us', symbol='ftµs⁻¹') -feet_per_square_microsecond = NamedUnit(304800000000.0, Dimensions(length=1, time=-2), name='feet_per_square_microsecond', ascii_symbol='ft/us^2', symbol='ftµs⁻²') -feet_per_nanosecond = NamedUnit(304800000.0, Dimensions(length=1, time=-1), name='feet_per_nanosecond', ascii_symbol='ft/ns', symbol='ftns⁻¹') -feet_per_square_nanosecond = NamedUnit(3.048e+17, Dimensions(length=1, time=-2), name='feet_per_square_nanosecond', ascii_symbol='ft/ns^2', symbol='ftns⁻²') -feet_per_picosecond = NamedUnit(304800000000.0, Dimensions(length=1, time=-1), name='feet_per_picosecond', ascii_symbol='ft/ps', symbol='ftps⁻¹') -feet_per_square_picosecond = NamedUnit(3.048e+23, Dimensions(length=1, time=-2), name='feet_per_square_picosecond', ascii_symbol='ft/ps^2', symbol='ftps⁻²') -feet_per_femtosecond = NamedUnit(304800000000000.0, Dimensions(length=1, time=-1), name='feet_per_femtosecond', ascii_symbol='ft/fs', symbol='ftfs⁻¹') -feet_per_square_femtosecond = NamedUnit(3.048e+29, Dimensions(length=1, time=-2), name='feet_per_square_femtosecond', ascii_symbol='ft/fs^2', symbol='ftfs⁻²') -feet_per_attosecond = NamedUnit(3.048e+17, Dimensions(length=1, time=-1), name='feet_per_attosecond', ascii_symbol='ft/as', symbol='ftas⁻¹') -feet_per_square_attosecond = NamedUnit(3.0479999999999997e+35, Dimensions(length=1, time=-2), name='feet_per_square_attosecond', ascii_symbol='ft/as^2', symbol='ftas⁻²') -feet_per_minute = NamedUnit(0.00508, Dimensions(length=1, time=-1), name='feet_per_minute', ascii_symbol='ft/min', symbol='ftmin⁻¹') -feet_per_square_minute = NamedUnit(8.466666666666667e-05, Dimensions(length=1, time=-2), name='feet_per_square_minute', ascii_symbol='ft/min^2', symbol='ftmin⁻²') -feet_per_hour = NamedUnit(8.466666666666667e-05, Dimensions(length=1, time=-1), name='feet_per_hour', ascii_symbol='ft/h', symbol='fth⁻¹') -feet_per_square_hour = NamedUnit(2.351851851851852e-08, Dimensions(length=1, time=-2), name='feet_per_square_hour', ascii_symbol='ft/h^2', symbol='fth⁻²') -feet_per_day = NamedUnit(3.527777777777778e-06, Dimensions(length=1, time=-1), name='feet_per_day', ascii_symbol='ft/d', symbol='ftd⁻¹') -feet_per_square_day = NamedUnit(4.083076131687243e-11, Dimensions(length=1, time=-2), name='feet_per_square_day', ascii_symbol='ft/d^2', symbol='ftd⁻²') -feet_per_year = NamedUnit(9.658727496876124e-09, Dimensions(length=1, time=-1), name='feet_per_year', ascii_symbol='ft/y', symbol='fty⁻¹') -feet_per_square_year = NamedUnit(3.060728899570568e-16, Dimensions(length=1, time=-2), name='feet_per_square_year', ascii_symbol='ft/y^2', symbol='fty⁻²') -inches_per_second = NamedUnit(0.0254, Dimensions(length=1, time=-1), name='inches_per_second', ascii_symbol='in/s', symbol='ins⁻¹') -inches_per_square_second = NamedUnit(0.0254, Dimensions(length=1, time=-2), name='inches_per_square_second', ascii_symbol='in/s^2', symbol='ins⁻²') -inches_per_millisecond = NamedUnit(25.4, Dimensions(length=1, time=-1), name='inches_per_millisecond', ascii_symbol='in/ms', symbol='inms⁻¹') -inches_per_square_millisecond = NamedUnit(25400.0, Dimensions(length=1, time=-2), name='inches_per_square_millisecond', ascii_symbol='in/ms^2', symbol='inms⁻²') -inches_per_microsecond = NamedUnit(25400.0, Dimensions(length=1, time=-1), name='inches_per_microsecond', ascii_symbol='in/us', symbol='inµs⁻¹') -inches_per_square_microsecond = NamedUnit(25400000000.0, Dimensions(length=1, time=-2), name='inches_per_square_microsecond', ascii_symbol='in/us^2', symbol='inµs⁻²') -inches_per_nanosecond = NamedUnit(25399999.999999996, Dimensions(length=1, time=-1), name='inches_per_nanosecond', ascii_symbol='in/ns', symbol='inns⁻¹') -inches_per_square_nanosecond = NamedUnit(2.5399999999999996e+16, Dimensions(length=1, time=-2), name='inches_per_square_nanosecond', ascii_symbol='in/ns^2', symbol='inns⁻²') -inches_per_picosecond = NamedUnit(25400000000.0, Dimensions(length=1, time=-1), name='inches_per_picosecond', ascii_symbol='in/ps', symbol='inps⁻¹') -inches_per_square_picosecond = NamedUnit(2.54e+22, Dimensions(length=1, time=-2), name='inches_per_square_picosecond', ascii_symbol='in/ps^2', symbol='inps⁻²') -inches_per_femtosecond = NamedUnit(25399999999999.996, Dimensions(length=1, time=-1), name='inches_per_femtosecond', ascii_symbol='in/fs', symbol='infs⁻¹') -inches_per_square_femtosecond = NamedUnit(2.54e+28, Dimensions(length=1, time=-2), name='inches_per_square_femtosecond', ascii_symbol='in/fs^2', symbol='infs⁻²') -inches_per_attosecond = NamedUnit(2.5399999999999996e+16, Dimensions(length=1, time=-1), name='inches_per_attosecond', ascii_symbol='in/as', symbol='inas⁻¹') -inches_per_square_attosecond = NamedUnit(2.5399999999999998e+34, Dimensions(length=1, time=-2), name='inches_per_square_attosecond', ascii_symbol='in/as^2', symbol='inas⁻²') -inches_per_minute = NamedUnit(0.00042333333333333334, Dimensions(length=1, time=-1), name='inches_per_minute', ascii_symbol='in/min', symbol='inmin⁻¹') -inches_per_square_minute = NamedUnit(7.055555555555555e-06, Dimensions(length=1, time=-2), name='inches_per_square_minute', ascii_symbol='in/min^2', symbol='inmin⁻²') -inches_per_hour = NamedUnit(7.055555555555555e-06, Dimensions(length=1, time=-1), name='inches_per_hour', ascii_symbol='in/h', symbol='inh⁻¹') -inches_per_square_hour = NamedUnit(1.9598765432098764e-09, Dimensions(length=1, time=-2), name='inches_per_square_hour', ascii_symbol='in/h^2', symbol='inh⁻²') -inches_per_day = NamedUnit(2.939814814814815e-07, Dimensions(length=1, time=-1), name='inches_per_day', ascii_symbol='in/d', symbol='ind⁻¹') -inches_per_square_day = NamedUnit(3.402563443072702e-12, Dimensions(length=1, time=-2), name='inches_per_square_day', ascii_symbol='in/d^2', symbol='ind⁻²') -inches_per_year = NamedUnit(8.048939580730103e-10, Dimensions(length=1, time=-1), name='inches_per_year', ascii_symbol='in/y', symbol='iny⁻¹') -inches_per_square_year = NamedUnit(2.550607416308807e-17, Dimensions(length=1, time=-2), name='inches_per_square_year', ascii_symbol='in/y^2', symbol='iny⁻²') -grams_per_cubic_meter = NamedUnit(0.001, Dimensions(length=-3, mass=1), name='grams_per_cubic_meter', ascii_symbol='g m^-3', symbol='gm⁻³') -exagrams_per_cubic_meter = NamedUnit(1000000000000000.0, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_meter', ascii_symbol='Eg m^-3', symbol='Egm⁻³') -petagrams_per_cubic_meter = NamedUnit(1000000000000.0, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_meter', ascii_symbol='Pg m^-3', symbol='Pgm⁻³') -teragrams_per_cubic_meter = NamedUnit(1000000000.0, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_meter', ascii_symbol='Tg m^-3', symbol='Tgm⁻³') -gigagrams_per_cubic_meter = NamedUnit(1000000.0, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_meter', ascii_symbol='Gg m^-3', symbol='Ggm⁻³') -megagrams_per_cubic_meter = NamedUnit(1000.0, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_meter', ascii_symbol='Mg m^-3', symbol='Mgm⁻³') -kilograms_per_cubic_meter = NamedUnit(1.0, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_meter', ascii_symbol='kg m^-3', symbol='kgm⁻³') -milligrams_per_cubic_meter = NamedUnit(1e-06, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_meter', ascii_symbol='mg m^-3', symbol='mgm⁻³') -micrograms_per_cubic_meter = NamedUnit(1e-09, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_meter', ascii_symbol='ug m^-3', symbol='µgm⁻³') -nanograms_per_cubic_meter = NamedUnit(1.0000000000000002e-12, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_meter', ascii_symbol='ng m^-3', symbol='ngm⁻³') -picograms_per_cubic_meter = NamedUnit(1e-15, Dimensions(length=-3, mass=1), name='picograms_per_cubic_meter', ascii_symbol='pg m^-3', symbol='pgm⁻³') -femtograms_per_cubic_meter = NamedUnit(1e-18, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_meter', ascii_symbol='fg m^-3', symbol='fgm⁻³') -attograms_per_cubic_meter = NamedUnit(1.0000000000000001e-21, Dimensions(length=-3, mass=1), name='attograms_per_cubic_meter', ascii_symbol='ag m^-3', symbol='agm⁻³') -atomic_mass_units_per_cubic_meter = NamedUnit(1.660538921e-27, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_meter', ascii_symbol='au m^-3', symbol='aum⁻³') -pounds_per_cubic_meter = NamedUnit(0.45359237, Dimensions(length=-3, mass=1), name='pounds_per_cubic_meter', ascii_symbol='lb m^-3', symbol='lbm⁻³') -ounces_per_cubic_meter = NamedUnit(0.028349523125, Dimensions(length=-3, mass=1), name='ounces_per_cubic_meter', ascii_symbol='oz m^-3', symbol='ozm⁻³') -grams_per_cubic_exameter = NamedUnit(1e-57, Dimensions(length=-3, mass=1), name='grams_per_cubic_exameter', ascii_symbol='g Em^-3', symbol='gEm⁻³') -exagrams_per_cubic_exameter = NamedUnit(1e-39, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_exameter', ascii_symbol='Eg Em^-3', symbol='EgEm⁻³') -petagrams_per_cubic_exameter = NamedUnit(9.999999999999999e-43, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_exameter', ascii_symbol='Pg Em^-3', symbol='PgEm⁻³') -teragrams_per_cubic_exameter = NamedUnit(1e-45, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_exameter', ascii_symbol='Tg Em^-3', symbol='TgEm⁻³') -gigagrams_per_cubic_exameter = NamedUnit(1e-48, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_exameter', ascii_symbol='Gg Em^-3', symbol='GgEm⁻³') -megagrams_per_cubic_exameter = NamedUnit(9.999999999999999e-52, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_exameter', ascii_symbol='Mg Em^-3', symbol='MgEm⁻³') -kilograms_per_cubic_exameter = NamedUnit(9.999999999999999e-55, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_exameter', ascii_symbol='kg Em^-3', symbol='kgEm⁻³') -milligrams_per_cubic_exameter = NamedUnit(9.999999999999998e-61, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_exameter', ascii_symbol='mg Em^-3', symbol='mgEm⁻³') -micrograms_per_cubic_exameter = NamedUnit(9.999999999999999e-64, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_exameter', ascii_symbol='ug Em^-3', symbol='µgEm⁻³') -nanograms_per_cubic_exameter = NamedUnit(1.0000000000000001e-66, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_exameter', ascii_symbol='ng Em^-3', symbol='ngEm⁻³') -picograms_per_cubic_exameter = NamedUnit(1e-69, Dimensions(length=-3, mass=1), name='picograms_per_cubic_exameter', ascii_symbol='pg Em^-3', symbol='pgEm⁻³') -femtograms_per_cubic_exameter = NamedUnit(1e-72, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_exameter', ascii_symbol='fg Em^-3', symbol='fgEm⁻³') -attograms_per_cubic_exameter = NamedUnit(1e-75, Dimensions(length=-3, mass=1), name='attograms_per_cubic_exameter', ascii_symbol='ag Em^-3', symbol='agEm⁻³') -atomic_mass_units_per_cubic_exameter = NamedUnit(1.6605389209999996e-81, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_exameter', ascii_symbol='au Em^-3', symbol='auEm⁻³') -pounds_per_cubic_exameter = NamedUnit(4.5359237e-55, Dimensions(length=-3, mass=1), name='pounds_per_cubic_exameter', ascii_symbol='lb Em^-3', symbol='lbEm⁻³') -ounces_per_cubic_exameter = NamedUnit(2.8349523125e-56, Dimensions(length=-3, mass=1), name='ounces_per_cubic_exameter', ascii_symbol='oz Em^-3', symbol='ozEm⁻³') -grams_per_cubic_petameter = NamedUnit(1.0000000000000001e-48, Dimensions(length=-3, mass=1), name='grams_per_cubic_petameter', ascii_symbol='g Pm^-3', symbol='gPm⁻³') -exagrams_per_cubic_petameter = NamedUnit(1e-30, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_petameter', ascii_symbol='Eg Pm^-3', symbol='EgPm⁻³') -petagrams_per_cubic_petameter = NamedUnit(1e-33, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_petameter', ascii_symbol='Pg Pm^-3', symbol='PgPm⁻³') -teragrams_per_cubic_petameter = NamedUnit(1.0000000000000001e-36, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_petameter', ascii_symbol='Tg Pm^-3', symbol='TgPm⁻³') -gigagrams_per_cubic_petameter = NamedUnit(1.0000000000000001e-39, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_petameter', ascii_symbol='Gg Pm^-3', symbol='GgPm⁻³') -megagrams_per_cubic_petameter = NamedUnit(1e-42, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_petameter', ascii_symbol='Mg Pm^-3', symbol='MgPm⁻³') -kilograms_per_cubic_petameter = NamedUnit(1.0000000000000001e-45, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_petameter', ascii_symbol='kg Pm^-3', symbol='kgPm⁻³') -milligrams_per_cubic_petameter = NamedUnit(1e-51, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_petameter', ascii_symbol='mg Pm^-3', symbol='mgPm⁻³') -micrograms_per_cubic_petameter = NamedUnit(1.0000000000000002e-54, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_petameter', ascii_symbol='ug Pm^-3', symbol='µgPm⁻³') -nanograms_per_cubic_petameter = NamedUnit(1.0000000000000002e-57, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_petameter', ascii_symbol='ng Pm^-3', symbol='ngPm⁻³') -picograms_per_cubic_petameter = NamedUnit(1.0000000000000001e-60, Dimensions(length=-3, mass=1), name='picograms_per_cubic_petameter', ascii_symbol='pg Pm^-3', symbol='pgPm⁻³') -femtograms_per_cubic_petameter = NamedUnit(1.0000000000000002e-63, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_petameter', ascii_symbol='fg Pm^-3', symbol='fgPm⁻³') -attograms_per_cubic_petameter = NamedUnit(1.0000000000000001e-66, Dimensions(length=-3, mass=1), name='attograms_per_cubic_petameter', ascii_symbol='ag Pm^-3', symbol='agPm⁻³') -atomic_mass_units_per_cubic_petameter = NamedUnit(1.660538921e-72, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_petameter', ascii_symbol='au Pm^-3', symbol='auPm⁻³') -pounds_per_cubic_petameter = NamedUnit(4.5359237000000005e-46, Dimensions(length=-3, mass=1), name='pounds_per_cubic_petameter', ascii_symbol='lb Pm^-3', symbol='lbPm⁻³') -ounces_per_cubic_petameter = NamedUnit(2.8349523125000003e-47, Dimensions(length=-3, mass=1), name='ounces_per_cubic_petameter', ascii_symbol='oz Pm^-3', symbol='ozPm⁻³') -grams_per_cubic_terameter = NamedUnit(1e-39, Dimensions(length=-3, mass=1), name='grams_per_cubic_terameter', ascii_symbol='g Tm^-3', symbol='gTm⁻³') -exagrams_per_cubic_terameter = NamedUnit(1e-21, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_terameter', ascii_symbol='Eg Tm^-3', symbol='EgTm⁻³') -petagrams_per_cubic_terameter = NamedUnit(1e-24, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_terameter', ascii_symbol='Pg Tm^-3', symbol='PgTm⁻³') -teragrams_per_cubic_terameter = NamedUnit(1e-27, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_terameter', ascii_symbol='Tg Tm^-3', symbol='TgTm⁻³') -gigagrams_per_cubic_terameter = NamedUnit(9.999999999999999e-31, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_terameter', ascii_symbol='Gg Tm^-3', symbol='GgTm⁻³') -megagrams_per_cubic_terameter = NamedUnit(9.999999999999999e-34, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_terameter', ascii_symbol='Mg Tm^-3', symbol='MgTm⁻³') -kilograms_per_cubic_terameter = NamedUnit(1e-36, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_terameter', ascii_symbol='kg Tm^-3', symbol='kgTm⁻³') -milligrams_per_cubic_terameter = NamedUnit(9.999999999999999e-43, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_terameter', ascii_symbol='mg Tm^-3', symbol='mgTm⁻³') -micrograms_per_cubic_terameter = NamedUnit(1e-45, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_terameter', ascii_symbol='ug Tm^-3', symbol='µgTm⁻³') -nanograms_per_cubic_terameter = NamedUnit(1.0000000000000001e-48, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_terameter', ascii_symbol='ng Tm^-3', symbol='ngTm⁻³') -picograms_per_cubic_terameter = NamedUnit(1e-51, Dimensions(length=-3, mass=1), name='picograms_per_cubic_terameter', ascii_symbol='pg Tm^-3', symbol='pgTm⁻³') -femtograms_per_cubic_terameter = NamedUnit(1e-54, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_terameter', ascii_symbol='fg Tm^-3', symbol='fgTm⁻³') -attograms_per_cubic_terameter = NamedUnit(1.0000000000000001e-57, Dimensions(length=-3, mass=1), name='attograms_per_cubic_terameter', ascii_symbol='ag Tm^-3', symbol='agTm⁻³') -atomic_mass_units_per_cubic_terameter = NamedUnit(1.6605389209999997e-63, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_terameter', ascii_symbol='au Tm^-3', symbol='auTm⁻³') -pounds_per_cubic_terameter = NamedUnit(4.5359237e-37, Dimensions(length=-3, mass=1), name='pounds_per_cubic_terameter', ascii_symbol='lb Tm^-3', symbol='lbTm⁻³') -ounces_per_cubic_terameter = NamedUnit(2.8349523125e-38, Dimensions(length=-3, mass=1), name='ounces_per_cubic_terameter', ascii_symbol='oz Tm^-3', symbol='ozTm⁻³') -grams_per_cubic_gigameter = NamedUnit(1e-30, Dimensions(length=-3, mass=1), name='grams_per_cubic_gigameter', ascii_symbol='g Gm^-3', symbol='gGm⁻³') -exagrams_per_cubic_gigameter = NamedUnit(1e-12, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_gigameter', ascii_symbol='Eg Gm^-3', symbol='EgGm⁻³') -petagrams_per_cubic_gigameter = NamedUnit(1e-15, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_gigameter', ascii_symbol='Pg Gm^-3', symbol='PgGm⁻³') -teragrams_per_cubic_gigameter = NamedUnit(1e-18, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_gigameter', ascii_symbol='Tg Gm^-3', symbol='TgGm⁻³') -gigagrams_per_cubic_gigameter = NamedUnit(1e-21, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_gigameter', ascii_symbol='Gg Gm^-3', symbol='GgGm⁻³') -megagrams_per_cubic_gigameter = NamedUnit(1e-24, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_gigameter', ascii_symbol='Mg Gm^-3', symbol='MgGm⁻³') -kilograms_per_cubic_gigameter = NamedUnit(1e-27, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_gigameter', ascii_symbol='kg Gm^-3', symbol='kgGm⁻³') -milligrams_per_cubic_gigameter = NamedUnit(9.999999999999999e-34, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_gigameter', ascii_symbol='mg Gm^-3', symbol='mgGm⁻³') -micrograms_per_cubic_gigameter = NamedUnit(1.0000000000000001e-36, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_gigameter', ascii_symbol='ug Gm^-3', symbol='µgGm⁻³') -nanograms_per_cubic_gigameter = NamedUnit(1.0000000000000001e-39, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_gigameter', ascii_symbol='ng Gm^-3', symbol='ngGm⁻³') -picograms_per_cubic_gigameter = NamedUnit(1e-42, Dimensions(length=-3, mass=1), name='picograms_per_cubic_gigameter', ascii_symbol='pg Gm^-3', symbol='pgGm⁻³') -femtograms_per_cubic_gigameter = NamedUnit(1e-45, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_gigameter', ascii_symbol='fg Gm^-3', symbol='fgGm⁻³') -attograms_per_cubic_gigameter = NamedUnit(1.0000000000000001e-48, Dimensions(length=-3, mass=1), name='attograms_per_cubic_gigameter', ascii_symbol='ag Gm^-3', symbol='agGm⁻³') -atomic_mass_units_per_cubic_gigameter = NamedUnit(1.660538921e-54, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_gigameter', ascii_symbol='au Gm^-3', symbol='auGm⁻³') -pounds_per_cubic_gigameter = NamedUnit(4.5359237e-28, Dimensions(length=-3, mass=1), name='pounds_per_cubic_gigameter', ascii_symbol='lb Gm^-3', symbol='lbGm⁻³') -ounces_per_cubic_gigameter = NamedUnit(2.8349523125e-29, Dimensions(length=-3, mass=1), name='ounces_per_cubic_gigameter', ascii_symbol='oz Gm^-3', symbol='ozGm⁻³') -grams_per_cubic_megameter = NamedUnit(1.0000000000000001e-21, Dimensions(length=-3, mass=1), name='grams_per_cubic_megameter', ascii_symbol='g Mm^-3', symbol='gMm⁻³') -exagrams_per_cubic_megameter = NamedUnit(0.001, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_megameter', ascii_symbol='Eg Mm^-3', symbol='EgMm⁻³') -petagrams_per_cubic_megameter = NamedUnit(1e-06, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_megameter', ascii_symbol='Pg Mm^-3', symbol='PgMm⁻³') -teragrams_per_cubic_megameter = NamedUnit(1e-09, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_megameter', ascii_symbol='Tg Mm^-3', symbol='TgMm⁻³') -gigagrams_per_cubic_megameter = NamedUnit(1e-12, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_megameter', ascii_symbol='Gg Mm^-3', symbol='GgMm⁻³') -megagrams_per_cubic_megameter = NamedUnit(1e-15, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_megameter', ascii_symbol='Mg Mm^-3', symbol='MgMm⁻³') -kilograms_per_cubic_megameter = NamedUnit(1e-18, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_megameter', ascii_symbol='kg Mm^-3', symbol='kgMm⁻³') -milligrams_per_cubic_megameter = NamedUnit(1e-24, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_megameter', ascii_symbol='mg Mm^-3', symbol='mgMm⁻³') -micrograms_per_cubic_megameter = NamedUnit(1e-27, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_megameter', ascii_symbol='ug Mm^-3', symbol='µgMm⁻³') -nanograms_per_cubic_megameter = NamedUnit(1.0000000000000003e-30, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_megameter', ascii_symbol='ng Mm^-3', symbol='ngMm⁻³') -picograms_per_cubic_megameter = NamedUnit(1e-33, Dimensions(length=-3, mass=1), name='picograms_per_cubic_megameter', ascii_symbol='pg Mm^-3', symbol='pgMm⁻³') -femtograms_per_cubic_megameter = NamedUnit(1.0000000000000001e-36, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_megameter', ascii_symbol='fg Mm^-3', symbol='fgMm⁻³') -attograms_per_cubic_megameter = NamedUnit(1.0000000000000001e-39, Dimensions(length=-3, mass=1), name='attograms_per_cubic_megameter', ascii_symbol='ag Mm^-3', symbol='agMm⁻³') -atomic_mass_units_per_cubic_megameter = NamedUnit(1.6605389209999997e-45, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_megameter', ascii_symbol='au Mm^-3', symbol='auMm⁻³') -pounds_per_cubic_megameter = NamedUnit(4.535923700000001e-19, Dimensions(length=-3, mass=1), name='pounds_per_cubic_megameter', ascii_symbol='lb Mm^-3', symbol='lbMm⁻³') -ounces_per_cubic_megameter = NamedUnit(2.8349523125000004e-20, Dimensions(length=-3, mass=1), name='ounces_per_cubic_megameter', ascii_symbol='oz Mm^-3', symbol='ozMm⁻³') -grams_per_cubic_kilometer = NamedUnit(1e-12, Dimensions(length=-3, mass=1), name='grams_per_cubic_kilometer', ascii_symbol='g km^-3', symbol='gkm⁻³') -exagrams_per_cubic_kilometer = NamedUnit(1000000.0, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_kilometer', ascii_symbol='Eg km^-3', symbol='Egkm⁻³') -petagrams_per_cubic_kilometer = NamedUnit(1000.0, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_kilometer', ascii_symbol='Pg km^-3', symbol='Pgkm⁻³') -teragrams_per_cubic_kilometer = NamedUnit(1.0, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_kilometer', ascii_symbol='Tg km^-3', symbol='Tgkm⁻³') -gigagrams_per_cubic_kilometer = NamedUnit(0.001, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_kilometer', ascii_symbol='Gg km^-3', symbol='Ggkm⁻³') -megagrams_per_cubic_kilometer = NamedUnit(1e-06, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_kilometer', ascii_symbol='Mg km^-3', symbol='Mgkm⁻³') -kilograms_per_cubic_kilometer = NamedUnit(1e-09, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_kilometer', ascii_symbol='kg km^-3', symbol='kgkm⁻³') -milligrams_per_cubic_kilometer = NamedUnit(9.999999999999999e-16, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_kilometer', ascii_symbol='mg km^-3', symbol='mgkm⁻³') -micrograms_per_cubic_kilometer = NamedUnit(1e-18, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_kilometer', ascii_symbol='ug km^-3', symbol='µgkm⁻³') -nanograms_per_cubic_kilometer = NamedUnit(1.0000000000000001e-21, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_kilometer', ascii_symbol='ng km^-3', symbol='ngkm⁻³') -picograms_per_cubic_kilometer = NamedUnit(1.0000000000000001e-24, Dimensions(length=-3, mass=1), name='picograms_per_cubic_kilometer', ascii_symbol='pg km^-3', symbol='pgkm⁻³') -femtograms_per_cubic_kilometer = NamedUnit(1e-27, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_kilometer', ascii_symbol='fg km^-3', symbol='fgkm⁻³') -attograms_per_cubic_kilometer = NamedUnit(1e-30, Dimensions(length=-3, mass=1), name='attograms_per_cubic_kilometer', ascii_symbol='ag km^-3', symbol='agkm⁻³') -atomic_mass_units_per_cubic_kilometer = NamedUnit(1.6605389209999997e-36, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_kilometer', ascii_symbol='au km^-3', symbol='aukm⁻³') -pounds_per_cubic_kilometer = NamedUnit(4.5359237000000004e-10, Dimensions(length=-3, mass=1), name='pounds_per_cubic_kilometer', ascii_symbol='lb km^-3', symbol='lbkm⁻³') -ounces_per_cubic_kilometer = NamedUnit(2.8349523125000003e-11, Dimensions(length=-3, mass=1), name='ounces_per_cubic_kilometer', ascii_symbol='oz km^-3', symbol='ozkm⁻³') -grams_per_cubic_millimeter = NamedUnit(1000000.0, Dimensions(length=-3, mass=1), name='grams_per_cubic_millimeter', ascii_symbol='g mm^-3', symbol='gmm⁻³') -exagrams_per_cubic_millimeter = NamedUnit(1e+24, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_millimeter', ascii_symbol='Eg mm^-3', symbol='Egmm⁻³') -petagrams_per_cubic_millimeter = NamedUnit(1e+21, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_millimeter', ascii_symbol='Pg mm^-3', symbol='Pgmm⁻³') -teragrams_per_cubic_millimeter = NamedUnit(1e+18, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_millimeter', ascii_symbol='Tg mm^-3', symbol='Tgmm⁻³') -gigagrams_per_cubic_millimeter = NamedUnit(1000000000000000.0, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_millimeter', ascii_symbol='Gg mm^-3', symbol='Ggmm⁻³') -megagrams_per_cubic_millimeter = NamedUnit(999999999999.9999, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_millimeter', ascii_symbol='Mg mm^-3', symbol='Mgmm⁻³') -kilograms_per_cubic_millimeter = NamedUnit(999999999.9999999, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_millimeter', ascii_symbol='kg mm^-3', symbol='kgmm⁻³') -milligrams_per_cubic_millimeter = NamedUnit(999.9999999999999, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_millimeter', ascii_symbol='mg mm^-3', symbol='mgmm⁻³') -micrograms_per_cubic_millimeter = NamedUnit(1.0, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_millimeter', ascii_symbol='ug mm^-3', symbol='µgmm⁻³') -nanograms_per_cubic_millimeter = NamedUnit(0.001, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_millimeter', ascii_symbol='ng mm^-3', symbol='ngmm⁻³') -picograms_per_cubic_millimeter = NamedUnit(1e-06, Dimensions(length=-3, mass=1), name='picograms_per_cubic_millimeter', ascii_symbol='pg mm^-3', symbol='pgmm⁻³') -femtograms_per_cubic_millimeter = NamedUnit(1e-09, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_millimeter', ascii_symbol='fg mm^-3', symbol='fgmm⁻³') -attograms_per_cubic_millimeter = NamedUnit(1e-12, Dimensions(length=-3, mass=1), name='attograms_per_cubic_millimeter', ascii_symbol='ag mm^-3', symbol='agmm⁻³') -atomic_mass_units_per_cubic_millimeter = NamedUnit(1.6605389209999997e-18, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_millimeter', ascii_symbol='au mm^-3', symbol='aumm⁻³') -pounds_per_cubic_millimeter = NamedUnit(453592370.0, Dimensions(length=-3, mass=1), name='pounds_per_cubic_millimeter', ascii_symbol='lb mm^-3', symbol='lbmm⁻³') -ounces_per_cubic_millimeter = NamedUnit(28349523.125, Dimensions(length=-3, mass=1), name='ounces_per_cubic_millimeter', ascii_symbol='oz mm^-3', symbol='ozmm⁻³') -grams_per_cubic_micrometer = NamedUnit(1000000000000000.1, Dimensions(length=-3, mass=1), name='grams_per_cubic_micrometer', ascii_symbol='g um^-3', symbol='gµm⁻³') -exagrams_per_cubic_micrometer = NamedUnit(1.0000000000000001e+33, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_micrometer', ascii_symbol='Eg um^-3', symbol='Egµm⁻³') -petagrams_per_cubic_micrometer = NamedUnit(1.0000000000000002e+30, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_micrometer', ascii_symbol='Pg um^-3', symbol='Pgµm⁻³') -teragrams_per_cubic_micrometer = NamedUnit(1.0000000000000002e+27, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_micrometer', ascii_symbol='Tg um^-3', symbol='Tgµm⁻³') -gigagrams_per_cubic_micrometer = NamedUnit(1.0000000000000001e+24, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_micrometer', ascii_symbol='Gg um^-3', symbol='Ggµm⁻³') -megagrams_per_cubic_micrometer = NamedUnit(1.0000000000000001e+21, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_micrometer', ascii_symbol='Mg um^-3', symbol='Mgµm⁻³') -kilograms_per_cubic_micrometer = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_micrometer', ascii_symbol='kg um^-3', symbol='kgµm⁻³') -milligrams_per_cubic_micrometer = NamedUnit(1000000000000.0001, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_micrometer', ascii_symbol='mg um^-3', symbol='mgµm⁻³') -micrograms_per_cubic_micrometer = NamedUnit(1000000000.0000002, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_micrometer', ascii_symbol='ug um^-3', symbol='µgµm⁻³') -nanograms_per_cubic_micrometer = NamedUnit(1000000.0000000003, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_micrometer', ascii_symbol='ng um^-3', symbol='ngµm⁻³') -picograms_per_cubic_micrometer = NamedUnit(1000.0000000000002, Dimensions(length=-3, mass=1), name='picograms_per_cubic_micrometer', ascii_symbol='pg um^-3', symbol='pgµm⁻³') -femtograms_per_cubic_micrometer = NamedUnit(1.0000000000000002, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_micrometer', ascii_symbol='fg um^-3', symbol='fgµm⁻³') -attograms_per_cubic_micrometer = NamedUnit(0.0010000000000000002, Dimensions(length=-3, mass=1), name='attograms_per_cubic_micrometer', ascii_symbol='ag um^-3', symbol='agµm⁻³') -atomic_mass_units_per_cubic_micrometer = NamedUnit(1.660538921e-09, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_micrometer', ascii_symbol='au um^-3', symbol='auµm⁻³') -pounds_per_cubic_micrometer = NamedUnit(4.5359237000000006e+17, Dimensions(length=-3, mass=1), name='pounds_per_cubic_micrometer', ascii_symbol='lb um^-3', symbol='lbµm⁻³') -ounces_per_cubic_micrometer = NamedUnit(2.8349523125000004e+16, Dimensions(length=-3, mass=1), name='ounces_per_cubic_micrometer', ascii_symbol='oz um^-3', symbol='ozµm⁻³') -grams_per_cubic_nanometer = NamedUnit(9.999999999999998e+23, Dimensions(length=-3, mass=1), name='grams_per_cubic_nanometer', ascii_symbol='g nm^-3', symbol='gnm⁻³') -exagrams_per_cubic_nanometer = NamedUnit(9.999999999999997e+41, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_nanometer', ascii_symbol='Eg nm^-3', symbol='Egnm⁻³') -petagrams_per_cubic_nanometer = NamedUnit(9.999999999999998e+38, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_nanometer', ascii_symbol='Pg nm^-3', symbol='Pgnm⁻³') -teragrams_per_cubic_nanometer = NamedUnit(9.999999999999997e+35, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_nanometer', ascii_symbol='Tg nm^-3', symbol='Tgnm⁻³') -gigagrams_per_cubic_nanometer = NamedUnit(9.999999999999998e+32, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_nanometer', ascii_symbol='Gg nm^-3', symbol='Ggnm⁻³') -megagrams_per_cubic_nanometer = NamedUnit(9.999999999999997e+29, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_nanometer', ascii_symbol='Mg nm^-3', symbol='Mgnm⁻³') -kilograms_per_cubic_nanometer = NamedUnit(9.999999999999997e+26, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_nanometer', ascii_symbol='kg nm^-3', symbol='kgnm⁻³') -milligrams_per_cubic_nanometer = NamedUnit(9.999999999999997e+20, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_nanometer', ascii_symbol='mg nm^-3', symbol='mgnm⁻³') -micrograms_per_cubic_nanometer = NamedUnit(9.999999999999999e+17, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_nanometer', ascii_symbol='ug nm^-3', symbol='µgnm⁻³') -nanograms_per_cubic_nanometer = NamedUnit(1000000000000000.0, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_nanometer', ascii_symbol='ng nm^-3', symbol='ngnm⁻³') -picograms_per_cubic_nanometer = NamedUnit(999999999999.9999, Dimensions(length=-3, mass=1), name='picograms_per_cubic_nanometer', ascii_symbol='pg nm^-3', symbol='pgnm⁻³') -femtograms_per_cubic_nanometer = NamedUnit(999999999.9999999, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_nanometer', ascii_symbol='fg nm^-3', symbol='fgnm⁻³') -attograms_per_cubic_nanometer = NamedUnit(999999.9999999999, Dimensions(length=-3, mass=1), name='attograms_per_cubic_nanometer', ascii_symbol='ag nm^-3', symbol='agnm⁻³') -atomic_mass_units_per_cubic_nanometer = NamedUnit(1.6605389209999994, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_nanometer', ascii_symbol='au nm^-3', symbol='aunm⁻³') -pounds_per_cubic_nanometer = NamedUnit(4.535923699999999e+26, Dimensions(length=-3, mass=1), name='pounds_per_cubic_nanometer', ascii_symbol='lb nm^-3', symbol='lbnm⁻³') -ounces_per_cubic_nanometer = NamedUnit(2.8349523124999993e+25, Dimensions(length=-3, mass=1), name='ounces_per_cubic_nanometer', ascii_symbol='oz nm^-3', symbol='oznm⁻³') -grams_per_cubic_picometer = NamedUnit(1.0000000000000001e+33, Dimensions(length=-3, mass=1), name='grams_per_cubic_picometer', ascii_symbol='g pm^-3', symbol='gpm⁻³') -exagrams_per_cubic_picometer = NamedUnit(1e+51, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_picometer', ascii_symbol='Eg pm^-3', symbol='Egpm⁻³') -petagrams_per_cubic_picometer = NamedUnit(1e+48, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_picometer', ascii_symbol='Pg pm^-3', symbol='Pgpm⁻³') -teragrams_per_cubic_picometer = NamedUnit(1.0000000000000001e+45, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_picometer', ascii_symbol='Tg pm^-3', symbol='Tgpm⁻³') -gigagrams_per_cubic_picometer = NamedUnit(1e+42, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_picometer', ascii_symbol='Gg pm^-3', symbol='Ggpm⁻³') -megagrams_per_cubic_picometer = NamedUnit(1.0000000000000001e+39, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_picometer', ascii_symbol='Mg pm^-3', symbol='Mgpm⁻³') -kilograms_per_cubic_picometer = NamedUnit(1e+36, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_picometer', ascii_symbol='kg pm^-3', symbol='kgpm⁻³') -milligrams_per_cubic_picometer = NamedUnit(1e+30, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_picometer', ascii_symbol='mg pm^-3', symbol='mgpm⁻³') -micrograms_per_cubic_picometer = NamedUnit(1.0000000000000002e+27, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_picometer', ascii_symbol='ug pm^-3', symbol='µgpm⁻³') -nanograms_per_cubic_picometer = NamedUnit(1.0000000000000003e+24, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_picometer', ascii_symbol='ng pm^-3', symbol='ngpm⁻³') -picograms_per_cubic_picometer = NamedUnit(1.0000000000000001e+21, Dimensions(length=-3, mass=1), name='picograms_per_cubic_picometer', ascii_symbol='pg pm^-3', symbol='pgpm⁻³') -femtograms_per_cubic_picometer = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_picometer', ascii_symbol='fg pm^-3', symbol='fgpm⁻³') -attograms_per_cubic_picometer = NamedUnit(1000000000000000.1, Dimensions(length=-3, mass=1), name='attograms_per_cubic_picometer', ascii_symbol='ag pm^-3', symbol='agpm⁻³') -atomic_mass_units_per_cubic_picometer = NamedUnit(1660538921.0, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_picometer', ascii_symbol='au pm^-3', symbol='aupm⁻³') -pounds_per_cubic_picometer = NamedUnit(4.5359237000000005e+35, Dimensions(length=-3, mass=1), name='pounds_per_cubic_picometer', ascii_symbol='lb pm^-3', symbol='lbpm⁻³') -ounces_per_cubic_picometer = NamedUnit(2.8349523125000003e+34, Dimensions(length=-3, mass=1), name='ounces_per_cubic_picometer', ascii_symbol='oz pm^-3', symbol='ozpm⁻³') -grams_per_cubic_femtometer = NamedUnit(9.999999999999997e+41, Dimensions(length=-3, mass=1), name='grams_per_cubic_femtometer', ascii_symbol='g fm^-3', symbol='gfm⁻³') -exagrams_per_cubic_femtometer = NamedUnit(9.999999999999998e+59, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_femtometer', ascii_symbol='Eg fm^-3', symbol='Egfm⁻³') -petagrams_per_cubic_femtometer = NamedUnit(9.999999999999997e+56, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_femtometer', ascii_symbol='Pg fm^-3', symbol='Pgfm⁻³') -teragrams_per_cubic_femtometer = NamedUnit(9.999999999999997e+53, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_femtometer', ascii_symbol='Tg fm^-3', symbol='Tgfm⁻³') -gigagrams_per_cubic_femtometer = NamedUnit(9.999999999999997e+50, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_femtometer', ascii_symbol='Gg fm^-3', symbol='Ggfm⁻³') -megagrams_per_cubic_femtometer = NamedUnit(9.999999999999997e+47, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_femtometer', ascii_symbol='Mg fm^-3', symbol='Mgfm⁻³') -kilograms_per_cubic_femtometer = NamedUnit(9.999999999999998e+44, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_femtometer', ascii_symbol='kg fm^-3', symbol='kgfm⁻³') -milligrams_per_cubic_femtometer = NamedUnit(9.999999999999996e+38, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_femtometer', ascii_symbol='mg fm^-3', symbol='mgfm⁻³') -micrograms_per_cubic_femtometer = NamedUnit(9.999999999999997e+35, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_femtometer', ascii_symbol='ug fm^-3', symbol='µgfm⁻³') -nanograms_per_cubic_femtometer = NamedUnit(1e+33, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_femtometer', ascii_symbol='ng fm^-3', symbol='ngfm⁻³') -picograms_per_cubic_femtometer = NamedUnit(9.999999999999997e+29, Dimensions(length=-3, mass=1), name='picograms_per_cubic_femtometer', ascii_symbol='pg fm^-3', symbol='pgfm⁻³') -femtograms_per_cubic_femtometer = NamedUnit(9.999999999999997e+26, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_femtometer', ascii_symbol='fg fm^-3', symbol='fgfm⁻³') -attograms_per_cubic_femtometer = NamedUnit(9.999999999999998e+23, Dimensions(length=-3, mass=1), name='attograms_per_cubic_femtometer', ascii_symbol='ag fm^-3', symbol='agfm⁻³') -atomic_mass_units_per_cubic_femtometer = NamedUnit(1.6605389209999992e+18, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_femtometer', ascii_symbol='au fm^-3', symbol='aufm⁻³') -pounds_per_cubic_femtometer = NamedUnit(4.5359236999999985e+44, Dimensions(length=-3, mass=1), name='pounds_per_cubic_femtometer', ascii_symbol='lb fm^-3', symbol='lbfm⁻³') -ounces_per_cubic_femtometer = NamedUnit(2.834952312499999e+43, Dimensions(length=-3, mass=1), name='ounces_per_cubic_femtometer', ascii_symbol='oz fm^-3', symbol='ozfm⁻³') -grams_per_cubic_attometer = NamedUnit(9.999999999999998e+50, Dimensions(length=-3, mass=1), name='grams_per_cubic_attometer', ascii_symbol='g am^-3', symbol='gam⁻³') -exagrams_per_cubic_attometer = NamedUnit(9.999999999999999e+68, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_attometer', ascii_symbol='Eg am^-3', symbol='Egam⁻³') -petagrams_per_cubic_attometer = NamedUnit(9.999999999999998e+65, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_attometer', ascii_symbol='Pg am^-3', symbol='Pgam⁻³') -teragrams_per_cubic_attometer = NamedUnit(9.999999999999999e+62, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_attometer', ascii_symbol='Tg am^-3', symbol='Tgam⁻³') -gigagrams_per_cubic_attometer = NamedUnit(9.999999999999998e+59, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_attometer', ascii_symbol='Gg am^-3', symbol='Ggam⁻³') -megagrams_per_cubic_attometer = NamedUnit(9.999999999999999e+56, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_attometer', ascii_symbol='Mg am^-3', symbol='Mgam⁻³') -kilograms_per_cubic_attometer = NamedUnit(9.999999999999999e+53, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_attometer', ascii_symbol='kg am^-3', symbol='kgam⁻³') -milligrams_per_cubic_attometer = NamedUnit(9.999999999999997e+47, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_attometer', ascii_symbol='mg am^-3', symbol='mgam⁻³') -micrograms_per_cubic_attometer = NamedUnit(1e+45, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_attometer', ascii_symbol='ug am^-3', symbol='µgam⁻³') -nanograms_per_cubic_attometer = NamedUnit(1e+42, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_attometer', ascii_symbol='ng am^-3', symbol='ngam⁻³') -picograms_per_cubic_attometer = NamedUnit(1e+39, Dimensions(length=-3, mass=1), name='picograms_per_cubic_attometer', ascii_symbol='pg am^-3', symbol='pgam⁻³') -femtograms_per_cubic_attometer = NamedUnit(9.999999999999999e+35, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_attometer', ascii_symbol='fg am^-3', symbol='fgam⁻³') -attograms_per_cubic_attometer = NamedUnit(1e+33, Dimensions(length=-3, mass=1), name='attograms_per_cubic_attometer', ascii_symbol='ag am^-3', symbol='agam⁻³') -atomic_mass_units_per_cubic_attometer = NamedUnit(1.6605389209999997e+27, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_attometer', ascii_symbol='au am^-3', symbol='auam⁻³') -pounds_per_cubic_attometer = NamedUnit(4.5359237e+53, Dimensions(length=-3, mass=1), name='pounds_per_cubic_attometer', ascii_symbol='lb am^-3', symbol='lbam⁻³') -ounces_per_cubic_attometer = NamedUnit(2.8349523125e+52, Dimensions(length=-3, mass=1), name='ounces_per_cubic_attometer', ascii_symbol='oz am^-3', symbol='ozam⁻³') -grams_per_cubic_decimeter = NamedUnit(0.9999999999999998, Dimensions(length=-3, mass=1), name='grams_per_cubic_decimeter', ascii_symbol='g dm^-3', symbol='gdm⁻³') -exagrams_per_cubic_decimeter = NamedUnit(9.999999999999997e+17, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_decimeter', ascii_symbol='Eg dm^-3', symbol='Egdm⁻³') -petagrams_per_cubic_decimeter = NamedUnit(999999999999999.8, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_decimeter', ascii_symbol='Pg dm^-3', symbol='Pgdm⁻³') -teragrams_per_cubic_decimeter = NamedUnit(999999999999.9998, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_decimeter', ascii_symbol='Tg dm^-3', symbol='Tgdm⁻³') -gigagrams_per_cubic_decimeter = NamedUnit(999999999.9999998, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_decimeter', ascii_symbol='Gg dm^-3', symbol='Ggdm⁻³') -megagrams_per_cubic_decimeter = NamedUnit(999999.9999999998, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_decimeter', ascii_symbol='Mg dm^-3', symbol='Mgdm⁻³') -kilograms_per_cubic_decimeter = NamedUnit(999.9999999999998, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_decimeter', ascii_symbol='kg dm^-3', symbol='kgdm⁻³') -milligrams_per_cubic_decimeter = NamedUnit(0.0009999999999999998, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_decimeter', ascii_symbol='mg dm^-3', symbol='mgdm⁻³') -micrograms_per_cubic_decimeter = NamedUnit(9.999999999999997e-07, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_decimeter', ascii_symbol='ug dm^-3', symbol='µgdm⁻³') -nanograms_per_cubic_decimeter = NamedUnit(9.999999999999999e-10, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_decimeter', ascii_symbol='ng dm^-3', symbol='ngdm⁻³') -picograms_per_cubic_decimeter = NamedUnit(9.999999999999998e-13, Dimensions(length=-3, mass=1), name='picograms_per_cubic_decimeter', ascii_symbol='pg dm^-3', symbol='pgdm⁻³') -femtograms_per_cubic_decimeter = NamedUnit(9.999999999999999e-16, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_decimeter', ascii_symbol='fg dm^-3', symbol='fgdm⁻³') -attograms_per_cubic_decimeter = NamedUnit(9.999999999999999e-19, Dimensions(length=-3, mass=1), name='attograms_per_cubic_decimeter', ascii_symbol='ag dm^-3', symbol='agdm⁻³') -atomic_mass_units_per_cubic_decimeter = NamedUnit(1.6605389209999993e-24, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_decimeter', ascii_symbol='au dm^-3', symbol='audm⁻³') -pounds_per_cubic_decimeter = NamedUnit(453.5923699999999, Dimensions(length=-3, mass=1), name='pounds_per_cubic_decimeter', ascii_symbol='lb dm^-3', symbol='lbdm⁻³') -ounces_per_cubic_decimeter = NamedUnit(28.349523124999994, Dimensions(length=-3, mass=1), name='ounces_per_cubic_decimeter', ascii_symbol='oz dm^-3', symbol='ozdm⁻³') -grams_per_cubic_centimeter = NamedUnit(999.9999999999999, Dimensions(length=-3, mass=1), name='grams_per_cubic_centimeter', ascii_symbol='g cm^-3', symbol='gcm⁻³') -exagrams_per_cubic_centimeter = NamedUnit(9.999999999999999e+20, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_centimeter', ascii_symbol='Eg cm^-3', symbol='Egcm⁻³') -petagrams_per_cubic_centimeter = NamedUnit(9.999999999999999e+17, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_centimeter', ascii_symbol='Pg cm^-3', symbol='Pgcm⁻³') -teragrams_per_cubic_centimeter = NamedUnit(999999999999999.9, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_centimeter', ascii_symbol='Tg cm^-3', symbol='Tgcm⁻³') -gigagrams_per_cubic_centimeter = NamedUnit(999999999999.9999, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_centimeter', ascii_symbol='Gg cm^-3', symbol='Ggcm⁻³') -megagrams_per_cubic_centimeter = NamedUnit(999999999.9999999, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_centimeter', ascii_symbol='Mg cm^-3', symbol='Mgcm⁻³') -kilograms_per_cubic_centimeter = NamedUnit(999999.9999999999, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_centimeter', ascii_symbol='kg cm^-3', symbol='kgcm⁻³') -milligrams_per_cubic_centimeter = NamedUnit(0.9999999999999998, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_centimeter', ascii_symbol='mg cm^-3', symbol='mgcm⁻³') -micrograms_per_cubic_centimeter = NamedUnit(0.0009999999999999998, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_centimeter', ascii_symbol='ug cm^-3', symbol='µgcm⁻³') -nanograms_per_cubic_centimeter = NamedUnit(1e-06, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_centimeter', ascii_symbol='ng cm^-3', symbol='ngcm⁻³') -picograms_per_cubic_centimeter = NamedUnit(9.999999999999999e-10, Dimensions(length=-3, mass=1), name='picograms_per_cubic_centimeter', ascii_symbol='pg cm^-3', symbol='pgcm⁻³') -femtograms_per_cubic_centimeter = NamedUnit(1e-12, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_centimeter', ascii_symbol='fg cm^-3', symbol='fgcm⁻³') -attograms_per_cubic_centimeter = NamedUnit(9.999999999999999e-16, Dimensions(length=-3, mass=1), name='attograms_per_cubic_centimeter', ascii_symbol='ag cm^-3', symbol='agcm⁻³') -atomic_mass_units_per_cubic_centimeter = NamedUnit(1.6605389209999996e-21, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_centimeter', ascii_symbol='au cm^-3', symbol='aucm⁻³') -pounds_per_cubic_centimeter = NamedUnit(453592.36999999994, Dimensions(length=-3, mass=1), name='pounds_per_cubic_centimeter', ascii_symbol='lb cm^-3', symbol='lbcm⁻³') -ounces_per_cubic_centimeter = NamedUnit(28349.523124999996, Dimensions(length=-3, mass=1), name='ounces_per_cubic_centimeter', ascii_symbol='oz cm^-3', symbol='ozcm⁻³') -grams_per_cubic_angstrom = NamedUnit(9.999999999999999e+26, Dimensions(length=-3, mass=1), name='grams_per_cubic_angstrom', ascii_symbol='g Ang^-3', symbol='gÅ⁻³') -exagrams_per_cubic_angstrom = NamedUnit(1e+45, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_angstrom', ascii_symbol='Eg Ang^-3', symbol='EgÅ⁻³') -petagrams_per_cubic_angstrom = NamedUnit(9.999999999999999e+41, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_angstrom', ascii_symbol='Pg Ang^-3', symbol='PgÅ⁻³') -teragrams_per_cubic_angstrom = NamedUnit(1e+39, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_angstrom', ascii_symbol='Tg Ang^-3', symbol='TgÅ⁻³') -gigagrams_per_cubic_angstrom = NamedUnit(9.999999999999999e+35, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_angstrom', ascii_symbol='Gg Ang^-3', symbol='GgÅ⁻³') -megagrams_per_cubic_angstrom = NamedUnit(1e+33, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_angstrom', ascii_symbol='Mg Ang^-3', symbol='MgÅ⁻³') -kilograms_per_cubic_angstrom = NamedUnit(9.999999999999999e+29, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_angstrom', ascii_symbol='kg Ang^-3', symbol='kgÅ⁻³') -milligrams_per_cubic_angstrom = NamedUnit(9.999999999999998e+23, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_angstrom', ascii_symbol='mg Ang^-3', symbol='mgÅ⁻³') -micrograms_per_cubic_angstrom = NamedUnit(1e+21, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_angstrom', ascii_symbol='ug Ang^-3', symbol='µgÅ⁻³') -nanograms_per_cubic_angstrom = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_angstrom', ascii_symbol='ng Ang^-3', symbol='ngÅ⁻³') -picograms_per_cubic_angstrom = NamedUnit(1000000000000000.0, Dimensions(length=-3, mass=1), name='picograms_per_cubic_angstrom', ascii_symbol='pg Ang^-3', symbol='pgÅ⁻³') -femtograms_per_cubic_angstrom = NamedUnit(1000000000000.0, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_angstrom', ascii_symbol='fg Ang^-3', symbol='fgÅ⁻³') -attograms_per_cubic_angstrom = NamedUnit(1000000000.0, Dimensions(length=-3, mass=1), name='attograms_per_cubic_angstrom', ascii_symbol='ag Ang^-3', symbol='agÅ⁻³') -atomic_mass_units_per_cubic_angstrom = NamedUnit(1660.5389209999996, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_angstrom', ascii_symbol='au Ang^-3', symbol='auÅ⁻³') -pounds_per_cubic_angstrom = NamedUnit(4.5359237e+29, Dimensions(length=-3, mass=1), name='pounds_per_cubic_angstrom', ascii_symbol='lb Ang^-3', symbol='lbÅ⁻³') -ounces_per_cubic_angstrom = NamedUnit(2.8349523125e+28, Dimensions(length=-3, mass=1), name='ounces_per_cubic_angstrom', ascii_symbol='oz Ang^-3', symbol='ozÅ⁻³') -grams_per_cubic_micron = NamedUnit(1000000000000000.1, Dimensions(length=-3, mass=1), name='grams_per_cubic_micron', ascii_symbol='g micron^-3', symbol='gmicron⁻³') -exagrams_per_cubic_micron = NamedUnit(1.0000000000000001e+33, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_micron', ascii_symbol='Eg micron^-3', symbol='Egmicron⁻³') -petagrams_per_cubic_micron = NamedUnit(1.0000000000000002e+30, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_micron', ascii_symbol='Pg micron^-3', symbol='Pgmicron⁻³') -teragrams_per_cubic_micron = NamedUnit(1.0000000000000002e+27, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_micron', ascii_symbol='Tg micron^-3', symbol='Tgmicron⁻³') -gigagrams_per_cubic_micron = NamedUnit(1.0000000000000001e+24, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_micron', ascii_symbol='Gg micron^-3', symbol='Ggmicron⁻³') -megagrams_per_cubic_micron = NamedUnit(1.0000000000000001e+21, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_micron', ascii_symbol='Mg micron^-3', symbol='Mgmicron⁻³') -kilograms_per_cubic_micron = NamedUnit(1.0000000000000001e+18, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_micron', ascii_symbol='kg micron^-3', symbol='kgmicron⁻³') -milligrams_per_cubic_micron = NamedUnit(1000000000000.0001, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_micron', ascii_symbol='mg micron^-3', symbol='mgmicron⁻³') -micrograms_per_cubic_micron = NamedUnit(1000000000.0000002, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_micron', ascii_symbol='ug micron^-3', symbol='µgmicron⁻³') -nanograms_per_cubic_micron = NamedUnit(1000000.0000000003, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_micron', ascii_symbol='ng micron^-3', symbol='ngmicron⁻³') -picograms_per_cubic_micron = NamedUnit(1000.0000000000002, Dimensions(length=-3, mass=1), name='picograms_per_cubic_micron', ascii_symbol='pg micron^-3', symbol='pgmicron⁻³') -femtograms_per_cubic_micron = NamedUnit(1.0000000000000002, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_micron', ascii_symbol='fg micron^-3', symbol='fgmicron⁻³') -attograms_per_cubic_micron = NamedUnit(0.0010000000000000002, Dimensions(length=-3, mass=1), name='attograms_per_cubic_micron', ascii_symbol='ag micron^-3', symbol='agmicron⁻³') -atomic_mass_units_per_cubic_micron = NamedUnit(1.660538921e-09, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_micron', ascii_symbol='au micron^-3', symbol='aumicron⁻³') -pounds_per_cubic_micron = NamedUnit(4.5359237000000006e+17, Dimensions(length=-3, mass=1), name='pounds_per_cubic_micron', ascii_symbol='lb micron^-3', symbol='lbmicron⁻³') -ounces_per_cubic_micron = NamedUnit(2.8349523125000004e+16, Dimensions(length=-3, mass=1), name='ounces_per_cubic_micron', ascii_symbol='oz micron^-3', symbol='ozmicron⁻³') -grams_per_cubic_mile = NamedUnit(2.399127585789277e-13, Dimensions(length=-3, mass=1), name='grams_per_cubic_mile', ascii_symbol='g miles^-3', symbol='gmiles⁻³') -exagrams_per_cubic_mile = NamedUnit(239912.7585789277, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_mile', ascii_symbol='Eg miles^-3', symbol='Egmiles⁻³') -petagrams_per_cubic_mile = NamedUnit(239.9127585789277, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_mile', ascii_symbol='Pg miles^-3', symbol='Pgmiles⁻³') -teragrams_per_cubic_mile = NamedUnit(0.2399127585789277, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_mile', ascii_symbol='Tg miles^-3', symbol='Tgmiles⁻³') -gigagrams_per_cubic_mile = NamedUnit(0.0002399127585789277, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_mile', ascii_symbol='Gg miles^-3', symbol='Ggmiles⁻³') -megagrams_per_cubic_mile = NamedUnit(2.399127585789277e-07, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_mile', ascii_symbol='Mg miles^-3', symbol='Mgmiles⁻³') -kilograms_per_cubic_mile = NamedUnit(2.399127585789277e-10, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_mile', ascii_symbol='kg miles^-3', symbol='kgmiles⁻³') -milligrams_per_cubic_mile = NamedUnit(2.399127585789277e-16, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_mile', ascii_symbol='mg miles^-3', symbol='mgmiles⁻³') -micrograms_per_cubic_mile = NamedUnit(2.3991275857892774e-19, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_mile', ascii_symbol='ug miles^-3', symbol='µgmiles⁻³') -nanograms_per_cubic_mile = NamedUnit(2.3991275857892774e-22, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_mile', ascii_symbol='ng miles^-3', symbol='ngmiles⁻³') -picograms_per_cubic_mile = NamedUnit(2.399127585789277e-25, Dimensions(length=-3, mass=1), name='picograms_per_cubic_mile', ascii_symbol='pg miles^-3', symbol='pgmiles⁻³') -femtograms_per_cubic_mile = NamedUnit(2.3991275857892772e-28, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_mile', ascii_symbol='fg miles^-3', symbol='fgmiles⁻³') -attograms_per_cubic_mile = NamedUnit(2.399127585789277e-31, Dimensions(length=-3, mass=1), name='attograms_per_cubic_mile', ascii_symbol='ag miles^-3', symbol='agmiles⁻³') -atomic_mass_units_per_cubic_mile = NamedUnit(3.98384473264786e-37, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_mile', ascii_symbol='au miles^-3', symbol='aumiles⁻³') -pounds_per_cubic_mile = NamedUnit(1.0882259675705365e-10, Dimensions(length=-3, mass=1), name='pounds_per_cubic_mile', ascii_symbol='lb miles^-3', symbol='lbmiles⁻³') -ounces_per_cubic_mile = NamedUnit(6.801412297315853e-12, Dimensions(length=-3, mass=1), name='ounces_per_cubic_mile', ascii_symbol='oz miles^-3', symbol='ozmiles⁻³') -grams_per_cubic_yard = NamedUnit(0.0013079506193143919, Dimensions(length=-3, mass=1), name='grams_per_cubic_yard', ascii_symbol='g yrd^-3', symbol='gyrd⁻³') -exagrams_per_cubic_yard = NamedUnit(1307950619314391.8, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_yard', ascii_symbol='Eg yrd^-3', symbol='Egyrd⁻³') -petagrams_per_cubic_yard = NamedUnit(1307950619314.3918, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_yard', ascii_symbol='Pg yrd^-3', symbol='Pgyrd⁻³') -teragrams_per_cubic_yard = NamedUnit(1307950619.3143919, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_yard', ascii_symbol='Tg yrd^-3', symbol='Tgyrd⁻³') -gigagrams_per_cubic_yard = NamedUnit(1307950.6193143919, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_yard', ascii_symbol='Gg yrd^-3', symbol='Ggyrd⁻³') -megagrams_per_cubic_yard = NamedUnit(1307.9506193143918, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_yard', ascii_symbol='Mg yrd^-3', symbol='Mgyrd⁻³') -kilograms_per_cubic_yard = NamedUnit(1.3079506193143917, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_yard', ascii_symbol='kg yrd^-3', symbol='kgyrd⁻³') -milligrams_per_cubic_yard = NamedUnit(1.3079506193143917e-06, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_yard', ascii_symbol='mg yrd^-3', symbol='mgyrd⁻³') -micrograms_per_cubic_yard = NamedUnit(1.3079506193143919e-09, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_yard', ascii_symbol='ug yrd^-3', symbol='µgyrd⁻³') -nanograms_per_cubic_yard = NamedUnit(1.307950619314392e-12, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_yard', ascii_symbol='ng yrd^-3', symbol='ngyrd⁻³') -picograms_per_cubic_yard = NamedUnit(1.3079506193143919e-15, Dimensions(length=-3, mass=1), name='picograms_per_cubic_yard', ascii_symbol='pg yrd^-3', symbol='pgyrd⁻³') -femtograms_per_cubic_yard = NamedUnit(1.3079506193143918e-18, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_yard', ascii_symbol='fg yrd^-3', symbol='fgyrd⁻³') -attograms_per_cubic_yard = NamedUnit(1.307950619314392e-21, Dimensions(length=-3, mass=1), name='attograms_per_cubic_yard', ascii_symbol='ag yrd^-3', symbol='agyrd⁻³') -atomic_mass_units_per_cubic_yard = NamedUnit(2.1719029101176016e-27, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_yard', ascii_symbol='au yrd^-3', symbol='auyrd⁻³') -pounds_per_cubic_yard = NamedUnit(0.5932764212577828, Dimensions(length=-3, mass=1), name='pounds_per_cubic_yard', ascii_symbol='lb yrd^-3', symbol='lbyrd⁻³') -ounces_per_cubic_yard = NamedUnit(0.037079776328611425, Dimensions(length=-3, mass=1), name='ounces_per_cubic_yard', ascii_symbol='oz yrd^-3', symbol='ozyrd⁻³') -grams_per_cubic_foot = NamedUnit(0.035314666721488586, Dimensions(length=-3, mass=1), name='grams_per_cubic_foot', ascii_symbol='g ft^-3', symbol='gft⁻³') -exagrams_per_cubic_foot = NamedUnit(3.5314666721488584e+16, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_foot', ascii_symbol='Eg ft^-3', symbol='Egft⁻³') -petagrams_per_cubic_foot = NamedUnit(35314666721488.586, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_foot', ascii_symbol='Pg ft^-3', symbol='Pgft⁻³') -teragrams_per_cubic_foot = NamedUnit(35314666721.48859, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_foot', ascii_symbol='Tg ft^-3', symbol='Tgft⁻³') -gigagrams_per_cubic_foot = NamedUnit(35314666.72148859, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_foot', ascii_symbol='Gg ft^-3', symbol='Ggft⁻³') -megagrams_per_cubic_foot = NamedUnit(35314.66672148858, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_foot', ascii_symbol='Mg ft^-3', symbol='Mgft⁻³') -kilograms_per_cubic_foot = NamedUnit(35.314666721488585, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_foot', ascii_symbol='kg ft^-3', symbol='kgft⁻³') -milligrams_per_cubic_foot = NamedUnit(3.5314666721488586e-05, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_foot', ascii_symbol='mg ft^-3', symbol='mgft⁻³') -micrograms_per_cubic_foot = NamedUnit(3.5314666721488584e-08, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_foot', ascii_symbol='ug ft^-3', symbol='µgft⁻³') -nanograms_per_cubic_foot = NamedUnit(3.531466672148859e-11, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_foot', ascii_symbol='ng ft^-3', symbol='ngft⁻³') -picograms_per_cubic_foot = NamedUnit(3.531466672148859e-14, Dimensions(length=-3, mass=1), name='picograms_per_cubic_foot', ascii_symbol='pg ft^-3', symbol='pgft⁻³') -femtograms_per_cubic_foot = NamedUnit(3.5314666721488585e-17, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_foot', ascii_symbol='fg ft^-3', symbol='fgft⁻³') -attograms_per_cubic_foot = NamedUnit(3.531466672148859e-20, Dimensions(length=-3, mass=1), name='attograms_per_cubic_foot', ascii_symbol='ag ft^-3', symbol='agft⁻³') -atomic_mass_units_per_cubic_foot = NamedUnit(5.864137857317526e-26, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_foot', ascii_symbol='au ft^-3', symbol='auft⁻³') -pounds_per_cubic_foot = NamedUnit(16.018463373960138, Dimensions(length=-3, mass=1), name='pounds_per_cubic_foot', ascii_symbol='lb ft^-3', symbol='lbft⁻³') -ounces_per_cubic_foot = NamedUnit(1.0011539608725086, Dimensions(length=-3, mass=1), name='ounces_per_cubic_foot', ascii_symbol='oz ft^-3', symbol='ozft⁻³') -grams_per_cubic_inch = NamedUnit(61.02374409473229, Dimensions(length=-3, mass=1), name='grams_per_cubic_inch', ascii_symbol='g in^-3', symbol='gin⁻³') -exagrams_per_cubic_inch = NamedUnit(6.102374409473229e+19, Dimensions(length=-3, mass=1), name='exagrams_per_cubic_inch', ascii_symbol='Eg in^-3', symbol='Egin⁻³') -petagrams_per_cubic_inch = NamedUnit(6.102374409473229e+16, Dimensions(length=-3, mass=1), name='petagrams_per_cubic_inch', ascii_symbol='Pg in^-3', symbol='Pgin⁻³') -teragrams_per_cubic_inch = NamedUnit(61023744094732.29, Dimensions(length=-3, mass=1), name='teragrams_per_cubic_inch', ascii_symbol='Tg in^-3', symbol='Tgin⁻³') -gigagrams_per_cubic_inch = NamedUnit(61023744094.732285, Dimensions(length=-3, mass=1), name='gigagrams_per_cubic_inch', ascii_symbol='Gg in^-3', symbol='Ggin⁻³') -megagrams_per_cubic_inch = NamedUnit(61023744.094732285, Dimensions(length=-3, mass=1), name='megagrams_per_cubic_inch', ascii_symbol='Mg in^-3', symbol='Mgin⁻³') -kilograms_per_cubic_inch = NamedUnit(61023.74409473229, Dimensions(length=-3, mass=1), name='kilograms_per_cubic_inch', ascii_symbol='kg in^-3', symbol='kgin⁻³') -milligrams_per_cubic_inch = NamedUnit(0.06102374409473228, Dimensions(length=-3, mass=1), name='milligrams_per_cubic_inch', ascii_symbol='mg in^-3', symbol='mgin⁻³') -micrograms_per_cubic_inch = NamedUnit(6.102374409473229e-05, Dimensions(length=-3, mass=1), name='micrograms_per_cubic_inch', ascii_symbol='ug in^-3', symbol='µgin⁻³') -nanograms_per_cubic_inch = NamedUnit(6.10237440947323e-08, Dimensions(length=-3, mass=1), name='nanograms_per_cubic_inch', ascii_symbol='ng in^-3', symbol='ngin⁻³') -picograms_per_cubic_inch = NamedUnit(6.102374409473229e-11, Dimensions(length=-3, mass=1), name='picograms_per_cubic_inch', ascii_symbol='pg in^-3', symbol='pgin⁻³') -femtograms_per_cubic_inch = NamedUnit(6.10237440947323e-14, Dimensions(length=-3, mass=1), name='femtograms_per_cubic_inch', ascii_symbol='fg in^-3', symbol='fgin⁻³') -attograms_per_cubic_inch = NamedUnit(6.10237440947323e-17, Dimensions(length=-3, mass=1), name='attograms_per_cubic_inch', ascii_symbol='ag in^-3', symbol='agin⁻³') -atomic_mass_units_per_cubic_inch = NamedUnit(1.0133230217444687e-22, Dimensions(length=-3, mass=1), name='atomic_mass_units_per_cubic_inch', ascii_symbol='au in^-3', symbol='auin⁻³') -pounds_per_cubic_inch = NamedUnit(27679.904710203125, Dimensions(length=-3, mass=1), name='pounds_per_cubic_inch', ascii_symbol='lb in^-3', symbol='lbin⁻³') -ounces_per_cubic_inch = NamedUnit(1729.9940443876953, Dimensions(length=-3, mass=1), name='ounces_per_cubic_inch', ascii_symbol='oz in^-3', symbol='ozin⁻³') -moles_per_cubic_meter = NamedUnit(6.02214076e+23, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_meter', ascii_symbol='mol m^-3', symbol='molm⁻³') -millimoles_per_cubic_meter = NamedUnit(6.02214076e+20, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_meter', ascii_symbol='mmol m^-3', symbol='mmolm⁻³') -micromoles_per_cubic_meter = NamedUnit(6.02214076e+17, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_meter', ascii_symbol='umol m^-3', symbol='µmolm⁻³') -nanomoles_per_cubic_meter = NamedUnit(602214076000000.0, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_meter', ascii_symbol='nmol m^-3', symbol='nmolm⁻³') -picomoles_per_cubic_meter = NamedUnit(602214076000.0, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_meter', ascii_symbol='pmol m^-3', symbol='pmolm⁻³') -femtomoles_per_cubic_meter = NamedUnit(602214076.0, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_meter', ascii_symbol='fmol m^-3', symbol='fmolm⁻³') -attomoles_per_cubic_meter = NamedUnit(602214.076, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_meter', ascii_symbol='amol m^-3', symbol='amolm⁻³') -moles_per_cubic_exameter = NamedUnit(6.0221407599999995e-31, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_exameter', ascii_symbol='mol Em^-3', symbol='molEm⁻³') -millimoles_per_cubic_exameter = NamedUnit(6.02214076e-34, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_exameter', ascii_symbol='mmol Em^-3', symbol='mmolEm⁻³') -micromoles_per_cubic_exameter = NamedUnit(6.02214076e-37, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_exameter', ascii_symbol='umol Em^-3', symbol='µmolEm⁻³') -nanomoles_per_cubic_exameter = NamedUnit(6.022140759999999e-40, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_exameter', ascii_symbol='nmol Em^-3', symbol='nmolEm⁻³') -picomoles_per_cubic_exameter = NamedUnit(6.022140759999999e-43, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_exameter', ascii_symbol='pmol Em^-3', symbol='pmolEm⁻³') -femtomoles_per_cubic_exameter = NamedUnit(6.02214076e-46, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_exameter', ascii_symbol='fmol Em^-3', symbol='fmolEm⁻³') -attomoles_per_cubic_exameter = NamedUnit(6.022140759999999e-49, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_exameter', ascii_symbol='amol Em^-3', symbol='amolEm⁻³') -moles_per_cubic_petameter = NamedUnit(6.02214076e-22, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_petameter', ascii_symbol='mol Pm^-3', symbol='molPm⁻³') -millimoles_per_cubic_petameter = NamedUnit(6.0221407600000005e-25, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_petameter', ascii_symbol='mmol Pm^-3', symbol='mmolPm⁻³') -micromoles_per_cubic_petameter = NamedUnit(6.02214076e-28, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_petameter', ascii_symbol='umol Pm^-3', symbol='µmolPm⁻³') -nanomoles_per_cubic_petameter = NamedUnit(6.02214076e-31, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_petameter', ascii_symbol='nmol Pm^-3', symbol='nmolPm⁻³') -picomoles_per_cubic_petameter = NamedUnit(6.0221407600000005e-34, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_petameter', ascii_symbol='pmol Pm^-3', symbol='pmolPm⁻³') -femtomoles_per_cubic_petameter = NamedUnit(6.022140760000001e-37, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_petameter', ascii_symbol='fmol Pm^-3', symbol='fmolPm⁻³') -attomoles_per_cubic_petameter = NamedUnit(6.022140760000001e-40, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_petameter', ascii_symbol='amol Pm^-3', symbol='amolPm⁻³') -moles_per_cubic_terameter = NamedUnit(6.022140759999999e-13, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_terameter', ascii_symbol='mol Tm^-3', symbol='molTm⁻³') -millimoles_per_cubic_terameter = NamedUnit(6.02214076e-16, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_terameter', ascii_symbol='mmol Tm^-3', symbol='mmolTm⁻³') -micromoles_per_cubic_terameter = NamedUnit(6.02214076e-19, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_terameter', ascii_symbol='umol Tm^-3', symbol='µmolTm⁻³') -nanomoles_per_cubic_terameter = NamedUnit(6.02214076e-22, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_terameter', ascii_symbol='nmol Tm^-3', symbol='nmolTm⁻³') -picomoles_per_cubic_terameter = NamedUnit(6.02214076e-25, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_terameter', ascii_symbol='pmol Tm^-3', symbol='pmolTm⁻³') -femtomoles_per_cubic_terameter = NamedUnit(6.02214076e-28, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_terameter', ascii_symbol='fmol Tm^-3', symbol='fmolTm⁻³') -attomoles_per_cubic_terameter = NamedUnit(6.0221407599999995e-31, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_terameter', ascii_symbol='amol Tm^-3', symbol='amolTm⁻³') -moles_per_cubic_gigameter = NamedUnit(0.000602214076, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_gigameter', ascii_symbol='mol Gm^-3', symbol='molGm⁻³') -millimoles_per_cubic_gigameter = NamedUnit(6.022140760000001e-07, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_gigameter', ascii_symbol='mmol Gm^-3', symbol='mmolGm⁻³') -micromoles_per_cubic_gigameter = NamedUnit(6.02214076e-10, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_gigameter', ascii_symbol='umol Gm^-3', symbol='µmolGm⁻³') -nanomoles_per_cubic_gigameter = NamedUnit(6.02214076e-13, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_gigameter', ascii_symbol='nmol Gm^-3', symbol='nmolGm⁻³') -picomoles_per_cubic_gigameter = NamedUnit(6.02214076e-16, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_gigameter', ascii_symbol='pmol Gm^-3', symbol='pmolGm⁻³') -femtomoles_per_cubic_gigameter = NamedUnit(6.02214076e-19, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_gigameter', ascii_symbol='fmol Gm^-3', symbol='fmolGm⁻³') -attomoles_per_cubic_gigameter = NamedUnit(6.02214076e-22, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_gigameter', ascii_symbol='amol Gm^-3', symbol='amolGm⁻³') -moles_per_cubic_megameter = NamedUnit(602214.076, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_megameter', ascii_symbol='mol Mm^-3', symbol='molMm⁻³') -millimoles_per_cubic_megameter = NamedUnit(602.214076, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_megameter', ascii_symbol='mmol Mm^-3', symbol='mmolMm⁻³') -micromoles_per_cubic_megameter = NamedUnit(0.602214076, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_megameter', ascii_symbol='umol Mm^-3', symbol='µmolMm⁻³') -nanomoles_per_cubic_megameter = NamedUnit(0.000602214076, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_megameter', ascii_symbol='nmol Mm^-3', symbol='nmolMm⁻³') -picomoles_per_cubic_megameter = NamedUnit(6.02214076e-07, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_megameter', ascii_symbol='pmol Mm^-3', symbol='pmolMm⁻³') -femtomoles_per_cubic_megameter = NamedUnit(6.02214076e-10, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_megameter', ascii_symbol='fmol Mm^-3', symbol='fmolMm⁻³') -attomoles_per_cubic_megameter = NamedUnit(6.02214076e-13, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_megameter', ascii_symbol='amol Mm^-3', symbol='amolMm⁻³') -moles_per_cubic_kilometer = NamedUnit(602214076000000.0, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_kilometer', ascii_symbol='mol km^-3', symbol='molkm⁻³') -millimoles_per_cubic_kilometer = NamedUnit(602214076000.0, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_kilometer', ascii_symbol='mmol km^-3', symbol='mmolkm⁻³') -micromoles_per_cubic_kilometer = NamedUnit(602214076.0, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_kilometer', ascii_symbol='umol km^-3', symbol='µmolkm⁻³') -nanomoles_per_cubic_kilometer = NamedUnit(602214.076, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_kilometer', ascii_symbol='nmol km^-3', symbol='nmolkm⁻³') -picomoles_per_cubic_kilometer = NamedUnit(602.214076, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_kilometer', ascii_symbol='pmol km^-3', symbol='pmolkm⁻³') -femtomoles_per_cubic_kilometer = NamedUnit(0.602214076, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_kilometer', ascii_symbol='fmol km^-3', symbol='fmolkm⁻³') -attomoles_per_cubic_kilometer = NamedUnit(0.000602214076, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_kilometer', ascii_symbol='amol km^-3', symbol='amolkm⁻³') -moles_per_cubic_millimeter = NamedUnit(6.0221407599999995e+32, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_millimeter', ascii_symbol='mol mm^-3', symbol='molmm⁻³') -millimoles_per_cubic_millimeter = NamedUnit(6.02214076e+29, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_millimeter', ascii_symbol='mmol mm^-3', symbol='mmolmm⁻³') -micromoles_per_cubic_millimeter = NamedUnit(6.0221407599999996e+26, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_millimeter', ascii_symbol='umol mm^-3', symbol='µmolmm⁻³') -nanomoles_per_cubic_millimeter = NamedUnit(6.02214076e+23, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_millimeter', ascii_symbol='nmol mm^-3', symbol='nmolmm⁻³') -picomoles_per_cubic_millimeter = NamedUnit(6.02214076e+20, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_millimeter', ascii_symbol='pmol mm^-3', symbol='pmolmm⁻³') -femtomoles_per_cubic_millimeter = NamedUnit(6.02214076e+17, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_millimeter', ascii_symbol='fmol mm^-3', symbol='fmolmm⁻³') -attomoles_per_cubic_millimeter = NamedUnit(602214076000000.0, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_millimeter', ascii_symbol='amol mm^-3', symbol='amolmm⁻³') -moles_per_cubic_micrometer = NamedUnit(6.022140760000001e+41, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_micrometer', ascii_symbol='mol um^-3', symbol='molµm⁻³') -millimoles_per_cubic_micrometer = NamedUnit(6.022140760000001e+38, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_micrometer', ascii_symbol='mmol um^-3', symbol='mmolµm⁻³') -micromoles_per_cubic_micrometer = NamedUnit(6.0221407600000004e+35, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_micrometer', ascii_symbol='umol um^-3', symbol='µmolµm⁻³') -nanomoles_per_cubic_micrometer = NamedUnit(6.022140760000001e+32, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_micrometer', ascii_symbol='nmol um^-3', symbol='nmolµm⁻³') -picomoles_per_cubic_micrometer = NamedUnit(6.022140760000001e+29, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_micrometer', ascii_symbol='pmol um^-3', symbol='pmolµm⁻³') -femtomoles_per_cubic_micrometer = NamedUnit(6.022140760000001e+26, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_micrometer', ascii_symbol='fmol um^-3', symbol='fmolµm⁻³') -attomoles_per_cubic_micrometer = NamedUnit(6.0221407600000005e+23, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_micrometer', ascii_symbol='amol um^-3', symbol='amolµm⁻³') -moles_per_cubic_nanometer = NamedUnit(6.022140759999999e+50, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_nanometer', ascii_symbol='mol nm^-3', symbol='molnm⁻³') -millimoles_per_cubic_nanometer = NamedUnit(6.022140759999999e+47, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_nanometer', ascii_symbol='mmol nm^-3', symbol='mmolnm⁻³') -micromoles_per_cubic_nanometer = NamedUnit(6.022140759999999e+44, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_nanometer', ascii_symbol='umol nm^-3', symbol='µmolnm⁻³') -nanomoles_per_cubic_nanometer = NamedUnit(6.022140759999998e+41, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_nanometer', ascii_symbol='nmol nm^-3', symbol='nmolnm⁻³') -picomoles_per_cubic_nanometer = NamedUnit(6.0221407599999985e+38, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_nanometer', ascii_symbol='pmol nm^-3', symbol='pmolnm⁻³') -femtomoles_per_cubic_nanometer = NamedUnit(6.022140759999999e+35, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_nanometer', ascii_symbol='fmol nm^-3', symbol='fmolnm⁻³') -attomoles_per_cubic_nanometer = NamedUnit(6.022140759999999e+32, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_nanometer', ascii_symbol='amol nm^-3', symbol='amolnm⁻³') -moles_per_cubic_picometer = NamedUnit(6.0221407600000005e+59, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_picometer', ascii_symbol='mol pm^-3', symbol='molpm⁻³') -millimoles_per_cubic_picometer = NamedUnit(6.0221407600000005e+56, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_picometer', ascii_symbol='mmol pm^-3', symbol='mmolpm⁻³') -micromoles_per_cubic_picometer = NamedUnit(6.022140760000001e+53, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_picometer', ascii_symbol='umol pm^-3', symbol='µmolpm⁻³') -nanomoles_per_cubic_picometer = NamedUnit(6.0221407600000005e+50, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_picometer', ascii_symbol='nmol pm^-3', symbol='nmolpm⁻³') -picomoles_per_cubic_picometer = NamedUnit(6.02214076e+47, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_picometer', ascii_symbol='pmol pm^-3', symbol='pmolpm⁻³') -femtomoles_per_cubic_picometer = NamedUnit(6.022140760000001e+44, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_picometer', ascii_symbol='fmol pm^-3', symbol='fmolpm⁻³') -attomoles_per_cubic_picometer = NamedUnit(6.022140760000001e+41, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_picometer', ascii_symbol='amol pm^-3', symbol='amolpm⁻³') -moles_per_cubic_femtometer = NamedUnit(6.022140759999998e+68, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_femtometer', ascii_symbol='mol fm^-3', symbol='molfm⁻³') -millimoles_per_cubic_femtometer = NamedUnit(6.022140759999998e+65, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_femtometer', ascii_symbol='mmol fm^-3', symbol='mmolfm⁻³') -micromoles_per_cubic_femtometer = NamedUnit(6.022140759999999e+62, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_femtometer', ascii_symbol='umol fm^-3', symbol='µmolfm⁻³') -nanomoles_per_cubic_femtometer = NamedUnit(6.022140759999998e+59, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_femtometer', ascii_symbol='nmol fm^-3', symbol='nmolfm⁻³') -picomoles_per_cubic_femtometer = NamedUnit(6.022140759999998e+56, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_femtometer', ascii_symbol='pmol fm^-3', symbol='pmolfm⁻³') -femtomoles_per_cubic_femtometer = NamedUnit(6.022140759999998e+53, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_femtometer', ascii_symbol='fmol fm^-3', symbol='fmolfm⁻³') -attomoles_per_cubic_femtometer = NamedUnit(6.022140759999998e+50, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_femtometer', ascii_symbol='amol fm^-3', symbol='amolfm⁻³') -moles_per_cubic_attometer = NamedUnit(6.022140759999998e+77, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_attometer', ascii_symbol='mol am^-3', symbol='molam⁻³') -millimoles_per_cubic_attometer = NamedUnit(6.022140759999999e+74, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_attometer', ascii_symbol='mmol am^-3', symbol='mmolam⁻³') -micromoles_per_cubic_attometer = NamedUnit(6.022140759999999e+71, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_attometer', ascii_symbol='umol am^-3', symbol='µmolam⁻³') -nanomoles_per_cubic_attometer = NamedUnit(6.022140759999999e+68, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_attometer', ascii_symbol='nmol am^-3', symbol='nmolam⁻³') -picomoles_per_cubic_attometer = NamedUnit(6.022140759999999e+65, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_attometer', ascii_symbol='pmol am^-3', symbol='pmolam⁻³') -femtomoles_per_cubic_attometer = NamedUnit(6.022140759999999e+62, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_attometer', ascii_symbol='fmol am^-3', symbol='fmolam⁻³') -attomoles_per_cubic_attometer = NamedUnit(6.022140759999999e+59, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_attometer', ascii_symbol='amol am^-3', symbol='amolam⁻³') -moles_per_cubic_decimeter = NamedUnit(6.022140759999998e+26, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_decimeter', ascii_symbol='mol dm^-3', symbol='moldm⁻³') -millimoles_per_cubic_decimeter = NamedUnit(6.0221407599999985e+23, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_decimeter', ascii_symbol='mmol dm^-3', symbol='mmoldm⁻³') -micromoles_per_cubic_decimeter = NamedUnit(6.022140759999999e+20, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_decimeter', ascii_symbol='umol dm^-3', symbol='µmoldm⁻³') -nanomoles_per_cubic_decimeter = NamedUnit(6.022140759999999e+17, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_decimeter', ascii_symbol='nmol dm^-3', symbol='nmoldm⁻³') -picomoles_per_cubic_decimeter = NamedUnit(602214075999999.9, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_decimeter', ascii_symbol='pmol dm^-3', symbol='pmoldm⁻³') -femtomoles_per_cubic_decimeter = NamedUnit(602214075999.9999, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_decimeter', ascii_symbol='fmol dm^-3', symbol='fmoldm⁻³') -attomoles_per_cubic_decimeter = NamedUnit(602214075.9999999, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_decimeter', ascii_symbol='amol dm^-3', symbol='amoldm⁻³') -moles_per_cubic_centimeter = NamedUnit(6.022140759999999e+29, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_centimeter', ascii_symbol='mol cm^-3', symbol='molcm⁻³') -millimoles_per_cubic_centimeter = NamedUnit(6.022140759999999e+26, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_centimeter', ascii_symbol='mmol cm^-3', symbol='mmolcm⁻³') -micromoles_per_cubic_centimeter = NamedUnit(6.022140759999999e+23, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_centimeter', ascii_symbol='umol cm^-3', symbol='µmolcm⁻³') -nanomoles_per_cubic_centimeter = NamedUnit(6.022140759999999e+20, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_centimeter', ascii_symbol='nmol cm^-3', symbol='nmolcm⁻³') -picomoles_per_cubic_centimeter = NamedUnit(6.022140759999999e+17, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_centimeter', ascii_symbol='pmol cm^-3', symbol='pmolcm⁻³') -femtomoles_per_cubic_centimeter = NamedUnit(602214075999999.9, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_centimeter', ascii_symbol='fmol cm^-3', symbol='fmolcm⁻³') -attomoles_per_cubic_centimeter = NamedUnit(602214075999.9999, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_centimeter', ascii_symbol='amol cm^-3', symbol='amolcm⁻³') -moles_per_cubic_angstrom = NamedUnit(6.022140759999999e+53, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_angstrom', ascii_symbol='mol Ang^-3', symbol='molÅ⁻³') -millimoles_per_cubic_angstrom = NamedUnit(6.02214076e+50, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_angstrom', ascii_symbol='mmol Ang^-3', symbol='mmolÅ⁻³') -micromoles_per_cubic_angstrom = NamedUnit(6.022140759999999e+47, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_angstrom', ascii_symbol='umol Ang^-3', symbol='µmolÅ⁻³') -nanomoles_per_cubic_angstrom = NamedUnit(6.02214076e+44, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_angstrom', ascii_symbol='nmol Ang^-3', symbol='nmolÅ⁻³') -picomoles_per_cubic_angstrom = NamedUnit(6.02214076e+41, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_angstrom', ascii_symbol='pmol Ang^-3', symbol='pmolÅ⁻³') -femtomoles_per_cubic_angstrom = NamedUnit(6.022140759999999e+38, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_angstrom', ascii_symbol='fmol Ang^-3', symbol='fmolÅ⁻³') -attomoles_per_cubic_angstrom = NamedUnit(6.02214076e+35, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_angstrom', ascii_symbol='amol Ang^-3', symbol='amolÅ⁻³') -moles_per_cubic_micron = NamedUnit(6.022140760000001e+41, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_micron', ascii_symbol='mol micron^-3', symbol='molmicron⁻³') -millimoles_per_cubic_micron = NamedUnit(6.022140760000001e+38, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_micron', ascii_symbol='mmol micron^-3', symbol='mmolmicron⁻³') -micromoles_per_cubic_micron = NamedUnit(6.0221407600000004e+35, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_micron', ascii_symbol='umol micron^-3', symbol='µmolmicron⁻³') -nanomoles_per_cubic_micron = NamedUnit(6.022140760000001e+32, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_micron', ascii_symbol='nmol micron^-3', symbol='nmolmicron⁻³') -picomoles_per_cubic_micron = NamedUnit(6.022140760000001e+29, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_micron', ascii_symbol='pmol micron^-3', symbol='pmolmicron⁻³') -femtomoles_per_cubic_micron = NamedUnit(6.022140760000001e+26, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_micron', ascii_symbol='fmol micron^-3', symbol='fmolmicron⁻³') -attomoles_per_cubic_micron = NamedUnit(6.0221407600000005e+23, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_micron', ascii_symbol='amol micron^-3', symbol='amolmicron⁻³') -moles_per_cubic_mile = NamedUnit(144478840228220.0, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_mile', ascii_symbol='mol miles^-3', symbol='molmiles⁻³') -millimoles_per_cubic_mile = NamedUnit(144478840228.22003, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_mile', ascii_symbol='mmol miles^-3', symbol='mmolmiles⁻³') -micromoles_per_cubic_mile = NamedUnit(144478840.22822002, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_mile', ascii_symbol='umol miles^-3', symbol='µmolmiles⁻³') -nanomoles_per_cubic_mile = NamedUnit(144478.84022822, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_mile', ascii_symbol='nmol miles^-3', symbol='nmolmiles⁻³') -picomoles_per_cubic_mile = NamedUnit(144.47884022822, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_mile', ascii_symbol='pmol miles^-3', symbol='pmolmiles⁻³') -femtomoles_per_cubic_mile = NamedUnit(0.14447884022822002, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_mile', ascii_symbol='fmol miles^-3', symbol='fmolmiles⁻³') -attomoles_per_cubic_mile = NamedUnit(0.00014447884022822003, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_mile', ascii_symbol='amol miles^-3', symbol='amolmiles⁻³') -moles_per_cubic_yard = NamedUnit(7.876662736640442e+23, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_yard', ascii_symbol='mol yrd^-3', symbol='molyrd⁻³') -millimoles_per_cubic_yard = NamedUnit(7.876662736640442e+20, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_yard', ascii_symbol='mmol yrd^-3', symbol='mmolyrd⁻³') -micromoles_per_cubic_yard = NamedUnit(7.876662736640442e+17, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_yard', ascii_symbol='umol yrd^-3', symbol='µmolyrd⁻³') -nanomoles_per_cubic_yard = NamedUnit(787666273664044.2, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_yard', ascii_symbol='nmol yrd^-3', symbol='nmolyrd⁻³') -picomoles_per_cubic_yard = NamedUnit(787666273664.0442, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_yard', ascii_symbol='pmol yrd^-3', symbol='pmolyrd⁻³') -femtomoles_per_cubic_yard = NamedUnit(787666273.6640443, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_yard', ascii_symbol='fmol yrd^-3', symbol='fmolyrd⁻³') -attomoles_per_cubic_yard = NamedUnit(787666.2736640442, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_yard', ascii_symbol='amol yrd^-3', symbol='amolyrd⁻³') -moles_per_cubic_foot = NamedUnit(2.1266989388929195e+25, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_foot', ascii_symbol='mol ft^-3', symbol='molft⁻³') -millimoles_per_cubic_foot = NamedUnit(2.1266989388929197e+22, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_foot', ascii_symbol='mmol ft^-3', symbol='mmolft⁻³') -micromoles_per_cubic_foot = NamedUnit(2.1266989388929196e+19, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_foot', ascii_symbol='umol ft^-3', symbol='µmolft⁻³') -nanomoles_per_cubic_foot = NamedUnit(2.1266989388929196e+16, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_foot', ascii_symbol='nmol ft^-3', symbol='nmolft⁻³') -picomoles_per_cubic_foot = NamedUnit(21266989388929.2, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_foot', ascii_symbol='pmol ft^-3', symbol='pmolft⁻³') -femtomoles_per_cubic_foot = NamedUnit(21266989388.9292, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_foot', ascii_symbol='fmol ft^-3', symbol='fmolft⁻³') -attomoles_per_cubic_foot = NamedUnit(21266989.388929196, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_foot', ascii_symbol='amol ft^-3', symbol='amolft⁻³') -moles_per_cubic_inch = NamedUnit(3.6749357664069658e+28, Dimensions(length=-3, moles_hint=1), name='moles_per_cubic_inch', ascii_symbol='mol in^-3', symbol='molin⁻³') -millimoles_per_cubic_inch = NamedUnit(3.674935766406966e+25, Dimensions(length=-3, moles_hint=1), name='millimoles_per_cubic_inch', ascii_symbol='mmol in^-3', symbol='mmolin⁻³') -micromoles_per_cubic_inch = NamedUnit(3.674935766406966e+22, Dimensions(length=-3, moles_hint=1), name='micromoles_per_cubic_inch', ascii_symbol='umol in^-3', symbol='µmolin⁻³') -nanomoles_per_cubic_inch = NamedUnit(3.674935766406966e+19, Dimensions(length=-3, moles_hint=1), name='nanomoles_per_cubic_inch', ascii_symbol='nmol in^-3', symbol='nmolin⁻³') -picomoles_per_cubic_inch = NamedUnit(3.674935766406966e+16, Dimensions(length=-3, moles_hint=1), name='picomoles_per_cubic_inch', ascii_symbol='pmol in^-3', symbol='pmolin⁻³') -femtomoles_per_cubic_inch = NamedUnit(36749357664069.664, Dimensions(length=-3, moles_hint=1), name='femtomoles_per_cubic_inch', ascii_symbol='fmol in^-3', symbol='fmolin⁻³') -attomoles_per_cubic_inch = NamedUnit(36749357664.069664, Dimensions(length=-3, moles_hint=1), name='attomoles_per_cubic_inch', ascii_symbol='amol in^-3', symbol='amolin⁻³') - -# -# Lookup table from symbols to units -# - -symbol_lookup = { - "m": meters, - "Em": exameters, - "Pm": petameters, - "Tm": terameters, - "Gm": gigameters, - "Mm": megameters, - "km": kilometers, - "mm": millimeters, - "um": micrometers, - "µm": micrometers, - "nm": nanometers, - "pm": picometers, - "fm": femtometers, - "am": attometers, - "dm": decimeters, - "cm": centimeters, - "s": seconds, - "ms": milliseconds, - "us": microseconds, - "µs": microseconds, - "ns": nanoseconds, - "ps": picoseconds, - "fs": femtoseconds, - "as": attoseconds, - "g": grams, - "Eg": exagrams, - "Pg": petagrams, - "Tg": teragrams, - "Gg": gigagrams, - "Mg": megagrams, - "kg": kilograms, - "mg": milligrams, - "ug": micrograms, - "µg": micrograms, - "ng": nanograms, - "pg": picograms, - "fg": femtograms, - "ag": attograms, - "A": angstroms, - "EA": exaamperes, - "PA": petaamperes, - "TA": teraamperes, - "GA": gigaamperes, - "MA": megaamperes, - "kA": kiloamperes, - "mA": milliamperes, - "uA": microamperes, - "µA": microamperes, - "nA": nanoamperes, - "pA": picoamperes, - "fA": femtoamperes, - "aA": attoamperes, - "K": kelvin, - "EK": exakelvin, - "PK": petakelvin, - "TK": terakelvin, - "GK": gigakelvin, - "MK": megakelvin, - "kK": kilokelvin, - "mK": millikelvin, - "uK": microkelvin, - "µK": microkelvin, - "nK": nanokelvin, - "pK": picokelvin, - "fK": femtokelvin, - "aK": attokelvin, - "Hz": hertz, - "EHz": exahertz, - "PHz": petahertz, - "THz": terahertz, - "GHz": gigahertz, - "MHz": megahertz, - "kHz": kilohertz, - "mHz": millihertz, - "uHz": microhertz, - "µHz": microhertz, - "nHz": nanohertz, - "pHz": picohertz, - "fHz": femtohertz, - "aHz": attohertz, - "N": newtons, - "EN": exanewtons, - "PN": petanewtons, - "TN": teranewtons, - "GN": giganewtons, - "MN": meganewtons, - "kN": kilonewtons, - "mN": millinewtons, - "uN": micronewtons, - "µN": micronewtons, - "nN": nanonewtons, - "pN": piconewtons, - "fN": femtonewtons, - "aN": attonewtons, - "Pa": pascals, - "EPa": exapascals, - "PPa": petapascals, - "TPa": terapascals, - "GPa": gigapascals, - "MPa": megapascals, - "kPa": kilopascals, - "mPa": millipascals, - "uPa": micropascals, - "µPa": micropascals, - "nPa": nanopascals, - "pPa": picopascals, - "fPa": femtopascals, - "aPa": attopascals, - "J": joules, - "EJ": exajoules, - "PJ": petajoules, - "TJ": terajoules, - "GJ": gigajoules, - "MJ": megajoules, - "kJ": kilojoules, - "mJ": millijoules, - "uJ": microjoules, - "µJ": microjoules, - "nJ": nanojoules, - "pJ": picojoules, - "fJ": femtojoules, - "aJ": attojoules, - "W": watts, - "EW": exawatts, - "PW": petawatts, - "TW": terawatts, - "GW": gigawatts, - "MW": megawatts, - "kW": kilowatts, - "mW": milliwatts, - "uW": microwatts, - "µW": microwatts, - "nW": nanowatts, - "pW": picowatts, - "fW": femtowatts, - "aW": attowatts, - "C": kelvin, - "EC": exacoulombs, - "PC": petacoulombs, - "TC": teracoulombs, - "GC": gigacoulombs, - "MC": megacoulombs, - "kC": kilocoulombs, - "mC": millicoulombs, - "uC": microcoulombs, - "µC": microcoulombs, - "nC": nanocoulombs, - "pC": picocoulombs, - "fC": femtocoulombs, - "aC": attocoulombs, - "V": volts, - "EV": exavolts, - "PV": petavolts, - "TV": teravolts, - "GV": gigavolts, - "MV": megavolts, - "kV": kilovolts, - "mV": millivolts, - "uV": microvolts, - "µV": microvolts, - "nV": nanovolts, - "pV": picovolts, - "fV": femtovolts, - "aV": attovolts, - "Ohm": ohms, - "Ω": ohms, - "EOhm": exaohms, - "EΩ": exaohms, - "POhm": petaohms, - "PΩ": petaohms, - "TOhm": teraohms, - "TΩ": teraohms, - "GOhm": gigaohms, - "GΩ": gigaohms, - "MOhm": megaohms, - "MΩ": megaohms, - "kOhm": kiloohms, - "kΩ": kiloohms, - "mOhm": milliohms, - "mΩ": milliohms, - "uOhm": microohms, - "µΩ": microohms, - "nOhm": nanoohms, - "nΩ": nanoohms, - "pOhm": picoohms, - "pΩ": picoohms, - "fOhm": femtoohms, - "fΩ": femtoohms, - "aOhm": attoohms, - "aΩ": attoohms, - "F": farads, - "EF": exafarads, - "PF": petafarads, - "TF": terafarads, - "GF": gigafarads, - "MF": megafarads, - "kF": kilofarads, - "mF": millifarads, - "uF": microfarads, - "µF": microfarads, - "nF": nanofarads, - "pF": picofarads, - "fF": femtofarads, - "aF": attofarads, - "S": siemens, - "ES": exasiemens, - "PS": petasiemens, - "TS": terasiemens, - "GS": gigasiemens, - "MS": megasiemens, - "kS": kilosiemens, - "mS": millisiemens, - "uS": microsiemens, - "µS": microsiemens, - "nS": nanosiemens, - "pS": picosiemens, - "fS": femtosiemens, - "aS": attosiemens, - "Wb": webers, - "EWb": exawebers, - "PWb": petawebers, - "TWb": terawebers, - "GWb": gigawebers, - "MWb": megawebers, - "kWb": kilowebers, - "mWb": milliwebers, - "uWb": microwebers, - "µWb": microwebers, - "nWb": nanowebers, - "pWb": picowebers, - "fWb": femtowebers, - "aWb": attowebers, - "T": tesla, - "ET": exatesla, - "PT": petatesla, - "TT": teratesla, - "GT": gigatesla, - "MT": megatesla, - "kT": kilotesla, - "mT": millitesla, - "uT": microtesla, - "µT": microtesla, - "nT": nanotesla, - "pT": picotesla, - "fT": femtotesla, - "aT": attotesla, - "H": henry, - "EH": exahenry, - "PH": petahenry, - "TH": terahenry, - "GH": gigahenry, - "MH": megahenry, - "kH": kilohenry, - "mH": millihenry, - "uH": microhenry, - "µH": microhenry, - "nH": nanohenry, - "pH": picohenry, - "fH": femtohenry, - "aH": attohenry, - "Ang": angstroms, - "Å": angstroms, - "micron": microns, - "min": minutes, - "h": hours, - "d": days, - "y": years, - "deg": degrees, - "rad": radians, - "rot": rotations, - "sr": stradians, - "l": litres, - "eV": electronvolts, - "EeV": exaelectronvolts, - "PeV": petaelectronvolts, - "TeV": teraelectronvolts, - "GeV": gigaelectronvolts, - "MeV": megaelectronvolts, - "keV": kiloelectronvolts, - "meV": millielectronvolts, - "ueV": microelectronvolts, - "µeV": microelectronvolts, - "neV": nanoelectronvolts, - "peV": picoelectronvolts, - "feV": femtoelectronvolts, - "aeV": attoelectronvolts, - "au": atomic_mass_units, - "mol": moles, - "mmol": millimoles, - "umol": micromoles, - "µmol": micromoles, - "nmol": nanomoles, - "pmol": picomoles, - "fmol": femtomoles, - "amol": attomoles, - "kgForce": kg_force, - "miles": miles, - "yrd": yards, - "ft": feet, - "in": inches, - "lb": pounds, - "lbf": pounds_force, - "oz": ounces, - "psi": pounds_force_per_square_inch, - "percent": percent, - "%": percent, - "Amps": amperes, - "amps": amperes, - "Coulombs": degrees_celsius, - "coulombs": degrees_celsius, - "yr": years, - "year": years, - "day": days, - "hr": hours, - "hour": hours, - "amu": atomic_mass_units, - "degr": degrees, - "Deg": degrees, - "degree": degrees, - "degrees": degrees, - "Degrees": degrees, - "Counts": none, - "counts": none, - "cnts": none, - "Cnts": none, - "a.u.": none, - "fraction": none, - "Fraction": none, -} - - -# -# Units by type -# - - -length = UnitGroup( - name = 'length', - units = [ - meters, - exameters, - petameters, - terameters, - gigameters, - megameters, - kilometers, - millimeters, - micrometers, - nanometers, - picometers, - femtometers, - attometers, - decimeters, - centimeters, - angstroms, - microns, - miles, - yards, - feet, - inches, -]) - -area = UnitGroup( - name = 'area', - units = [ - square_meters, - square_exameters, - square_petameters, - square_terameters, - square_gigameters, - square_megameters, - square_kilometers, - square_millimeters, - square_micrometers, - square_nanometers, - square_picometers, - square_femtometers, - square_attometers, - square_decimeters, - square_centimeters, - square_angstroms, - square_microns, - square_miles, - square_yards, - square_feet, - square_inches, -]) - -volume = UnitGroup( - name = 'volume', - units = [ - litres, - cubic_meters, - cubic_exameters, - cubic_petameters, - cubic_terameters, - cubic_gigameters, - cubic_megameters, - cubic_kilometers, - cubic_millimeters, - cubic_micrometers, - cubic_nanometers, - cubic_picometers, - cubic_femtometers, - cubic_attometers, - cubic_decimeters, - cubic_centimeters, - cubic_angstroms, - cubic_microns, - cubic_miles, - cubic_yards, - cubic_feet, - cubic_inches, -]) - -inverse_length = UnitGroup( - name = 'inverse_length', - units = [ - per_meter, - per_exameter, - per_petameter, - per_terameter, - per_gigameter, - per_megameter, - per_kilometer, - per_millimeter, - per_micrometer, - per_nanometer, - per_picometer, - per_femtometer, - per_attometer, - per_decimeter, - per_centimeter, - per_angstrom, - per_micron, - per_mile, - per_yard, - per_foot, - per_inch, -]) - -inverse_area = UnitGroup( - name = 'inverse_area', - units = [ - per_square_meter, - per_square_exameter, - per_square_petameter, - per_square_terameter, - per_square_gigameter, - per_square_megameter, - per_square_kilometer, - per_square_millimeter, - per_square_micrometer, - per_square_nanometer, - per_square_picometer, - per_square_femtometer, - per_square_attometer, - per_square_decimeter, - per_square_centimeter, - per_square_angstrom, - per_square_micron, - per_square_mile, - per_square_yard, - per_square_foot, - per_square_inch, -]) - -inverse_volume = UnitGroup( - name = 'inverse_volume', - units = [ - per_cubic_meter, - per_cubic_exameter, - per_cubic_petameter, - per_cubic_terameter, - per_cubic_gigameter, - per_cubic_megameter, - per_cubic_kilometer, - per_cubic_millimeter, - per_cubic_micrometer, - per_cubic_nanometer, - per_cubic_picometer, - per_cubic_femtometer, - per_cubic_attometer, - per_cubic_decimeter, - per_cubic_centimeter, - per_cubic_angstrom, - per_cubic_micron, - per_cubic_mile, - per_cubic_yard, - per_cubic_foot, - per_cubic_inch, -]) - -time = UnitGroup( - name = 'time', - units = [ - seconds, - milliseconds, - microseconds, - nanoseconds, - picoseconds, - femtoseconds, - attoseconds, - minutes, - hours, - days, - years, -]) - -rate = UnitGroup( - name = 'rate', - units = [ - hertz, - exahertz, - petahertz, - terahertz, - gigahertz, - megahertz, - kilohertz, - millihertz, - microhertz, - nanohertz, - picohertz, - femtohertz, - attohertz, -]) - -speed = UnitGroup( - name = 'speed', - units = [ - meters_per_second, - meters_per_millisecond, - meters_per_microsecond, - meters_per_nanosecond, - meters_per_picosecond, - meters_per_femtosecond, - meters_per_attosecond, - meters_per_minute, - meters_per_hour, - meters_per_day, - meters_per_year, - exameters_per_second, - exameters_per_millisecond, - exameters_per_microsecond, - exameters_per_nanosecond, - exameters_per_picosecond, - exameters_per_femtosecond, - exameters_per_attosecond, - exameters_per_minute, - exameters_per_hour, - exameters_per_day, - exameters_per_year, - petameters_per_second, - petameters_per_millisecond, - petameters_per_microsecond, - petameters_per_nanosecond, - petameters_per_picosecond, - petameters_per_femtosecond, - petameters_per_attosecond, - petameters_per_minute, - petameters_per_hour, - petameters_per_day, - petameters_per_year, - terameters_per_second, - terameters_per_millisecond, - terameters_per_microsecond, - terameters_per_nanosecond, - terameters_per_picosecond, - terameters_per_femtosecond, - terameters_per_attosecond, - terameters_per_minute, - terameters_per_hour, - terameters_per_day, - terameters_per_year, - gigameters_per_second, - gigameters_per_millisecond, - gigameters_per_microsecond, - gigameters_per_nanosecond, - gigameters_per_picosecond, - gigameters_per_femtosecond, - gigameters_per_attosecond, - gigameters_per_minute, - gigameters_per_hour, - gigameters_per_day, - gigameters_per_year, - megameters_per_second, - megameters_per_millisecond, - megameters_per_microsecond, - megameters_per_nanosecond, - megameters_per_picosecond, - megameters_per_femtosecond, - megameters_per_attosecond, - megameters_per_minute, - megameters_per_hour, - megameters_per_day, - megameters_per_year, - kilometers_per_second, - kilometers_per_millisecond, - kilometers_per_microsecond, - kilometers_per_nanosecond, - kilometers_per_picosecond, - kilometers_per_femtosecond, - kilometers_per_attosecond, - kilometers_per_minute, - kilometers_per_hour, - kilometers_per_day, - kilometers_per_year, - millimeters_per_second, - millimeters_per_millisecond, - millimeters_per_microsecond, - millimeters_per_nanosecond, - millimeters_per_picosecond, - millimeters_per_femtosecond, - millimeters_per_attosecond, - millimeters_per_minute, - millimeters_per_hour, - millimeters_per_day, - millimeters_per_year, - micrometers_per_second, - micrometers_per_millisecond, - micrometers_per_microsecond, - micrometers_per_nanosecond, - micrometers_per_picosecond, - micrometers_per_femtosecond, - micrometers_per_attosecond, - micrometers_per_minute, - micrometers_per_hour, - micrometers_per_day, - micrometers_per_year, - nanometers_per_second, - nanometers_per_millisecond, - nanometers_per_microsecond, - nanometers_per_nanosecond, - nanometers_per_picosecond, - nanometers_per_femtosecond, - nanometers_per_attosecond, - nanometers_per_minute, - nanometers_per_hour, - nanometers_per_day, - nanometers_per_year, - picometers_per_second, - picometers_per_millisecond, - picometers_per_microsecond, - picometers_per_nanosecond, - picometers_per_picosecond, - picometers_per_femtosecond, - picometers_per_attosecond, - picometers_per_minute, - picometers_per_hour, - picometers_per_day, - picometers_per_year, - femtometers_per_second, - femtometers_per_millisecond, - femtometers_per_microsecond, - femtometers_per_nanosecond, - femtometers_per_picosecond, - femtometers_per_femtosecond, - femtometers_per_attosecond, - femtometers_per_minute, - femtometers_per_hour, - femtometers_per_day, - femtometers_per_year, - attometers_per_second, - attometers_per_millisecond, - attometers_per_microsecond, - attometers_per_nanosecond, - attometers_per_picosecond, - attometers_per_femtosecond, - attometers_per_attosecond, - attometers_per_minute, - attometers_per_hour, - attometers_per_day, - attometers_per_year, - decimeters_per_second, - decimeters_per_millisecond, - decimeters_per_microsecond, - decimeters_per_nanosecond, - decimeters_per_picosecond, - decimeters_per_femtosecond, - decimeters_per_attosecond, - decimeters_per_minute, - decimeters_per_hour, - decimeters_per_day, - decimeters_per_year, - centimeters_per_second, - centimeters_per_millisecond, - centimeters_per_microsecond, - centimeters_per_nanosecond, - centimeters_per_picosecond, - centimeters_per_femtosecond, - centimeters_per_attosecond, - centimeters_per_minute, - centimeters_per_hour, - centimeters_per_day, - centimeters_per_year, - angstroms_per_second, - angstroms_per_millisecond, - angstroms_per_microsecond, - angstroms_per_nanosecond, - angstroms_per_picosecond, - angstroms_per_femtosecond, - angstroms_per_attosecond, - angstroms_per_minute, - angstroms_per_hour, - angstroms_per_day, - angstroms_per_year, - microns_per_second, - microns_per_millisecond, - microns_per_microsecond, - microns_per_nanosecond, - microns_per_picosecond, - microns_per_femtosecond, - microns_per_attosecond, - microns_per_minute, - microns_per_hour, - microns_per_day, - microns_per_year, - miles_per_second, - miles_per_millisecond, - miles_per_microsecond, - miles_per_nanosecond, - miles_per_picosecond, - miles_per_femtosecond, - miles_per_attosecond, - miles_per_minute, - miles_per_hour, - miles_per_day, - miles_per_year, - yards_per_second, - yards_per_millisecond, - yards_per_microsecond, - yards_per_nanosecond, - yards_per_picosecond, - yards_per_femtosecond, - yards_per_attosecond, - yards_per_minute, - yards_per_hour, - yards_per_day, - yards_per_year, - feet_per_second, - feet_per_millisecond, - feet_per_microsecond, - feet_per_nanosecond, - feet_per_picosecond, - feet_per_femtosecond, - feet_per_attosecond, - feet_per_minute, - feet_per_hour, - feet_per_day, - feet_per_year, - inches_per_second, - inches_per_millisecond, - inches_per_microsecond, - inches_per_nanosecond, - inches_per_picosecond, - inches_per_femtosecond, - inches_per_attosecond, - inches_per_minute, - inches_per_hour, - inches_per_day, - inches_per_year, -]) - -acceleration = UnitGroup( - name = 'acceleration', - units = [ - meters_per_square_second, - meters_per_square_millisecond, - meters_per_square_microsecond, - meters_per_square_nanosecond, - meters_per_square_picosecond, - meters_per_square_femtosecond, - meters_per_square_attosecond, - meters_per_square_minute, - meters_per_square_hour, - meters_per_square_day, - meters_per_square_year, - exameters_per_square_second, - exameters_per_square_millisecond, - exameters_per_square_microsecond, - exameters_per_square_nanosecond, - exameters_per_square_picosecond, - exameters_per_square_femtosecond, - exameters_per_square_attosecond, - exameters_per_square_minute, - exameters_per_square_hour, - exameters_per_square_day, - exameters_per_square_year, - petameters_per_square_second, - petameters_per_square_millisecond, - petameters_per_square_microsecond, - petameters_per_square_nanosecond, - petameters_per_square_picosecond, - petameters_per_square_femtosecond, - petameters_per_square_attosecond, - petameters_per_square_minute, - petameters_per_square_hour, - petameters_per_square_day, - petameters_per_square_year, - terameters_per_square_second, - terameters_per_square_millisecond, - terameters_per_square_microsecond, - terameters_per_square_nanosecond, - terameters_per_square_picosecond, - terameters_per_square_femtosecond, - terameters_per_square_attosecond, - terameters_per_square_minute, - terameters_per_square_hour, - terameters_per_square_day, - terameters_per_square_year, - gigameters_per_square_second, - gigameters_per_square_millisecond, - gigameters_per_square_microsecond, - gigameters_per_square_nanosecond, - gigameters_per_square_picosecond, - gigameters_per_square_femtosecond, - gigameters_per_square_attosecond, - gigameters_per_square_minute, - gigameters_per_square_hour, - gigameters_per_square_day, - gigameters_per_square_year, - megameters_per_square_second, - megameters_per_square_millisecond, - megameters_per_square_microsecond, - megameters_per_square_nanosecond, - megameters_per_square_picosecond, - megameters_per_square_femtosecond, - megameters_per_square_attosecond, - megameters_per_square_minute, - megameters_per_square_hour, - megameters_per_square_day, - megameters_per_square_year, - kilometers_per_square_second, - kilometers_per_square_millisecond, - kilometers_per_square_microsecond, - kilometers_per_square_nanosecond, - kilometers_per_square_picosecond, - kilometers_per_square_femtosecond, - kilometers_per_square_attosecond, - kilometers_per_square_minute, - kilometers_per_square_hour, - kilometers_per_square_day, - kilometers_per_square_year, - millimeters_per_square_second, - millimeters_per_square_millisecond, - millimeters_per_square_microsecond, - millimeters_per_square_nanosecond, - millimeters_per_square_picosecond, - millimeters_per_square_femtosecond, - millimeters_per_square_attosecond, - millimeters_per_square_minute, - millimeters_per_square_hour, - millimeters_per_square_day, - millimeters_per_square_year, - micrometers_per_square_second, - micrometers_per_square_millisecond, - micrometers_per_square_microsecond, - micrometers_per_square_nanosecond, - micrometers_per_square_picosecond, - micrometers_per_square_femtosecond, - micrometers_per_square_attosecond, - micrometers_per_square_minute, - micrometers_per_square_hour, - micrometers_per_square_day, - micrometers_per_square_year, - nanometers_per_square_second, - nanometers_per_square_millisecond, - nanometers_per_square_microsecond, - nanometers_per_square_nanosecond, - nanometers_per_square_picosecond, - nanometers_per_square_femtosecond, - nanometers_per_square_attosecond, - nanometers_per_square_minute, - nanometers_per_square_hour, - nanometers_per_square_day, - nanometers_per_square_year, - picometers_per_square_second, - picometers_per_square_millisecond, - picometers_per_square_microsecond, - picometers_per_square_nanosecond, - picometers_per_square_picosecond, - picometers_per_square_femtosecond, - picometers_per_square_attosecond, - picometers_per_square_minute, - picometers_per_square_hour, - picometers_per_square_day, - picometers_per_square_year, - femtometers_per_square_second, - femtometers_per_square_millisecond, - femtometers_per_square_microsecond, - femtometers_per_square_nanosecond, - femtometers_per_square_picosecond, - femtometers_per_square_femtosecond, - femtometers_per_square_attosecond, - femtometers_per_square_minute, - femtometers_per_square_hour, - femtometers_per_square_day, - femtometers_per_square_year, - attometers_per_square_second, - attometers_per_square_millisecond, - attometers_per_square_microsecond, - attometers_per_square_nanosecond, - attometers_per_square_picosecond, - attometers_per_square_femtosecond, - attometers_per_square_attosecond, - attometers_per_square_minute, - attometers_per_square_hour, - attometers_per_square_day, - attometers_per_square_year, - decimeters_per_square_second, - decimeters_per_square_millisecond, - decimeters_per_square_microsecond, - decimeters_per_square_nanosecond, - decimeters_per_square_picosecond, - decimeters_per_square_femtosecond, - decimeters_per_square_attosecond, - decimeters_per_square_minute, - decimeters_per_square_hour, - decimeters_per_square_day, - decimeters_per_square_year, - centimeters_per_square_second, - centimeters_per_square_millisecond, - centimeters_per_square_microsecond, - centimeters_per_square_nanosecond, - centimeters_per_square_picosecond, - centimeters_per_square_femtosecond, - centimeters_per_square_attosecond, - centimeters_per_square_minute, - centimeters_per_square_hour, - centimeters_per_square_day, - centimeters_per_square_year, - angstroms_per_square_second, - angstroms_per_square_millisecond, - angstroms_per_square_microsecond, - angstroms_per_square_nanosecond, - angstroms_per_square_picosecond, - angstroms_per_square_femtosecond, - angstroms_per_square_attosecond, - angstroms_per_square_minute, - angstroms_per_square_hour, - angstroms_per_square_day, - angstroms_per_square_year, - microns_per_square_second, - microns_per_square_millisecond, - microns_per_square_microsecond, - microns_per_square_nanosecond, - microns_per_square_picosecond, - microns_per_square_femtosecond, - microns_per_square_attosecond, - microns_per_square_minute, - microns_per_square_hour, - microns_per_square_day, - microns_per_square_year, - miles_per_square_second, - miles_per_square_millisecond, - miles_per_square_microsecond, - miles_per_square_nanosecond, - miles_per_square_picosecond, - miles_per_square_femtosecond, - miles_per_square_attosecond, - miles_per_square_minute, - miles_per_square_hour, - miles_per_square_day, - miles_per_square_year, - yards_per_square_second, - yards_per_square_millisecond, - yards_per_square_microsecond, - yards_per_square_nanosecond, - yards_per_square_picosecond, - yards_per_square_femtosecond, - yards_per_square_attosecond, - yards_per_square_minute, - yards_per_square_hour, - yards_per_square_day, - yards_per_square_year, - feet_per_square_second, - feet_per_square_millisecond, - feet_per_square_microsecond, - feet_per_square_nanosecond, - feet_per_square_picosecond, - feet_per_square_femtosecond, - feet_per_square_attosecond, - feet_per_square_minute, - feet_per_square_hour, - feet_per_square_day, - feet_per_square_year, - inches_per_square_second, - inches_per_square_millisecond, - inches_per_square_microsecond, - inches_per_square_nanosecond, - inches_per_square_picosecond, - inches_per_square_femtosecond, - inches_per_square_attosecond, - inches_per_square_minute, - inches_per_square_hour, - inches_per_square_day, - inches_per_square_year, -]) - -density = UnitGroup( - name = 'density', - units = [ - grams_per_cubic_meter, - exagrams_per_cubic_meter, - petagrams_per_cubic_meter, - teragrams_per_cubic_meter, - gigagrams_per_cubic_meter, - megagrams_per_cubic_meter, - kilograms_per_cubic_meter, - milligrams_per_cubic_meter, - micrograms_per_cubic_meter, - nanograms_per_cubic_meter, - picograms_per_cubic_meter, - femtograms_per_cubic_meter, - attograms_per_cubic_meter, - atomic_mass_units_per_cubic_meter, - pounds_per_cubic_meter, - ounces_per_cubic_meter, - grams_per_cubic_exameter, - exagrams_per_cubic_exameter, - petagrams_per_cubic_exameter, - teragrams_per_cubic_exameter, - gigagrams_per_cubic_exameter, - megagrams_per_cubic_exameter, - kilograms_per_cubic_exameter, - milligrams_per_cubic_exameter, - micrograms_per_cubic_exameter, - nanograms_per_cubic_exameter, - picograms_per_cubic_exameter, - femtograms_per_cubic_exameter, - attograms_per_cubic_exameter, - atomic_mass_units_per_cubic_exameter, - pounds_per_cubic_exameter, - ounces_per_cubic_exameter, - grams_per_cubic_petameter, - exagrams_per_cubic_petameter, - petagrams_per_cubic_petameter, - teragrams_per_cubic_petameter, - gigagrams_per_cubic_petameter, - megagrams_per_cubic_petameter, - kilograms_per_cubic_petameter, - milligrams_per_cubic_petameter, - micrograms_per_cubic_petameter, - nanograms_per_cubic_petameter, - picograms_per_cubic_petameter, - femtograms_per_cubic_petameter, - attograms_per_cubic_petameter, - atomic_mass_units_per_cubic_petameter, - pounds_per_cubic_petameter, - ounces_per_cubic_petameter, - grams_per_cubic_terameter, - exagrams_per_cubic_terameter, - petagrams_per_cubic_terameter, - teragrams_per_cubic_terameter, - gigagrams_per_cubic_terameter, - megagrams_per_cubic_terameter, - kilograms_per_cubic_terameter, - milligrams_per_cubic_terameter, - micrograms_per_cubic_terameter, - nanograms_per_cubic_terameter, - picograms_per_cubic_terameter, - femtograms_per_cubic_terameter, - attograms_per_cubic_terameter, - atomic_mass_units_per_cubic_terameter, - pounds_per_cubic_terameter, - ounces_per_cubic_terameter, - grams_per_cubic_gigameter, - exagrams_per_cubic_gigameter, - petagrams_per_cubic_gigameter, - teragrams_per_cubic_gigameter, - gigagrams_per_cubic_gigameter, - megagrams_per_cubic_gigameter, - kilograms_per_cubic_gigameter, - milligrams_per_cubic_gigameter, - micrograms_per_cubic_gigameter, - nanograms_per_cubic_gigameter, - picograms_per_cubic_gigameter, - femtograms_per_cubic_gigameter, - attograms_per_cubic_gigameter, - atomic_mass_units_per_cubic_gigameter, - pounds_per_cubic_gigameter, - ounces_per_cubic_gigameter, - grams_per_cubic_megameter, - exagrams_per_cubic_megameter, - petagrams_per_cubic_megameter, - teragrams_per_cubic_megameter, - gigagrams_per_cubic_megameter, - megagrams_per_cubic_megameter, - kilograms_per_cubic_megameter, - milligrams_per_cubic_megameter, - micrograms_per_cubic_megameter, - nanograms_per_cubic_megameter, - picograms_per_cubic_megameter, - femtograms_per_cubic_megameter, - attograms_per_cubic_megameter, - atomic_mass_units_per_cubic_megameter, - pounds_per_cubic_megameter, - ounces_per_cubic_megameter, - grams_per_cubic_kilometer, - exagrams_per_cubic_kilometer, - petagrams_per_cubic_kilometer, - teragrams_per_cubic_kilometer, - gigagrams_per_cubic_kilometer, - megagrams_per_cubic_kilometer, - kilograms_per_cubic_kilometer, - milligrams_per_cubic_kilometer, - micrograms_per_cubic_kilometer, - nanograms_per_cubic_kilometer, - picograms_per_cubic_kilometer, - femtograms_per_cubic_kilometer, - attograms_per_cubic_kilometer, - atomic_mass_units_per_cubic_kilometer, - pounds_per_cubic_kilometer, - ounces_per_cubic_kilometer, - grams_per_cubic_millimeter, - exagrams_per_cubic_millimeter, - petagrams_per_cubic_millimeter, - teragrams_per_cubic_millimeter, - gigagrams_per_cubic_millimeter, - megagrams_per_cubic_millimeter, - kilograms_per_cubic_millimeter, - milligrams_per_cubic_millimeter, - micrograms_per_cubic_millimeter, - nanograms_per_cubic_millimeter, - picograms_per_cubic_millimeter, - femtograms_per_cubic_millimeter, - attograms_per_cubic_millimeter, - atomic_mass_units_per_cubic_millimeter, - pounds_per_cubic_millimeter, - ounces_per_cubic_millimeter, - grams_per_cubic_micrometer, - exagrams_per_cubic_micrometer, - petagrams_per_cubic_micrometer, - teragrams_per_cubic_micrometer, - gigagrams_per_cubic_micrometer, - megagrams_per_cubic_micrometer, - kilograms_per_cubic_micrometer, - milligrams_per_cubic_micrometer, - micrograms_per_cubic_micrometer, - nanograms_per_cubic_micrometer, - picograms_per_cubic_micrometer, - femtograms_per_cubic_micrometer, - attograms_per_cubic_micrometer, - atomic_mass_units_per_cubic_micrometer, - pounds_per_cubic_micrometer, - ounces_per_cubic_micrometer, - grams_per_cubic_nanometer, - exagrams_per_cubic_nanometer, - petagrams_per_cubic_nanometer, - teragrams_per_cubic_nanometer, - gigagrams_per_cubic_nanometer, - megagrams_per_cubic_nanometer, - kilograms_per_cubic_nanometer, - milligrams_per_cubic_nanometer, - micrograms_per_cubic_nanometer, - nanograms_per_cubic_nanometer, - picograms_per_cubic_nanometer, - femtograms_per_cubic_nanometer, - attograms_per_cubic_nanometer, - atomic_mass_units_per_cubic_nanometer, - pounds_per_cubic_nanometer, - ounces_per_cubic_nanometer, - grams_per_cubic_picometer, - exagrams_per_cubic_picometer, - petagrams_per_cubic_picometer, - teragrams_per_cubic_picometer, - gigagrams_per_cubic_picometer, - megagrams_per_cubic_picometer, - kilograms_per_cubic_picometer, - milligrams_per_cubic_picometer, - micrograms_per_cubic_picometer, - nanograms_per_cubic_picometer, - picograms_per_cubic_picometer, - femtograms_per_cubic_picometer, - attograms_per_cubic_picometer, - atomic_mass_units_per_cubic_picometer, - pounds_per_cubic_picometer, - ounces_per_cubic_picometer, - grams_per_cubic_femtometer, - exagrams_per_cubic_femtometer, - petagrams_per_cubic_femtometer, - teragrams_per_cubic_femtometer, - gigagrams_per_cubic_femtometer, - megagrams_per_cubic_femtometer, - kilograms_per_cubic_femtometer, - milligrams_per_cubic_femtometer, - micrograms_per_cubic_femtometer, - nanograms_per_cubic_femtometer, - picograms_per_cubic_femtometer, - femtograms_per_cubic_femtometer, - attograms_per_cubic_femtometer, - atomic_mass_units_per_cubic_femtometer, - pounds_per_cubic_femtometer, - ounces_per_cubic_femtometer, - grams_per_cubic_attometer, - exagrams_per_cubic_attometer, - petagrams_per_cubic_attometer, - teragrams_per_cubic_attometer, - gigagrams_per_cubic_attometer, - megagrams_per_cubic_attometer, - kilograms_per_cubic_attometer, - milligrams_per_cubic_attometer, - micrograms_per_cubic_attometer, - nanograms_per_cubic_attometer, - picograms_per_cubic_attometer, - femtograms_per_cubic_attometer, - attograms_per_cubic_attometer, - atomic_mass_units_per_cubic_attometer, - pounds_per_cubic_attometer, - ounces_per_cubic_attometer, - grams_per_cubic_decimeter, - exagrams_per_cubic_decimeter, - petagrams_per_cubic_decimeter, - teragrams_per_cubic_decimeter, - gigagrams_per_cubic_decimeter, - megagrams_per_cubic_decimeter, - kilograms_per_cubic_decimeter, - milligrams_per_cubic_decimeter, - micrograms_per_cubic_decimeter, - nanograms_per_cubic_decimeter, - picograms_per_cubic_decimeter, - femtograms_per_cubic_decimeter, - attograms_per_cubic_decimeter, - atomic_mass_units_per_cubic_decimeter, - pounds_per_cubic_decimeter, - ounces_per_cubic_decimeter, - grams_per_cubic_centimeter, - exagrams_per_cubic_centimeter, - petagrams_per_cubic_centimeter, - teragrams_per_cubic_centimeter, - gigagrams_per_cubic_centimeter, - megagrams_per_cubic_centimeter, - kilograms_per_cubic_centimeter, - milligrams_per_cubic_centimeter, - micrograms_per_cubic_centimeter, - nanograms_per_cubic_centimeter, - picograms_per_cubic_centimeter, - femtograms_per_cubic_centimeter, - attograms_per_cubic_centimeter, - atomic_mass_units_per_cubic_centimeter, - pounds_per_cubic_centimeter, - ounces_per_cubic_centimeter, - grams_per_cubic_angstrom, - exagrams_per_cubic_angstrom, - petagrams_per_cubic_angstrom, - teragrams_per_cubic_angstrom, - gigagrams_per_cubic_angstrom, - megagrams_per_cubic_angstrom, - kilograms_per_cubic_angstrom, - milligrams_per_cubic_angstrom, - micrograms_per_cubic_angstrom, - nanograms_per_cubic_angstrom, - picograms_per_cubic_angstrom, - femtograms_per_cubic_angstrom, - attograms_per_cubic_angstrom, - atomic_mass_units_per_cubic_angstrom, - pounds_per_cubic_angstrom, - ounces_per_cubic_angstrom, - grams_per_cubic_micron, - exagrams_per_cubic_micron, - petagrams_per_cubic_micron, - teragrams_per_cubic_micron, - gigagrams_per_cubic_micron, - megagrams_per_cubic_micron, - kilograms_per_cubic_micron, - milligrams_per_cubic_micron, - micrograms_per_cubic_micron, - nanograms_per_cubic_micron, - picograms_per_cubic_micron, - femtograms_per_cubic_micron, - attograms_per_cubic_micron, - atomic_mass_units_per_cubic_micron, - pounds_per_cubic_micron, - ounces_per_cubic_micron, - grams_per_cubic_mile, - exagrams_per_cubic_mile, - petagrams_per_cubic_mile, - teragrams_per_cubic_mile, - gigagrams_per_cubic_mile, - megagrams_per_cubic_mile, - kilograms_per_cubic_mile, - milligrams_per_cubic_mile, - micrograms_per_cubic_mile, - nanograms_per_cubic_mile, - picograms_per_cubic_mile, - femtograms_per_cubic_mile, - attograms_per_cubic_mile, - atomic_mass_units_per_cubic_mile, - pounds_per_cubic_mile, - ounces_per_cubic_mile, - grams_per_cubic_yard, - exagrams_per_cubic_yard, - petagrams_per_cubic_yard, - teragrams_per_cubic_yard, - gigagrams_per_cubic_yard, - megagrams_per_cubic_yard, - kilograms_per_cubic_yard, - milligrams_per_cubic_yard, - micrograms_per_cubic_yard, - nanograms_per_cubic_yard, - picograms_per_cubic_yard, - femtograms_per_cubic_yard, - attograms_per_cubic_yard, - atomic_mass_units_per_cubic_yard, - pounds_per_cubic_yard, - ounces_per_cubic_yard, - grams_per_cubic_foot, - exagrams_per_cubic_foot, - petagrams_per_cubic_foot, - teragrams_per_cubic_foot, - gigagrams_per_cubic_foot, - megagrams_per_cubic_foot, - kilograms_per_cubic_foot, - milligrams_per_cubic_foot, - micrograms_per_cubic_foot, - nanograms_per_cubic_foot, - picograms_per_cubic_foot, - femtograms_per_cubic_foot, - attograms_per_cubic_foot, - atomic_mass_units_per_cubic_foot, - pounds_per_cubic_foot, - ounces_per_cubic_foot, - grams_per_cubic_inch, - exagrams_per_cubic_inch, - petagrams_per_cubic_inch, - teragrams_per_cubic_inch, - gigagrams_per_cubic_inch, - megagrams_per_cubic_inch, - kilograms_per_cubic_inch, - milligrams_per_cubic_inch, - micrograms_per_cubic_inch, - nanograms_per_cubic_inch, - picograms_per_cubic_inch, - femtograms_per_cubic_inch, - attograms_per_cubic_inch, - atomic_mass_units_per_cubic_inch, - pounds_per_cubic_inch, - ounces_per_cubic_inch, -]) - -force = UnitGroup( - name = 'force', - units = [ - newtons, - exanewtons, - petanewtons, - teranewtons, - giganewtons, - meganewtons, - kilonewtons, - millinewtons, - micronewtons, - nanonewtons, - piconewtons, - femtonewtons, - attonewtons, - kg_force, - pounds_force, -]) - -pressure = UnitGroup( - name = 'pressure', - units = [ - pascals, - exapascals, - petapascals, - terapascals, - gigapascals, - megapascals, - kilopascals, - millipascals, - micropascals, - nanopascals, - picopascals, - femtopascals, - attopascals, - pounds_force_per_square_inch, -]) - -energy = UnitGroup( - name = 'energy', - units = [ - joules, - exajoules, - petajoules, - terajoules, - gigajoules, - megajoules, - kilojoules, - millijoules, - microjoules, - nanojoules, - picojoules, - femtojoules, - attojoules, - electronvolts, - exaelectronvolts, - petaelectronvolts, - teraelectronvolts, - gigaelectronvolts, - megaelectronvolts, - kiloelectronvolts, - millielectronvolts, - microelectronvolts, - nanoelectronvolts, - picoelectronvolts, - femtoelectronvolts, - attoelectronvolts, -]) - -power = UnitGroup( - name = 'power', - units = [ - watts, - exawatts, - petawatts, - terawatts, - gigawatts, - megawatts, - kilowatts, - milliwatts, - microwatts, - nanowatts, - picowatts, - femtowatts, - attowatts, -]) - -charge = UnitGroup( - name = 'charge', - units = [ - coulombs, - exacoulombs, - petacoulombs, - teracoulombs, - gigacoulombs, - megacoulombs, - kilocoulombs, - millicoulombs, - microcoulombs, - nanocoulombs, - picocoulombs, - femtocoulombs, - attocoulombs, -]) - -potential = UnitGroup( - name = 'potential', - units = [ - volts, - exavolts, - petavolts, - teravolts, - gigavolts, - megavolts, - kilovolts, - millivolts, - microvolts, - nanovolts, - picovolts, - femtovolts, - attovolts, -]) - -resistance = UnitGroup( - name = 'resistance', - units = [ - ohms, - exaohms, - petaohms, - teraohms, - gigaohms, - megaohms, - kiloohms, - milliohms, - microohms, - nanoohms, - picoohms, - femtoohms, - attoohms, -]) - -capacitance = UnitGroup( - name = 'capacitance', - units = [ - farads, - exafarads, - petafarads, - terafarads, - gigafarads, - megafarads, - kilofarads, - millifarads, - microfarads, - nanofarads, - picofarads, - femtofarads, - attofarads, -]) - -conductance = UnitGroup( - name = 'conductance', - units = [ - siemens, - exasiemens, - petasiemens, - terasiemens, - gigasiemens, - megasiemens, - kilosiemens, - millisiemens, - microsiemens, - nanosiemens, - picosiemens, - femtosiemens, - attosiemens, -]) - -magnetic_flux = UnitGroup( - name = 'magnetic_flux', - units = [ - webers, - exawebers, - petawebers, - terawebers, - gigawebers, - megawebers, - kilowebers, - milliwebers, - microwebers, - nanowebers, - picowebers, - femtowebers, - attowebers, -]) - -magnetic_flux_density = UnitGroup( - name = 'magnetic_flux_density', - units = [ - tesla, - exatesla, - petatesla, - teratesla, - gigatesla, - megatesla, - kilotesla, - millitesla, - microtesla, - nanotesla, - picotesla, - femtotesla, - attotesla, -]) - -inductance = UnitGroup( - name = 'inductance', - units = [ - henry, - exahenry, - petahenry, - terahenry, - gigahenry, - megahenry, - kilohenry, - millihenry, - microhenry, - nanohenry, - picohenry, - femtohenry, - attohenry, -]) - -temperature = UnitGroup( - name = 'temperature', - units = [ - kelvin, - exakelvin, - petakelvin, - terakelvin, - gigakelvin, - megakelvin, - kilokelvin, - millikelvin, - microkelvin, - nanokelvin, - picokelvin, - femtokelvin, - attokelvin, - degrees_celsius, -]) - -dimensionless = UnitGroup( - name = 'dimensionless', - units = [ - none, - percent, -]) - -angle = UnitGroup( - name = 'angle', - units = [ - degrees, - radians, - rotations, -]) - -solid_angle = UnitGroup( - name = 'solid_angle', - units = [ - stradians, -]) - -amount = UnitGroup( - name = 'amount', - units = [ - moles, - millimoles, - micromoles, - nanomoles, - picomoles, - femtomoles, - attomoles, -]) - -concentration = UnitGroup( - name = 'concentration', - units = [ - moles_per_cubic_meter, - millimoles_per_cubic_meter, - micromoles_per_cubic_meter, - nanomoles_per_cubic_meter, - picomoles_per_cubic_meter, - femtomoles_per_cubic_meter, - attomoles_per_cubic_meter, - moles_per_cubic_exameter, - millimoles_per_cubic_exameter, - micromoles_per_cubic_exameter, - nanomoles_per_cubic_exameter, - picomoles_per_cubic_exameter, - femtomoles_per_cubic_exameter, - attomoles_per_cubic_exameter, - moles_per_cubic_petameter, - millimoles_per_cubic_petameter, - micromoles_per_cubic_petameter, - nanomoles_per_cubic_petameter, - picomoles_per_cubic_petameter, - femtomoles_per_cubic_petameter, - attomoles_per_cubic_petameter, - moles_per_cubic_terameter, - millimoles_per_cubic_terameter, - micromoles_per_cubic_terameter, - nanomoles_per_cubic_terameter, - picomoles_per_cubic_terameter, - femtomoles_per_cubic_terameter, - attomoles_per_cubic_terameter, - moles_per_cubic_gigameter, - millimoles_per_cubic_gigameter, - micromoles_per_cubic_gigameter, - nanomoles_per_cubic_gigameter, - picomoles_per_cubic_gigameter, - femtomoles_per_cubic_gigameter, - attomoles_per_cubic_gigameter, - moles_per_cubic_megameter, - millimoles_per_cubic_megameter, - micromoles_per_cubic_megameter, - nanomoles_per_cubic_megameter, - picomoles_per_cubic_megameter, - femtomoles_per_cubic_megameter, - attomoles_per_cubic_megameter, - moles_per_cubic_kilometer, - millimoles_per_cubic_kilometer, - micromoles_per_cubic_kilometer, - nanomoles_per_cubic_kilometer, - picomoles_per_cubic_kilometer, - femtomoles_per_cubic_kilometer, - attomoles_per_cubic_kilometer, - moles_per_cubic_millimeter, - millimoles_per_cubic_millimeter, - micromoles_per_cubic_millimeter, - nanomoles_per_cubic_millimeter, - picomoles_per_cubic_millimeter, - femtomoles_per_cubic_millimeter, - attomoles_per_cubic_millimeter, - moles_per_cubic_micrometer, - millimoles_per_cubic_micrometer, - micromoles_per_cubic_micrometer, - nanomoles_per_cubic_micrometer, - picomoles_per_cubic_micrometer, - femtomoles_per_cubic_micrometer, - attomoles_per_cubic_micrometer, - moles_per_cubic_nanometer, - millimoles_per_cubic_nanometer, - micromoles_per_cubic_nanometer, - nanomoles_per_cubic_nanometer, - picomoles_per_cubic_nanometer, - femtomoles_per_cubic_nanometer, - attomoles_per_cubic_nanometer, - moles_per_cubic_picometer, - millimoles_per_cubic_picometer, - micromoles_per_cubic_picometer, - nanomoles_per_cubic_picometer, - picomoles_per_cubic_picometer, - femtomoles_per_cubic_picometer, - attomoles_per_cubic_picometer, - moles_per_cubic_femtometer, - millimoles_per_cubic_femtometer, - micromoles_per_cubic_femtometer, - nanomoles_per_cubic_femtometer, - picomoles_per_cubic_femtometer, - femtomoles_per_cubic_femtometer, - attomoles_per_cubic_femtometer, - moles_per_cubic_attometer, - millimoles_per_cubic_attometer, - micromoles_per_cubic_attometer, - nanomoles_per_cubic_attometer, - picomoles_per_cubic_attometer, - femtomoles_per_cubic_attometer, - attomoles_per_cubic_attometer, - moles_per_cubic_decimeter, - millimoles_per_cubic_decimeter, - micromoles_per_cubic_decimeter, - nanomoles_per_cubic_decimeter, - picomoles_per_cubic_decimeter, - femtomoles_per_cubic_decimeter, - attomoles_per_cubic_decimeter, - moles_per_cubic_centimeter, - millimoles_per_cubic_centimeter, - micromoles_per_cubic_centimeter, - nanomoles_per_cubic_centimeter, - picomoles_per_cubic_centimeter, - femtomoles_per_cubic_centimeter, - attomoles_per_cubic_centimeter, - moles_per_cubic_angstrom, - millimoles_per_cubic_angstrom, - micromoles_per_cubic_angstrom, - nanomoles_per_cubic_angstrom, - picomoles_per_cubic_angstrom, - femtomoles_per_cubic_angstrom, - attomoles_per_cubic_angstrom, - moles_per_cubic_micron, - millimoles_per_cubic_micron, - micromoles_per_cubic_micron, - nanomoles_per_cubic_micron, - picomoles_per_cubic_micron, - femtomoles_per_cubic_micron, - attomoles_per_cubic_micron, - moles_per_cubic_mile, - millimoles_per_cubic_mile, - micromoles_per_cubic_mile, - nanomoles_per_cubic_mile, - picomoles_per_cubic_mile, - femtomoles_per_cubic_mile, - attomoles_per_cubic_mile, - moles_per_cubic_yard, - millimoles_per_cubic_yard, - micromoles_per_cubic_yard, - nanomoles_per_cubic_yard, - picomoles_per_cubic_yard, - femtomoles_per_cubic_yard, - attomoles_per_cubic_yard, - moles_per_cubic_foot, - millimoles_per_cubic_foot, - micromoles_per_cubic_foot, - nanomoles_per_cubic_foot, - picomoles_per_cubic_foot, - femtomoles_per_cubic_foot, - attomoles_per_cubic_foot, - moles_per_cubic_inch, - millimoles_per_cubic_inch, - micromoles_per_cubic_inch, - nanomoles_per_cubic_inch, - picomoles_per_cubic_inch, - femtomoles_per_cubic_inch, - attomoles_per_cubic_inch, -]) - - -unit_group_names = [ - 'length', - 'area', - 'volume', - 'inverse_length', - 'inverse_area', - 'inverse_volume', - 'time', - 'rate', - 'speed', - 'acceleration', - 'density', - 'force', - 'pressure', - 'energy', - 'power', - 'charge', - 'potential', - 'resistance', - 'capacitance', - 'conductance', - 'magnetic_flux', - 'magnetic_flux_density', - 'inductance', - 'temperature', - 'dimensionless', - 'angle', - 'solid_angle', - 'amount', - 'concentration', -] - -unit_groups = { - 'length': length, - 'area': area, - 'volume': volume, - 'inverse_length': inverse_length, - 'inverse_area': inverse_area, - 'inverse_volume': inverse_volume, - 'time': time, - 'rate': rate, - 'speed': speed, - 'acceleration': acceleration, - 'density': density, - 'force': force, - 'pressure': pressure, - 'energy': energy, - 'power': power, - 'charge': charge, - 'potential': potential, - 'resistance': resistance, - 'capacitance': capacitance, - 'conductance': conductance, - 'magnetic_flux': magnetic_flux, - 'magnetic_flux_density': magnetic_flux_density, - 'inductance': inductance, - 'temperature': temperature, - 'dimensionless': dimensionless, - 'angle': angle, - 'solid_angle': solid_angle, - 'amount': amount, - 'concentration': concentration, -} - +# This file is intentionally blank. It needs to exist so that the +# module loader can load it as a module, but the actual contents are +# dynamically created in __init__.py diff --git a/sasdata/refactor_roadmap.rst b/sasdata/refactor_roadmap.rst new file mode 100644 index 000000000..03d2ffb99 --- /dev/null +++ b/sasdata/refactor_roadmap.rst @@ -0,0 +1,92 @@ +* percentages updated last on 6th February 2026 + +SasData Side +============ + +* Load data into memory as SasData objects + + * From different sources + + * Text + * ASCII (95%) + * XML (95%) + * HDF5 (95%) + + * known mistakes (living object) + +* Have calculations of errors and tracking of objects + + * Low level implementation of error prop (95%) + * Linking of data (10%) + * Independent source identification (50%, but see above) + + * Make a decision (0%) + * Carefully document said decision (0%) + + * Units (95%) + + * Unit conversion (100%) + * Unit parsing (95%) + * Big file of useful units and not so useful units (80%) + * Printing units (95%) + + * Operations on Quantities + + * Arithmetic operations (95%) + * Special and not so special functions (90%) + * Linear algebra (30%) + +* Operation on datasets + + * Rebinning (60%) + * Slicing backend [integration] (see above) + * Adding extra annotations (0%) + +* Trends + + * Construct trend (70%) + * Interpolate axes (80%) + +* Save data + + * Into something readable (JSON) (95%) + * Into HDF5 (95%) + +Develop a Rigorous Testing Framework For Critical Objects +========================================================= + +Currently lots of tests, but we should be more systematic. + + + + +SasView Side (Integration) +========================== + +* ASCII loader interface (90%) +* Data explorer refactor (30%) + + * Represent data in GUI (85%) + * Represent plots in GUI (0%) + * Represent links between data in GUI (0%) + * Represent perspectives in GUI (0%) + * Represent trends in GUI (0%) + +* Trends + + * Suggest metadata (65%) + * Present options to user (0%) + +* Perspectives + + * Make them accept new data object (25%) + * Batch stuff should become trend stuff (0%) + +* Slicing + + * Refactor slicers for new backend (0%) + + +`_________|o=o\______` -> this way + + diff --git a/sasdata/sasdata_design_decisions.rst b/sasdata/sasdata_design_decisions.rst new file mode 100644 index 000000000..de674ba95 --- /dev/null +++ b/sasdata/sasdata_design_decisions.rst @@ -0,0 +1,57 @@ +SasData Refactor Principles +=========================== + + +Fundamental choices +------------------- + +1: Data is Immutable +==================== + +We want data to be cross referenced and keep track of important information about correlations. Furthermore, to follow +FAIR principles we want a record of this. + +It is very hard to do these things if we allow data to be mutable. This doesn't mean you can't copy the contents +of a data and change the copy, then make a new data object. + +2: Data is tracked +================== + +Again, within the SasData objects, operations are tracked. This allows use to propagate uncertainties correctly +and keep a FAIR record. + +3: Data objects are mostly agnostic to their contents +===================================================== + +To represent more general kinds of data in uniform way, we have data objects that don't specifically have q/I axes. +All axes are however named, and dimensionality is implicit. + +3b: Data types are "duck-typed" +=============================== + +The way whether we tell data is, for example, Q/I data is by checking the axes names, not by the class. + +Note: Some checks of this kind should probably be implemented as utility functions + +3c: Errors are bound to quantities +================================== + +Errors are bound to the quantities they correspond to, so for example, I and dI are held in a single object. + +Note: It is probably incorrect to associate Q and dQ like this, as they don't follow standard error propagation rules, +instead, use supplementary information. + + +4: Relationship to models is specified in the data class +======================================================== + +The processing steps needed to convert model outputs to something comparable to the data is included in the `modelling +requirements` section. Making use of this is optional. + + + +5: Trends +========= + +Have collections of SasData objects that can be treated together, e.g. as functions of some variable, field, concentration + diff --git a/sasdata/slicing/__init__.py b/sasdata/slicing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/slicing/geometry.py b/sasdata/slicing/geometry.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/slicing/meshes/__init__.py b/sasdata/slicing/meshes/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/slicing/meshes/delaunay_mesh.py b/sasdata/slicing/meshes/delaunay_mesh.py new file mode 100644 index 000000000..d0c729a91 --- /dev/null +++ b/sasdata/slicing/meshes/delaunay_mesh.py @@ -0,0 +1,33 @@ +import numpy as np +from scipy.spatial import Delaunay + +from sasdata.slicing.meshes.mesh import Mesh + + +def delaunay_mesh(x, y) -> Mesh: + """ Create a triangulated mesh based on input points """ + + input_data = np.array((x, y)).T + delaunay = Delaunay(input_data) + + return Mesh(points=input_data, cells=delaunay.simplices) + + +if __name__ == "__main__": + import matplotlib.pyplot as plt + + points = np.random.random((100, 2)) + mesh = delaunay_mesh(points[:,0], points[:,1]) + mesh.show(actually_show=False) + + print(mesh.cells[50]) + + # pick random cell to show + for cell in mesh.cells_to_edges[10]: + a, b = mesh.edges[cell] + plt.plot( + [mesh.points[a][0], mesh.points[b][0]], + [mesh.points[a][1], mesh.points[b][1]], + color='r') + + plt.show() diff --git a/sasdata/slicing/meshes/mesh.py b/sasdata/slicing/meshes/mesh.py new file mode 100644 index 000000000..a3e8c0fa0 --- /dev/null +++ b/sasdata/slicing/meshes/mesh.py @@ -0,0 +1,240 @@ +from collections.abc import Sequence + +import matplotlib.pyplot as plt +import numpy as np +from matplotlib import cm +from matplotlib.collections import LineCollection + +from sasdata.slicing.meshes.util import closed_loop_edges + + +class Mesh: + def __init__(self, + points: np.ndarray, + cells: Sequence[Sequence[int]]): + + """ + Object representing a mesh. + + Parameters are the values: + mesh points + map from edge to points + map from cells to edges + + it is done this way to ensure a non-redundant representation of cells and edges, + however there are no checks for the topology of the mesh, this is assumed to be done by + whatever creates it. There are also no checks for ordering of cells. + + :param points: points in 2D forming vertices of the mesh + :param cells: ordered lists of indices of points forming each cell (face) + + """ + + self.points = points + self.cells = cells + + # Get edges + + edges = set() + for cell_index, cell in enumerate(cells): + + for a, b in closed_loop_edges(cell): + # make sure the representation is unique + if a > b: + edges.add((a, b)) + else: + edges.add((b, a)) + + self.edges = list(edges) + + # Associate edges with faces + + edge_lookup = {edge: i for i, edge in enumerate(self.edges)} + self.cells_to_edges = [] + self.cells_to_edges_signs = [] + + for cell in cells: + + this_cell_data = [] + this_sign_data = [] + + for a, b in closed_loop_edges(cell): + # make sure the representation is unique + if a > b: + this_cell_data.append(edge_lookup[(a, b)]) + this_sign_data.append(1) + else: + this_cell_data.append(edge_lookup[(b, a)]) + this_sign_data.append(-1) + + self.cells_to_edges.append(this_cell_data) + self.cells_to_edges_signs.append(this_sign_data) + + # Counts for elements + self.n_points = self.points.shape[0] + self.n_edges = len(self.edges) + self.n_cells = len(self.cells) + + # Areas + self._areas = None + + + @property + def areas(self): + """ Areas of cells """ + + if self._areas is None: + # Calculate areas + areas = [] + for cell in self.cells: + # Use triangle shoelace formula, basically calculate the + # determinant based on of triangles with one point at 0,0 + a_times_2 = 0.0 + for i1, i2 in closed_loop_edges(cell): + p1 = self.points[i1, :] + p2 = self.points[i2, :] + a_times_2 += p1[0]*p2[1] - p1[1]*p2[0] + + areas.append(0.5*np.abs(a_times_2)) + + # Save in cache + self._areas = np.array(areas) + + # Return cache + return self._areas + + + def show(self, actually_show=True, show_labels=False, **kwargs): + """ Show on a plot """ + ax = plt.gca() + segments = [[self.points[edge[0]], self.points[edge[1]]] for edge in self.edges] + line_collection = LineCollection(segments=segments, **kwargs) + ax.add_collection(line_collection) + + if show_labels: + text_color = kwargs["color"] if "color" in kwargs else 'k' + for i, cell in enumerate(self.cells): + xy = np.sum(self.points[cell, :], axis=0)/len(cell) + ax.text(xy[0], xy[1], str(i), horizontalalignment="center", verticalalignment="center", color=text_color) + + x_limits = [np.min(self.points[:,0]), np.max(self.points[:,0])] + y_limits = [np.min(self.points[:,1]), np.max(self.points[:,1])] + + plt.xlim(x_limits) + plt.ylim(y_limits) + + if actually_show: + plt.show() + + def locate_points(self, x: np.ndarray, y: np.ndarray): + """ Find the cells that contain the specified points""" + + x = x.reshape(-1) + y = y.reshape(-1) + + # The most simple implementation is not particularly fast, especially in python + # + # Less obvious, but hopefully faster strategy + # + # Ultimately, checking the inclusion of a point within a polygon + # requires checking the crossings of a half line with the polygon's + # edges. + # + # A fairly efficient thing to do is to check every edge for crossing + # the axis parallel lines x=point_x. + # Then these edges that cross can map back to the polygons they're in + # and a final check for inclusion can be done with the edge sign property + # and some explicit checking of the + # + # Basic idea is: + # 1) build a matrix for each point-edge pair + # True if the edge crosses the half-line above a point + # 2) for each cell get the winding number by evaluating the + # sum of the component edges, weighted 1/-1 according to direction + + + edges = np.array(self.edges) + + edge_xy_1 = self.points[edges[:, 0], :] + edge_xy_2 = self.points[edges[:, 1], :] + + edge_x_1 = edge_xy_1[:, 0] + edge_x_2 = edge_xy_2[:, 0] + + + + # Make an n_edges-by-n_inputs boolean matrix that indicates which of the + # edges cross x=points_x line + crossers = np.logical_xor( + edge_x_1.reshape(-1, 1) < x.reshape(1, -1), + edge_x_2.reshape(-1, 1) < x.reshape(1, -1)) + + # Calculate the gradients, some might be infs, but none that matter will be + # TODO: Disable warnings + gradients = (edge_xy_2[:, 1] - edge_xy_1[:, 1]) / (edge_xy_2[:, 0] - edge_xy_1[:, 0]) + + # Distance to crossing points edge 0 + delta_x = x.reshape(1, -1) - edge_x_1.reshape(-1, 1) + + # Signed distance from point to y (doesn't really matter which sign) + delta_y = gradients.reshape(-1, 1) * delta_x + edge_xy_1[:, 1:] - y.reshape(1, -1) + + score_matrix = np.logical_and(delta_y > 0, crossers) + + output = -np.ones(len(x), dtype=int) + for cell_index, (cell_edges, sign) in enumerate(zip(self.cells_to_edges, self.cells_to_edges_signs)): + cell_score = np.sum(score_matrix[cell_edges, :] * np.array(sign).reshape(-1, 1), axis=0) + points_in_cell = np.abs(cell_score) == 1 + output[points_in_cell] = cell_index + + return output + + def show_data(self, + data: np.ndarray, + cmap='winter', + mesh_color='white', + show_mesh=False, + actually_show=True, + density=False): + + """ Show with data """ + + colormap = cm.get_cmap(cmap, 256) + + data = data.reshape(-1) + + if density: + data = data / self.areas + + cmin = np.min(data) + cmax = np.max(data) + + color_index_map = np.array(255 * (data - cmin) / (cmax - cmin), dtype=int) + + for cell, color_index in zip(self.cells, color_index_map): + + color = colormap(color_index) + + plt.fill(self.points[cell, 0], self.points[cell, 1], color=color, edgecolor=None) + + if show_mesh: + self.show(actually_show=False, color=mesh_color) + + if actually_show: + self.show() + + +if __name__ == "__main__": + from test.slicers.meshes_for_testing import location_test_mesh, location_test_points_x, location_test_points_y + + cell_indices = location_test_mesh.locate_points(location_test_points_x, location_test_points_y) + + print(cell_indices) + + for i in range(location_test_mesh.n_cells): + inds = cell_indices == i + plt.scatter( + location_test_points_x.reshape(-1)[inds], + location_test_points_y.reshape(-1)[inds]) + + location_test_mesh.show() diff --git a/sasdata/slicing/meshes/meshmerge.py b/sasdata/slicing/meshes/meshmerge.py new file mode 100644 index 000000000..882699c0d --- /dev/null +++ b/sasdata/slicing/meshes/meshmerge.py @@ -0,0 +1,166 @@ +import time + +import numpy as np + +from sasdata.slicing.meshes.delaunay_mesh import delaunay_mesh +from sasdata.slicing.meshes.mesh import Mesh + + +def meshmerge(mesh_a: Mesh, mesh_b: Mesh) -> tuple[Mesh, np.ndarray, np.ndarray]: + """ Take two lists of polygons and find their intersections + + Polygons in each of the input variables should not overlap i.e. a point in space should be assignable to + at most one polygon in mesh_a and at most one polygon in mesh_b + + Mesh topology should be sensible, otherwise bad things might happen, also, the cells of the input meshes + must be in order (which is assumed by the mesh class constructor anyway). + + :returns: + 1) A triangulated mesh based on both sets of polygons together + 2) The indices of the mesh_a polygon that corresponds to each triangle, -1 for nothing + 3) The indices of the mesh_b polygon that corresponds to each triangle, -1 for nothing + + """ + + t0 = time.time() + + # Find intersections of all edges in mesh one with edges in mesh two + + # Fastest way might just be to calculate the intersections of all lines on edges, + # see whether we need filtering afterwards + + edges_a = np.array(mesh_a.edges, dtype=int) + edges_b = np.array(mesh_b.edges, dtype=int) + + edge_a_1 = mesh_a.points[edges_a[:, 0], :] + edge_a_2 = mesh_a.points[edges_a[:, 1], :] + edge_b_1 = mesh_b.points[edges_b[:, 0], :] + edge_b_2 = mesh_b.points[edges_b[:, 1], :] + + a_grid, b_grid = np.mgrid[0:mesh_a.n_edges, 0:mesh_b.n_edges] + a_grid = a_grid.reshape(-1) + b_grid = b_grid.reshape(-1) + + p1 = edge_a_1[a_grid, :] + p2 = edge_a_2[a_grid, :] + p3 = edge_b_1[b_grid, :] + p4 = edge_b_2[b_grid, :] + + # + # TODO: Investigate whether adding a bounding box check will help with speed, seems likely as most edges wont cross + # + + # + # Solve the equations + # + # z_a1 + s delta_z_a = z_b1 + t delta_z_b + # + # for z = (x, y) + # + + start_point_diff = p1 - p3 + + delta1 = p2 - p1 + delta3 = p4 - p3 + + deltas = np.concatenate(([-delta1], [delta3]), axis=0) + deltas = np.moveaxis(deltas, 0, 2) + + non_singular = np.linalg.det(deltas) != 0 + + st = np.linalg.solve( + deltas[non_singular], + # Reshape is required because solve accepts matrices of shape + # (M) or (..., M, K) for the second parameter, but ours shape + # is (..., M). We add an extra dimension to force our matrix + # into the shape (..., M, 1), which meets the expectations. + # + # + # Due to the reshaping work mentioned above, the final result + # has an extra element of length 1. We then index this extra + # dimension to get back to the result we wanted. + np.expand_dims(start_point_diff[non_singular], axis=2))[:, :, 0] + + # Find the points where s and t are in (0, 1) + + intersection_inds = np.logical_and( + np.logical_and(0 < st[:, 0], st[:, 0] < 1), # noqa SIM300 + np.logical_and(0 < st[:, 1], st[:, 1] < 1)) # noqa SIM300 + + start_points_for_intersections = p1[non_singular][intersection_inds, :] + deltas_for_intersections = delta1[non_singular][intersection_inds, :] + + points_to_add = start_points_for_intersections + st[intersection_inds, 0].reshape(-1,1) * deltas_for_intersections + + t1 = time.time() + print("Edge intersections:", t1 - t0) + + # Build list of all input points, in a way that we can check for coincident points + + + points = np.concatenate(( + mesh_a.points, + mesh_b.points, + points_to_add + )) + + + # Remove coincident points + + points = np.unique(points, axis=0) + + # Triangulate based on these intersections + + output_mesh = delaunay_mesh(points[:, 0], points[:, 1]) + + + t2 = time.time() + print("Delaunay:", t2 - t1) + + + # Find centroids of all output triangles, and find which source cells they belong to + + ## step 1) Assign -1 to all cells of original meshes + assignments_a = -np.ones(output_mesh.n_cells, dtype=int) + assignments_b = -np.ones(output_mesh.n_cells, dtype=int) + + ## step 2) Find centroids of triangulated mesh (just needs to be a point inside, but this is a good one) + centroids = [] + for cell in output_mesh.cells: + centroid = np.sum(output_mesh.points[cell, :]/3, axis=0) + centroids.append(centroid) + + centroids = np.array(centroids) + + t3 = time.time() + print("Centroids:", t3 - t2) + + + ## step 3) Find where points belong based on Mesh classes point location algorithm + + assignments_a = mesh_a.locate_points(centroids[:, 0], centroids[:, 1]) + assignments_b = mesh_b.locate_points(centroids[:, 0], centroids[:, 1]) + + t4 = time.time() + print("Assignments:", t4 - t3) + + return output_mesh, assignments_a, assignments_b + + +def main(): + from voronoi_mesh import voronoi_mesh + + n1 = 100 + n2 = 100 + + m1 = voronoi_mesh(np.random.random(n1), np.random.random(n1)) + m2 = voronoi_mesh(np.random.random(n2), np.random.random(n2)) + + + mesh, assignement1, assignement2 = meshmerge(m1, m2) + + mesh.show() + + +if __name__ == "__main__": + main() diff --git a/sasdata/slicing/meshes/util.py b/sasdata/slicing/meshes/util.py new file mode 100644 index 000000000..da5b6e370 --- /dev/null +++ b/sasdata/slicing/meshes/util.py @@ -0,0 +1,11 @@ +from collections.abc import Sequence +from typing import TypeVar + +T = TypeVar("T") + +def closed_loop_edges(values: Sequence[T]) -> tuple[T, T]: + """ Generator for a closed loop of edge pairs """ + for pair in zip(values, values[1:]): + yield pair + + yield values[-1], values[0] diff --git a/sasdata/slicing/meshes/voronoi_mesh.py b/sasdata/slicing/meshes/voronoi_mesh.py new file mode 100644 index 000000000..2f36d3780 --- /dev/null +++ b/sasdata/slicing/meshes/voronoi_mesh.py @@ -0,0 +1,96 @@ +import numpy as np +from scipy.spatial import Voronoi + +from sasdata.slicing.meshes.mesh import Mesh + + +def voronoi_mesh(x, y, debug_plot=False) -> Mesh: + """ Create a mesh based on a voronoi diagram of points """ + + input_data = np.array((x.reshape(-1), y.reshape(-1))).T + + # Need to make sure mesh covers a finite region, probably not important for + # much data stuff, but is important for plotting + # + # * We want the cells at the edge of the mesh to have a reasonable size, definitely not infinite + # * The exact size doesn't matter that much + # * It should work well with a grid, but also + # * ...it should be robust so that if the data isn't on a grid, it doesn't cause any serious problems + # + # Plan: Create a square border of points that are totally around the points, this is + # at the distance it would be if it was an extra row of grid points + # to do this we'll need + # 1) an estimate of the grid spacing + # 2) the bounding box of the grid + # + + + # Use the median area of finite voronoi cells as an estimate + voronoi = Voronoi(input_data) + finite_cells = [region for region in voronoi.regions if -1 not in region and len(region) > 0] + premesh = Mesh(points=voronoi.vertices, cells=finite_cells) + + area_spacing = np.median(premesh.areas) + gap = np.sqrt(area_spacing) + + # Bounding box is easy + x_min, y_min = np.min(input_data, axis=0) + x_max, y_max = np.max(input_data, axis=0) + + # Create a border + n_x = int(np.round((x_max - x_min)/gap)) + n_y = int(np.round((y_max - y_min)/gap)) + + top_bottom_xs = np.linspace(x_min - gap, x_max + gap, n_x + 3) + left_right_ys = np.linspace(y_min, y_max, n_y + 1) + + top = np.array([top_bottom_xs, (y_max + gap) * np.ones_like(top_bottom_xs)]) + bottom = np.array([top_bottom_xs, (y_min - gap) * np.ones_like(top_bottom_xs)]) + left = np.array([(x_min - gap) * np.ones_like(left_right_ys), left_right_ys]) + right = np.array([(x_max + gap) * np.ones_like(left_right_ys), left_right_ys]) + + added_points = np.concatenate((top, bottom, left, right), axis=1).T + + if debug_plot: + import matplotlib.pyplot as plt + plt.scatter(x, y) + plt.scatter(added_points[:, 0], added_points[:, 1]) + plt.show() + + new_points = np.concatenate((input_data, added_points), axis=0) + voronoi = Voronoi(new_points) + + # Remove the cells that correspond to the added edge points, + # Because the points on the edge of the square are (weakly) convex, these + # regions be infinite + + # finite_cells = [region for region in voronoi.regions if -1 not in region and len(region) > 0] + + # ... however, we can just use .region_points + input_regions = voronoi.point_region[:input_data.shape[0]] + cells = [voronoi.regions[region_index] for region_index in input_regions] + + return Mesh(points=voronoi.vertices, cells=cells) + + +def square_grid_check(): + values = np.linspace(-10, 10, 21) + x, y = np.meshgrid(values, values) + + mesh = voronoi_mesh(x, y) + + mesh.show(show_labels=True) + +def random_grid_check(): + import matplotlib.pyplot as plt + points = np.random.random((100, 2)) + mesh = voronoi_mesh(points[:, 0], points[:, 1], True) + mesh.show(actually_show=False) + plt.scatter(points[:, 0], points[:, 1]) + plt.show() + + +if __name__ == "__main__": + square_grid_check() + # random_grid_check() + diff --git a/sasdata/slicing/rebinning.py b/sasdata/slicing/rebinning.py new file mode 100644 index 000000000..060b2e0ca --- /dev/null +++ b/sasdata/slicing/rebinning.py @@ -0,0 +1,148 @@ +import time +from abc import ABC, abstractmethod +from dataclasses import dataclass + +import numpy as np + +from sasdata.slicing.meshes.mesh import Mesh +from sasdata.slicing.meshes.meshmerge import meshmerge +from sasdata.slicing.meshes.voronoi_mesh import voronoi_mesh + + +@dataclass +class CacheData: + """ Data cached for repeated calculations with the same coordinates """ + input_coordinates: np.ndarray # Input data + input_coordinates_mesh: Mesh # Mesh of the input data + merged_mesh_data: tuple[Mesh, np.ndarray, np.ndarray] # mesh information about the merging + + +class Rebinner(ABC): + + + def __init__(self): + """ Base class for rebinning methods""" + + self._bin_mesh_cache: Mesh | None = None # cached version of the output bin mesh + + # Output dependent caching + self._input_cache: CacheData | None = None + + + @abstractmethod + def _bin_coordinates(self) -> np.ndarray: + """ Coordinates for the output bins """ + + @abstractmethod + def _bin_mesh(self) -> Mesh: + """ Get the meshes used for binning """ + + @property + def allowable_orders(self) -> list[int]: + return [-1, 0, 1] + + @property + def bin_mesh(self) -> Mesh: + + if self._bin_mesh_cache is None: + bin_mesh = self._bin_mesh() + self._bin_mesh_cache = bin_mesh + + return self._bin_mesh_cache + + def _post_processing(self, coordinates, values) -> tuple[np.ndarray, np.ndarray]: + """ Perform post-processing on the mesh binned values """ + # Default is to do nothing, override if needed + return coordinates, values + + def _calculate(self, input_coordinates: np.ndarray, input_data: np.ndarray, order: int) -> np.ndarray: + """ Main calculation """ + + if order == -1: + # Construct the input output mapping just based on input points being the output cells, + # Equivalent to the original binning method + + mesh = self.bin_mesh + bin_identities = mesh.locate_points(input_coordinates[:,0], input_coordinates[:, 1]) + output_data = np.zeros(mesh.n_cells, dtype=float) + + for index, bin in enumerate(bin_identities): + if bin >= 0: + output_data[bin] += input_data[index] + + return output_data + + else: + # Use a mapping based on meshes + + # Either create de-cache the appropriate mesh + # Why not use a hash? Hashing takes time, equality checks are pretty fast, need to check equality + # when there is a hit anyway in case of very rare chance of collision, hits are the most common case, + # we want it to work 100% of the time, not 99.9999% + if self._input_cache is not None and np.all(self._input_cache.input_coordinates == input_coordinates): + + input_coordinate_mesh = self._input_cache.input_coordinates_mesh + merge_data = self._input_cache.merged_mesh_data + + else: + # Calculate mesh data + input_coordinate_mesh = voronoi_mesh(input_coordinates[:,0], input_coordinates[:, 1]) + self._data_mesh_cache = input_coordinate_mesh + + merge_data = meshmerge(self.bin_mesh, input_coordinate_mesh) + + # Cache mesh data + self._input_cache = CacheData( + input_coordinates=input_coordinates, + input_coordinates_mesh=input_coordinate_mesh, + merged_mesh_data=merge_data) + + merged_mesh, merged_to_output, merged_to_input = merge_data + + # Calculate values according to the order parameter + t0 = time.time() + if order == 0: + # Based on the overlap of cells only + + input_areas = input_coordinate_mesh.areas + output = np.zeros(self.bin_mesh.n_cells, dtype=float) + + for input_index, output_index, area in zip(merged_to_input, merged_to_output, merged_mesh.areas): + if input_index == -1 or output_index == -1: + # merged region does not correspond to anything of interest + continue + + output[output_index] += input_data[input_index] * area / input_areas[input_index] + + print("Main calc:", time.time() - t0) + + return output + + elif order == 1: + # Linear interpolation requires the following relationship with the data, + # as the input data is the total over the whole input cell, the linear + # interpolation requires continuity at the vertices, and a constraint on the + # integral. + # + # We can take each of the input points, and the associated values, and solve a system + # of linear equations that gives a total value. + + raise NotImplementedError("1st order (linear) interpolation currently not implemented") + + else: + raise ValueError(f"Expected order to be in {self.allowable_orders}, got {order}") + + def sum(self, x: np.ndarray, y: np.ndarray, data: np.ndarray, order: int = 0) -> np.ndarray: + """ Return the summed data in the output bins """ + return self._calculate(np.array((x.reshape(-1), y.reshape(-1))).T, data.reshape(-1), order) + + def error_propagate(self, input_coordinates: np.ndarray, data: np.ndarray, errors) -> np.ndarray: + raise NotImplementedError("Error propagation not implemented yet") + + def resolution_propagate(self, input_coordinates: np.ndarray, data: np.ndarray, errors) -> np.ndarray: + raise NotImplementedError("Resolution propagation not implemented yet") + + def average(self, x: np.ndarray, y: np.ndarray, data: np.ndarray, order: int = 0) -> np.ndarray: + """ Return the averaged data in the output bins """ + return self._calculate(np.array((x, y)).T, data.reshape(-1), order) / self.bin_mesh.areas + diff --git a/sasdata/slicing/sample_polygons.py b/sasdata/slicing/sample_polygons.py new file mode 100644 index 000000000..be54cd0a6 --- /dev/null +++ b/sasdata/slicing/sample_polygons.py @@ -0,0 +1,32 @@ +import numpy as np + + +def wedge(q0, q1, theta0, theta1, clockwise=False, n_points_per_degree=2): + + # Traverse a rectangle in curvilinear coordinates (q0, theta0), (q0, theta1), (q1, theta1), (q1, theta0) + if clockwise: + if theta1 > theta0: + theta0 += 2*np.pi + + else: + if theta0 > theta1: + theta1 += 2*np.pi + + subtended_angle = np.abs(theta1 - theta0) + n_points = int(subtended_angle*180*n_points_per_degree/np.pi)+1 + + angles = np.linspace(theta0, theta1, n_points) + + xs = np.concatenate((q0*np.cos(angles), q1*np.cos(angles[::-1]))) + ys = np.concatenate((q0*np.sin(angles), q1*np.sin(angles[::-1]))) + + return np.array((xs, ys)).T + + +if __name__ == "__main__": + import matplotlib.pyplot as plt + xy = wedge(0.3, 0.6, 2, 3) + + plt.plot(xy[:,0], xy[:,1]) + plt.show() + diff --git a/sasdata/slicing/slicer_demo.py b/sasdata/slicing/slicer_demo.py new file mode 100644 index 000000000..5626ded4d --- /dev/null +++ b/sasdata/slicing/slicer_demo.py @@ -0,0 +1,117 @@ +""" Dev docs: Demo to show the behaviour of the re-binning methods """ + +import matplotlib.pyplot as plt +import numpy as np + +from sasdata.slicing.meshes.voronoi_mesh import voronoi_mesh +from sasdata.slicing.slicers.AnularSector import AnularSector + +if __name__ == "__main__": + q_range = 1.5 + demo1 = True + demo2 = True + + # Demo of sums, annular sector over some not very circular data + + if demo1: + + x = (2 * q_range) * (np.random.random(400) - 0.5) + y = (2 * q_range) * (np.random.random(400) - 0.5) + + display_mesh = voronoi_mesh(x, y) + + + def lobe_test_function(x, y): + return 1 + np.sin(x*np.pi/q_range)*np.sin(y*np.pi/q_range) + + + random_lobe_data = lobe_test_function(x, y) + + plt.figure("Input Dataset 1") + display_mesh.show_data(random_lobe_data, actually_show=False) + + data_order_0 = [] + data_order_neg1 = [] + + sizes = np.linspace(0.1, 1, 100) + + for index, size in enumerate(sizes): + q0 = 0.75 - 0.6*size + q1 = 0.75 + 0.6*size + phi0 = np.pi/2 - size + phi1 = np.pi/2 + size + + rebinner = AnularSector(q0, q1, phi0, phi1) + + data_order_neg1.append(rebinner.sum(x, y, random_lobe_data, order=-1)) + data_order_0.append(rebinner.sum(x, y, random_lobe_data, order=0)) + + if index % 10 == 0: + plt.figure("Regions 1") + rebinner.bin_mesh.show(actually_show=False) + + plt.title("Regions") + + plt.figure("Sum of region, dataset 1") + + plt.plot(sizes, data_order_neg1) + plt.plot(sizes, data_order_0) + + plt.legend(["Order -1", "Order 0"]) + plt.title("Sum over region") + + + # Demo of averaging, annular sector over ring shaped data + + if demo2: + + x, y = np.meshgrid(np.linspace(-q_range, q_range, 41), np.linspace(-q_range, q_range, 41)) + x = x.reshape(-1) + y = y.reshape(-1) + + display_mesh = voronoi_mesh(x, y) + + + def ring_test_function(x, y): + r = np.sqrt(x**2 + y**2) + return np.log(np.sinc(r*1.5)**2) + + + grid_ring_data = ring_test_function(x, y) + + plt.figure("Input Dataset 2") + display_mesh.show_data(grid_ring_data, actually_show=False) + + data_order_0 = [] + data_order_neg1 = [] + + sizes = np.linspace(0.1, 1, 100) + + for index, size in enumerate(sizes): + q0 = 0.25 + q1 = 1.25 + + phi0 = np.pi/2 - size + phi1 = np.pi/2 + size + + rebinner = AnularSector(q0, q1, phi0, phi1) + + data_order_neg1.append(rebinner.average(x, y, grid_ring_data, order=-1)) + data_order_0.append(rebinner.average(x, y, grid_ring_data, order=0)) + + if index % 10 == 0: + plt.figure("Regions 2") + rebinner.bin_mesh.show(actually_show=False) + + plt.title("Regions") + + plt.figure("Average of region 2") + + plt.plot(sizes, data_order_neg1) + plt.plot(sizes, data_order_0) + + plt.legend(["Order -1", "Order 0"]) + plt.title("Sum over region") + + plt.show() + diff --git a/sasdata/slicing/slicers/AnularSector.py b/sasdata/slicing/slicers/AnularSector.py new file mode 100644 index 000000000..56ed5f262 --- /dev/null +++ b/sasdata/slicing/slicers/AnularSector.py @@ -0,0 +1,44 @@ +import numpy as np + +from sasdata.slicing.meshes.mesh import Mesh +from sasdata.slicing.rebinning import Rebinner + + +class AnularSector(Rebinner): + """ A single annular sector (wedge sum)""" + def __init__(self, q0: float, q1: float, phi0: float, phi1: float, points_per_degree: int=2): + super().__init__() + + self.q0 = q0 + self.q1 = q1 + self.phi0 = phi0 + self.phi1 = phi1 + + self.points_per_degree = points_per_degree + + def _bin_mesh(self) -> Mesh: + + n_points = np.max([int(1 + 180*self.points_per_degree*(self.phi1 - self.phi0) / np.pi), 2]) + + angles = np.linspace(self.phi0, self.phi1, n_points) + + row1 = self.q0 * np.array([np.cos(angles), np.sin(angles)]) + row2 = self.q1 * np.array([np.cos(angles), np.sin(angles)])[:, ::-1] + + points = np.concatenate((row1, row2), axis=1).T + + cells = [[i for i in range(2*n_points)]] + + return Mesh(points=points, cells=cells) + + def _bin_coordinates(self) -> np.ndarray: + return np.array([], dtype=float) + + +def main(): + """ Just show a random example""" + AnularSector(1, 2, 1, 2).bin_mesh.show() + + +if __name__ == "__main__": + main() diff --git a/sasdata/slicing/slicers/__init__.py b/sasdata/slicing/slicers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/slicing/transforms.py b/sasdata/slicing/transforms.py new file mode 100644 index 000000000..724c53ff4 --- /dev/null +++ b/sasdata/slicing/transforms.py @@ -0,0 +1,58 @@ +import matplotlib.pyplot as plt +import numpy as np +from matplotlib import cm +from scipy.spatial import Voronoi + +if __name__ == "__main__": + # Some test data + + qx_base_values = np.linspace(-10, 10, 21) + qy_base_values = np.linspace(-10, 10, 21) + + qx, qy = np.meshgrid(qx_base_values, qy_base_values) + + include = np.logical_not((np.abs(qx) < 2) & (np.abs(qy) < 2)) + + qx = qx[include] + qy = qy[include] + + r = np.sqrt(qx**2 + qy**2) + + data = np.log((1+np.cos(3*r))*np.exp(-r*r)) + + colormap = cm.get_cmap('winter', 256) + + def get_data_mesh(x, y, data): + + input_data = np.array((x, y)).T + voronoi = Voronoi(input_data) + + # plt.scatter(voronoi.vertices[:,0], voronoi.vertices[:,1]) + # plt.scatter(voronoi.points[:,0], voronoi.points[:,1]) + + cmin = np.min(data) + cmax = np.max(data) + + color_index_map = np.array(255 * (data - cmin) / (cmax - cmin), dtype=int) + + for point_index, points in enumerate(voronoi.points): + + region_index = voronoi.point_region[point_index] + region = voronoi.regions[region_index] + + if len(region) > 0: + + if -1 in region: + + pass + + else: + + color = colormap(color_index_map[point_index]) + + circly = region + [region[0]] + plt.fill(voronoi.vertices[circly, 0], voronoi.vertices[circly, 1], color=color, edgecolor="white") + + plt.show() + + get_data_mesh(qx.reshape(-1), qy.reshape(-1), data) diff --git a/sasdata/temp_ascii_reader.py b/sasdata/temp_ascii_reader.py index d8f726f4f..96e8634bf 100644 --- a/sasdata/temp_ascii_reader.py +++ b/sasdata/temp_ascii_reader.py @@ -21,7 +21,7 @@ guess_starting_position, ) from sasdata.metadata import Metadata, MetaNode -from sasdata.quantities.quantity import Quantity +from sasdata.quantities.quantity import NamedQuantity, Quantity from sasdata.quantities.units import NamedUnit @@ -121,7 +121,7 @@ def split_line(separator_dict: dict[str, bool], line: str) -> list[str]: # TODO: Implement error handling. -def load_quantities(params: AsciiReaderParams, filename: str) -> dict[str, Quantity]: +def load_quantities(params: AsciiReaderParams, filename: str, metadata: Metadata) -> dict[str, Quantity]: """Load a list of quantities from the filename based on the params.""" with open(filename) as ascii_file: lines = ascii_file.readlines() @@ -146,7 +146,7 @@ def load_quantities(params: AsciiReaderParams, filename: str) -> dict[str, Quant print(f"Line {i + 1} skipped.") continue file_quantities = { - name: Quantity(arrays[i], unit) + name: NamedQuantity(name, arrays[i], unit, id_header=metadata.id_header) for i, (name, unit) in enumerate(params.columns_included) } return file_quantities @@ -194,7 +194,6 @@ def load_data(params: AsciiReaderParams) -> list[SasData]: list contained in the params.""" loaded_data: list[SasData] = [] for filename in params.filenames: - quantities = load_quantities(params, filename) raw_metadata = import_metadata( params.metadata.all_file_metadata(path.basename(filename)) ) @@ -207,6 +206,7 @@ def load_data(params: AsciiReaderParams) -> list[SasData]: process=None, raw=raw_metadata, ) + quantities = load_quantities(params, filename, metadata) data = SasData( path.basename(filename), merge_uncertainties(quantities), diff --git a/sasdata/temp_hdf5_reader.py b/sasdata/temp_hdf5_reader.py index 37a868d89..e439486ad 100644 --- a/sasdata/temp_hdf5_reader.py +++ b/sasdata/temp_hdf5_reader.py @@ -9,7 +9,7 @@ from sasdata.data import SasData from sasdata.data_backing import Dataset as SASDataDataset from sasdata.data_backing import Group as SASDataGroup -from sasdata.dataset_types import one_dim, two_dim +from sasdata.dataset_types import one_dim, three_dim, two_dim from sasdata.metadata import ( Aperture, BeamSize, @@ -33,15 +33,13 @@ test_file = "./example_data/2d_data/BAM_2D.h5" # test_file = "./example_data/2d_data/14250_2D_NoDetInfo_NXcanSAS_v3.h5" # test_file = "./example_data/2d_data/33837rear_2D_1.75_16.5_NXcanSAS_v3.h5" +test_file = "./test/sasdataloader/data/nxcansas_1Dand2D_multisasdata.h5" logger = logging.getLogger(__name__) def recurse_hdf5(hdf5_entry): if isinstance(hdf5_entry, HDF5Dataset): - # - # print(hdf5_entry.dtype) - # print(type(hdf5_entry.dtype)) attributes = {name: hdf5_entry.attrs[name] for name in hdf5_entry.attrs} @@ -62,7 +60,7 @@ def recurse_hdf5(hdf5_entry): elif isinstance(hdf5_entry, HDF5Group): return SASDataGroup( name=hdf5_entry.name, - children={key: recurse_hdf5(hdf5_entry[key]) for key in hdf5_entry}, + children={key: recurse_hdf5(hdf5_entry[key]) for key in hdf5_entry.keys()}, ) else: @@ -74,7 +72,7 @@ def recurse_hdf5(hdf5_entry): GET_UNITS_FROM_ELSEWHERE = units.meters -def connected_data(node: SASDataGroup, name_prefix="") -> dict[str, Quantity]: +def connected_data(node: SASDataGroup, name_prefix="", metadata=None) -> dict[str, Quantity]: """In the context of NeXus files, load a group of data entries that are organised together match up the units and errors with their values""" # Gather together data with its error terms @@ -91,9 +89,7 @@ def connected_data(node: SASDataGroup, name_prefix="") -> dict[str, Quantity]: else: units = GET_UNITS_FROM_ELSEWHERE - quantity = NamedQuantity( - name=name_prefix + child.name, value=child.data, units=units - ) + quantity = NamedQuantity(name=child.name, value=child.data, units=units, id_header=metadata.id_header) # Turns out people can't be trusted to use the same keys here if "uncertainty" in child.attributes or "uncertainties" in child.attributes: @@ -121,18 +117,89 @@ def connected_data(node: SASDataGroup, name_prefix="") -> dict[str, Quantity]: ### Begin metadata parsing code +def get_canSAS_class(node : HDF5Group) -> str | None: + # Check if attribute exists + if "canSAS_class" in node.attrs: + cls = node.attrs["canSAS_class"] + return cls + elif "NX_class" in node.attrs: + cls = node.attrs["NX_class"] + cls = NX2SAS_class(cls) + # note that sastransmission groups have a + # NX_class of NXdata but a canSAS_class of SAStransmission_spectrum + # which is ambiguous because then how can one tell if it is a SASdata + # or a SAStransmission_spectrum object from the NX_class? + if node.name.lower().startswith("sastransmission"): + cls = 'SAStransmission_spectrum' + return cls + + return None + +def NX2SAS_class(cls : str) -> str | None: + # converts NX class names to canSAS class names + mapping = { + "NXentry": "SASentry", + "NXdata": "SASdata", + "NXdetector": "SASdetector", + "NXinstrument": "SASinstrument", + "NXnote": "SASnote", + "NXprocess": "SASprocess", + "NXcollection": "SASprocessnote", + "NXsample": "SASsample", + "NXsource": "SASsource", + "NXaperture": "SASaperture", + "NXcollimator": "SAScollimation", + + "SASentry": "SASentry", + "SASdata": "SASdata", + "SASdetector": "SASdetector", + "SASinstrument": "SASinstrument", + "SASnote": "SASnote", + "SASprocess": "SASprocess", + "SASprocessnote": "SASprocessnote", + "SAStransmission_spectrum": "SAStransmission_spectrum", + "SASsample": "SASsample", + "SASsource": "SASsource", + "SASaperture": "SASaperture", + "SAScollimation": "SAScollimation", + } + if isinstance(cls, bytes): + cls = cls.decode() + return mapping.get(cls, None) + +def find_canSAS_key(node: HDF5Group, canSAS_class: str): + matches = [] + + for key, item in node.items(): + if item.attrs.get("canSAS_class") == canSAS_class: + matches.append(key) + + return matches + def parse_quantity(node : HDF5Group) -> Quantity[float]: - """Pull a single quantity with length units out of an HDF5 node""" - magnitude = node.astype(float)[0] + """Pull a single quantity with units out of an HDF5 node""" + magnitude = parse_float(node) unit = node.attrs["units"] return Quantity(magnitude, parse(unit)) def parse_string(node : HDF5Group) -> str: """Access string data from a node""" - return node.asstr()[0] + if node.shape == (): # scalar dataset + return node.asstr()[()] + else: # vector dataset + return node.asstr()[0] + +def parse_float(node: HDF5Group) -> float: + """Return the first element (or scalar) of a numeric dataset as float.""" + if node.shape == (): + return float(node[()].astype(str)) + else: + return float(node[0].astype(str)) -def opt_parse[T](node: HDF5Group, key: str, subparser: Callable[[HDF5Group], T]) -> T | None: +def opt_parse[T](node: HDF5Group, key: str, subparser: Callable[[HDF5Group], T], ignore_case=False) -> T | None: """Parse a subnode if it is present""" + if ignore_case: # ignore the case of the key + key = next((k for k in node.keys() if k.lower() == key.lower()), None) if key in node: return subparser(node[key]) return None @@ -144,7 +211,7 @@ def attr_parse(node: HDF5Group, key: str) -> str | None: return None -def parse_apterture(node : HDF5Group) -> Aperture: +def parse_aperture(node : HDF5Group) -> Aperture: distance = opt_parse(node, "distance", parse_quantity) name = attr_parse(node, "name") size = opt_parse(node, "size", parse_vec3) @@ -166,9 +233,13 @@ def parse_source(node : HDF5Group) -> Source: beam_shape = opt_parse(node, "beam_shape", parse_string) beam_size = opt_parse(node, "beam_size", parse_beam_size) wavelength = opt_parse(node, "wavelength", parse_quantity) + if wavelength is None: + wavelength = opt_parse(node, "incident_wavelength", parse_quantity) wavelength_min = opt_parse(node, "wavelength_min", parse_quantity) wavelength_max = opt_parse(node, "wavelength_max", parse_quantity) wavelength_spread = opt_parse(node, "wavelength_spread", parse_quantity) + if wavelength_spread is None: + wavelength_spread = opt_parse(node, "incident_wavelength_spread", parse_quantity) return Source( radiation=radiation, beam_shape=beam_shape, @@ -214,22 +285,37 @@ def parse_detector(node : HDF5Group) -> Detector: def parse_collimation(node : HDF5Group) -> Collimation: length = opt_parse(node, "length", parse_quantity) - return Collimation(length=length, apertures=[parse_apterture(node[ap]) - for ap in node if "aperture" in ap]) + + keys = find_canSAS_key(node, "SASaperture") + keys = list(keys) if keys is not None else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + apertures = [parse_aperture(node[p]) for p in keys] # Empty list of keys will give an empty collimations list + + return Collimation(length=length, apertures=apertures) def parse_instrument(node : HDF5Group) -> Instrument: + keys = find_canSAS_key(node, "SAScollimation") + keys = list(keys) if keys is not None else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + collimations = [parse_collimation(node[p]) for p in keys] # Empty list of keys will give an empty collimations list + + keys = find_canSAS_key(node, "SASdetector") + keys = list(keys) if keys is not None else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + detector = [parse_detector(node[p]) for p in keys] # Empty list of keys will give an empty collimations list + + keys = find_canSAS_key(node, "SASsource") + source = parse_source(node[keys[0]]) if keys is not None else None + return Instrument( - collimations= [parse_collimation(node[x]) for x in node if "collimation" in x], - detector=[parse_detector(node[d]) for d in node if "detector" in d], - source=parse_source(node["sassource"]), + collimations=collimations, + detector=detector, + source=source, ) def parse_sample(node : HDF5Group) -> Sample: name = attr_parse(node, "name") sample_id = opt_parse(node, "ID", parse_string) thickness = opt_parse(node, "thickness", parse_quantity) - transmission = opt_parse(node, "transmission", lambda n: float(n[0].astype(str))) + transmission = opt_parse(node, "transmission", parse_float) temperature = opt_parse(node, "temperature", parse_quantity) position = opt_parse(node, "position", parse_vec3) orientation = opt_parse(node, "orientation", parse_rot3) @@ -274,62 +360,82 @@ def load_raw(node: HDF5Group | HDF5Dataset) -> MetaNode: attrib = {a: node.attrs[a] for a in node.attrs} if (str(dt).startswith("|S")): if "units" in attrib: - contents = Quantity(float(node.asstr()[0]), parse(attrib["units"])) + contents = parse_string(node) else: - contents = node.asstr()[0] + contents = parse_string(node) else: if "units" in attrib and attrib["units"]: - contents = Quantity(node[:], parse(attrib["units"])) + data = node[()] if node.shape == () else node[:] + contents = Quantity(data, parse(attrib["units"]), id_header=node.name) else: - contents = node[:] + contents = node[()] if node.shape == () else node[:] return MetaNode(name=name, attrs=attrib, contents=contents) case _: raise RuntimeError(f"Cannot load raw data of type {type(node)}") def parse_metadata(node : HDF5Group) -> Metadata: - instrument = opt_parse(node, "sasinstrument", parse_instrument) - sample = opt_parse(node, "sassample", parse_sample) - process = [parse_process(node[p]) for p in node if "sasprocess" in p] + # parse the metadata groups + keys = find_canSAS_key(node, "SASinstrument") + keys = list(keys) if keys else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + instrument = parse_instrument(node[keys[0]]) if keys else None + + keys = find_canSAS_key(node, "SASsample") + keys = list(keys) if keys else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + sample = parse_sample(node[keys[0]]) if keys else None + + keys = find_canSAS_key(node, "SASprocess") + keys = list(keys) if keys else [] # list([1,2,3]) returns [1,2,3] and list("string") returns ["string"] + process = [parse_process(node[p]) for p in keys] # Empty list of keys will give an empty collimations list + + # parse the datasets title = opt_parse(node, "title", parse_string) run = [parse_string(node[r]) for r in node if "run" in r] definition = opt_parse(node, "definition", parse_string) - raw = load_raw(node) + + # load the entire node recursively into a raw object + raw = load_raw(node) + return Metadata(process=process, instrument=instrument, sample=sample, title=title, run=run, - raw=raw, - definition=definition) - -### End Metadata parsing code + definition=definition, + raw=raw) def load_data(filename: str) -> dict[str, SasData]: with h5py.File(filename, "r") as f: loaded_data: dict[str, SasData] = {} - for root_key in f: + for root_key in f.keys(): entry = f[root_key] + # if this is actually a SASentry + if not get_canSAS_class(entry) == 'SASentry': + continue data_contents : dict[str, Quantity] = {} - entry_keys = entry + entry_keys = entry.keys() - if not [k for k in entry if k.startswith("sasdata") or k.startswith("data")]: + if not [k for k in entry_keys if get_canSAS_class(entry[k])=='SASdata']: logger.warning("No sasdata or data key") logger.warning(f"Known keys: {[k for k in entry_keys]}") + metadata = parse_metadata(f[root_key]) + for key in entry_keys: component = entry[key] - lower_key = key.lower() - if lower_key.startswith("sasdata") or lower_key.startswith("data"): + if get_canSAS_class(entry[key])=='SASdata': datum = recurse_hdf5(component) - data_contents = connected_data(datum, str(filename)) + data_contents = connected_data(datum, str(filename), metadata) - metadata = parse_metadata(f[root_key]) - - dataset_type = two_dim if "Qy" in data_contents else one_dim + if "Qz" in data_contents: + dataset_type = three_dim + elif "Qy" in data_contents: + dataset_type = two_dim + else: + dataset_type = one_dim entry_key = entry.attrs["sasview_key"] if "sasview_key" in entry.attrs else root_key diff --git a/sasdata/temp_sesans_reader.py b/sasdata/temp_sesans_reader.py index fd480e40c..23d561593 100644 --- a/sasdata/temp_sesans_reader.py +++ b/sasdata/temp_sesans_reader.py @@ -166,7 +166,7 @@ def parse_data(lines: list[str], kvs: dict[str, str]) -> dict[str, Quantity]: for idx, v in enumerate(values): points[headers[idx]].append(float(v)) - for h in points: + for h in points.keys(): if h.endswith("_error") and h[:-6] in headers: # This was an error line continue diff --git a/sasdata/temp_xml_reader.py b/sasdata/temp_xml_reader.py index 2a15c251a..174fe7389 100644 --- a/sasdata/temp_xml_reader.py +++ b/sasdata/temp_xml_reader.py @@ -21,7 +21,7 @@ Source, Vec3, ) -from sasdata.quantities.quantity import Quantity +from sasdata.quantities.quantity import NamedQuantity, Quantity from sasdata.quantities.units import Unit from sasdata.quantities.units import none as unitless @@ -205,7 +205,7 @@ def parse_sample(node: etree._Element, version: str) -> Sample: ) -def parse_data(node: etree._Element, version: str) -> dict[str, Quantity]: +def parse_data(node: etree._Element, version: str, metadata: Metadata) -> dict[str, Quantity]: """Parse scattering data""" aos = [] keys = set() @@ -244,7 +244,7 @@ def parse_data(node: etree._Element, version: str) -> dict[str, Quantity]: result: dict[str, Quantity] = {} for k in keys: - result[k] = Quantity(np.array(soa[k]), us[k]) + result[k] = NamedQuantity(k, np.array(soa[k]), us[k], id_header=metadata.id_header) if k + "dev" in uncertainties: result[k] = result[k].with_standard_error( Quantity(np.array(soa[k + "dev"]), us[k + "dev"]) @@ -267,17 +267,18 @@ def load_raw(node: etree._Element, version: str) -> MetaNode: contents: Quantity[float] | str | list[MetaNode] = "" if nodes: contents = [load_raw(n, version) for n in nodes] - elif "unit" in attrib and attrib["unit"]: - value = parse_string(node, version) - if value: - try: - contents = Quantity(float(value), unit_parser.parse(attrib["unit"])) - except ValueError: + else: + if "unit" in attrib and attrib["unit"]: + value = parse_string(node, version) + if value: + try: + contents = Quantity(float(value), unit_parser.parse(attrib["unit"])) + except ValueError: + contents = value + else: contents = value else: - contents = value - else: - contents = parse_string(node, version) + contents = parse_string(node, version) return MetaNode(name=etree.QName(node).localname, attrs=attrib, contents=contents) @@ -322,7 +323,7 @@ def load_data(filename: str) -> dict[str, SasData]: datacount = 0 for n in entry.findall(f"{version}:SASdata", ns): datacount += 1 - data_set = parse_data(n, version) + data_set = parse_data(n, version, metadata) data = data_set break diff --git a/sasdata/transforms/NDrebin.py b/sasdata/transforms/NDrebin.py new file mode 100644 index 000000000..e5091a8e1 --- /dev/null +++ b/sasdata/transforms/NDrebin.py @@ -0,0 +1,522 @@ + + +import numpy as np +from numpy._typing import ArrayLike + +from sasdata.quantities.quantity import Quantity + + +class NDRebin: + """ + N-dimensional rebinning of data into regular bins, with optional + fractional binning and error propagation. + + Provide values at points with ND coordinates. + The coordinates may not be in a nice grid. + The data can be in any array shape. + + The coordinates are in the same shape plus one dimension, + preferably the first dimension, which is the ND coordinate + position + + Rebin that data into a regular grid. + + Note that this does lose some information from the underlying data, + as you are essentially averaging multiple measurements into one bin. + + Note that once can use this function to perform integrations over + one or more dimensions by setting the num_bins to 1 or the + step_size to infinity for one or more axes. The integration will + be performed from the lower to upper bound of that axis. + + Parameters + ---------- + data : Quantity[ArrayLike] + Data values in an Nd array. + coords : Quantity[ArrayLike] + The coordinates corresponding to each data point, same size of data + plus one more dimension with the same length as the + dimensionality of the space (Ndim) + data_errs : Quantity[ArrayLike], optional + Errors on data. Optional, the same size as data. + axes : ArrayLike | None = None + The axes of the coordinate system we are binning + into. Defaults to diagonal (e.g. (1,0,0), (0,1,0), and + (0,0,1) for 3D data). A list of Ndim element vectors + upper : ArrayLike | None = None + The upper limits along each axis. Defaults to the largest + values in the data if no limits are provided. + A 1D list of Ndims values. + lower : ArrayLike | None = None + The lower limits along each axis. Defaults to the smallest + values in the data if no limits are provided. + A 1D list of Ndims values. + step_size : ArrayLike | None = None + The size of steps along each axis. Supercedes + num_bins. A list of length Ndim. + num_bins : ArrayLike | None = None + The number of bins along each axis. Superceded by + step_size if step_size is provided. At least one of step_size + or num_bins must be provided. + fractional : bool = False + Whether to perform fractional binning or not. Defaults + to false. + -If false, measurements are binned into one bin, + the one they fall within. Roughly a "nearest neighbor" + approach. + -If true, fractional binning will be applied, where + the value of a measurement is distributed to its 2^Ndim + nearest neighbors weighted by proximity. For example, if + a point falls exactly between two bins, its value will be + given to both bins with 50% weight. This is roughly a + "linear interpolation" approach. Tends to do better at + reducing sharp peaks and edges if data is sampled unevenly. + However, this is roughly 2^Ndim times slower since you have + to address each bin 2^Ndim more times. + normalization : bool = True + Whether to normalize (average) the data or not. If false, + the data are just summed into each bin. If true, the weighted + average of all points added to a bin is computed. + + Attributes + ---------- + binned_data : + has size num_bins and is NDimensional, contains + the binned data + bin_centers_list : + is a list of 1D vectors, contains the + axes of the binned data. The coordinates of bin [i,j,k] + is given by + bin_centers_list[0][i]*axes[i]+bin_centers_list[1][j]*axes[j]+ + bin_centers_list[0][k]*axes[k] + binned_data_errs : + has size num_bins and is NDimensional, contains + the propagated errors of the binned_data + bins_list : + is a list of 1D vectors, is similar to bin_centers_list, + but instead contains the edges of the bins, so it is 1 longer + in each dimension + step_size : + is a list of Ndims numbers, contains the step size + along each dimension + num_bins : + is a list of Ndims numbers, contains the number + of bins along each dimension + + Methods + ------- + run(self): + Bin the data into the defined bins. + + Typical usage + ------------- + .. code-block:: + # test syntax 1 + Ndims = 4 + Nvals = int(1e4) + qmat = np.random.rand(Ndims, Nvals) + Imat = np.random.rand(Nvals) + + rebin = NDRebin(Imat, qmat, + step_size=0.1*np.random.rand(Ndims)+0.05, + lower=0.1*np.random.rand(Ndims)+0.0, + upper=0.1*np.random.rand(Ndims)+0.9) + rebin.run() + + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + + + # test syntax 2 + Ndims = 2 + Nvals = int(1e4) + qmat = np.random.rand(Ndims, 100, Nvals) + Imat = np.random.rand(100, Nvals) + Imat_errs = np.random.rand(100, Nvals) + + rebin = NDRebin(Imat, qmat, + data_errs = Imat_errs, + num_bins=[10,20], + axes = np.eye(2), + fractional=True) + rebin.run() + + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + Ibin_errs = rebin.binned_data_errs + bins_list = rebin.bins_list + step_size = rebin.step_size + num_bins = rebin.num_bins + """ + + def __init__( + self, + data: Quantity[ArrayLike], + coords: Quantity[ArrayLike], + data_errs: Quantity[ArrayLike] | None = None, + axes: ArrayLike | None = None, + upper: ArrayLike | None = None, + lower: ArrayLike | None = None, + step_size: ArrayLike | None = None, + num_bins: ArrayLike | None = None, + fractional: bool = False, + normalize: bool = True, + ): + self.data = data + self.coords = coords + self.data_errs = data_errs + self.axes = axes + self.upper = upper + self.lower = lower + self.step_size = step_size + self.num_bins = num_bins + self.fractional = fractional + self.normalize = normalize + + # Internal attributes initialised later + self.Nvals: int | None = None + self.Ndims: int | None = None + self.data_flat = None + self.errors_flat = None + self.coords_flat = None + self.bins_list = None + self.bin_centers_list = None + self.bin_inds = None + self.binned_data = None + self.binned_data_errs = None + self.n_samples = None + + self._prepared = False # flag to avoid double-prepare + + def __call__(self): + self.run() + + def run(self) -> None: + """Bin the data into the defined bins.""" + if not self._prepared: + self._prepare() + + if self.fractional: + self._calculate_fractional_bins() + else: + self._calculate_bins() + + self._norm_data() + + def _prepare(self) -> None: + """Compute derived quantities: shapes, flattened data, bins, indices.""" + if self._prepared: + return + + # check the size of the data and coords inputs + # and define Ndims and Nvals + self._check_data_coords() + + # flatten the input data and errors + self._check_data_errs() + + # flatten the coords + self._flatten_coords() + + # handle optional axes + if self.axes is None: + # make axes if not provided + self._make_axes() + else: + # project into specified axes + self._project_axes() + + # build the limits + self._build_limits() + + # make the bins + self._make_bins() + + # make the bin indices + self._create_bin_inds() + + self._prepared = True + + def _check_data_coords(self): + """Compute Nvals and Ndims and validate shapes.""" + # Identify number of points + self.Nvals = int(self.data.size) + + # Identify number of dimensions + Ndims = self.coords.size / self.Nvals + + # if Ndims is not an integer value we have a problem + if not float(Ndims).is_integer(): + raise ValueError("The coords have to have the same shape as " + "the data, plus one more dimension which is " + "length Ndims") + self.Ndims = int(Ndims) + + def _check_data_errs(self): + # flatten input data to 1D of length Nvals + self.data_flat = self.data.reshape(-1) + if self.data_errs is None: + self.errors_flat = 0*self.data_flat # no errors + else: + self.errors_flat = self.data_errs.reshape(-1) + + if self.errors_flat.shape != self.data_flat.shape: + raise ValueError("Data and errors have to have the same shape.") + + def _flatten_coords(self): + # if 1D, need to add a size 1 dimension index to coords + if self.Ndims == 1: + self.coords = self.coords.reshape(-1, 1) + + # check if the first axis of coords is the dimensions axis + if self.coords.shape[0] == self.Ndims: + # first check if it is the first axis + self.dim_axis = 0 + elif self.coords.shape[-1] == self.Ndims: + # now check if it is the last axis + self.dim_axis = -1 + else: + # search if any axis is size Ndims + self.dim_axis = next(i for i, s in enumerate(self.coords.shape) if s == self.Ndims) + + if not self.coords.shape[self.dim_axis] == self.Ndims: + raise ValueError("The coords have to have one dimension which is " + "the dimensionality of the space") + + # flatten coords to size Nvals x Ndims + moved = np.moveaxis(self.coords, self.dim_axis, 0) + self.coords_flat = moved.reshape(self.Ndims, -1).T + + def _make_axes(self): + # if axes are not provided, default to identity + if self.axes is None: + self.axes = np.eye(self.Ndims) + + def _project_axes(self): + # now project the data into the axes + self.axes_inv = np.linalg.inv(self.axes) + self.coords_flat = np.tensordot(self.coords_flat, self.axes_inv, axes=([1], [0])) + + def _build_limits(self): + # if limits were not provided, default to the min and max + # coord in each dimension + coords = self.coords_flat + mins = np.min(coords, axis=0) + maxs = np.max(coords, axis=0) + lower = mins if self.lower is None else self.lower + upper = maxs if self.upper is None else self.upper + + # if provided just one limit for 1D as a scalar, make it a list + # for formatting purposes + self.lower = np.atleast_1d(self.lower) + self.upper = np.atleast_1d(self.upper) + lower = np.atleast_1d(lower).astype(float, copy=True) + upper = np.atleast_1d(upper).astype(float, copy=True) + + # validate limits sizes + if lower.size != self.Ndims: + raise ValueError("Lower limits must be None or a 1D iterable of length Ndims.") + if upper.size != self.Ndims: + raise ValueError("Upper limits must be None or a 1D iterable of length Ndims.") + + # if individual limits are nan, inf, none, etc, replace with min/max + finite_lower = np.isfinite(lower) + finite_upper = np.isfinite(upper) + lower = np.where(finite_lower, lower, mins) + upper = np.where(finite_upper, upper, maxs) + + # if any of the limits are in the wrong order, flip them + self.lower = np.minimum(lower, upper) + self.upper = np.maximum(lower, upper) + + def _make_bins(self): + # bins_list is a Ndims long list of vectors which are the edges of + # each bin. Each vector is num_bins[i]+1 long + self.bins_list = [] + + # bin_centers_list is a Ndims long list of vectors which are the centers of + # each bin. Each vector is num_bins[i] long + self.bin_centers_list = [] + + # create the bins in each dimension + if self.step_size is None: + self._step_size_from_num_bins() + else: + self._num_bins_from_step_size() + + def _step_size_from_num_bins(self): + # if step_size was not specified, derive from num_bins + self.step_size = [] + # if provided just one num_bin for 1D as a scalar, make it a list + # for formatting purposes + self.num_bins = np.atleast_1d(self.num_bins) + if self.num_bins.size != self.Ndims: + raise ValueError("num_bins must be None or a 1D iterable of length Ndims.") + for ind in range(self.Ndims): + these_bins = np.linspace(self.lower[ind], self.upper[ind], self.num_bins[ind]+1) + these_centers = (these_bins[:-1] + these_bins[1:]) / 2.0 + this_step_size = these_bins[1] - these_bins[0] + + self.bins_list.append(these_bins) + self.bin_centers_list.append(these_centers) + self.step_size.append(this_step_size) + + def _num_bins_from_step_size(self): + # if num_bins was not specified, derive from step_size + self.num_bins = [] + # if provided just one step_size for 1D as a scalar, make it a list + # for formatting purposes + self.step_size = np.atleast_1d(self.step_size) + if self.step_size.size != self.Ndims: + raise ValueError("step_size must be None or a 1D iterable of length Ndims.") + for ind in range(self.Ndims): + if self.lower[ind] == self.upper[ind]: + # min and max of limits are the same, i.e. data has to be exactly this + these_bins = np.array([self.lower[ind], self.lower[ind]]) + else: + these_bins = np.arange(self.lower[ind], self.upper[ind], self.step_size[ind]) + if these_bins[-1] != self.upper[ind]: + these_bins = np.append(these_bins, self.upper[ind]) + these_centers = (these_bins[:-1] + these_bins[1:]) / 2.0 + this_num_bins = these_bins.size-1 + + self.bins_list.append(these_bins) + self.bin_centers_list.append(these_centers) + self.num_bins.append(this_num_bins) + + def _create_bin_inds(self): + # create the bin inds for each data point as a Nvals x Ndims long vector + self.bin_inds = np.zeros((self.Nvals, self.Ndims)) + for ind in range(self.Ndims): + this_min = self.bins_list[ind][0] + this_step = self.step_size[ind] + self.bin_inds[:, ind] = (self.coords_flat[:,ind] - this_min) / this_step + # any that are outside the bin limits should be removed + self.bin_inds[self.coords_flat[:, ind]< self.bins_list[ind][0], ind] = np.nan + self.bin_inds[self.coords_flat[:, ind]==self.bins_list[ind][-1], ind] = self.num_bins[ind]-1 + self.bin_inds[self.coords_flat[:, ind]> self.bins_list[ind][-1], ind] = np.nan + + def _calculate_bins(self): + # For readibility, this is a non-vector way of binning the data + # which in the following will be vectorized for efficiency: + # for ind in range(Nvals): + # this_bin_ind = bin_inds[ind,:] + # if not np.isnan(this_bin_ind).any(): + # this_bin_ind = this_bin_ind.astype(int) + # binned_data[*this_bin_ind] = binned_data[*this_bin_ind] + data_flat[ind] + # binned_data_errs[*this_bin_ind] = binned_data_errs[*this_bin_ind] + errors_flat[ind]**2 + # n_samples[*this_bin_ind] = n_samples[*this_bin_ind] + 1 + + + # and here is a vector equivalent + # ------------------------------------------------------------- + # Inputs: + # bin_inds : (Nvals, Ndims) array of indices, some rows may contain NaN + # data_flat : (Nvals,) values to accumulate + # errors_flat : (Nvals,) errors to accumulate (squared) + # binned_data : Ndims-dimensional array (output) + # binned_data_errs : Ndims-dimensional array (output) + # n_samples : Ndims-dimensional array (output) + # ------------------------------------------------------------- + + # 1. Identify valid rows (no NaNs) + valid = ~np.isnan(self.bin_inds).any(axis=1) + + # 2. Convert valid bins to integer indices + inds_int = self.bin_inds[valid].astype(int) + + # 3. Map multidimensional indices → flat indices + flat_idx = np.ravel_multi_index(inds_int.T, dims=self.num_bins) + + # 4. Use bincount to accumulate in a vectorized way + size = np.prod(self.num_bins) + + bd_sum = np.bincount(flat_idx, weights=self.data_flat[valid], minlength=size) + err_sum = np.bincount(flat_idx, weights=self.errors_flat[valid]**2, minlength=size) + ns_sum = np.bincount(flat_idx, minlength=size) + + # 5. Reshape and add into the original arrays + self.binned_data = bd_sum.reshape(self.num_bins) + self.binned_data_errs = err_sum.reshape(self.num_bins) + self.n_samples = ns_sum.reshape(self.num_bins) + + def _calculate_fractional_bins(self): + + # more convenient to work with half shifted inds + # bin_inds_frac for bin i is between i-0.5 and i+0.5 and the bin center + # is at i. + bin_inds_frac = self.bin_inds - 0.5 + + # 1. Identify valid rows (no NaNs) + valid = ~np.isnan(bin_inds_frac).any(axis=1) + valid_inds = bin_inds_frac[valid] + partial_weights = 1.-np.mod(valid_inds, 1) + data_valid = self.data_flat[valid] + errs_valid = self.errors_flat[valid] + + # In 1D, for a point at x between bin centers at x_i and x_{i+1}, + # wx_{i+1}=(x-x_i)/dx partial weight goes to bin i+1 + # and wx_i=1-w_{i+1} partial weight goes to bin i. + # bin_inds = (x-(x_1-dx/2))/dx = (x-x_1)/dx+0.5. Therefore + # bin_inds_frac = (x-x_1)/dx, so wx_{i+1} = mod(idx,1) and + # wx_i = 1-mod(idx,1) + + # for each dimension, double the amount of subpoints + for ind in range(self.Ndims): + # bins on the edge only go in one bin on that axis + edge_mask = np.logical_not( + np.logical_or(valid_inds[:, ind]<0, + valid_inds[:, ind]>self.num_bins[ind]-1) + ) + partial_weights[~edge_mask, ind] = 1.0 + # will be where the bin goes + arr_mod = valid_inds[edge_mask] + arr_mod[:, ind] += 1. + valid_inds = np.vstack([valid_inds, arr_mod]) + # how close it is to that bin + arr_mod = partial_weights[edge_mask] + arr_mod[:, ind] = 1. - arr_mod[:, ind] + partial_weights = np.vstack([partial_weights, arr_mod]) + # the value and uncertainty + data_valid = np.concatenate([data_valid, data_valid[edge_mask]]) + errs_valid = np.concatenate([errs_valid, errs_valid[edge_mask]]) + + # any bins that ended up outside just get clamped + for ind in range(self.Ndims): + valid_inds[valid_inds[:, ind]<0, ind] = 0 + valid_inds[valid_inds[:, ind]>self.num_bins[ind]-1, ind] = self.num_bins[ind]-1 + + # weights are the product of partial weights + weights = np.prod(partial_weights, axis=1) + + # 2. Convert valid bins to integer indices + inds_int = valid_inds.astype(int) + + # 3. Map multidimensional indices → flat indices + flat_idx = np.ravel_multi_index(inds_int.T, dims=self.num_bins) + + # 4. Use bincount to accumulate in a vectorized way + size = np.prod(self.num_bins) + + bd_sum = np.bincount(flat_idx, weights=weights*data_valid, minlength=size) + err_sum = np.bincount(flat_idx, weights=(weights**2)*(errs_valid**2), minlength=size) + ns_sum = np.bincount(flat_idx, weights=weights, minlength=size) + + # 5. Reshape and add into the original arrays + self.binned_data = bd_sum.reshape(self.num_bins) + self.binned_data_errs = err_sum.reshape(self.num_bins) + self.n_samples = ns_sum.reshape(self.num_bins) + + def _norm_data(self): + # normalize binned_data by the number of times sampled + with np.errstate(divide='ignore', invalid='ignore'): + if self.normalize: + self.binned_data = np.divide(self.binned_data, self.n_samples) + self.binned_data_errs = np.divide(np.sqrt(self.binned_data_errs), self.n_samples) + else: + self.binned_data_errs = np.sqrt(self.binned_data_errs) + + # any bins with no samples is nan + mask = self.n_samples == 0 + self.binned_data[mask] = np.nan + self.binned_data_errs[mask] = np.nan diff --git a/sasdata/transforms/post_process.py b/sasdata/transforms/post_process.py new file mode 100644 index 000000000..e69de29bb diff --git a/sasdata/transforms/rebinning.py b/sasdata/transforms/rebinning.py index 0e8c07e0d..dcb9a2ca6 100644 --- a/sasdata/transforms/rebinning.py +++ b/sasdata/transforms/rebinning.py @@ -1,261 +1,261 @@ -""" Algorithms for interpolation and rebinning """ - -from enum import Enum - -import numpy as np -from numpy._typing import ArrayLike -from scipy.sparse import coo_matrix - -from sasdata.quantities.quantity import Quantity - - -class InterpolationOptions(Enum): - NEAREST_NEIGHBOUR = 0 - LINEAR = 1 - CUBIC = 3 - -class InterpolationError(Exception): - """ We probably want to raise exceptions because interpolation is not appropriate/well-defined, - not the same as numerical issues that will raise ValueErrors""" - - -def calculate_interpolation_matrix_1d(input_axis: Quantity[ArrayLike], - output_axis: Quantity[ArrayLike], - mask: ArrayLike | None = None, - order: InterpolationOptions = InterpolationOptions.LINEAR, - is_density=False): - - """ Calculate the matrix that converts values recorded at points specified by input_axis to - values recorded at points specified by output_axis""" - - # We want the input values in terms of the output units, will implicitly check compatability - # TODO: incorporate mask - - working_units = output_axis.units - - input_x = input_axis.in_units_of(working_units) - output_x = output_axis.in_units_of(working_units) - - # Get the array indices that will map the array to a sorted one - input_sort = np.argsort(input_x) - output_sort = np.argsort(output_x) - - input_unsort = np.arange(len(input_x), dtype=int)[input_sort] - output_unsort = np.arange(len(output_x), dtype=int)[output_sort] - - sorted_in = input_x[input_sort] - sorted_out = output_x[output_sort] - - n_in = len(sorted_in) - n_out = len(sorted_out) - - conversion_matrix = None # output - - match order: - case InterpolationOptions.NEAREST_NEIGHBOUR: - - # COO Sparse matrix definition data - i_entries = [] - j_entries = [] - - crossing_points = 0.5*(sorted_out[1:] + sorted_out[:-1]) - - # Find the output values nearest to each of the input values - i=0 - for k, crossing_point in enumerate(crossing_points): - while i < n_in and sorted_in[i] < crossing_point: - i_entries.append(i) - j_entries.append(k) - i += 1 - - # All the rest in the last bin - while i < n_in: - i_entries.append(i) - j_entries.append(n_out-1) - i += 1 - - i_entries = input_unsort[np.array(i_entries, dtype=int)] - j_entries = output_unsort[np.array(j_entries, dtype=int)] - values = np.ones_like(i_entries, dtype=float) - - conversion_matrix = coo_matrix((values, (i_entries, j_entries)), shape=(n_in, n_out)) - - case InterpolationOptions.LINEAR: - - # Leverage existing linear interpolation methods to get the mapping - # do a linear interpolation on indices - # the floor should give the left bin - # the ceil should give the right bin - # the fractional part should give the relative weightings - - input_indices = np.arange(n_in, dtype=int) - output_indices = np.arange(n_out, dtype=int) - - fractional = np.interp(x=sorted_out, xp=sorted_in, fp=input_indices, left=0, right=n_in-1) - - left_bins = np.floor(fractional).astype(int) - right_bins = np.ceil(fractional).astype(int) - - right_weight = fractional % 1 - left_weight = 1 - right_weight - - # There *should* be no repeated entries for both i and j in the main part, but maybe at the ends - # If left bin is the same as right bin, then we only want one entry, and the weight should be 1 - - same = left_bins == right_bins - not_same = ~same - - same_bins = left_bins[same] # could equally be right bins, they're the same - - same_indices = output_indices[same] - not_same_indices = output_indices[not_same] - - j_entries_sorted = np.concatenate((same_indices, not_same_indices, not_same_indices)) - i_entries_sorted = np.concatenate((same_bins, left_bins[not_same], right_bins[not_same])) - - i_entries = input_unsort[i_entries_sorted] - j_entries = output_unsort[j_entries_sorted] - - # weights don't need to be unsorted # TODO: check this is right, it should become obvious if we use unsorted data - weights = np.concatenate((np.ones_like(same_bins, dtype=float), left_weight[not_same], right_weight[not_same])) - - conversion_matrix = coo_matrix((weights, (i_entries, j_entries)), shape=(n_in, n_out)) - - case InterpolationOptions.CUBIC: - # Cubic interpolation, much harder to implement because we can't just cheat and use numpy - - input_indices = np.arange(n_in, dtype=int) - output_indices = np.arange(n_out, dtype=int) - - # Find the location of the largest value in sorted_in that - # is less than every value of sorted_out - lower_bound = ( - np.sum(np.where(np.less.outer(sorted_in, sorted_out), 1, 0), axis=0) - 1 - ) - - # We're using the Finite Difference Cubic Hermite spline - # https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Interpolation_on_an_arbitrary_interval - # https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference - - x1 = sorted_in[lower_bound] # xₖ on the wiki - x2 = sorted_in[lower_bound + 1] # xₖ₊₁ on the wiki - - x0 = sorted_in[lower_bound[lower_bound - 1 >= 0] - 1] # xpₖ₋₁ on the wiki - x0 = np.hstack([np.zeros(x1.size - x0.size), x0]) - - x3 = sorted_in[ - lower_bound[lower_bound + 2 < sorted_in.size] + 2 - ] # xₖ₊₂ on the wiki - x3 = np.hstack([x3, np.zeros(x2.size - x3.size)]) - - t = (sorted_out - x1) / (x2 - x1) # t on the wiki - - y0 = ( - -t * (x1 - x2) * (t**2 - 2 * t + 1) / (2 * x0 - 2 * x1) - ) # The coefficient to pₖ₋₁ on the wiki - y1 = ( - -t * (t**2 - 2 * t + 1) * (x0 - 2 * x1 + x2) - + (x0 - x1) * (3 * t**3 - 5 * t**2 + 2) - ) / (2 * (x0 - x1)) # The coefficient to pₖ - y2 = ( - t - * ( - -t * (t - 1) * (x1 - 2 * x2 + x3) - + (x2 - x3) * (-3 * t**2 + 4 * t + 1) - ) - / (2 * (x2 - x3)) - ) # The coefficient to pₗ₊₁ - y3 = t**2 * (t - 1) * (x1 - x2) / (2 * (x2 - x3)) # The coefficient to pₖ₊₂ - - conversion_matrix = np.zeros((n_in, n_out)) - - (row, column) = np.indices(conversion_matrix.shape) - - mask1 = row == lower_bound[column] - - conversion_matrix[np.roll(mask1, -1, axis=0)] = y0 - conversion_matrix[mask1] = y1 - conversion_matrix[np.roll(mask1, 1, axis=0)] = y2 - - # Special boundary condition for y3 - pick = np.roll(mask1, 2, axis=0) - pick[0:1, :] = 0 - if pick.any(): - conversion_matrix[pick] = y3 - - case _: - raise InterpolationError(f"Unsupported interpolation order: {order}") - - if mask is None: - return conversion_matrix, None - - else: - # Create a new mask - - # Convert to numerical values - # Conservative masking: anything touched by the previous mask is now masked - new_mask = (np.array(mask, dtype=float) @ conversion_matrix) != 0.0 - - return conversion_matrix, new_mask - - -def calculate_interpolation_matrix_2d_axis_axis(input_1: Quantity[ArrayLike], - input_2: Quantity[ArrayLike], - output_1: Quantity[ArrayLike], - output_2: Quantity[ArrayLike], - mask, - order: InterpolationOptions = InterpolationOptions.LINEAR, - is_density: bool = False): - - # This is just the same 1D matrices things - - match order: - case InterpolationOptions.NEAREST_NEIGHBOUR: - pass - - case InterpolationOptions.LINEAR: - pass - - case InterpolationOptions.CUBIC: - pass - - case _: - pass - - -def calculate_interpolation_matrix(input_axes: list[Quantity[ArrayLike]], - output_axes: list[Quantity[ArrayLike]], - data: ArrayLike | None = None, - mask: ArrayLike | None = None): - - # TODO: We probably should delete this, but lets keep it for now - - if len(input_axes) not in (1, 2): - raise InterpolationError("Interpolation is only supported for 1D and 2D data") - - if len(input_axes) == 1 and len(output_axes) == 1: - # Check for dimensionality - input_axis = input_axes[0] - output_axis = output_axes[0] - - if len(input_axis.value.shape) == 1: - if len(output_axis.value.shape) == 1: - calculate_interpolation_matrix_1d() - - if len(output_axes) != len(input_axes): - # Input or output axes might be 2D matrices - pass - - - -def rebin(data: Quantity[ArrayLike], - axes: list[Quantity[ArrayLike]], - new_axes: list[Quantity[ArrayLike]], - mask: ArrayLike | None = None, - interpolation_order: int = 1): - - """ This algorithm is only for operations that preserve dimensionality, - i.e. non-projective rebinning. - """ - - pass +""" Algorithms for interpolation and rebinning """ + +from enum import Enum + +import numpy as np +from numpy._typing import ArrayLike +from scipy.sparse import coo_matrix + +from sasdata.quantities.quantity import Quantity + + +class InterpolationOptions(Enum): + NEAREST_NEIGHBOUR = 0 + LINEAR = 1 + CUBIC = 3 + +class InterpolationError(Exception): + """ We probably want to raise exceptions because interpolation is not appropriate/well-defined, + not the same as numerical issues that will raise ValueErrors""" + + +def calculate_interpolation_matrix_1d(input_axis: Quantity[ArrayLike], + output_axis: Quantity[ArrayLike], + mask: ArrayLike | None = None, + order: InterpolationOptions = InterpolationOptions.LINEAR, + is_density=False): + + """ Calculate the matrix that converts values recorded at points specified by input_axis to + values recorded at points specified by output_axis""" + + # We want the input values in terms of the output units, will implicitly check compatability + # TODO: incorporate mask + + working_units = output_axis.units + + input_x = input_axis.in_units_of(working_units) + output_x = output_axis.in_units_of(working_units) + + # Get the array indices that will map the array to a sorted one + input_sort = np.argsort(input_x) + output_sort = np.argsort(output_x) + + input_unsort = np.arange(len(input_x), dtype=int)[input_sort] + output_unsort = np.arange(len(output_x), dtype=int)[output_sort] + + sorted_in = input_x[input_sort] + sorted_out = output_x[output_sort] + + n_in = len(sorted_in) + n_out = len(sorted_out) + + conversion_matrix = None # output + + match order: + case InterpolationOptions.NEAREST_NEIGHBOUR: + + # COO Sparse matrix definition data + i_entries = [] + j_entries = [] + + crossing_points = 0.5*(sorted_out[1:] + sorted_out[:-1]) + + # Find the output values nearest to each of the input values + i=0 + for k, crossing_point in enumerate(crossing_points): + while i < n_in and sorted_in[i] < crossing_point: + i_entries.append(i) + j_entries.append(k) + i += 1 + + # All the rest in the last bin + while i < n_in: + i_entries.append(i) + j_entries.append(n_out-1) + i += 1 + + i_entries = input_unsort[np.array(i_entries, dtype=int)] + j_entries = output_unsort[np.array(j_entries, dtype=int)] + values = np.ones_like(i_entries, dtype=float) + + conversion_matrix = coo_matrix((values, (i_entries, j_entries)), shape=(n_in, n_out)) + + case InterpolationOptions.LINEAR: + + # Leverage existing linear interpolation methods to get the mapping + # do a linear interpolation on indices + # the floor should give the left bin + # the ceil should give the right bin + # the fractional part should give the relative weightings + + input_indices = np.arange(n_in, dtype=int) + output_indices = np.arange(n_out, dtype=int) + + fractional = np.interp(x=sorted_out, xp=sorted_in, fp=input_indices, left=0, right=n_in-1) + + left_bins = np.floor(fractional).astype(int) + right_bins = np.ceil(fractional).astype(int) + + right_weight = fractional % 1 + left_weight = 1 - right_weight + + # There *should* be no repeated entries for both i and j in the main part, but maybe at the ends + # If left bin is the same as right bin, then we only want one entry, and the weight should be 1 + + same = left_bins == right_bins + not_same = ~same + + same_bins = left_bins[same] # could equally be right bins, they're the same + + same_indices = output_indices[same] + not_same_indices = output_indices[not_same] + + j_entries_sorted = np.concatenate((same_indices, not_same_indices, not_same_indices)) + i_entries_sorted = np.concatenate((same_bins, left_bins[not_same], right_bins[not_same])) + + i_entries = input_unsort[i_entries_sorted] + j_entries = output_unsort[j_entries_sorted] + + # weights don't need to be unsorted # TODO: check this is right, it should become obvious if we use unsorted data + weights = np.concatenate((np.ones_like(same_bins, dtype=float), left_weight[not_same], right_weight[not_same])) + + conversion_matrix = coo_matrix((weights, (i_entries, j_entries)), shape=(n_in, n_out)) + + case InterpolationOptions.CUBIC: + # Cubic interpolation, much harder to implement because we can't just cheat and use numpy + + input_indices = np.arange(n_in, dtype=int) + output_indices = np.arange(n_out, dtype=int) + + # Find the location of the largest value in sorted_in that + # is less than every value of sorted_out + lower_bound = ( + np.sum(np.where(np.less.outer(sorted_in, sorted_out), 1, 0), axis=0) - 1 + ) + + # We're using the Finite Difference Cubic Hermite spline + # https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Interpolation_on_an_arbitrary_interval + # https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference + + x1 = sorted_in[lower_bound] # xₖ on the wiki + x2 = sorted_in[lower_bound + 1] # xₖ₊₁ on the wiki + + x0 = sorted_in[lower_bound[lower_bound - 1 >= 0] - 1] # xpₖ₋₁ on the wiki + x0 = np.hstack([np.zeros(x1.size - x0.size), x0]) + + x3 = sorted_in[ + lower_bound[lower_bound + 2 < sorted_in.size] + 2 + ] # xₖ₊₂ on the wiki + x3 = np.hstack([x3, np.zeros(x2.size - x3.size)]) + + t = (sorted_out - x1) / (x2 - x1) # t on the wiki + + y0 = ( + -t * (x1 - x2) * (t**2 - 2 * t + 1) / (2 * x0 - 2 * x1) + ) # The coefficient to pₖ₋₁ on the wiki + y1 = ( + -t * (t**2 - 2 * t + 1) * (x0 - 2 * x1 + x2) + + (x0 - x1) * (3 * t**3 - 5 * t**2 + 2) + ) / (2 * (x0 - x1)) # The coefficient to pₖ + y2 = ( + t + * ( + -t * (t - 1) * (x1 - 2 * x2 + x3) + + (x2 - x3) * (-3 * t**2 + 4 * t + 1) + ) + / (2 * (x2 - x3)) + ) # The coefficient to pₗ₊₁ + y3 = t**2 * (t - 1) * (x1 - x2) / (2 * (x2 - x3)) # The coefficient to pₖ₊₂ + + conversion_matrix = np.zeros((n_in, n_out)) + + (row, column) = np.indices(conversion_matrix.shape) + + mask1 = row == lower_bound[column] + + conversion_matrix[np.roll(mask1, -1, axis=0)] = y0 + conversion_matrix[mask1] = y1 + conversion_matrix[np.roll(mask1, 1, axis=0)] = y2 + + # Special boundary condition for y3 + pick = np.roll(mask1, 2, axis=0) + pick[0:1, :] = 0 + if pick.any(): + conversion_matrix[pick] = y3 + + case _: + raise InterpolationError(f"Unsupported interpolation order: {order}") + + if mask is None: + return conversion_matrix, None + + else: + # Create a new mask + + # Convert to numerical values + # Conservative masking: anything touched by the previous mask is now masked + new_mask = (np.array(mask, dtype=float) @ conversion_matrix) != 0.0 + + return conversion_matrix, new_mask + + +def calculate_interpolation_matrix_2d_axis_axis(input_1: Quantity[ArrayLike], + input_2: Quantity[ArrayLike], + output_1: Quantity[ArrayLike], + output_2: Quantity[ArrayLike], + mask, + order: InterpolationOptions = InterpolationOptions.LINEAR, + is_density: bool = False): + + # This is just the same 1D matrices things + + match order: + case InterpolationOptions.NEAREST_NEIGHBOUR: + pass + + case InterpolationOptions.LINEAR: + pass + + case InterpolationOptions.CUBIC: + pass + + case _: + pass + + +def calculate_interpolation_matrix(input_axes: list[Quantity[ArrayLike]], + output_axes: list[Quantity[ArrayLike]], + data: ArrayLike | None = None, + mask: ArrayLike | None = None): + + # TODO: We probably should delete this, but lets keep it for now + + if len(input_axes) not in (1, 2): + raise InterpolationError("Interpolation is only supported for 1D and 2D data") + + if len(input_axes) == 1 and len(output_axes) == 1: + # Check for dimensionality + input_axis = input_axes[0] + output_axis = output_axes[0] + + if len(input_axis.value.shape) == 1: + if len(output_axis.value.shape) == 1: + calculate_interpolation_matrix_1d() + + if len(output_axes) != len(input_axes): + # Input or output axes might be 2D matrices + pass + + + +def rebin(data: Quantity[ArrayLike], + axes: list[Quantity[ArrayLike]], + new_axes: list[Quantity[ArrayLike]], + mask: ArrayLike | None = None, + interpolation_order: int = 1): + + """ This algorithm is only for operations that preserve dimensionality, + i.e. non-projective rebinning. + """ + + pass diff --git a/sasdata/util.py b/sasdata/util.py new file mode 100644 index 000000000..8decc68be --- /dev/null +++ b/sasdata/util.py @@ -0,0 +1,18 @@ +from collections.abc import Callable +from typing import TypeVar + +T = TypeVar("T") + +def cache[T](fun: Callable[[], T]): + """ Decorator to store values """ + + cache_state = [False, None] + + def wrapper() -> T: + if not cache_state[0]: + cache_state[0] = True + cache_state[1] = fun() + + return cache_state[1] + + return wrapper diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv new file mode 100644 index 000000000..8e9c70665 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv @@ -0,0 +1,105 @@ +3.624299999999999744e-02 7.295645247999999583e+01 1.637502872666669873e+01 +4.068929999999999769e-02 3.496757764333329987e+01 1.132330254166670080e+01 +4.510000000000000120e-02 2.871506291000000033e+01 8.366418418333330109e+00 +4.957960000000000145e-02 3.062621534000000167e+01 6.807088010000000189e+00 +5.414959999999999912e-02 1.698840335499999910e+01 5.315930135000000334e+00 +5.867460000000000037e-02 1.810732352000000134e+01 4.582343003333329889e+00 +6.313670000000000393e-02 1.758858145166669829e+01 3.753068668333329860e+00 +6.771770000000000567e-02 1.874808681500000063e+01 3.129801861666670071e+00 +7.237100000000000477e-02 1.219239694000000007e+01 2.701832888333330018e+00 +7.692330000000000001e-02 1.502033604000000011e+01 2.415586504999999828e+00 +8.164470000000000061e-02 1.051882241166670084e+01 2.003147743333329789e+00 +8.639470000000000482e-02 1.266539752666670005e+01 1.813845073333330005e+00 +9.106759999999999855e-02 1.164225125833329955e+01 1.590423455000000041e+00 +9.573710000000000553e-02 9.248378555000000389e+00 1.453449206666669991e+00 +1.004952999999999957e-01 1.082198768499999986e+01 1.296534581666670016e+00 +1.052397000000000055e-01 9.754544071666670035e+00 1.192202876666669908e+00 +1.099886000000000058e-01 9.770793396666670461e+00 1.074958141666670031e+00 +1.148422000000000054e-01 9.667035006666669261e+00 9.803857316666669819e-01 +1.197769999999999946e-01 8.381104240000000871e+00 8.964596183333329860e-01 +1.247698000000000002e-01 7.884219706666669936e+00 8.320707283333329540e-01 +1.298370000000000080e-01 8.175124921666670375e+00 7.497416000000000080e-01 +1.349077999999999944e-01 7.421197476666669957e+00 7.207336583333330271e-01 +1.399244000000000043e-01 8.545903931666670061e+00 6.648524133333330033e-01 +1.450733999999999913e-01 7.172791390000000433e+00 6.314494133333330428e-01 +1.502658000000000049e-01 6.110795001666669890e+00 5.924928833333330536e-01 +1.556062000000000001e-01 7.011488443333329990e+00 5.430119199999999813e-01 +1.572456999999999883e-01 7.121472013333329798e+00 1.740741033333330079e-01 +1.609471000000000096e-01 7.438929439999999893e+00 5.263131250000000483e-01 +1.661874999999999880e-01 6.540084590000000198e+00 4.946959550000000205e-01 +1.706292000000000086e-01 6.367655253333330378e+00 1.455746566666669961e-01 +1.715615000000000057e-01 6.476111691666670112e+00 4.707941449999999972e-01 +1.771270000000000067e-01 5.720913878333329983e+00 4.355610400000000104e-01 +1.827315999999999940e-01 6.117868691666670244e+00 4.186226383333330192e-01 +1.842428999999999872e-01 5.857041180000000402e+00 1.254778649999999940e-01 +1.883173999999999959e-01 5.849837826666670182e+00 4.069392433333329784e-01 +1.939794999999999991e-01 5.447672994999999574e+00 3.927526633333329742e-01 +1.982414999999999872e-01 5.391186461666669594e+00 1.085076650000000031e-01 +1.997663000000000078e-01 5.394637556666670442e+00 3.662608233333329855e-01 +2.055810999999999888e-01 5.784545713333329786e+00 3.603836316666669815e-01 +2.114655000000000007e-01 4.574601945000000391e+00 3.312713700000000094e-01 +2.120113000000000136e-01 5.084515549999999884e+00 9.927742500000000248e-02 +2.161903000000000019e-01 4.516358434999999893e+00 4.168106166666670220e-01 +2.259823999999999999e-01 4.782964421666670241e+00 8.791053666666670541e-02 +2.397845000000000115e-01 4.501217386666669817e+00 8.259429166666669431e-02 +2.537096999999999825e-01 4.179436571666670375e+00 7.562756833333329765e-02 +2.676275000000000182e-01 3.979478888333329856e+00 6.987285499999999761e-02 +2.817857999999999752e-01 3.702226940000000077e+00 6.482911333333329917e-02 +2.956398000000000081e-01 3.605992423333329810e+00 6.203536333333330155e-02 +3.099044000000000243e-01 3.377018353333329781e+00 5.670042833333330257e-02 +3.240645999999999805e-01 3.095807218333329836e+00 5.498817999999999762e-02 +3.388027000000000122e-01 2.841171323333330001e+00 4.897826333333329951e-02 +3.539140000000000064e-01 2.795649415000000193e+00 4.845330666666670255e-02 +3.687090000000000090e-01 2.622854690000000044e+00 4.475559833333329907e-02 +3.839813000000000254e-01 2.527809641666669993e+00 4.273165666666670082e-02 +3.988975000000000160e-01 2.232305030000000023e+00 4.094381166666669764e-02 +4.106734000000000218e-01 2.129986383333330124e+00 4.154637366666669857e-02 +4.136514000000000024e-01 2.084593566666669950e+00 3.891198166666669928e-02 +4.290628000000000219e-01 1.988620215000000080e+00 3.594587333333330165e-02 +4.295516999999999808e-01 1.964928603499999982e+00 3.519640899999999795e-02 +4.446014999999999828e-01 1.750614441666670018e+00 3.497378000000000292e-02 +4.466716000000000020e-01 1.709819834666669980e+00 3.112847050000000157e-02 +4.603325999999999807e-01 1.676685876666669905e+00 3.265084166666670090e-02 +4.685437000000000074e-01 1.638395569999999912e+00 3.101072850000000103e-02 +4.764860000000000206e-01 1.575855291666669933e+00 3.097528500000000171e-02 +4.834083000000000130e-01 1.443926158166670026e+00 2.913516383333330032e-02 +4.923204999999999942e-01 1.443778989999999984e+00 3.072023333333330150e-02 +5.046621000000000024e-01 1.382474827333330047e+00 2.709115466666670025e-02 +5.082708000000000226e-01 1.368563626666670086e+00 2.832584499999999880e-02 +5.230728999999999518e-01 1.117650907000000027e+00 2.515010599999999846e-02 +5.249162000000000550e-01 1.271594368333329950e+00 2.652784333333330080e-02 +5.416775999999999813e-01 1.132208539999999930e+00 2.601087833333329963e-02 +5.444001000000000534e-01 1.080469498666670081e+00 2.559191900000000117e-02 +5.583067999999999920e-01 1.032465565000000085e+00 2.510816333333330125e-02 +5.612614999999999688e-01 1.012286258500000091e+00 2.336018449999999885e-02 +5.753956999999999544e-01 9.763539783333330391e-01 2.332539999999999961e-02 +5.834072999999999620e-01 8.965217239999999643e-01 2.303063099999999933e-02 +5.927398999999999862e-01 9.096560916666670549e-01 2.248173499999999922e-02 +6.005747000000000169e-01 8.250965611666669641e-01 2.186496933333329992e-02 +6.099058000000000535e-01 8.168162183333329551e-01 2.170944500000000082e-02 +6.218546000000000351e-01 7.414260915000000507e-01 2.121375600000000028e-02 +6.275003000000000108e-01 7.444278466666669480e-01 2.046154333333330064e-02 +6.412082999999999533e-01 6.366966366666669819e-01 1.883217216666669899e-02 +6.447154999999999969e-01 6.422991433333330447e-01 2.075286000000000144e-02 +6.655497999999999692e-01 5.866493959999999896e-01 1.815403650000000160e-02 +6.843702000000000396e-01 5.515869356666670553e-01 2.025276583333330063e-02 +7.058105999999999547e-01 4.475886111666669831e-01 1.701240433333330027e-02 +7.258693999999999980e-01 4.775394179999999933e-01 1.840697383333329828e-02 +7.490480000000000471e-01 4.047520649999999942e-01 1.505153366666669990e-02 +7.720086999999999922e-01 3.731668894999999875e-01 1.706827766666670076e-02 +7.920989999999999975e-01 3.681129878333330163e-01 1.507231049999999996e-02 +8.155097999999999514e-01 3.208610430000000124e-01 1.529166149999999953e-02 +8.364475000000000104e-01 2.962226738333330056e-01 1.456896033333330079e-02 +8.619377000000000288e-01 2.765821119999999911e-01 1.371801400000000060e-02 +8.846403999999999934e-01 2.799105873333330163e-01 1.446314666666670065e-02 +9.081462000000000145e-01 2.318482950000000098e-01 1.260493333333330065e-02 +9.334447000000000161e-01 2.175556724999999914e-01 1.357374916666670081e-02 +9.551832000000000100e-01 1.903255399999999875e-01 1.273357800000000060e-02 +9.812971999999999806e-01 1.841620115000000002e-01 1.195187833333329931e-02 +1.006807800000000030e+00 1.608915558333330054e-01 1.233432733333329930e-02 +1.030406600000000061e+00 1.533644885000000069e-01 1.172346633333330029e-02 +1.057784300000000011e+00 1.661925581666670038e-01 1.091501716666670035e-02 +1.084600999999999926e+00 1.630933589999999933e-01 1.128103283333329980e-02 +1.109902299999999897e+00 1.327154809999999963e-01 1.088576583333330031e-02 +1.137751600000000085e+00 1.179623709999999964e-01 1.042595833333329926e-02 +1.166036300000000026e+00 1.293750036666669878e-01 1.024355400000000020e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv new file mode 100644 index 000000000..bfbf36dcd --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv @@ -0,0 +1,105 @@ +3.625559999999999894e-02 4.452644707000000324e+01 1.628119149999999848e+01 +4.070349999999999663e-02 2.677295466333330154e+01 1.128515222166669929e+01 +4.511570000000000163e-02 2.350029203500000108e+01 8.338724138333329705e+00 +4.959680000000000338e-02 1.744413458166669884e+01 6.751264438333329565e+00 +5.416850000000000137e-02 9.909433441666669395e+00 5.280963783333329609e+00 +5.869510000000000005e-02 1.174714312999999954e+01 4.547423594999999708e+00 +6.315869999999999818e-02 1.312634901166670076e+01 3.725749208333330120e+00 +6.774130000000000429e-02 1.654730030333330149e+01 3.113655078333330106e+00 +7.239619999999999389e-02 7.792796271666669661e+00 2.672180411666670086e+00 +7.695009999999999351e-02 1.265325572666669984e+01 2.397233363333330036e+00 +8.167309999999999848e-02 6.069752713333330441e+00 1.971069876666670107e+00 +8.642469999999999319e-02 1.300927747833329917e+01 1.813635340000000040e+00 +9.109929999999999417e-02 9.757094948333330464e+00 1.573592551666670003e+00 +9.577040000000000552e-02 5.713518095000000407e+00 1.422093728333329921e+00 +1.005303000000000030e-01 7.313534973333330136e+00 1.265234731666670109e+00 +1.052763000000000032e-01 8.841184973333330532e+00 1.182077201666670074e+00 +1.100268999999999969e-01 7.404252198333329815e+00 1.051346621666670034e+00 +1.148821000000000009e-01 8.380590695000000423e+00 9.664303683333329564e-01 +1.198187000000000002e-01 7.413483668333330279e+00 8.855263516666670442e-01 +1.248133000000000020e-01 6.593134025000000342e+00 8.175650066666669824e-01 +1.298822000000000032e-01 6.731246111666670195e+00 7.333046399999999521e-01 +1.349548000000000136e-01 5.519098301666669926e+00 6.986229283333329487e-01 +1.399730999999999892e-01 7.581442331666670142e+00 6.528076566666669578e-01 +1.451239000000000001e-01 4.842304316666670161e+00 6.043489516666670225e-01 +1.503181000000000100e-01 5.135523888333329623e+00 5.802922499999999539e-01 +1.556604000000000043e-01 6.037988904999999740e+00 5.310080216666670516e-01 +1.573070000000000024e-01 6.020141886666669606e+00 1.700767950000000028e-01 +1.610031000000000101e-01 6.268605329999999753e+00 5.111983383333329467e-01 +1.662453999999999876e-01 5.536486726666669966e+00 4.815289200000000269e-01 +1.706957000000000058e-01 5.285752210000000062e+00 1.415798849999999887e-01 +1.716212000000000015e-01 5.016643598333329734e+00 4.522174083333330152e-01 +1.771887000000000045e-01 5.127789406666670047e+00 4.276572833333330270e-01 +1.827951999999999910e-01 5.311901800000000229e+00 4.077617766666670196e-01 +1.843146999999999980e-01 5.273006283333329769e+00 1.230909116666669967e-01 +1.883829999999999949e-01 4.028933333333330147e+00 3.832458766666669847e-01 +1.940469999999999973e-01 4.805727509999999647e+00 3.842635300000000198e-01 +1.983187999999999895e-01 4.783697818333330076e+00 1.059592133333329966e-01 +1.998358000000000079e-01 4.823453656666670142e+00 3.585670233333330126e-01 +2.056525999999999910e-01 4.659267076666670171e+00 3.454626916666669878e-01 +2.115392000000000106e-01 3.961550343333330115e+00 3.229926716666670083e-01 +2.120939000000000019e-01 4.350835990000000209e+00 9.606802500000000133e-02 +2.162656000000000023e-01 4.681036608333330129e+00 4.188060433333329891e-01 +2.260705000000000076e-01 4.224838659999999635e+00 8.541253666666670519e-02 +2.398779000000000050e-01 3.935926101666670007e+00 7.996145500000000073e-02 +2.538084999999999924e-01 3.694058728333330155e+00 7.335489833333329324e-02 +2.677318000000000198e-01 3.684019681666669932e+00 6.840629833333329579e-02 +2.818956000000000239e-01 3.452043701666669850e+00 6.355296333333329550e-02 +2.957549999999999901e-01 3.354666878333329993e+00 6.073878666666669701e-02 +3.100250999999999979e-01 3.092418856666669935e+00 5.527531000000000111e-02 +3.241909000000000041e-01 2.870290291666670157e+00 5.380070499999999728e-02 +3.389346999999999777e-01 2.729991994999999783e+00 4.836916333333329820e-02 +3.540519999999999778e-01 2.658729508333330216e+00 4.771163500000000224e-02 +3.688526999999999778e-01 2.488934241666670211e+00 4.403299000000000102e-02 +3.841308999999999974e-01 2.412009111666669980e+00 4.209804999999999797e-02 +3.990528999999999882e-01 2.203036439999999985e+00 4.070905166666669711e-02 +4.105667000000000066e-01 1.996977714666670067e+00 4.083280150000000164e-02 +4.138126999999999778e-01 2.043262161666670185e+00 3.862582833333329940e-02 +4.292300000000000004e-01 1.982205959999999934e+00 3.583282166666670182e-02 +4.294401999999999942e-01 1.834877223666669943e+00 3.458454216666669717e-02 +4.447747000000000228e-01 1.712660204999999936e+00 3.471672166666670001e-02 +4.465555999999999970e-01 1.615437673500000004e+00 3.068944266666669834e-02 +4.605119999999999769e-01 1.681440621666669966e+00 3.260043333333329657e-02 +4.684220000000000050e-01 1.529958281999999947e+00 3.049975383333329917e-02 +4.766716999999999760e-01 1.561241171666670091e+00 3.083583000000000157e-02 +4.832827000000000095e-01 1.369049060333330070e+00 2.875037449999999842e-02 +4.925123000000000140e-01 1.406416503333330015e+00 3.046807833333330107e-02 +5.045309999999999517e-01 1.316827885166669931e+00 2.677764066666669940e-02 +5.084689000000000014e-01 1.339987331666669945e+00 2.812536666666669988e-02 +5.229369999999999852e-01 1.082862526333330022e+00 2.496820599999999973e-02 +5.251208000000000542e-01 1.259172833333330077e+00 2.640966666666669932e-02 +5.418887000000000009e-01 1.134540908333329989e+00 2.596733000000000027e-02 +5.442586999999999842e-01 1.026980480500000015e+00 2.532101549999999854e-02 +5.585244000000000320e-01 1.057657990000000048e+00 2.518052499999999874e-02 +5.611156999999999950e-01 9.343203683333329845e-01 2.299225916666669881e-02 +5.756198999999999621e-01 9.598931866666670087e-01 2.319752666666670057e-02 +5.832557000000000436e-01 8.443178690000000541e-01 2.277228483333329848e-02 +5.929708999999999675e-01 9.115965033333329748e-01 2.244499833333329919e-02 +6.004186999999999719e-01 7.992612106666669991e-01 2.172028233333329894e-02 +6.101434999999999498e-01 8.528685350000000387e-01 2.184797833333329900e-02 +6.216930999999999985e-01 7.049236858333329803e-01 2.102741616666670144e-02 +6.277447999999999917e-01 7.853513183333330483e-01 2.062051499999999898e-02 +6.410417000000000476e-01 6.132204243333330140e-01 1.871036433333329863e-02 +6.449667999999999513e-01 7.011444599999999694e-01 2.101788333333329956e-02 +6.653769000000000489e-01 5.661603698333329548e-01 1.804829366666670099e-02 +6.841924999999999812e-01 5.085138883333329973e-01 2.002898349999999994e-02 +7.056272000000000100e-01 4.352650703333330040e-01 1.694186849999999855e-02 +7.256808000000000147e-01 4.355121908333329794e-01 1.820155999999999857e-02 +7.488534000000000024e-01 3.927147446666670039e-01 1.498729066666669961e-02 +7.718082000000000553e-01 3.535320510000000138e-01 1.696024266666670138e-02 +7.918933000000000222e-01 3.527103021666669891e-01 1.499266833333330086e-02 +8.152979999999999672e-01 3.240461856666669860e-01 1.528614783333329986e-02 +8.362302999999999820e-01 2.791947966666670222e-01 1.448550166666670060e-02 +8.617137999999999742e-01 2.463675190000000070e-01 1.359101549999999943e-02 +8.844106000000000467e-01 2.696912470000000228e-01 1.440389033333329925e-02 +9.079102999999999479e-01 2.246905299999999994e-01 1.256477649999999946e-02 +9.332021999999999817e-01 2.085629360000000043e-01 1.352310049999999944e-02 +9.549351000000000367e-01 1.738771078333329889e-01 1.265774100000000013e-02 +9.810423000000000338e-01 1.708308721666670082e-01 1.189189666666670003e-02 +1.006546299999999894e+00 1.505248680000000061e-01 1.228292216666669948e-02 +1.030138999999999916e+00 1.537520601666670095e-01 1.171224066666669977e-02 +1.057509599999999939e+00 1.534308791666670058e-01 1.086003916666669969e-02 +1.084319299999999986e+00 1.338797798333329903e-01 1.116524300000000004e-02 +1.109614000000000100e+00 1.189064603333330056e-01 1.082743033333329920e-02 +1.137456000000000023e+00 1.107916548333330031e-01 1.039160416666670000e-02 +1.165733499999999978e+00 1.125385351666669947e-01 1.017680349999999963e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv new file mode 100644 index 000000000..9ae1c5f3e --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv @@ -0,0 +1,105 @@ +3.624610000000000332e-02 5.667029333499999666e+01 1.635708034166669833e+01 +4.069289999999999713e-02 2.663486052833329865e+01 1.131616966500000032e+01 +4.510390000000000232e-02 2.091145430999999988e+01 8.353784624999999409e+00 +4.958379999999999732e-02 1.655762528666669908e+01 6.766916158333329712e+00 +5.415430000000000244e-02 7.405398096666670149e+00 5.285856098333329811e+00 +5.867970000000000130e-02 1.609157327499999823e+01 4.579871853333330023e+00 +6.314219999999999555e-02 2.074624494500000083e+01 3.774208823333330187e+00 +6.772359999999999491e-02 1.622769223499999924e+01 3.121007619999999871e+00 +7.237720000000000264e-02 8.100976058333330343e+00 2.681633823333330113e+00 +7.692999999999999838e-02 7.297140411666670268e+00 2.370097993333330155e+00 +8.165179999999999660e-02 8.662000215000000836e+00 1.993900453333329992e+00 +8.640209999999999557e-02 1.195176863500000053e+01 1.811378463333330080e+00 +9.107550000000000368e-02 1.017929826333329935e+01 1.581605778333329937e+00 +9.574539999999999440e-02 8.299761948333330253e+00 1.447854706666670044e+00 +1.005039999999999961e-01 7.184010728333330320e+00 1.267957188333330043e+00 +1.052488000000000035e-01 7.705754226666670093e+00 1.175315996666669971e+00 +1.099981000000000014e-01 6.940137736666669888e+00 1.050239939999999983e+00 +1.148520999999999986e-01 7.227232895000000212e+00 9.582211533333330200e-01 +1.197872999999999993e-01 6.058664864999999899e+00 8.747766333333329980e-01 +1.247806000000000054e-01 5.235616768333329674e+00 8.060124016666669888e-01 +1.298481999999999970e-01 6.895559143333329644e+00 7.374701233333329498e-01 +1.349194999999999978e-01 5.596115646666669718e+00 7.017485283333330104e-01 +1.399364999999999915e-01 7.271002904999999572e+00 6.515097483333329720e-01 +1.450858999999999899e-01 5.001139740000000167e+00 6.081432883333329764e-01 +1.502787999999999902e-01 5.397041578333330314e+00 5.852662783333330010e-01 +1.556196999999999997e-01 5.201047356666670396e+00 5.230793849999999523e-01 +1.572660999999999920e-01 5.527525920000000426e+00 1.689539216666670063e-01 +1.609609999999999930e-01 6.050507654999999652e+00 5.103277550000000495e-01 +1.662019000000000135e-01 5.215723743333329665e+00 4.792083599999999999e-01 +1.706513000000000058e-01 5.031433279999999897e+00 1.411615750000000113e-01 +1.715762999999999872e-01 4.986483428333330359e+00 4.534299233333329848e-01 +1.771423000000000025e-01 5.106750501666669884e+00 4.289189133333329851e-01 +1.827474000000000043e-01 5.398633823333329751e+00 4.103611200000000236e-01 +1.842668000000000084e-01 4.914610723333329823e+00 1.221897900000000065e-01 +1.883336999999999928e-01 4.776135458333330419e+00 3.942386333333329773e-01 +1.939963000000000104e-01 4.310256373333330338e+00 3.794851616666670147e-01 +1.982673000000000074e-01 4.375084450000000125e+00 1.047416733333329936e-01 +1.997836000000000056e-01 4.425991520000000179e+00 3.548793383333330165e-01 +2.055989000000000011e-01 4.542295369999999721e+00 3.452195166666670034e-01 +2.114837999999999996e-01 4.392925553333330235e+00 3.296180283333329797e-01 +2.120387999999999995e-01 4.102498828333329683e+00 9.538819833333339604e-02 +2.162090000000000123e-01 4.067448908333330060e+00 4.099168333333330083e-01 +2.260118000000000127e-01 3.879140883333330070e+00 8.427184499999999800e-02 +2.398155999999999899e-01 3.717842756666669857e+00 7.930888666666670306e-02 +2.537425999999999848e-01 3.531988756666669893e+00 7.293178499999999898e-02 +2.676623000000000197e-01 3.501111030000000124e+00 6.786378666666670334e-02 +2.818223999999999729e-01 3.329498083333330083e+00 6.325724833333329356e-02 +2.956782000000000021e-01 3.079447669999999970e+00 5.969948499999999658e-02 +3.099446000000000145e-01 2.946954811666670171e+00 5.483356999999999815e-02 +3.241067000000000253e-01 2.705831398333330196e+00 5.323661166666669720e-02 +3.388467000000000007e-01 2.601996516666670090e+00 4.799289000000000333e-02 +3.539599999999999969e-01 2.517872383333330077e+00 4.725612833333329987e-02 +3.687568999999999986e-01 2.374362781666670141e+00 4.368410333333330037e-02 +3.840311000000000141e-01 2.195996148333330122e+00 4.125977166666670165e-02 +3.989493000000000067e-01 2.109030429999999789e+00 4.042385333333330111e-02 +4.107986000000000137e-01 1.888483604166669938e+00 4.043749766666669687e-02 +4.137051999999999952e-01 1.969810571666670063e+00 3.843483833333329741e-02 +4.291185000000000138e-01 1.859797011666669997e+00 3.539587999999999762e-02 +4.296826999999999730e-01 1.762954635166670059e+00 3.439219566666670141e-02 +4.446591999999999767e-01 1.624618943333330012e+00 3.443567000000000156e-02 +4.468077999999999772e-01 1.588049316333330019e+00 3.067751716666669917e-02 +4.603923999999999794e-01 1.585295316666669896e+00 3.227559333333329672e-02 +4.686866000000000088e-01 1.509168766666669992e+00 3.051112400000000058e-02 +4.765479000000000243e-01 1.429500135000000061e+00 3.031986666666669841e-02 +4.835556999999999772e-01 1.309360340500000053e+00 2.857159116666670162e-02 +4.923843999999999999e-01 1.363123808333329912e+00 3.037624166666669928e-02 +5.048160000000000425e-01 1.296483956833329954e+00 2.677855866666669846e-02 +5.083368000000000331e-01 1.254868451666669937e+00 2.782200166666669999e-02 +5.232324000000000419e-01 1.028253859833329953e+00 2.481625150000000071e-02 +5.249844000000000177e-01 1.223231273333329927e+00 2.634227000000000096e-02 +5.417480000000000073e-01 1.058531658333329961e+00 2.569255333333329838e-02 +5.445661000000000529e-01 1.022632484000000064e+00 2.537817800000000124e-02 +5.583793000000000228e-01 1.009770163333330029e+00 2.504100833333329848e-02 +5.614325999999999484e-01 9.522996788333329965e-01 2.313905700000000107e-02 +5.754704000000000486e-01 9.158985283333339611e-01 2.307270666666669939e-02 +5.835850999999999678e-01 8.544030651666669751e-01 2.288279616666670166e-02 +5.928168000000000326e-01 8.553651300000000290e-01 2.224781666666670113e-02 +6.007578000000000085e-01 7.747371155000000176e-01 2.167619850000000042e-02 +6.099849999999999994e-01 7.987110383333330121e-01 2.165553833333330042e-02 +6.220442000000000471e-01 6.615610463333330138e-01 2.089781950000000124e-02 +6.275817000000000201e-01 7.150054516666669580e-01 2.035196333333329916e-02 +6.414037999999999684e-01 6.088626698333330367e-01 1.874337833333329997e-02 +6.447992000000000168e-01 6.630811316666670452e-01 2.089752166666669977e-02 +6.657526999999999751e-01 5.716572943333330103e-01 1.811807299999999843e-02 +6.845788999999999902e-01 5.092866856666670161e-01 2.008440916666669879e-02 +7.060256999999999783e-01 4.113589818333330261e-01 1.688841199999999848e-02 +7.260906999999999778e-01 4.258370573333329911e-01 1.820484666666670123e-02 +7.492763000000000062e-01 3.814062795000000006e-01 1.498164383333329928e-02 +7.722440999999999889e-01 3.582434820000000020e-01 1.702263550000000097e-02 +7.923405000000000031e-01 3.290160251666670033e-01 1.493438950000000078e-02 +8.157583999999999946e-01 3.190799841666669967e-01 1.530228649999999975e-02 +8.367025000000000157e-01 2.762952625000000273e-01 1.450753649999999943e-02 +8.622005000000000363e-01 2.544186793333330088e-01 1.365137966666669922e-02 +8.849101000000000328e-01 2.424038613333329983e-01 1.432358516666669933e-02 +9.084231000000000389e-01 2.172930054999999971e-01 1.256612799999999933e-02 +9.337292000000000369e-01 2.202721591666670087e-01 1.359930866666670020e-02 +9.554743999999999460e-01 1.777866800000000025e-01 1.269970833333330072e-02 +9.815962999999999772e-01 1.676419470000000134e-01 1.190602366666669923e-02 +1.007114700000000029e+00 1.595580418333329975e-01 1.234223233333330005e-02 +1.030720700000000045e+00 1.541775503333329966e-01 1.173861049999999975e-02 +1.058106800000000014e+00 1.554276226666669869e-01 1.088984299999999975e-02 +1.084931700000000054e+00 1.440364893333329899e-01 1.122487333333329999e-02 +1.110240600000000022e+00 1.198653424999999995e-01 1.085281416666670010e-02 +1.138098400000000066e+00 1.211473946666670048e-01 1.044690799999999954e-02 +1.166391799999999979e+00 1.189307901666669942e-01 1.021903716666669980e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv new file mode 100644 index 000000000..ee5f13e07 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 6.302187949999999717e+01 1.635904319500000170e+01 +4.070000000000000007e-02 2.785521429499999968e+01 1.130956581166669928e+01 +4.511180000000000051e-02 1.008215536333329965e+01 8.312546360000000689e+00 +4.959249999999999770e-02 1.581932412333330085e+01 6.758513281666670203e+00 +5.416379999999999806e-02 7.750620351666669627e+00 5.282679641666669923e+00 +5.868999999999999911e-02 1.257659237500000060e+01 4.560014873333329888e+00 +6.315320000000000655e-02 1.891331758666670027e+01 3.761777425000000008e+00 +6.773540000000000116e-02 1.328150150333330082e+01 3.102479755000000061e+00 +7.238989999999999314e-02 9.795755306666670492e+00 2.689289660000000026e+00 +7.694339999999999513e-02 1.021541878833330053e+01 2.386645821666669942e+00 +8.166600000000000248e-02 7.264236756666670125e+00 1.982897978333330036e+00 +8.641719999999999957e-02 9.727612021666670827e+00 1.793249476666670006e+00 +9.109140000000000292e-02 9.940133039999999198e+00 1.578285125000000066e+00 +9.576210000000000278e-02 5.869161616666669801e+00 1.426304660000000002e+00 +1.005216000000000026e-01 6.271050506666670188e+00 1.258989316666669911e+00 +1.052672000000000052e-01 4.575212496666670070e+00 1.144957958333330028e+00 +1.100174000000000013e-01 6.675946670000000083e+00 1.046739891666669919e+00 +1.148721999999999938e-01 4.569861300000000348e+00 9.307519933333330275e-01 +1.198083000000000065e-01 4.073412075000000243e+00 8.536948699999999945e-01 +1.248023999999999939e-01 5.517398765000000260e+00 8.081908083333330106e-01 +1.298709000000000113e-01 6.055929844999999645e+00 7.277152516666669513e-01 +1.349431000000000103e-01 4.214499321666670184e+00 6.853886750000000028e-01 +1.399610000000000021e-01 4.711855326666669619e+00 6.206856016666669751e-01 +1.451112999999999986e-01 4.280988370000000209e+00 5.992362466666669718e-01 +1.503050999999999970e-01 3.350940026666669791e+00 5.604130616666670450e-01 +1.556469000000000047e-01 4.037392881666669986e+00 5.086757983333329847e-01 +1.572660999999999920e-01 4.116049464999999685e+00 1.639383783333329958e-01 +1.609891999999999990e-01 4.767404383333330387e+00 4.936060199999999787e-01 +1.662309999999999899e-01 4.092517224999999925e+00 4.643677516666669947e-01 +1.706513000000000058e-01 3.775210913333329810e+00 1.365719850000000068e-01 +1.716062999999999894e-01 4.067082121666669714e+00 4.413313999999999848e-01 +1.771733000000000058e-01 3.397890750000000182e+00 4.070909349999999871e-01 +1.827794000000000085e-01 4.061001236666670344e+00 3.925402433333329832e-01 +1.842668000000000084e-01 3.799252254999999856e+00 1.178310383333329991e-01 +1.883665999999999952e-01 3.208655455000000156e+00 3.733191000000000148e-01 +1.940302000000000138e-01 3.206445976666670195e+00 3.650098783333329822e-01 +1.982673000000000074e-01 3.425276903333330125e+00 1.008325449999999956e-01 +1.998185000000000100e-01 3.354815260000000077e+00 3.406662516666669749e-01 +2.056348000000000065e-01 3.721227830000000125e+00 3.339491649999999923e-01 +2.115208000000000088e-01 3.612948971666670062e+00 3.193275150000000062e-01 +2.120387999999999995e-01 3.205896688333329969e+00 9.145261000000000362e-02 +2.162467999999999890e-01 3.645113248333330169e+00 4.021025750000000176e-01 +2.260118000000000127e-01 3.104582965000000083e+00 8.081593333333329798e-02 +2.398155999999999899e-01 3.037513673333330111e+00 7.613482000000000582e-02 +2.537425999999999848e-01 2.836682165000000033e+00 6.969811833333329487e-02 +2.676623000000000197e-01 2.819590748333329788e+00 6.462849833333329796e-02 +2.818223999999999729e-01 2.721404538333330070e+00 6.033223166666670106e-02 +2.956782000000000021e-01 2.736251186666669888e+00 5.799425166666669768e-02 +3.099446000000000145e-01 2.543946483333329844e+00 5.286760000000000070e-02 +3.241067000000000253e-01 2.287160831666669836e+00 5.112056499999999976e-02 +3.388467000000000007e-01 2.288673078333329780e+00 4.649771999999999933e-02 +3.539599999999999969e-01 2.199149091666670053e+00 4.568711999999999773e-02 +3.687568999999999986e-01 2.068072668333329922e+00 4.217328666666669834e-02 +3.840311000000000141e-01 1.969221529999999998e+00 4.012745166666670249e-02 +3.989493000000000067e-01 1.908232941666669902e+00 3.938963333333329875e-02 +4.107629999999999892e-01 1.727702871333330004e+00 3.958386533333330126e-02 +4.137051999999999952e-01 1.726875600000000066e+00 3.720425833333330240e-02 +4.291185000000000138e-01 1.581841901666670047e+00 3.398506666666670228e-02 +4.296455000000000135e-01 1.691278518333330094e+00 3.404221949999999830e-02 +4.446591999999999767e-01 1.488087740000000103e+00 3.374035333333329917e-02 +4.467690999999999746e-01 1.413946998166669911e+00 2.991126200000000096e-02 +4.603923999999999794e-01 1.391984139999999925e+00 3.130147333333330173e-02 +4.686460000000000070e-01 1.392956528666670080e+00 2.997462383333330052e-02 +4.765479000000000243e-01 1.301627080000000047e+00 2.965699000000000113e-02 +4.835137999999999936e-01 1.193676802499999967e+00 2.800566683333330018e-02 +4.923843999999999999e-01 1.242278698333330045e+00 2.973970833333329858e-02 +5.047722000000000042e-01 1.149708217833329993e+00 2.613050733333329920e-02 +5.083368000000000331e-01 1.161310218333329924e+00 2.733334000000000111e-02 +5.231871000000000160e-01 9.503032668333329935e-01 2.446244750000000148e-02 +5.249844000000000177e-01 1.102167341666669964e+00 2.571981833333330039e-02 +5.417480000000000073e-01 9.754589783333329489e-01 2.525416166666670167e-02 +5.445189000000000279e-01 9.366835949999999800e-01 2.497178450000000008e-02 +5.583793000000000228e-01 8.831162099999999571e-01 2.438054666666670048e-02 +5.613839000000000468e-01 8.824506341666670250e-01 2.281443349999999828e-02 +5.754704000000000486e-01 8.100822066666669707e-01 2.253018666666670167e-02 +5.835346000000000144e-01 7.776236106666669645e-01 2.252483566666670101e-02 +5.928168000000000326e-01 7.764561633333330049e-01 2.182597999999999830e-02 +6.007057000000000091e-01 6.983251131666670108e-01 2.131793766666669962e-02 +6.099849999999999994e-01 7.099790583333329685e-01 2.117932666666669933e-02 +6.219902999999999960e-01 6.466382168333330016e-01 2.081252199999999997e-02 +6.275817000000000201e-01 6.603706066666670260e-01 2.006477833333330033e-02 +6.413482000000000349e-01 5.710830485000000234e-01 1.856948533333329862e-02 +6.447992000000000168e-01 5.732715750000000332e-01 2.040912500000000018e-02 +6.656950000000000367e-01 5.203726888333329859e-01 1.789587166666670170e-02 +6.845196000000000058e-01 4.749653629999999738e-01 1.990720683333329841e-02 +7.059646000000000532e-01 3.822856073333329996e-01 1.675657983333329881e-02 +7.260278000000000009e-01 3.886542691666670102e-01 1.802539466666670115e-02 +7.492113999999999718e-01 3.564554191666670091e-01 1.487377883333330063e-02 +7.721772000000000080e-01 3.333074428333330230e-01 1.689668533333330003e-02 +7.922717999999999705e-01 3.187338046666670088e-01 1.488059016666670037e-02 +8.156877999999999629e-01 3.010368924999999862e-01 1.521491216666670011e-02 +8.366301000000000432e-01 2.406595508333330136e-01 1.435568400000000050e-02 +8.621258000000000532e-01 2.223576200000000058e-01 1.352156766666669924e-02 +8.848333999999999921e-01 2.207387865000000060e-01 1.422139816666669922e-02 +9.083444000000000518e-01 2.134049949999999862e-01 1.254214099999999971e-02 +9.336484000000000449e-01 1.885945263333330124e-01 1.346345033333330027e-02 +9.553916000000000075e-01 1.698076676666669949e-01 1.265998783333329922e-02 +9.815112999999999754e-01 1.668850050000000029e-01 1.189438716666670059e-02 +1.007027499999999964e+00 1.441018685000000077e-01 1.227580483333329947e-02 +1.030631400000000086e+00 1.406578583333329968e-01 1.168073399999999991e-02 +1.058015099999999986e+00 1.399035711666669901e-01 1.082874783333329961e-02 +1.084837700000000016e+00 1.486492919999999884e-01 1.123307866666669978e-02 +1.110144500000000090e+00 1.008698655000000027e-01 1.077987283333329931e-02 +1.137999800000000006e+00 1.027075286666670056e-01 1.037853683333330064e-02 +1.166290800000000072e+00 1.157098001666670012e-01 1.020088966666670045e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv new file mode 100644 index 000000000..1c5c261ee --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 2.859171986188329811e+03 2.282233352000000082e+01 +4.070000000000000007e-02 1.037695935384999984e+03 1.390765389166669941e+01 +4.511180000000000051e-02 4.617414862783330136e+02 9.644274246666670436e+00 +4.959249999999999770e-02 2.830472148050000101e+02 7.651757100000000200e+00 +5.416379999999999806e-02 1.737180786733329967e+02 5.901133003333329796e+00 +5.868999999999999911e-02 1.284318533800000068e+02 5.055296333333330061e+00 +6.315320000000000655e-02 1.083304533916670067e+02 4.179970964999999872e+00 +6.773540000000000116e-02 8.164665742500000079e+01 3.449109084999999908e+00 +7.238989999999999314e-02 6.842710629666669320e+01 3.015091889999999886e+00 +7.694339999999999513e-02 6.503887503333329789e+01 2.712566869999999852e+00 +8.166600000000000248e-02 5.768616606333330310e+01 2.292022508333329878e+00 +8.641719999999999957e-02 4.726633163000000337e+01 2.052834279999999900e+00 +9.109140000000000292e-02 4.170182763166670270e+01 1.806841736666670029e+00 +9.576210000000000278e-02 3.278791741500000256e+01 1.635979810000000034e+00 +1.005216000000000026e-01 3.137094696333329935e+01 1.457612156666669989e+00 +1.052672000000000052e-01 2.858316747499999977e+01 1.352856671666669897e+00 +1.100174000000000013e-01 2.685582243333330155e+01 1.222659363333330029e+00 +1.148721999999999938e-01 2.463809722666670154e+01 1.115379456666669933e+00 +1.198083000000000065e-01 1.979913578000000030e+01 1.002652691666670037e+00 +1.248023999999999939e-01 1.884005529499999909e+01 9.371682333333329895e-01 +1.298709000000000113e-01 2.011378014833330141e+01 8.660532583333330203e-01 +1.349431000000000103e-01 1.548196221999999977e+01 8.040137483333329449e-01 +1.399610000000000021e-01 1.553817986500000004e+01 7.396018783333330182e-01 +1.451112999999999986e-01 1.380290046833330031e+01 7.008050850000000498e-01 +1.503050999999999970e-01 1.290957537833329916e+01 6.659874700000000258e-01 +1.556469000000000047e-01 1.188963399333329995e+01 5.958023666666669715e-01 +1.572456999999999883e-01 1.305280697499999931e+01 1.930089849999999940e-01 +1.609891999999999990e-01 1.134609165166670053e+01 5.714861916666670316e-01 +1.662309999999999899e-01 1.103891432833330022e+01 5.468199316666669807e-01 +1.706292000000000086e-01 1.121912493499999997e+01 1.614639983333329976e-01 +1.716062999999999894e-01 1.098087770333330049e+01 5.221648316666670508e-01 +1.771733000000000058e-01 9.846715853333330770e+00 4.826313150000000052e-01 +1.827794000000000085e-01 1.030369242166669963e+01 4.679303400000000002e-01 +1.842428999999999872e-01 9.629214631666670243e+00 1.387244099999999924e-01 +1.883665999999999952e-01 9.108624106666670883e+00 4.454082083333330000e-01 +1.940302000000000138e-01 8.056377178333329780e+00 4.232006716666670276e-01 +1.982414999999999872e-01 8.605072379999999299e+00 1.202604099999999981e-01 +1.998185000000000100e-01 8.229729869999999892e+00 3.995894999999999864e-01 +2.056348000000000065e-01 8.070094290000000115e+00 3.879820366666669740e-01 +2.115208000000000088e-01 7.741634115000000094e+00 3.686955350000000187e-01 +2.120113000000000136e-01 7.664225765000000301e+00 1.093220133333329958e-01 +2.162467999999999890e-01 7.363320653333330412e+00 4.626756216666669808e-01 +2.259823999999999999e-01 6.848802841666669750e+00 9.609777999999999376e-02 +2.397845000000000115e-01 6.337189861666669977e+00 9.020952999999999611e-02 +2.537096999999999825e-01 5.738702153333330003e+00 8.211384833333329469e-02 +2.676275000000000182e-01 5.346591223333329701e+00 7.572218666666670484e-02 +2.817857999999999752e-01 5.009933698333330021e+00 7.051459333333330581e-02 +2.956398000000000081e-01 4.597692046666669974e+00 6.646157833333329878e-02 +3.099044000000000243e-01 4.193400725000000051e+00 6.031815000000000093e-02 +3.240645999999999805e-01 3.804645918333330101e+00 5.825413166666670167e-02 +3.388027000000000122e-01 3.560888523333329836e+00 5.213344166666669666e-02 +3.539140000000000064e-01 3.375211385000000064e+00 5.107971833333330158e-02 +3.687090000000000090e-01 3.188264295000000192e+00 4.732182333333329743e-02 +3.839813000000000254e-01 2.892990108333330035e+00 4.441047333333329739e-02 +3.988975000000000160e-01 2.640608908333330174e+00 4.290645666666669661e-02 +4.106379000000000001e-01 2.501690660833329805e+00 4.331324033333330131e-02 +4.136514000000000024e-01 2.477246653333330162e+00 4.077528500000000139e-02 +4.290628000000000219e-01 2.358423203333329887e+00 3.769917166666669761e-02 +4.295145000000000213e-01 2.266923564999999918e+00 3.645828216666670285e-02 +4.446014999999999828e-01 2.023246533333329822e+00 3.627248666666670063e-02 +4.466328999999999994e-01 2.032174506166669836e+00 3.243397416666669864e-02 +4.603325999999999807e-01 1.951935533333329920e+00 3.395880333333330114e-02 +4.685032000000000085e-01 1.797322475499999905e+00 3.168831166666669780e-02 +4.764860000000000206e-01 1.814704324999999896e+00 3.212894000000000166e-02 +4.833663999999999739e-01 1.722621554333330085e+00 3.037123383333329915e-02 +4.923204999999999942e-01 1.658358661666669898e+00 3.178619500000000320e-02 +5.046184000000000225e-01 1.539108265666669917e+00 2.774163983333330016e-02 +5.082708000000000226e-01 1.547966548333330028e+00 2.920229666666670013e-02 +5.230276000000000369e-01 1.345057283333330078e+00 2.608127533333329945e-02 +5.249162000000000550e-01 1.417396718333330030e+00 2.724554333333329900e-02 +5.416775999999999813e-01 1.270799306666670070e+00 2.670250999999999875e-02 +5.443529999999999758e-01 1.250087865666670073e+00 2.633086933333329827e-02 +5.583067999999999920e-01 1.165305416666670091e+00 2.577655499999999961e-02 +5.612129000000000145e-01 1.147836548999999984e+00 2.393862083333329893e-02 +5.753956999999999544e-01 1.115183805000000028e+00 2.400332833333329932e-02 +5.833568000000000087e-01 1.044019996999999922e+00 2.366755300000000090e-02 +5.927398999999999862e-01 1.004017331666670065e+00 2.296542000000000028e-02 +6.005226999999999649e-01 9.482225546666670501e-01 2.240195116666670108e-02 +6.099058000000000535e-01 9.388455449999999480e-01 2.233828499999999939e-02 +6.218008000000000424e-01 8.511757086666670302e-01 2.168908733333330119e-02 +6.275003000000000108e-01 8.553386066666669452e-01 2.101305833333329959e-02 +6.411527999999999672e-01 7.761240236666669956e-01 1.940277716666670080e-02 +6.447154999999999969e-01 7.270576883333329521e-01 2.120466833333330137e-02 +6.654921999999999782e-01 7.007768106666669716e-01 1.861042133333330045e-02 +6.843110000000000026e-01 6.466361541666669766e-01 2.069310833333330019e-02 +7.057493999999999712e-01 5.771519323333329510e-01 1.752841666666669906e-02 +7.258065000000000211e-01 5.204018098333329512e-01 1.860044799999999859e-02 +7.489831000000000127e-01 4.984340896666670240e-01 1.540761000000000040e-02 +7.719418000000000113e-01 4.436713720000000083e-01 1.738589999999999927e-02 +7.920304000000000233e-01 4.316635041666669892e-01 1.532890283333330009e-02 +8.154392000000000307e-01 3.868879691666670118e-01 1.556857449999999969e-02 +8.363751000000000380e-01 3.670109628333330098e-01 1.484866983333330004e-02 +8.618630000000000457e-01 3.329731463333330255e-01 1.392995016666669951e-02 +8.845638000000000112e-01 3.302565831666670060e-01 1.467645416666669977e-02 +9.080675999999999748e-01 2.757098590000000016e-01 1.276754683333329934e-02 +9.333637999999999657e-01 2.804865558333329845e-01 1.382540016666669938e-02 +9.551005000000000189e-01 2.398962168333330092e-01 1.292395533333329932e-02 +9.812121999999999788e-01 2.360268241666670097e-01 1.213837400000000039e-02 +1.006720599999999965e+00 2.134167958333330062e-01 1.253179649999999930e-02 +1.030317399999999939e+00 2.102511210000000130e-01 1.193319533333330081e-02 +1.057692700000000041e+00 2.135461601666669984e-01 1.107935333333330032e-02 +1.084507099999999946e+00 1.969431385000000034e-01 1.140526600000000071e-02 +1.109806099999999907e+00 1.561050018333330069e-01 1.096976283333329916e-02 +1.137653000000000025e+00 1.629041234999999976e-01 1.057719600000000051e-02 +1.165935399999999955e+00 1.774132069999999894e-01 1.040658966666670009e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv new file mode 100644 index 000000000..3fc895617 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv @@ -0,0 +1,105 @@ +3.623980000000000257e-02 4.717095203250000282e+02 1.736400694499999986e+01 +4.068580000000000113e-02 2.786014172683330230e+02 1.198827076999999974e+01 +4.509610000000000007e-02 1.807710803516669955e+02 8.834240069999999889e+00 +4.957530000000000270e-02 1.404167299050000111e+02 7.187393765000000379e+00 +5.414490000000000275e-02 1.070548824566670021e+02 5.660295944999999662e+00 +5.866960000000000230e-02 9.429733434666670178e+01 4.914365443333330141e+00 +6.313130000000000130e-02 8.753748113499999306e+01 4.086659178333330367e+00 +6.771190000000000542e-02 8.007891920833330346e+01 3.441741584999999937e+00 +7.236470000000000402e-02 5.999202779333329971e+01 2.970499293333329849e+00 +7.691660000000000164e-02 5.902839900166669906e+01 2.678938321666669786e+00 +8.163760000000000461e-02 4.960764509333330352e+01 2.245417474999999996e+00 +8.638719999999999732e-02 4.414010876166670272e+01 2.032560301666670011e+00 +9.105969999999999342e-02 4.256424763833329905e+01 1.812761751666670085e+00 +9.572880000000000278e-02 3.308233848333330229e+01 1.638201501666670001e+00 +1.004865999999999954e-01 2.810971494833329842e+01 1.433384486666670066e+00 +1.052305999999999936e-01 2.588485028666670118e+01 1.331128581666670030e+00 +1.099790999999999963e-01 2.266535039333329848e+01 1.188278135000000013e+00 +1.148321999999999954e-01 2.068870146000000076e+01 1.081535063333330049e+00 +1.197666000000000008e-01 1.976825064833330003e+01 1.002416109999999971e+00 +1.247589999999999949e-01 1.708519936000000072e+01 9.212166283333329542e-01 +1.298257999999999912e-01 1.961539944500000132e+01 8.615532866666669731e-01 +1.348960999999999910e-01 1.509279464499999968e+01 8.002327049999999886e-01 +1.399122999999999895e-01 1.461401991333329953e+01 7.302237983333329518e-01 +1.450607999999999898e-01 1.234817605166669985e+01 6.862621599999999544e-01 +1.502527999999999919e-01 1.236984282499999921e+01 6.604921383333329787e-01 +1.555927000000000004e-01 1.196552256666669933e+01 5.966093183333329719e-01 +1.572660999999999920e-01 1.278021405166670021e+01 1.919547649999999994e-01 +1.609331999999999985e-01 1.153752966666669977e+01 5.736198133333330063e-01 +1.661730999999999903e-01 1.078861117833329963e+01 5.440816866666670082e-01 +1.706513000000000058e-01 1.087118622666669943e+01 1.601861350000000073e-01 +1.715465999999999935e-01 9.877732214999999982e+00 5.101304616666669789e-01 +1.771117000000000108e-01 1.016148657499999963e+01 4.860413033333330080e-01 +1.827158000000000115e-01 1.012859923499999937e+01 4.659961616666670192e-01 +1.842668000000000084e-01 9.892309961666670759e+00 1.394281016666669981e-01 +1.883010999999999990e-01 9.370592901666670471e+00 4.483600366666670167e-01 +1.939626999999999879e-01 7.953713988333330320e+00 4.220674716666670268e-01 +1.982673000000000074e-01 8.536490116666669792e+00 1.198682733333329975e-01 +1.997490000000000099e-01 8.016174306666670191e+00 3.972042266666669930e-01 +2.055633000000000044e-01 7.936747634999999690e+00 3.864501066666670148e-01 +2.114472000000000018e-01 7.092097319999999705e+00 3.613801233333330254e-01 +2.120387999999999995e-01 7.719984431666669700e+00 1.093860133333330042e-01 +2.161715999999999915e-01 7.279911723333330364e+00 4.614210216666669861e-01 +2.260118000000000127e-01 6.899103116666670310e+00 9.616077666666669743e-02 +2.398155999999999899e-01 6.131303501666669931e+00 8.927448999999999801e-02 +2.537425999999999848e-01 5.657937448333330011e+00 8.168489666666670090e-02 +2.676623000000000197e-01 5.142021448333330191e+00 7.478100833333330144e-02 +2.818223999999999729e-01 4.914665098333330207e+00 7.002304500000000598e-02 +2.956782000000000021e-01 4.446721935000000236e+00 6.572301166666670580e-02 +3.099446000000000145e-01 4.282954679999999570e+00 6.061547666666670248e-02 +3.241067000000000253e-01 3.767117071666670203e+00 5.800978500000000121e-02 +3.388467000000000007e-01 3.499952983333329826e+00 5.180699999999999888e-02 +3.539599999999999969e-01 3.303444670000000194e+00 5.069738166666670071e-02 +3.687568999999999986e-01 2.950319708333330126e+00 4.620904333333329672e-02 +3.840311000000000141e-01 2.864367984999999894e+00 4.422433499999999656e-02 +3.989493000000000067e-01 2.552979848333329915e+00 4.244176999999999672e-02 +4.107629999999999892e-01 2.431688859833330163e+00 4.295243233333329719e-02 +4.137051999999999952e-01 2.340746346666669808e+00 4.009275166666669693e-02 +4.291185000000000138e-01 2.236674611666670032e+00 3.708904500000000104e-02 +4.296455000000000135e-01 2.145105044333329936e+00 3.592934700000000037e-02 +4.446591999999999767e-01 1.951663006666670030e+00 3.589577499999999782e-02 +4.467690999999999746e-01 1.941018092166669984e+00 3.204738566666669869e-02 +4.603923999999999794e-01 1.841567858333329921e+00 3.340552499999999841e-02 +4.686460000000000070e-01 1.795296687500000044e+00 3.165418133333330192e-02 +4.765479000000000243e-01 1.725552725000000009e+00 3.166947999999999985e-02 +4.835137999999999936e-01 1.648896234833330032e+00 3.002704050000000111e-02 +4.923843999999999999e-01 1.592235150000000043e+00 3.142748499999999806e-02 +5.047722000000000042e-01 1.524318554666669989e+00 2.765916716666669967e-02 +5.083368000000000331e-01 1.470192684999999999e+00 2.879683666666670028e-02 +5.231871000000000160e-01 1.276008043333330066e+00 2.578494833333330044e-02 +5.249844000000000177e-01 1.335736669999999959e+00 2.682150333333329847e-02 +5.417480000000000073e-01 1.255200871666670048e+00 2.659473333333330081e-02 +5.445189000000000279e-01 1.181751707666669926e+00 2.602010650000000092e-02 +5.583793000000000228e-01 1.119981195000000040e+00 2.552491833333329907e-02 +5.613839000000000468e-01 1.109540133333329903e+00 2.376074416666670158e-02 +5.754704000000000486e-01 1.035568078333330089e+00 2.359670999999999991e-02 +5.835346000000000144e-01 1.009673415166669974e+00 2.350527950000000019e-02 +5.928168000000000326e-01 9.958746566666669686e-01 2.289775833333329916e-02 +6.007057000000000091e-01 9.162153768333329840e-01 2.224946400000000005e-02 +6.099849999999999994e-01 8.912180400000000446e-01 2.207391333333329902e-02 +6.219902999999999960e-01 8.127960751666669648e-01 2.151158183333330004e-02 +6.275817000000000201e-01 8.004247816666669735e-01 2.072389499999999912e-02 +6.413482000000000349e-01 7.426332359999999744e-01 1.925514349999999861e-02 +6.447992000000000168e-01 7.076525866666669717e-01 2.108122000000000121e-02 +6.656950000000000367e-01 6.442563610000000551e-01 1.837696600000000152e-02 +6.845196000000000058e-01 6.085390748333330269e-01 2.050695833333330068e-02 +7.059646000000000532e-01 5.280073378333329792e-01 1.732566899999999840e-02 +7.260278000000000009e-01 5.220653703333330009e-01 1.859470200000000115e-02 +7.492113999999999718e-01 4.598426163333330097e-01 1.525465250000000023e-02 +7.721772000000000080e-01 4.332637708333330062e-01 1.732895283333329983e-02 +7.922717999999999705e-01 4.105990393333330268e-01 1.523655316666669944e-02 +8.156877999999999629e-01 3.602943534999999975e-01 1.545041316666669919e-02 +8.366301000000000432e-01 3.406887861666669792e-01 1.473824349999999957e-02 +8.621258000000000532e-01 3.067601776666670221e-01 1.382606316666670082e-02 +8.848333999999999921e-01 3.015524316666670090e-01 1.454982116666670051e-02 +9.083444000000000518e-01 2.607474308333330160e-01 1.270642616666669937e-02 +9.336484000000000449e-01 2.588003018333330241e-01 1.373286349999999940e-02 +9.553916000000000075e-01 2.226530176666670080e-01 1.285228899999999938e-02 +9.815112999999999754e-01 2.127235584999999929e-01 1.205009299999999957e-02 +1.007027499999999964e+00 2.082924603333330127e-01 1.250585733333330063e-02 +1.030631400000000086e+00 1.912464838333330086e-01 1.185822249999999960e-02 +1.058015099999999986e+00 1.948314409999999941e-01 1.101004149999999966e-02 +1.084837700000000016e+00 1.896849941666670092e-01 1.137308499999999979e-02 +1.110144500000000090e+00 1.497566153333330097e-01 1.094208966666669960e-02 +1.137999800000000006e+00 1.454676966666670068e-01 1.051448583333330043e-02 +1.166290800000000072e+00 1.467227160000000030e-01 1.029956333333329963e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv new file mode 100644 index 000000000..5ef6a3266 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 2.531792558183329902e+02 1.680830338499999854e+01 +4.070000000000000007e-02 1.901177223299999923e+02 1.173664666500000031e+01 +4.511180000000000051e-02 1.217924648083329942e+02 8.645296186666669769e+00 +4.959249999999999770e-02 1.094275780066670052e+02 7.073034475000000043e+00 +5.416379999999999806e-02 8.791320813333329909e+01 5.581711248333330211e+00 +5.868999999999999911e-02 8.309104453833330695e+01 4.860535583333329690e+00 +6.315320000000000655e-02 7.081360745666670198e+01 4.003961999999999577e+00 +6.773540000000000116e-02 6.343291181166669901e+01 3.355398363333330192e+00 +7.238989999999999314e-02 4.842191466166669755e+01 2.903796691666669982e+00 +7.694339999999999513e-02 4.694420552666669977e+01 2.605583116666669863e+00 +8.166600000000000248e-02 4.367521950333330238e+01 2.207077676666670207e+00 +8.641719999999999957e-02 3.957930205499999943e+01 1.999356729999999915e+00 +9.109140000000000292e-02 3.553857484166670133e+01 1.762052579999999979e+00 +9.576210000000000278e-02 2.783675838666669833e+01 1.597004463333330015e+00 +1.005216000000000026e-01 2.705964543666669897e+01 1.423240978333329965e+00 +1.052672000000000052e-01 2.262947438833329983e+01 1.302317253333330038e+00 +1.100174000000000013e-01 2.182584247666670052e+01 1.179366926666669979e+00 +1.148721999999999938e-01 2.121788853500000016e+01 1.084366495000000041e+00 +1.198083000000000065e-01 1.779511935000000022e+01 9.833421683333329888e-01 +1.248023999999999939e-01 1.651748253666670152e+01 9.145048883333329881e-01 +1.298709000000000113e-01 1.721928703000000027e+01 8.380137100000000228e-01 +1.349431000000000103e-01 1.436323046666669967e+01 7.917284633333330213e-01 +1.399610000000000021e-01 1.550343697666670018e+01 7.379972516666669646e-01 +1.451112999999999986e-01 1.303663926666670037e+01 6.920347900000000108e-01 +1.503050999999999970e-01 1.200503839166669984e+01 6.556345366666670449e-01 +1.556469000000000047e-01 1.229304255666670009e+01 5.989305183333329952e-01 +1.573070000000000024e-01 1.257057899666670053e+01 1.910309249999999903e-01 +1.609891999999999990e-01 1.193592632666669928e+01 5.769697900000000379e-01 +1.662309999999999899e-01 1.125234698666669964e+01 5.482133000000000145e-01 +1.706957000000000058e-01 1.058112505166669948e+01 1.590339783333329926e-01 +1.716062999999999894e-01 1.070644689999999954e+01 5.183003699999999547e-01 +1.771733000000000058e-01 9.479454351666669609e+00 4.778282466666670114e-01 +1.827794000000000085e-01 9.400985496666670826e+00 4.569814249999999967e-01 +1.843146999999999980e-01 9.549487438333329692e+00 1.380682866666670117e-01 +1.883665999999999952e-01 8.342261173333330504e+00 4.359566316666669827e-01 +1.940302000000000138e-01 8.124126898333329905e+00 4.232381216666670221e-01 +1.983187999999999895e-01 8.328415036666669380e+00 1.189532799999999946e-01 +1.998185000000000100e-01 8.328210934999999537e+00 3.999954083333330246e-01 +2.056348000000000065e-01 8.350671104999999983e+00 3.905236483333329733e-01 +2.115208000000000088e-01 6.929636241666670138e+00 3.588886250000000167e-01 +2.120939000000000019e-01 7.535892504999999630e+00 1.085254183333329986e-01 +2.162467999999999890e-01 7.407988318333329936e+00 4.625349066666670228e-01 +2.260705000000000076e-01 6.743451298333329902e+00 9.541167166666669752e-02 +2.398779000000000050e-01 6.099490819999999758e+00 8.899463999999999986e-02 +2.538084999999999924e-01 5.555039073333330357e+00 8.113394833333330280e-02 +2.677318000000000198e-01 5.152730110000000252e+00 7.469547999999999466e-02 +2.818956000000000239e-01 4.837557096666669665e+00 6.957829666666670576e-02 +2.957549999999999901e-01 4.369791838333330070e+00 6.527595833333330044e-02 +3.100250999999999979e-01 4.110463069999999774e+00 5.977720166666670304e-02 +3.241909000000000041e-01 3.813721606666669928e+00 5.811357666666670113e-02 +3.389346999999999777e-01 3.461479851666669827e+00 5.155417166666669687e-02 +3.540519999999999778e-01 3.230298750000000219e+00 5.028755499999999767e-02 +3.688526999999999778e-01 2.998165658333329819e+00 4.634052999999999783e-02 +3.841308999999999974e-01 2.784144708333330165e+00 4.378963833333329725e-02 +3.990528999999999882e-01 2.595613363333329815e+00 4.256657166666669850e-02 +4.108341999999999827e-01 2.335089765499999803e+00 4.258898366666669794e-02 +4.138126999999999778e-01 2.324415418333329875e+00 3.994880166666670007e-02 +4.292300000000000004e-01 2.216248561666669836e+00 3.693022666666669757e-02 +4.297198999999999880e-01 2.134554158666670087e+00 3.596130699999999791e-02 +4.447747000000000228e-01 1.890609146666669904e+00 3.555346833333330320e-02 +4.468464999999999798e-01 1.908117816499999897e+00 3.198120466666670020e-02 +4.605119999999999769e-01 1.871098863333330087e+00 3.348654166666670262e-02 +4.687272000000000105e-01 1.810652348333330108e+00 3.178039216666669886e-02 +4.766716999999999760e-01 1.698277889999999957e+00 3.148857166666670093e-02 +4.835976000000000163e-01 1.613169754500000108e+00 2.993151466666670035e-02 +4.925123000000000140e-01 1.548358499999999971e+00 3.116390166666669834e-02 +5.048597000000000223e-01 1.494630669833330039e+00 2.759253283333330115e-02 +5.084689000000000014e-01 1.491590500000000041e+00 2.885127333333329866e-02 +5.232776999999999568e-01 1.248566430833329965e+00 2.572220416666669979e-02 +5.251208000000000542e-01 1.383180581666670017e+00 2.700447666666670049e-02 +5.418887000000000009e-01 1.221960488333329931e+00 2.639246833333330072e-02 +5.446132999999999669e-01 1.208971178333329899e+00 2.618446533333329898e-02 +5.585244000000000320e-01 1.107120358333330001e+00 2.542247833333330029e-02 +5.614812000000000136e-01 1.085889866500000078e+00 2.370511449999999909e-02 +5.756198999999999621e-01 1.024119451666670066e+00 2.350574000000000066e-02 +5.836356999999999795e-01 9.666399098333330331e-01 2.336446566666669847e-02 +5.929708999999999675e-01 9.753983600000000198e-01 2.276144833333329856e-02 +6.008097999999999494e-01 8.857038164999999630e-01 2.215761016666669900e-02 +6.101434999999999498e-01 9.144217283333330171e-01 2.215592499999999992e-02 +6.220980999999999872e-01 8.054969749999999484e-01 2.151697083333330152e-02 +6.277447999999999917e-01 7.972735800000000372e-01 2.067797666666670170e-02 +6.414592999999999545e-01 7.033510668333330385e-01 1.912904316666669963e-02 +6.449667999999999513e-01 7.010848466666670387e-01 2.101707333333329916e-02 +6.658104000000000244e-01 6.363828563333330246e-01 1.837497983333330129e-02 +6.846381999999999746e-01 5.758642446666669690e-01 2.039069533333329881e-02 +7.060868999999999618e-01 5.109788090000000338e-01 1.728495966666670006e-02 +7.261535999999999547e-01 4.885223020000000194e-01 1.847847583333329935e-02 +7.493412999999999879e-01 4.387949984999999775e-01 1.519840233333329994e-02 +7.723109999999999697e-01 3.923397161666670185e-01 1.717436333333329998e-02 +7.924090999999999774e-01 3.993512075000000272e-01 1.521433699999999965e-02 +8.158290999999999737e-01 3.564691013333329828e-01 1.545670316666669999e-02 +8.367750000000000465e-01 3.230009236666669947e-01 1.469029500000000078e-02 +8.622752000000000194e-01 2.878051181666669844e-01 1.377513966666669976e-02 +8.849867000000000150e-01 2.848005155000000177e-01 1.450056933333329981e-02 +9.085018000000000260e-01 2.630901753333330095e-01 1.273161166666669959e-02 +9.338100999999999763e-01 2.556641304999999753e-01 1.373873700000000087e-02 +9.555571000000000481e-01 2.110106781666669928e-01 1.282516266666670034e-02 +9.816814000000000373e-01 1.989191335000000116e-01 1.201689483333330012e-02 +1.007201999999999931e+00 1.798726026666669919e-01 1.241756500000000020e-02 +1.030810000000000004e+00 1.697684260000000001e-01 1.179553216666670047e-02 +1.058198500000000042e+00 1.911874938333329998e-01 1.101163099999999916e-02 +1.085025700000000093e+00 1.546144220000000014e-01 1.126302133333329999e-02 +1.110336800000000013e+00 1.274498698333330071e-01 1.087918116666669946e-02 +1.138196999999999903e+00 1.312019681666669879e-01 1.048030450000000079e-02 +1.166492899999999944e+00 1.202452754999999984e-01 1.022370933333329943e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv new file mode 100644 index 000000000..51227d3b8 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv @@ -0,0 +1,105 @@ +3.624299999999999744e-02 2.421839941750000094e+02 1.681259771499999900e+01 +4.068929999999999769e-02 1.253477160583330061e+02 1.158261931833330038e+01 +4.510000000000000120e-02 1.038159109083329952e+02 8.606540843333329249e+00 +4.957960000000000145e-02 9.508877155000000414e+01 7.037626288333330038e+00 +5.414959999999999912e-02 7.142443308833330207e+01 5.530319266666669620e+00 +5.867460000000000037e-02 6.747951957166669956e+01 4.803320423333330424e+00 +6.313670000000000393e-02 6.491403129500000091e+01 3.984481885000000112e+00 +6.771770000000000567e-02 5.688806046833330043e+01 3.329560004999999823e+00 +7.237100000000000477e-02 4.031379161166670144e+01 2.864987329999999943e+00 +7.692330000000000001e-02 4.363721252500000247e+01 2.591659659999999921e+00 +8.164470000000000061e-02 3.499940050499999700e+01 2.159604903333330217e+00 +8.639470000000000482e-02 3.331168452000000002e+01 1.961486934999999932e+00 +9.106759999999999855e-02 3.141853618500000067e+01 1.737193953333330043e+00 +9.573710000000000553e-02 2.514925802833329982e+01 1.580249494999999893e+00 +1.004952999999999957e-01 2.418445705499999931e+01 1.404480071666670105e+00 +1.052397000000000055e-01 2.311071394833329862e+01 1.309208076666670051e+00 +1.099886000000000058e-01 2.234431306333329914e+01 1.186371084999999992e+00 +1.148422000000000054e-01 2.015011891333330141e+01 1.077548355000000013e+00 +1.197769999999999946e-01 1.762490517499999854e+01 9.840672733333329925e-01 +1.247698000000000002e-01 1.703488854000000075e+01 9.213895800000000413e-01 +1.298370000000000080e-01 1.644401272166669870e+01 8.327218266666670532e-01 +1.349077999999999944e-01 1.614025673666670002e+01 8.110203433333329492e-01 +1.399244000000000043e-01 1.432045983666669997e+01 7.277294366666670067e-01 +1.450733999999999913e-01 1.348007003166670081e+01 6.981156733333330200e-01 +1.502658000000000049e-01 1.217057146500000009e+01 6.589065133333330548e-01 +1.556062000000000001e-01 1.311354035333330081e+01 6.087518283333329672e-01 +1.573412999999999895e-01 1.262766263333329952e+01 1.918068450000000036e-01 +1.609471000000000096e-01 1.195521582166669994e+01 5.786270049999999721e-01 +1.661874999999999880e-01 1.070419187999999977e+01 5.435432616666669992e-01 +1.707328999999999930e-01 1.060603477499999947e+01 1.596232366666670011e-01 +1.715615000000000057e-01 1.106375028666669991e+01 5.234683166666670440e-01 +1.771270000000000067e-01 9.097135046666670277e+00 4.748174949999999783e-01 +1.827315999999999940e-01 9.232441778333329907e+00 4.562185283333329844e-01 +1.843548999999999882e-01 9.582483613333330652e+00 1.386399050000000077e-01 +1.883173999999999959e-01 9.681451038333330317e+00 4.521609416666669823e-01 +1.939794999999999991e-01 8.227612430000000643e+00 4.254379616666669750e-01 +1.983621000000000134e-01 8.295318078333329126e+00 1.192443799999999970e-01 +1.997663000000000078e-01 8.131970284999999521e+00 3.988034016666670012e-01 +2.055810999999999888e-01 7.142658796666670362e+00 3.773835349999999922e-01 +2.114655000000000007e-01 7.164933761666669731e+00 3.624743966666669759e-01 +2.121402000000000010e-01 7.387669431666670228e+00 1.083523799999999981e-01 +2.161903000000000019e-01 6.864321103333329788e+00 4.553583783333329804e-01 +2.261198000000000097e-01 6.847039901666669870e+00 9.614554833333330275e-02 +2.399302000000000101e-01 6.151464958333329847e+00 8.952354166666670610e-02 +2.538638999999999757e-01 5.563245829999999614e+00 8.146051666666670465e-02 +2.677901999999999783e-01 5.162996156666669556e+00 7.501275500000000040e-02 +2.819571000000000160e-01 4.731078383333329640e+00 6.938886333333330048e-02 +2.958196000000000159e-01 4.470382223333330352e+00 6.595420000000000449e-02 +3.100928000000000018e-01 4.071269568333329758e+00 5.983178000000000107e-02 +3.242616999999999861e-01 3.818289136666670025e+00 5.835058500000000342e-02 +3.390086999999999962e-01 3.464278166666669989e+00 5.175618166666669934e-02 +3.541291999999999773e-01 3.297458013333330218e+00 5.076983000000000190e-02 +3.689332000000000167e-01 3.070901008333330129e+00 4.683460500000000137e-02 +3.842147000000000201e-01 2.769801061666670172e+00 4.388707166666670073e-02 +3.991399999999999948e-01 2.510583560000000158e+00 4.232430333333329908e-02 +4.106022999999999756e-01 2.374815773499999949e+00 4.286182233333329927e-02 +4.139030000000000209e-01 2.373871081666670158e+00 4.032223833333330176e-02 +4.293236999999999748e-01 2.231085370000000179e+00 3.713437166666670036e-02 +4.294773000000000063e-01 2.156539414333329852e+00 3.612328016666670194e-02 +4.448717999999999839e-01 1.876962131666670031e+00 3.561285166666670193e-02 +4.465942999999999996e-01 1.963582529333329996e+00 3.226501116666669750e-02 +4.606124999999999803e-01 1.886281606666670108e+00 3.367513833333329876e-02 +4.684626000000000068e-01 1.795604685000000034e+00 3.177854483333329705e-02 +4.767757000000000245e-01 1.729912848333329922e+00 3.174894833333329752e-02 +4.833245999999999931e-01 1.643333701666670033e+00 3.012282700000000132e-02 +4.926197999999999966e-01 1.601281793333330095e+00 3.152871666666669931e-02 +5.045747000000000426e-01 1.513868059666670041e+00 2.772222300000000070e-02 +5.085798000000000263e-01 1.480025179999999940e+00 2.889593166666670071e-02 +5.229823000000000111e-01 1.292098316666669966e+00 2.594417883333329997e-02 +5.252354000000000189e-01 1.389690103333329985e+00 2.712855999999999948e-02 +5.420070000000000165e-01 1.207626951666670001e+00 2.641061333333330138e-02 +5.443057999999999508e-01 1.171074812333330106e+00 2.606778300000000062e-02 +5.586463000000000401e-01 1.131968480000000055e+00 2.562754666666669859e-02 +5.611642999999999493e-01 1.119771183833329964e+00 2.388942000000000149e-02 +5.757455000000000211e-01 1.050324178333329916e+00 2.370775166666670014e-02 +5.833063000000000553e-01 9.890430198333329814e-01 2.349970633333330061e-02 +5.931003000000000247e-01 9.529422783333330038e-01 2.272385333333330065e-02 +6.004707000000000239e-01 9.087951714999999986e-01 2.229426183333330092e-02 +6.102765999999999469e-01 8.968441200000000224e-01 2.213925333333329956e-02 +6.217470000000000496e-01 8.116193323333330545e-01 2.157820200000000119e-02 +6.278818000000000454e-01 7.745292049999999984e-01 2.063141833333330052e-02 +6.410972000000000337e-01 7.304547335000000086e-01 1.926881999999999900e-02 +6.451074999999999449e-01 7.030634049999999746e-01 2.109099333333330079e-02 +6.654345000000000399e-01 6.451808323333330097e-01 1.843812350000000044e-02 +6.842517000000000182e-01 5.969281796666670026e-01 2.051784966666669874e-02 +7.056883000000000461e-01 4.875458616666670242e-01 1.721726566666669997e-02 +7.257436999999999916e-01 5.206052460000000215e-01 1.864389433333329960e-02 +7.489183000000000368e-01 4.716855048333329914e-01 1.534349166666670004e-02 +7.718749999999999778e-01 3.996116843333329949e-01 1.723059933333330115e-02 +7.919618000000000491e-01 3.949704010000000265e-01 1.521841983333330033e-02 +8.153685999999999989e-01 3.711572033333330189e-01 1.553813883333329988e-02 +8.363026999999999544e-01 3.373120053333329982e-01 1.476541233333330053e-02 +8.617884000000000100e-01 3.012111169999999727e-01 1.384248800000000001e-02 +8.844872000000000289e-01 3.093801609999999869e-01 1.462152149999999991e-02 +9.079890000000000461e-01 2.725293346666670113e-01 1.278188633333329945e-02 +9.332829999999999737e-01 2.562172424999999976e-01 1.375849099999999943e-02 +9.550178000000000278e-01 2.195073688333329942e-01 1.287299783333330054e-02 +9.811271999999999771e-01 1.993873673333330099e-01 1.203331399999999982e-02 +1.006633399999999900e+00 1.965978770000000042e-01 1.249421516666670076e-02 +1.030228200000000038e+00 1.888581198333330047e-01 1.187900783333330039e-02 +1.057601100000000072e+00 2.019180355000000093e-01 1.106158266666669963e-02 +1.084413199999999966e+00 1.710308969999999873e-01 1.133507299999999933e-02 +1.109710100000000033e+00 1.385269876666669897e-01 1.092970799999999978e-02 +1.137554500000000024e+00 1.323425321666669985e-01 1.049619949999999920e-02 +1.165834400000000048e+00 1.352444690000000060e-01 1.028587266666670073e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv new file mode 100644 index 000000000..e4a5c8ff1 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv @@ -0,0 +1,105 @@ +3.623830000000000107e-02 1.262534512933330006e+02 1.649893105666669868e+01 +4.068399999999999794e-02 1.096408472683330046e+02 1.152156481833329948e+01 +4.509420000000000095e-02 6.843298548666669490e+01 8.484508865000000455e+00 +4.957310000000000189e-02 5.337196919333329959e+01 6.882409771666670117e+00 +5.414259999999999906e-02 4.824018401499999698e+01 5.433445991666670416e+00 +5.866699999999999693e-02 4.665372951666670076e+01 4.705492196666670068e+00 +6.312850000000000406e-02 5.221271013999999866e+01 3.917987768333329957e+00 +6.770890000000000242e-02 4.827582027833329903e+01 3.280544881666669799e+00 +7.236159999999999815e-02 3.618855914666669804e+01 2.837183351666670017e+00 +7.691330000000000389e-02 3.079150051333330040e+01 2.510836073333329921e+00 +8.163410000000000111e-02 3.296728457500000076e+01 2.143401925000000041e+00 +8.638339999999999907e-02 3.069841431000000043e+01 1.940150145000000048e+00 +9.105580000000000618e-02 2.710592771666669876e+01 1.703459686666670025e+00 +9.572469999999999590e-02 2.329590637833329936e+01 1.563327263333329942e+00 +1.004822999999999966e-01 2.091072460333329985e+01 1.376591528333330094e+00 +1.052260000000000001e-01 1.912562908333330114e+01 1.273402691666670083e+00 +1.099742999999999971e-01 1.787115249333330169e+01 1.146192773333329917e+00 +1.148272999999999933e-01 1.794118791666669921e+01 1.055988855000000060e+00 +1.197614000000000040e-01 1.653599519333329937e+01 9.723875616666669552e-01 +1.247536000000000062e-01 1.582743532666670028e+01 9.084356083333330334e-01 +1.298200999999999938e-01 1.478155951166669979e+01 8.152435350000000192e-01 +1.348902999999999908e-01 1.334408521333329922e+01 7.818770066666670404e-01 +1.399062000000000083e-01 1.377281605666670039e+01 7.205883533333330426e-01 +1.450545000000000029e-01 1.181691977333330001e+01 6.799812333333330461e-01 +1.502462999999999993e-01 1.213584320000000005e+01 6.572146300000000219e-01 +1.555860000000000021e-01 1.192358865166669979e+01 5.953690533333330093e-01 +1.572933999999999999e-01 1.181612013833330010e+01 1.889312700000000123e-01 +1.609261999999999915e-01 1.175466066000000076e+01 5.752044899999999572e-01 +1.661659000000000053e-01 1.042143580833329963e+01 5.392668716666669804e-01 +1.706808999999999965e-01 1.011778497999999971e+01 1.577585016666669948e-01 +1.715392000000000028e-01 9.758357795000000223e+00 5.081139666666669719e-01 +1.771040000000000114e-01 8.903400566666670457e+00 4.716962699999999731e-01 +1.827079000000000064e-01 9.178007346666669619e+00 4.546196783333329994e-01 +1.842987000000000097e-01 9.009516103333330861e+00 1.364224366666670074e-01 +1.882929000000000130e-01 8.406366826666669567e+00 4.368516150000000264e-01 +1.939542999999999962e-01 7.892936534999999587e+00 4.208100816666670019e-01 +1.983015999999999945e-01 7.968528981666669786e+00 1.178380566666669960e-01 +1.997403000000000095e-01 7.734987613333330181e+00 3.934730833333329736e-01 +2.055543999999999982e-01 7.979108915000000302e+00 3.863922049999999886e-01 +2.114380999999999899e-01 6.834691483333330098e+00 3.579354766666669740e-01 +2.120755000000000001e-01 7.473622876666669690e+00 1.084324933333330049e-01 +2.161621999999999988e-01 6.843431601666670083e+00 4.540542233333330069e-01 +2.260508999999999991e-01 6.624537448333329692e+00 9.508442500000000019e-02 +2.398570999999999898e-01 6.030806045000000282e+00 8.883706333333329930e-02 +2.537865999999999733e-01 5.548485336666669987e+00 8.121552666666670417e-02 +2.677086000000000188e-01 5.056279183333329819e+00 7.439664999999999473e-02 +2.818711999999999884e-01 4.746517688333329765e+00 6.929181333333329917e-02 +2.957293999999999756e-01 4.360488485000000303e+00 6.532353000000000465e-02 +3.099983000000000044e-01 4.042259101666670240e+00 5.956615500000000257e-02 +3.241628999999999761e-01 3.667612291666670021e+00 5.754424666666670130e-02 +3.389054000000000233e-01 3.392261260000000167e+00 5.132888666666669819e-02 +3.540212999999999832e-01 3.153369070000000107e+00 5.001504333333330055e-02 +3.688208000000000042e-01 2.957433689999999782e+00 4.622241666666670329e-02 +3.840975999999999835e-01 2.782086464999999897e+00 4.383930500000000202e-02 +3.990183999999999953e-01 2.497954614999999823e+00 4.216718166666669904e-02 +4.106379000000000001e-01 2.347253106833329994e+00 4.254085666666670290e-02 +4.137768000000000002e-01 2.313526113333329803e+00 3.995030166666670157e-02 +4.291927999999999854e-01 2.205677500000000180e+00 3.693004333333330114e-02 +4.295145000000000213e-01 2.125140473833329935e+00 3.583346700000000079e-02 +4.447362000000000259e-01 1.900926653333329996e+00 3.564656666666669860e-02 +4.466328999999999994e-01 1.939722618500000051e+00 3.202840516666669718e-02 +4.604721999999999982e-01 1.890633683333329929e+00 3.361991000000000285e-02 +4.685032000000000085e-01 1.753475375666670111e+00 3.146806816666670309e-02 +4.766304000000000096e-01 1.692544018333330014e+00 3.150160500000000197e-02 +4.833663999999999739e-01 1.571138671166669942e+00 2.967553150000000126e-02 +4.924697000000000102e-01 1.562743266666670072e+00 3.127265833333330025e-02 +5.046184000000000225e-01 1.517538195333330009e+00 2.762060549999999920e-02 +5.084248000000000101e-01 1.452519751666669912e+00 2.870172666666670133e-02 +5.230276000000000369e-01 1.280607860833330003e+00 2.579378549999999937e-02 +5.250753000000000226e-01 1.364635400000000054e+00 2.694985833333329861e-02 +5.418418000000000401e-01 1.180339848333330055e+00 2.622176999999999841e-02 +5.443529999999999758e-01 1.172893769833329936e+00 2.597214383333330129e-02 +5.584759999999999724e-01 1.116791568333330043e+00 2.550004666666669945e-02 +5.612129000000000145e-01 1.071752901666670033e+00 2.359418099999999879e-02 +5.755700000000000260e-01 1.003165499999999932e+00 2.343291166666670172e-02 +5.833568000000000087e-01 9.490407108333329678e-01 2.324037416666669895e-02 +5.929195000000000437e-01 9.286979850000000036e-01 2.255620333333329883e-02 +6.005226999999999649e-01 8.938147573333330431e-01 2.214501316666669939e-02 +6.100906000000000384e-01 8.779068549999999860e-01 2.199904499999999832e-02 +6.218008000000000424e-01 8.078191183333329750e-01 2.148254866666670163e-02 +6.276903999999999817e-01 7.890844949999999969e-01 2.066168499999999908e-02 +6.411527999999999672e-01 6.990414535000000207e-01 1.907308200000000162e-02 +6.449108999999999536e-01 7.027759316666669642e-01 2.104888333333329933e-02 +6.654921999999999782e-01 6.693195063333330364e-01 1.846815400000000051e-02 +6.843110000000000026e-01 5.654079498333329790e-01 2.030432683333329921e-02 +7.057493999999999712e-01 4.733216641666669888e-01 1.710506283333329894e-02 +7.258065000000000211e-01 4.881572298333329840e-01 1.844279849999999957e-02 +7.489831000000000127e-01 4.439720878333329734e-01 1.519038399999999948e-02 +7.719418000000000113e-01 4.063687451666669892e-01 1.720554133333329974e-02 +7.920304000000000233e-01 4.025809184999999957e-01 1.519988700000000047e-02 +8.154392000000000307e-01 3.522328571666670238e-01 1.541253149999999988e-02 +8.363751000000000380e-01 3.005755748333330257e-01 1.457862766666669953e-02 +8.618630000000000457e-01 2.801856756666670223e-01 1.372444566666669932e-02 +8.845638000000000112e-01 3.046253318333330129e-01 1.455751649999999925e-02 +9.080675999999999748e-01 2.540008221666669730e-01 1.267830250000000041e-02 +9.333637999999999657e-01 2.481020686666670083e-01 1.368678783333330054e-02 +9.551005000000000189e-01 1.938199579999999866e-01 1.274076333333330063e-02 +9.812121999999999788e-01 1.905731619999999904e-01 1.196892649999999926e-02 +1.006720599999999965e+00 1.784818836666670072e-01 1.239337400000000040e-02 +1.030317399999999939e+00 1.750911911666669929e-01 1.179671083333330012e-02 +1.057692700000000041e+00 1.705610396666669970e-01 1.092493383333329945e-02 +1.084507099999999946e+00 1.719191243333330066e-01 1.130716749999999965e-02 +1.109806099999999907e+00 1.366376699999999889e-01 1.089438483333329995e-02 +1.137653000000000025e+00 1.239800338333330032e-01 1.044124700000000072e-02 +1.165935399999999955e+00 1.310211675000000076e-01 1.024458533333330069e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv new file mode 100644 index 000000000..2b03b80a5 --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 1.213206534416670053e+02 1.651067908166670151e+01 +4.070000000000000007e-02 8.158564289333330066e+01 1.146150313666669973e+01 +4.511180000000000051e-02 6.728303165833330013e+01 8.493610868333329122e+00 +4.959249999999999770e-02 5.609321657833329766e+01 6.902234358333330100e+00 +5.416379999999999806e-02 4.208391674666670212e+01 5.417946521666669568e+00 +5.868999999999999911e-02 4.572918046833329697e+01 4.708583066666670369e+00 +6.315320000000000655e-02 4.506950746166670285e+01 3.890110903333329873e+00 +6.773540000000000116e-02 3.932771859999999720e+01 3.240109296666669803e+00 +7.238989999999999314e-02 3.425092975666670014e+01 2.830867521666669884e+00 +7.694339999999999513e-02 2.785716006499999864e+01 2.497106951666669961e+00 +8.166600000000000248e-02 2.647316349333329910e+01 2.106834523333330100e+00 +8.641719999999999957e-02 2.865549820000000025e+01 1.929370503333329934e+00 +9.109140000000000292e-02 2.617781355833329826e+01 1.699746431666669944e+00 +9.576210000000000278e-02 2.262414874833330103e+01 1.560889624999999947e+00 +1.005216000000000026e-01 2.072404344833330114e+01 1.377539340000000001e+00 +1.052672000000000052e-01 1.924028949499999896e+01 1.276625569999999987e+00 +1.100174000000000013e-01 1.836748323999999855e+01 1.152518286666670111e+00 +1.148721999999999938e-01 1.699007782666669897e+01 1.049408108333329981e+00 +1.198083000000000065e-01 1.493712180833330017e+01 9.595881783333329862e-01 +1.248023999999999939e-01 1.484142020166670051e+01 9.009069050000000356e-01 +1.298709000000000113e-01 1.473895257666669956e+01 8.163899350000000110e-01 +1.349431000000000103e-01 1.308340819666669930e+01 7.807371766666669766e-01 +1.399610000000000021e-01 1.350568340499999920e+01 7.192249033333329988e-01 +1.451112999999999986e-01 1.173611615333330072e+01 6.804578466666669767e-01 +1.503050999999999970e-01 1.154060497666669960e+01 6.523238550000000080e-01 +1.556469000000000047e-01 1.191625231333330071e+01 5.964806683333330195e-01 +1.573344999999999883e-01 1.139197852166670089e+01 1.879402166666669927e-01 +1.609891999999999990e-01 1.125507998666670062e+01 5.708663616666670437e-01 +1.662309999999999899e-01 1.041113468166670053e+01 5.402433599999999503e-01 +1.707255000000000023e-01 1.013307594333329931e+01 1.580824633333330065e-01 +1.716062999999999894e-01 9.500610554999999735e+00 5.062648633333329817e-01 +1.771733000000000058e-01 8.706795813333329193e+00 4.704599616666669815e-01 +1.827794000000000085e-01 9.156035623333330875e+00 4.553047450000000107e-01 +1.843469000000000080e-01 9.118870355000000316e+00 1.370399833333330042e-01 +1.883665999999999952e-01 7.952454938333329615e+00 4.325042000000000053e-01 +1.940302000000000138e-01 8.034647969999999972e+00 4.232443883333329993e-01 +1.983534999999999882e-01 8.119139649999999264e+00 1.185909816666669975e-01 +1.998185000000000100e-01 7.527596430000000005e+00 3.919050766666670182e-01 +2.056348000000000065e-01 7.553855535000000287e+00 3.822255366666669762e-01 +2.115208000000000088e-01 6.617426820000000376e+00 3.561540533333329983e-01 +2.121309999999999862e-01 7.390867828333330003e+00 1.083323783333329932e-01 +2.162467999999999890e-01 6.635593964999999983e+00 4.517541333333329745e-01 +2.261101000000000083e-01 6.488236141666670065e+00 9.474941333333329607e-02 +2.399198999999999915e-01 5.939089416666670118e+00 8.864513000000000253e-02 +2.538528999999999924e-01 5.445706584999999933e+00 8.096326333333329905e-02 +2.677785999999999778e-01 5.020975218333330048e+00 7.440106833333330616e-02 +2.819448999999999983e-01 4.782109235000000069e+00 6.958310166666670238e-02 +2.958067999999999809e-01 4.377367741666669865e+00 6.553075166666670615e-02 +3.100794000000000050e-01 4.070373518333330054e+00 5.980910666666670178e-02 +3.242476000000000247e-01 3.688249826666670117e+00 5.775312500000000238e-02 +3.389940000000000175e-01 3.411490240000000007e+00 5.151532000000000333e-02 +3.541138999999999815e-01 3.221007965000000084e+00 5.041618500000000225e-02 +3.689172000000000007e-01 2.942401639999999929e+00 4.624927499999999941e-02 +3.841980999999999868e-01 2.767105533333329870e+00 4.386071833333329839e-02 +3.991226999999999969e-01 2.564823933333329808e+00 4.256582833333329846e-02 +4.106734000000000218e-01 2.300881685499999829e+00 4.238948299999999864e-02 +4.138850000000000029e-01 2.413576710000000070e+00 4.049426666666670199e-02 +4.293050999999999950e-01 2.233726248333329778e+00 3.713503166666669991e-02 +4.295516999999999808e-01 2.156876818999999834e+00 3.601888033333330158e-02 +4.448524999999999840e-01 1.902652508333330106e+00 3.572283666666670188e-02 +4.466716000000000020e-01 1.934442038833330102e+00 3.205653166666670023e-02 +4.605926000000000187e-01 1.874115690000000001e+00 3.360869833333329781e-02 +4.685437000000000074e-01 1.737730488500000003e+00 3.144913299999999717e-02 +4.767550999999999872e-01 1.772107871666670054e+00 3.193823833333329920e-02 +4.834083000000000130e-01 1.581873448666669901e+00 2.976716433333330067e-02 +4.925984999999999947e-01 1.570737606666670061e+00 3.137136000000000091e-02 +5.046621000000000024e-01 1.492830698499999942e+00 2.756047650000000016e-02 +5.085577999999999488e-01 1.485373084999999982e+00 2.891283166666670096e-02 +5.230728999999999518e-01 1.159546245333330061e+00 2.533816566666670031e-02 +5.252126000000000294e-01 1.354185358333330091e+00 2.695080999999999866e-02 +5.419834999999999514e-01 1.186315898333329955e+00 2.629908666666670031e-02 +5.444001000000000534e-01 1.201936935333330014e+00 2.613158683333329999e-02 +5.586221000000000103e-01 1.109243371666670086e+00 2.550917499999999852e-02 +5.612614999999999688e-01 1.098874749833330000e+00 2.373973216666670077e-02 +5.757206000000000268e-01 1.029040688333330067e+00 2.359920000000000073e-02 +5.834072999999999620e-01 9.811238644999999980e-01 2.340685516666669852e-02 +5.930746000000000073e-01 9.534806916666670462e-01 2.272023833333329870e-02 +6.005747000000000169e-01 8.956047156666669951e-01 2.218217800000000031e-02 +6.102501999999999649e-01 8.805252883333329894e-01 2.205115333333329888e-02 +6.218546000000000351e-01 8.076579554999999688e-01 2.150926133333330020e-02 +6.278546000000000404e-01 8.143317416666669972e-01 2.081983000000000097e-02 +6.412082999999999533e-01 7.185076576666670212e-01 1.917512450000000146e-02 +6.450795999999999752e-01 7.187583950000000499e-01 2.116659499999999985e-02 +6.655497999999999692e-01 6.417931828333329758e-01 1.838261283333330123e-02 +6.843702000000000396e-01 5.677104609999999996e-01 2.033867249999999835e-02 +7.058105999999999547e-01 5.146355146666670155e-01 1.728668516666670082e-02 +7.258693999999999980e-01 5.183306771666670310e-01 1.859332783333330144e-02 +7.490480000000000471e-01 4.413184218333329745e-01 1.519721516666669957e-02 +7.720086999999999922e-01 4.069291728333330194e-01 1.722663266666669968e-02 +7.920989999999999975e-01 3.912903401666669723e-01 1.517220816666670080e-02 +8.155097999999999514e-01 3.620392363333330144e-01 1.546880433333329939e-02 +8.364475000000000104e-01 3.218374210000000124e-01 1.467598383333330002e-02 +8.619377000000000288e-01 2.793489951666670024e-01 1.373524349999999915e-02 +8.846403999999999934e-01 2.729738648333330242e-01 1.444214883333330007e-02 +9.081462000000000145e-01 2.731246803333329809e-01 1.275928200000000026e-02 +9.334447000000000161e-01 2.513956430000000020e-01 1.371339566666670076e-02 +9.551832000000000100e-01 2.075616728333329886e-01 1.280443116666669934e-02 +9.812971999999999806e-01 2.026315226666670077e-01 1.202260966666669935e-02 +1.006807800000000030e+00 1.715856353333329865e-01 1.237966916666670067e-02 +1.030406600000000061e+00 1.813217336666670121e-01 1.183022066666669994e-02 +1.057784300000000011e+00 1.874246033333329953e-01 1.099227083333330010e-02 +1.084600999999999926e+00 1.682342156666669919e-01 1.130467983333329970e-02 +1.109902299999999897e+00 1.305937931666669993e-01 1.088363799999999930e-02 +1.137751600000000085e+00 1.264251891666670069e-01 1.045857849999999936e-02 +1.166036300000000026e+00 1.206125236666669986e-01 1.021913349999999977e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv new file mode 100644 index 000000000..e8e9c9a0b --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 8.265676436333329491e+01 1.638320715333329858e+01 +4.070000000000000007e-02 5.464383480166669926e+01 1.136626790833330070e+01 +4.511180000000000051e-02 2.996549328500000087e+01 8.362137733333330658e+00 +4.959249999999999770e-02 3.902000664833330035e+01 6.829579628333330099e+00 +5.416379999999999806e-02 2.960868386499999971e+01 5.359635035000000158e+00 +5.868999999999999911e-02 2.775202533166670094e+01 4.620562245000000345e+00 +6.315320000000000655e-02 2.923420741833329828e+01 3.806268636666669813e+00 +6.773540000000000116e-02 2.925570898666670061e+01 3.181662941666670186e+00 +7.238989999999999314e-02 2.438109743166669929e+01 2.769415394999999780e+00 +7.694339999999999513e-02 2.082174377999999848e+01 2.449056793333329818e+00 +8.166600000000000248e-02 2.093264007666670068e+01 2.067833788333329981e+00 +8.641719999999999957e-02 2.065156679166669917e+01 1.869354308333329939e+00 +9.109140000000000292e-02 2.096371475999999845e+01 1.658336066666669995e+00 +9.576210000000000278e-02 1.686565956500000141e+01 1.512923419999999908e+00 +1.005216000000000026e-01 1.674424940666670025e+01 1.343149441666670052e+00 +1.052672000000000052e-01 1.453594207833329932e+01 1.233355748333329949e+00 +1.100174000000000013e-01 1.743436942499999986e+01 1.141890178333329953e+00 +1.148721999999999938e-01 1.514907325499999935e+01 1.030380964999999982e+00 +1.198083000000000065e-01 1.335097668833330076e+01 9.427780516666669497e-01 +1.248023999999999939e-01 1.334016233833330034e+01 8.846290449999999472e-01 +1.298709000000000113e-01 1.370878951499999943e+01 8.044898483333330352e-01 +1.349431000000000103e-01 1.169732300833329930e+01 7.648545733333329544e-01 +1.399610000000000021e-01 1.178831958166670013e+01 6.994071549999999471e-01 +1.451112999999999986e-01 1.065116290166669977e+01 6.676857533333330208e-01 +1.503050999999999970e-01 9.325193926666669242e+00 6.273500633333329857e-01 +1.556469000000000047e-01 1.029459589333329994e+01 5.781039766666670188e-01 +1.572456999999999883e-01 1.000640059000000015e+01 1.830944850000000013e-01 +1.609891999999999990e-01 1.045812633999999974e+01 5.605480683333330383e-01 +1.662309999999999899e-01 9.379805284999999770e+00 5.273011283333329802e-01 +1.706292000000000086e-01 9.152038171666669442e+00 1.545153300000000063e-01 +1.716062999999999894e-01 9.072271783333329509e+00 5.002084749999999858e-01 +1.771733000000000058e-01 8.299759079999999400e+00 4.647556766666670058e-01 +1.827794000000000085e-01 8.918414625000000484e+00 4.514085349999999996e-01 +1.842428999999999872e-01 8.303275895000000517e+00 1.338776349999999948e-01 +1.883665999999999952e-01 8.087114149999999668e+00 4.329608600000000029e-01 +1.940302000000000138e-01 6.940626968333329927e+00 4.097805333333329747e-01 +1.982414999999999872e-01 7.399220633333330355e+00 1.156899150000000043e-01 +1.998185000000000100e-01 7.671813116666670318e+00 3.925434549999999856e-01 +2.056348000000000065e-01 7.058416683333329722e+00 3.753756766666669908e-01 +2.115208000000000088e-01 6.186979153333330039e+00 3.502447450000000240e-01 +2.120113000000000136e-01 6.509825833333329648e+00 1.046767516666669978e-01 +2.162467999999999890e-01 6.237968744999999871e+00 4.443455150000000242e-01 +2.259823999999999999e-01 6.054194650000000344e+00 9.278840666666669790e-02 +2.397845000000000115e-01 5.564811654999999746e+00 8.685724833333340056e-02 +2.537096999999999825e-01 5.167096618333330227e+00 7.958348833333329930e-02 +2.676275000000000182e-01 4.857346653333330266e+00 7.348198000000000230e-02 +2.817857999999999752e-01 4.540460176666670122e+00 6.833893833333329337e-02 +2.956398000000000081e-01 4.237780543333330208e+00 6.471250666666669704e-02 +3.099044000000000243e-01 3.935048769999999863e+00 5.903304000000000190e-02 +3.240645999999999805e-01 3.478254921666669830e+00 5.662396666666669881e-02 +3.388027000000000122e-01 3.303115776666670111e+00 5.088800999999999741e-02 +3.539140000000000064e-01 3.111107356666670043e+00 4.976782999999999901e-02 +3.687090000000000090e-01 2.860701315000000022e+00 4.573441000000000312e-02 +3.839813000000000254e-01 2.699693565000000017e+00 4.341666500000000012e-02 +3.988975000000000160e-01 2.495346641666670084e+00 4.210437499999999944e-02 +4.106734000000000218e-01 2.304978501333330154e+00 4.227540733333329942e-02 +4.136514000000000024e-01 2.281161938333330141e+00 3.975256666666669714e-02 +4.290628000000000219e-01 2.190969609999999790e+00 3.681797500000000278e-02 +4.295516999999999808e-01 2.110397390999999789e+00 3.571657216666670326e-02 +4.446014999999999828e-01 1.879588453333330023e+00 3.550642500000000118e-02 +4.466716000000000020e-01 1.816268564666670082e+00 3.148649049999999866e-02 +4.603325999999999807e-01 1.793649588333330103e+00 3.313105499999999953e-02 +4.685437000000000074e-01 1.770170460833329962e+00 3.148902633333330175e-02 +4.764860000000000206e-01 1.682140176666669928e+00 3.141608500000000331e-02 +4.834083000000000130e-01 1.536765404999999918e+00 2.947832866666669910e-02 +4.923204999999999942e-01 1.511959243333329983e+00 3.099057499999999937e-02 +5.046621000000000024e-01 1.465441131499999994e+00 2.736933133333329868e-02 +5.082708000000000226e-01 1.365583310000000106e+00 2.825172333333330135e-02 +5.230728999999999518e-01 1.154780808166669948e+00 2.524863800000000033e-02 +5.249162000000000550e-01 1.329800611666670074e+00 2.675280666666670151e-02 +5.416775999999999813e-01 1.188958583333330044e+00 2.623523499999999911e-02 +5.444001000000000534e-01 1.154485974333330001e+00 2.585743066666670170e-02 +5.583067999999999920e-01 1.077189841666670089e+00 2.527868166666669830e-02 +5.612614999999999688e-01 1.051792144833330056e+00 2.347724083333330158e-02 +5.753956999999999544e-01 1.014095294999999952e+00 2.346036166666670003e-02 +5.834072999999999620e-01 9.588631039999999661e-01 2.325032483333330097e-02 +5.927398999999999862e-01 9.388917833333330076e-01 2.258296499999999998e-02 +6.005747000000000169e-01 8.756694673333329515e-01 2.203778849999999886e-02 +6.099058000000000535e-01 8.473022983333330371e-01 2.182166666666670099e-02 +6.218546000000000351e-01 7.881510335000000422e-01 2.137202599999999883e-02 +6.275003000000000108e-01 7.785123416666670515e-01 2.058900166666670015e-02 +6.412082999999999533e-01 7.088910750000000371e-01 1.908878433333329946e-02 +6.447154999999999969e-01 6.898300916666669780e-01 2.096122833333330035e-02 +6.655497999999999692e-01 6.325061706666670336e-01 1.830133016666669887e-02 +6.843702000000000396e-01 5.535274884999999978e-01 2.022582083333330019e-02 +7.058105999999999547e-01 4.772884753333330177e-01 1.710068249999999873e-02 +7.258693999999999980e-01 4.794482545000000040e-01 1.838371499999999839e-02 +7.490480000000000471e-01 4.303608649999999813e-01 1.512209783333329921e-02 +7.720086999999999922e-01 3.958678310000000033e-01 1.713988450000000080e-02 +7.920989999999999975e-01 3.804415833333329999e-01 1.509590366666670007e-02 +8.155097999999999514e-01 3.391658666666669819e-01 1.534219399999999997e-02 +8.364475000000000104e-01 2.920511656666670008e-01 1.453006433333330072e-02 +8.619377000000000288e-01 2.768105268333330149e-01 1.369777266666669970e-02 +8.846403999999999934e-01 2.773741731666670152e-01 1.443021766666669967e-02 +9.081462000000000145e-01 2.284839270000000033e-01 1.257401600000000036e-02 +9.334447000000000161e-01 2.262680790000000108e-01 1.358766933333330033e-02 +9.551832000000000100e-01 2.014745451666669906e-01 1.275664699999999943e-02 +9.812971999999999806e-01 1.828399243333329871e-01 1.193000216666669985e-02 +1.006807800000000030e+00 1.768480391666669982e-01 1.237525766666669989e-02 +1.030406600000000061e+00 1.607457411666670111e-01 1.173357283333329934e-02 +1.057784300000000011e+00 1.603443938333329877e-01 1.087976483333330004e-02 +1.084600999999999926e+00 1.672401265000000026e-01 1.127955949999999950e-02 +1.109902299999999897e+00 1.308651896666669923e-01 1.086452716666670010e-02 +1.137751600000000085e+00 1.208445169999999985e-01 1.042120399999999988e-02 +1.166036300000000026e+00 1.219414448333329959e-01 1.020481383333330001e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv new file mode 100644 index 000000000..c576fb9ba --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv @@ -0,0 +1,105 @@ +3.625710000000000044e-02 7.586499487000000386e+01 1.637401323166670153e+01 +4.070529999999999982e-02 4.481643682666670259e+01 1.134473448500000003e+01 +4.511769999999999670e-02 3.187475403666670104e+01 8.372120233333330219e+00 +4.959899999999999726e-02 2.997679580000000144e+01 6.801308398333329563e+00 +5.417079999999999812e-02 2.394855565499999983e+01 5.340431286666669664e+00 +5.869760000000000255e-02 2.142582576833330066e+01 4.594792676666670239e+00 +6.316149999999999542e-02 3.089957102166669856e+01 3.816311058333329953e+00 +6.774429999999999341e-02 2.654007947166670078e+01 3.169185818333330129e+00 +7.239929999999999977e-02 1.943375908333329960e+01 2.742530958333329938e+00 +7.695340000000000513e-02 1.976728253666669843e+01 2.443851029999999813e+00 +8.167670000000000485e-02 1.925900297000000094e+01 2.058348746666669893e+00 +8.642850000000000532e-02 1.891829230833329945e+01 1.858069830000000033e+00 +9.110319999999999530e-02 1.827805419833330092e+01 1.639507476666669961e+00 +9.577460000000000140e-02 1.569160155166670023e+01 1.504524439999999963e+00 +1.005346000000000017e-01 1.326347007166669911e+01 1.315847523333329994e+00 +1.052808999999999967e-01 1.528716061000000082e+01 1.240626203333329958e+00 +1.100316999999999962e-01 1.357029930000000029e+01 1.108701733333329997e+00 +1.148871000000000059e-01 1.268526336333330029e+01 1.008324261666670107e+00 +1.198237999999999942e-01 1.157206131499999913e+01 9.266636050000000013e-01 +1.248187000000000046e-01 1.139260776499999928e+01 8.664271866666669597e-01 +1.298877999999999977e-01 1.288652256499999993e+01 7.969746983333330093e-01 +1.349605999999999861e-01 1.079102049499999971e+01 7.560191466666670301e-01 +1.399791999999999981e-01 1.105679143000000053e+01 6.920319183333329960e-01 +1.451301000000000119e-01 1.044385611833330074e+01 6.659680816666669889e-01 +1.503246000000000027e-01 9.389620521666669717e+00 6.284466633333329888e-01 +1.556671000000000027e-01 9.365269319999999453e+00 5.685768949999999711e-01 +1.572933999999999999e-01 9.202126339999999516e+00 1.807199866666669985e-01 +1.610100999999999893e-01 9.725111731666670423e+00 5.526473100000000027e-01 +1.662526000000000004e-01 8.453553321666669618e+00 5.170390433333329483e-01 +1.706808999999999965e-01 8.508661829999999426e+00 1.525917300000000087e-01 +1.716285999999999923e-01 8.248625778333330771e+00 4.912094450000000223e-01 +1.771963000000000010e-01 7.860151886666669974e+00 4.601271083333329792e-01 +1.828030999999999962e-01 8.179063558333330874e+00 4.431557566666670112e-01 +1.842987000000000097e-01 7.789301021666670266e+00 1.322509683333329966e-01 +1.883911000000000058e-01 7.284922560000000047e+00 4.239183200000000151e-01 +1.940553999999999890e-01 6.860865920000000173e+00 4.091373166666669725e-01 +1.983015999999999945e-01 6.984366938333329777e+00 1.143283233333329957e-01 +1.998445000000000082e-01 7.321059296666669880e+00 3.888106266666669919e-01 +2.056614999999999971e-01 6.516638536666669701e+00 3.691254600000000163e-01 +2.115482999999999947e-01 5.813378858333329902e+00 3.460794933333329881e-01 +2.120755000000000001e-01 6.410695145000000039e+00 1.044179233333329959e-01 +2.162748999999999922e-01 6.046752721666670105e+00 4.416217800000000193e-01 +2.260508999999999991e-01 5.970100884999999913e+00 9.257100833333330170e-02 +2.398570999999999898e-01 5.328183368333330172e+00 8.599138666666669706e-02 +2.537865999999999733e-01 5.025059630000000332e+00 7.909936500000000481e-02 +2.677086000000000188e-01 4.638679231666669622e+00 7.265197833333329747e-02 +2.818711999999999884e-01 4.320586221666670390e+00 6.748263000000000178e-02 +2.957293999999999756e-01 4.003143766666670267e+00 6.376038000000000538e-02 +3.099983000000000044e-01 3.820362695000000031e+00 5.861029000000000239e-02 +3.241628999999999761e-01 3.476478435000000200e+00 5.668581000000000314e-02 +3.389054000000000233e-01 3.203212216666670109e+00 5.052067666666670148e-02 +3.540212999999999832e-01 3.082675891666669887e+00 4.970334166666669912e-02 +3.688208000000000042e-01 2.852994409999999981e+00 4.575685000000000169e-02 +3.840975999999999835e-01 2.619206445000000105e+00 4.310591500000000159e-02 +3.990183999999999953e-01 2.447015261666670050e+00 4.192961333333330293e-02 +4.106022999999999756e-01 2.250148667666670210e+00 4.208387400000000028e-02 +4.137768000000000002e-01 2.199470903333330174e+00 3.941821333333329902e-02 +4.291927999999999854e-01 2.152990283333330090e+00 3.668624166666670239e-02 +4.294773000000000063e-01 2.066339865166670009e+00 3.559078633333329772e-02 +4.447362000000000259e-01 1.856158275000000080e+00 3.543832166666670280e-02 +4.465942999999999996e-01 1.863514126000000104e+00 3.172593550000000345e-02 +4.604721999999999982e-01 1.785743791666670077e+00 3.313367500000000132e-02 +4.684626000000000068e-01 1.701883971166670007e+00 3.125393900000000141e-02 +4.766304000000000096e-01 1.673134868333330028e+00 3.141082333333330284e-02 +4.833245999999999931e-01 1.561424375333329895e+00 2.963426116666669982e-02 +4.924697000000000102e-01 1.528741043333329941e+00 3.110879000000000075e-02 +5.045747000000000426e-01 1.440318964999999896e+00 2.730927600000000038e-02 +5.084248000000000101e-01 1.414442154999999923e+00 2.852017166666670142e-02 +5.229823000000000111e-01 1.195010044500000035e+00 2.544837383333330150e-02 +5.250753000000000226e-01 1.305492214999999900e+00 2.666661666666670163e-02 +5.418418000000000401e-01 1.152673440000000049e+00 2.608773333333330030e-02 +5.443057999999999508e-01 1.145610492499999911e+00 2.585580999999999990e-02 +5.584759999999999724e-01 1.067225758333329999e+00 2.525753999999999846e-02 +5.611642999999999493e-01 1.067666433166670092e+00 2.357715833333329930e-02 +5.755700000000000260e-01 1.029394661666670041e+00 2.355942499999999842e-02 +5.833063000000000553e-01 9.377488744999999959e-01 2.319254466666669998e-02 +5.929195000000000437e-01 9.657185166666669707e-01 2.274125999999999925e-02 +6.004707000000000239e-01 8.602252591666670334e-01 2.200228683333330104e-02 +6.100906000000000384e-01 8.435776883333330201e-01 2.182633499999999879e-02 +6.217470000000000496e-01 7.760975660000000165e-01 2.134885499999999992e-02 +6.276903999999999817e-01 7.741666183333330009e-01 2.058969000000000077e-02 +6.410972000000000337e-01 7.019246166666669451e-01 1.908517183333329967e-02 +6.449108999999999536e-01 6.851353900000000108e-01 2.095862666666669857e-02 +6.654345000000000399e-01 5.961630181666669470e-01 1.818150283333330036e-02 +6.842517000000000182e-01 5.507593983333329835e-01 2.023759049999999948e-02 +7.056883000000000461e-01 4.903288296666670210e-01 1.717216466666670119e-02 +7.257436999999999916e-01 4.865799499999999833e-01 1.843612033333329875e-02 +7.489183000000000368e-01 4.252237993333329857e-01 1.512044316666670031e-02 +7.718749999999999778e-01 3.910920323333330062e-01 1.713838283333329882e-02 +7.919618000000000491e-01 3.921714671666670093e-01 1.515910683333330025e-02 +8.153685999999999989e-01 3.357406613333330236e-01 1.534501599999999952e-02 +8.363026999999999544e-01 3.075498956666670169e-01 1.460560383333329992e-02 +8.617884000000000100e-01 2.857851470000000171e-01 1.374501849999999921e-02 +8.844872000000000289e-01 2.740424961666669823e-01 1.443190633333329975e-02 +9.079890000000000461e-01 2.574230581666669959e-01 1.269050000000000039e-02 +9.332829999999999737e-01 2.258197691666669893e-01 1.359980449999999980e-02 +9.550178000000000278e-01 1.934376846666669980e-01 1.273933533333329940e-02 +9.811271999999999771e-01 1.665732448333329951e-01 1.188447333333329976e-02 +1.006633399999999900e+00 1.640185443333329884e-01 1.234030849999999922e-02 +1.030228200000000038e+00 1.357939996666669979e-01 1.165456533333330061e-02 +1.057601100000000072e+00 1.607766528333330058e-01 1.089187166666670016e-02 +1.084413199999999966e+00 1.505459054999999935e-01 1.123158833333329915e-02 +1.109710100000000033e+00 1.282342724999999961e-01 1.086581349999999994e-02 +1.137554500000000024e+00 1.161345933333329944e-01 1.041549200000000015e-02 +1.165834400000000048e+00 1.239725849999999963e-01 1.022116500000000081e-02 \ No newline at end of file diff --git a/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv new file mode 100644 index 000000000..c869ca7de --- /dev/null +++ b/test/mumag/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv @@ -0,0 +1,105 @@ +3.625239999999999713e-02 5.114892415500000311e+01 1.631213251166670020e+01 +4.070000000000000007e-02 4.576787608166669941e+01 1.134772132833330005e+01 +4.511180000000000051e-02 4.331816215999999997e+01 8.407984515000000769e+00 +4.959249999999999770e-02 2.519454865000000154e+01 6.784784965000000057e+00 +5.416379999999999806e-02 1.407789967999999980e+01 5.302135776666670353e+00 +5.868999999999999911e-02 1.337527417166669963e+01 4.558895663333330184e+00 +6.315320000000000655e-02 2.088227957833329995e+01 3.767553325000000175e+00 +6.773540000000000116e-02 2.352067832833330030e+01 3.153463791666669902e+00 +7.238989999999999314e-02 1.459065788833330046e+01 2.714546644999999980e+00 +7.694339999999999513e-02 1.643097480333329941e+01 2.423213508333330157e+00 +8.166600000000000248e-02 1.564276924666670077e+01 2.035339249999999822e+00 +8.641719999999999957e-02 1.609254856500000130e+01 1.837833853333330048e+00 +9.109140000000000292e-02 1.279946007166670086e+01 1.598433549999999981e+00 +9.576210000000000278e-02 1.168004799999999932e+01 1.472505774999999906e+00 +1.005216000000000026e-01 1.239115217500000021e+01 1.308776653333330042e+00 +1.052672000000000052e-01 1.104442360666669920e+01 1.203200884999999998e+00 +1.100174000000000013e-01 1.264824788499999997e+01 1.100505863333330003e+00 +1.148721999999999938e-01 1.068150069333329988e+01 9.895295950000000396e-01 +1.198083000000000065e-01 1.062919121333329997e+01 9.177280949999999660e-01 +1.248023999999999939e-01 8.480228023333330256e+00 8.376397483333329896e-01 +1.298709000000000113e-01 1.054387282333330056e+01 7.736622133333329598e-01 +1.349431000000000103e-01 8.823326103333329229e+00 7.353996000000000421e-01 +1.399610000000000021e-01 9.107303678333330765e+00 6.707318450000000487e-01 +1.451112999999999986e-01 7.568946575000000010e+00 6.354211899999999691e-01 +1.503050999999999970e-01 7.486937655000000191e+00 6.076642716666670330e-01 +1.556469000000000047e-01 8.316071640000000542e+00 5.572019216666670438e-01 +1.572933999999999999e-01 8.082806423333330770e+00 1.772221983333329975e-01 +1.609891999999999990e-01 8.406204656666670161e+00 5.374420016666670019e-01 +1.662309999999999899e-01 7.305961626666669595e+00 5.035922400000000243e-01 +1.706808999999999965e-01 7.409980823333330413e+00 1.490785450000000067e-01 +1.716062999999999894e-01 7.126663556666669841e+00 4.782201200000000263e-01 +1.771733000000000058e-01 6.104670323333330373e+00 4.398585833333329975e-01 +1.827794000000000085e-01 6.314649313333330127e+00 4.207942599999999755e-01 +1.842987000000000097e-01 6.985669296666669581e+00 1.295300000000000062e-01 +1.883665999999999952e-01 7.196837438333330006e+00 4.229003000000000068e-01 +1.940302000000000138e-01 5.456149725000000394e+00 3.926154199999999928e-01 +1.983015999999999945e-01 6.101519538333329606e+00 1.111746183333330029e-01 +1.998185000000000100e-01 6.715507050000000255e+00 3.818104066666669905e-01 +2.056348000000000065e-01 5.954089436666669677e+00 3.622545733333329965e-01 +2.115208000000000088e-01 5.823000606666670187e+00 3.462099583333330122e-01 +2.120755000000000001e-01 5.689073146666670411e+00 1.016859966666670001e-01 +2.162467999999999890e-01 5.274567024999999632e+00 4.291691899999999782e-01 +2.260508999999999991e-01 5.306054011666669901e+00 9.002336499999999408e-02 +2.398570999999999898e-01 4.872989734999999989e+00 8.416759833333330165e-02 +2.537865999999999733e-01 4.590923198333330291e+00 7.736351666666670124e-02 +2.677086000000000188e-01 4.288802803333330083e+00 7.121471833333330170e-02 +2.818711999999999884e-01 4.093612151666669696e+00 6.655526166666669852e-02 +2.957293999999999756e-01 3.790488160000000217e+00 6.286535166666669394e-02 +3.099983000000000044e-01 3.646502630000000078e+00 5.789795166666669712e-02 +3.241628999999999761e-01 3.269809508333330061e+00 5.578990999999999811e-02 +3.389054000000000233e-01 3.057003066666669877e+00 4.992672166666670130e-02 +3.540212999999999832e-01 3.010102380000000188e+00 4.942106333333329965e-02 +3.688208000000000042e-01 2.669906414999999811e+00 4.496581333333329877e-02 +3.840975999999999835e-01 2.619258584999999862e+00 4.314465499999999704e-02 +3.990183999999999953e-01 2.335828473333330102e+00 4.143680999999999753e-02 +4.106379000000000001e-01 2.148179208166669962e+00 4.160297799999999879e-02 +4.137768000000000002e-01 2.129094906666670006e+00 3.911823833333329808e-02 +4.291927999999999854e-01 2.070782439999999891e+00 3.633175833333329718e-02 +4.295145000000000213e-01 2.006558257333329820e+00 3.534480766666669993e-02 +4.447362000000000259e-01 1.796411879999999961e+00 3.518650999999999723e-02 +4.466328999999999994e-01 1.795892682000000073e+00 3.145603500000000025e-02 +4.604721999999999982e-01 1.744876515000000072e+00 3.296921333333330262e-02 +4.685032000000000085e-01 1.640983006833329982e+00 3.099933850000000102e-02 +4.766304000000000096e-01 1.643527214999999986e+00 3.129624333333329983e-02 +4.833663999999999739e-01 1.494623838666669924e+00 2.933965966666670158e-02 +4.924697000000000102e-01 1.485128543333330109e+00 3.092004166666669981e-02 +5.046184000000000225e-01 1.428664912499999939e+00 2.726148050000000087e-02 +5.084248000000000101e-01 1.392996424999999983e+00 2.844018666666670025e-02 +5.230276000000000369e-01 1.160762609500000098e+00 2.531033383333329903e-02 +5.250753000000000226e-01 1.272159111666669951e+00 2.652694499999999969e-02 +5.418418000000000401e-01 1.157124196666670102e+00 2.613007999999999997e-02 +5.443529999999999758e-01 1.137421045666670016e+00 2.582160033333329857e-02 +5.584759999999999724e-01 1.068463686666669910e+00 2.528335666666670090e-02 +5.612129000000000145e-01 1.030207043666669930e+00 2.342105016666670009e-02 +5.755700000000000260e-01 9.590708749999999894e-01 2.323855999999999838e-02 +5.833568000000000087e-01 9.226566683333330410e-01 2.312843766666669923e-02 +5.929195000000000437e-01 9.361494049999999900e-01 2.261169999999999847e-02 +6.005226999999999649e-01 8.377321681666669573e-01 2.190618299999999921e-02 +6.100906000000000384e-01 8.074355933333330348e-01 2.165867833333329912e-02 +6.218008000000000424e-01 7.338905468333329907e-01 2.116956166666670094e-02 +6.276903999999999817e-01 7.588048750000000453e-01 2.052974999999999939e-02 +6.411527999999999672e-01 6.602236648333329461e-01 1.891721183333330142e-02 +6.449108999999999536e-01 6.976061483333330093e-01 2.103810166666670103e-02 +6.654921999999999782e-01 5.868389913333329488e-01 1.814479133333329886e-02 +6.843110000000000026e-01 5.442379206666669855e-01 2.020865366666670104e-02 +7.057493999999999712e-01 4.561023925000000090e-01 1.703726683333330050e-02 +7.258065000000000211e-01 4.680557555000000036e-01 1.835656600000000124e-02 +7.489831000000000127e-01 4.286472281666670048e-01 1.513358700000000043e-02 +7.719418000000000113e-01 3.942902281666669784e-01 1.715291783333329836e-02 +7.920304000000000233e-01 3.917498161666669865e-01 1.515774683333329965e-02 +8.154392000000000307e-01 3.437863165000000221e-01 1.537817166666670052e-02 +8.363751000000000380e-01 2.882515494999999817e-01 1.453092849999999998e-02 +8.618630000000000457e-01 2.511196196666670155e-01 1.361783299999999933e-02 +8.845638000000000112e-01 2.644882184999999830e-01 1.439263916666670001e-02 +9.080675999999999748e-01 2.444909116666670046e-01 1.264447816666670020e-02 +9.333637999999999657e-01 2.291532736666669900e-01 1.361314100000000048e-02 +9.551005000000000189e-01 1.942403736666669933e-01 1.274254833333329957e-02 +9.812121999999999788e-01 1.854263468333330056e-01 1.195107366666670057e-02 +1.006720599999999965e+00 1.833105325000000119e-01 1.241118433333330065e-02 +1.030317399999999939e+00 1.560276093333330116e-01 1.172809033333330024e-02 +1.057692700000000041e+00 1.687616888333330067e-01 1.091902633333330028e-02 +1.084507099999999946e+00 1.609880563333329906e-01 1.126864266666669986e-02 +1.109806099999999907e+00 1.237764021666669934e-01 1.085079116666669979e-02 +1.137653000000000025e+00 1.252411816666670064e-01 1.044549983333330039e-02 +1.165935399999999955e+00 1.143170270000000016e-01 1.018908599999999998e-02 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv index 92b38bcf5..160f11da2 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 -3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 -3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 -3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 -4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 -4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 -4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 -4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 -5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 -5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 -5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 -5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 -5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 -6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 -6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 -6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 -7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 -7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 -7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 -7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 -7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 -8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 -8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 -8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 -8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 -8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 -9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 -1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 -1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 -1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 -1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 -1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 -1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 -1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 -1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 -1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 -1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 -1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 -1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 -1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 -1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 -1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 -1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 -2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 -2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 -2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 -2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 -2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 -2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 -2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 -2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 -2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 -2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 -2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 -2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 -2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 -2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 -2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 -2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 +2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 +3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 +3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 +3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 +4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 +4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 +4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 +4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 +5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 +5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 +5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 +5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 +5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 +6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 +6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 +6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 +7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 +7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 +7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 +7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 +7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 +8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 +8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 +8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 +8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 +8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 +9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 +1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 +1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 +1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 +1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 +1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 +1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 +1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 +1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 +1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 +1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 +1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 +1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 +1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 +1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 +1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 +1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 +2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 +2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 +2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 +2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 +2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 +2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 +2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 +2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 +2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 +2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 +2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 +2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 +2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 +2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 +2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 +2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 2.988199999999999745e-01 1.062256999999999962e+01 2.304619999999999891e+00 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv index 831fa6a9d..80562dff5 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 -3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 -3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 -3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 -4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 -4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 -4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 -4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 -5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 -5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 -5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 -5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 -5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 -6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 -6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 -6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 -7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 -7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 -7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 -7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 -7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 -8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 -8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 -8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 -8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 -8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 -9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 -1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 -1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 -1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 -1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 -1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 -1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 -1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 -1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 -1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 -1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 -1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 -1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 -1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 -1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 -1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 -1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 -2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 -2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 -2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 -2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 -2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 -2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 -2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 -2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 -2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 -2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 -2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 -2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 -2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 -2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 -2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 -2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 +2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 +3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 +3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 +3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 +4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 +4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 +4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 +4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 +5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 +5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 +5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 +5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 +5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 +6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 +6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 +6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 +7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 +7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 +7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 +7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 +7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 +8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 +8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 +8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 +8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 +8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 +9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 +1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 +1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 +1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 +1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 +1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 +1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 +1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 +1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 +1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 +1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 +1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 +1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 +1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 +1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 +1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 +1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 +2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 +2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 +2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 +2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 +2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 +2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 +2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 +2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 +2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 +2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 +2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 +2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 +2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 +2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 +2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 +2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 2.987299999999999955e-01 9.904920000000000613e+00 2.225410000000000110e+00 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv index 59e4cde42..6e68726d8 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 -3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 -3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 -3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 -4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 -4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 -4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 -4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 -5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 -5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 -5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 -5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 -5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 -6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 -6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 -6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 -7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 -7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 -7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 -7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 -7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 -8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 -8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 -8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 -8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 -8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 -9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 -1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 -1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 -1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 -1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 -1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 -1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 -1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 -1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 -1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 -1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 -1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 -1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 -1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 -1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 -1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 -1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 -2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 -2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 -2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 -2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 -2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 -2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 -2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 -2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 -2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 -2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 -2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 -2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 -2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 -2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 -2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 -2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 +2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 +3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 +3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 +3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 +4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 +4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 +4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 +4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 +5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 +5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 +5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 +5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 +5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 +6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 +6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 +6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 +7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 +7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 +7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 +7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 +7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 +8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 +8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 +8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 +8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 +8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 +9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 +1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 +1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 +1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 +1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 +1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 +1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 +1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 +1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 +1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 +1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 +1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 +1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 +1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 +1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 +1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 +1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 +2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 +2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 +2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 +2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 +2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 +2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 +2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 +2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 +2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 +2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 +2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 +2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 +2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 +2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 +2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 +2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 2.987299999999999955e-01 9.537290000000000489e+00 2.183720000000000105e+00 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv index daf8f80a8..c33506202 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 -3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 -3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 -3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 -4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 -4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 -4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 -4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 -5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 -5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 -5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 -5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 -5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 -6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 -6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 -6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 -7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 -7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 -7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 -7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 -7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 -8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 -8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 -8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 -8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 -8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 -9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 -1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 -1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 -1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 -1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 -1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 -1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 -1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 -1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 -1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 -1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 -1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 -1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 -1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 -1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 -1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 -1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 -2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 -2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 -2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 -2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 -2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 -2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 -2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 -2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 -2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 -2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 -2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 -2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 -2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 -2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 -2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 -2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 +2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 +3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 +3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 +3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 +4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 +4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 +4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 +4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 +5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 +5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 +5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 +5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 +5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 +6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 +6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 +6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 +7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 +7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 +7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 +7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 +7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 +8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 +8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 +8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 +8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 +8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 +9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 +1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 +1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 +1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 +1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 +1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 +1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 +1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 +1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 +1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 +1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 +1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 +1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 +1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 +1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 +1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 +1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 +2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 +2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 +2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 +2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 +2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 +2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 +2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 +2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 +2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 +2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 +2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 +2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 +2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 +2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 +2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 +2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 2.988600000000000145e-01 9.559969999999999857e+00 2.186319999999999819e+00 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv index 2f696f3b5..17968ec9e 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 -3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 -3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 -3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 -4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 -4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 -4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 -4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 -5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 -5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 -5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 -5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 -5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 -6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 -6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 -6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 -7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 -7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 -7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 -7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 -7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 -8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 -8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 -8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 -8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 -8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 -9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 -1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 -1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 -1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 -1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 -1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 -1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 -1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 -1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 -1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 -1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 -1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 -1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 -1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 -1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 -1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 -1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 -2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 -2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 -2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 -2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 -2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 -2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 -2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 -2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 -2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 -2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 -2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 -2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 -2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 -2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 -2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 -2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 +2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 +3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 +3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 +3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 +4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 +4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 +4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 +4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 +5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 +5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 +5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 +5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 +5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 +6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 +6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 +6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 +7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 +7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 +7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 +7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 +7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 +8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 +8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 +8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 +8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 +8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 +9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 +1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 +1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 +1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 +1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 +1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 +1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 +1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 +1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 +1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 +1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 +1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 +1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 +1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 +1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 +1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 +1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 +2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 +2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 +2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 +2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 +2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 +2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 +2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 +2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 +2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 +2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 +2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 +2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 +2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 +2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 +2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 +2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 2.988600000000000145e-01 9.385640000000000427e+00 2.166290000000000049e+00 \ No newline at end of file diff --git a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv index e7dfab999..72272ed89 100644 --- a/test/mumag/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv +++ b/test/mumag/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 -3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 -3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 -3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 -4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 -4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 -4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 -4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 -5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 -5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 -5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 -5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 -5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 -6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 -6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 -6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 -7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 -7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 -7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 -7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 -7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 -8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 -8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 -8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 -8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 -8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 -9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 -1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 -1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 -1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 -1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 -1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 -1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 -1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 -1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 -1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 -1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 -1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 -1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 -1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 -1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 -1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 -1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 -2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 -2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 -2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 -2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 -2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 -2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 -2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 -2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 -2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 -2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 -2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 -2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 -2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 -2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 -2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 -2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 -2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 +2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 +3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 +3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 +3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 +4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 +4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 +4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 +4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 +5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 +5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 +5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 +5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 +5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 +6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 +6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 +6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 +7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 +7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 +7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 +7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 +7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 +8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 +8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 +8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 +8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 +8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 +9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 +1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 +1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 +1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 +1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 +1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 +1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 +1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 +1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 +1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 +1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 +1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 +1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 +1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 +1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 +1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 +1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 +2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 +2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 +2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 +2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 +2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 +2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 +2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 +2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 +2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 +2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 +2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 +2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 +2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 +2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 +2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 +2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 +2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 diff --git a/test/mumag/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv b/test/mumag/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv new file mode 100644 index 000000000..efaf03f7e --- /dev/null +++ b/test/mumag/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv @@ -0,0 +1,53 @@ +0.02466 11161.7 105.066 +0.02779 8582.24 78.8702 +0.03118 6929.14 63.4309 +0.03472 5567.83 52.0489 +0.03798 4896.87 48.9428 +0.04103 4301.45 44.2537 +0.04439 3931.56 35.32 +0.04789 3532.24 33.8506 +0.05145 3225.93 29.1479 +0.05487 3001.52 30.0366 +0.05809 2808.67 26.8966 +0.06147 2656.59 24.6464 +0.06487 2544.49 24.3544 +0.06823 2417.04 22.1946 +0.07159 2285.04 21.753 +0.07491 2209.24 20.4624 +0.07817 2057.47 19.703 +0.08149 2022.7 18.6311 +0.08492 1895.55 17.4353 +0.08832 1842.28 17.2068 +0.09171 1764.56 16.4013 +0.09497 1702.47 16.2564 +0.09818 1650.68 15.7993 +0.10176 1598.61 13.5448 +0.10537 1517.07 14.6455 +0.10864 1470.19 13.6872 +0.11191 1422.64 13.7771 +0.11529 1373.82 12.5952 +0.11874 1333.67 12.468 +0.12204 1309.38 12.7116 +0.1253 1256.04 11.6755 +0.12868 1224.03 11.535 +0.13213 1180.94 10.9145 +0.13557 1163.16 10.9427 +0.13878 1135.89 11.2995 +0.14204 1129.91 10.3422 +0.14544 1101.7 10.3463 +0.14888 1050.46 9.68171 +0.1523 1034.3 9.79525 +0.15558 1022.51 9.86417 +0.15895 1003.15 9.06883 +0.16231 984.02 9.61305 +0.16567 956.076 8.69603 +0.16916 941.039 8.81872 +0.17256 914.22 8.5457 +0.1759 903.557 8.49062 +0.1792 862.822 8.49027 +0.18246 857.39 8.12443 +0.18596 822.372 7.58423 +0.18945 803.539 7.77639 +0.19275 787.933 7.6279 +0.19605 759.06 7.64242 +0.1993 746.444 7.32989 diff --git a/test/mumag/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv b/test/mumag/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv new file mode 100644 index 000000000..ede4f8121 --- /dev/null +++ b/test/mumag/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv @@ -0,0 +1,53 @@ +0.02466 9785.87 100.498 +0.02779 7387.61 74.8808 +0.03118 5638.9 58.6706 +0.03472 4473.77 47.7572 +0.03797 3723.19 43.7134 +0.04102 3256.4 39.3915 +0.04439 2850.7 30.7019 +0.04789 2561.59 29.3595 +0.05145 2280.01 24.9612 +0.05487 2158.85 25.8372 +0.05809 1997.24 23.0262 +0.06147 1891.61 21.0832 +0.06486 1796.03 20.6896 +0.06823 1698.02 18.8045 +0.07158 1613.84 18.4277 +0.0749 1560.07 17.3367 +0.07817 1481.58 16.8421 +0.08149 1400.5 15.6189 +0.08492 1362.71 14.8771 +0.08832 1326.21 14.6884 +0.09171 1308.1 14.1935 +0.09497 1238.48 13.9232 +0.09817 1217.12 13.6217 +0.10176 1182.01 11.7148 +0.10536 1125.29 12.6688 +0.10863 1086.39 11.8029 +0.1119 1069.27 11.9783 +0.11528 1037.53 10.9946 +0.11874 1000.25 10.8391 +0.12203 1030.21 11.3207 +0.12529 996.562 10.4091 +0.12867 937.635 10.1418 +0.13213 932.787 9.7458 +0.13557 936.093 9.83598 +0.13878 902.903 10.118 +0.14204 895.331 9.2379 +0.14544 894.523 9.3444 +0.14887 873.213 8.84172 +0.15229 870.028 8.99453 +0.15558 846.466 8.9992 +0.15895 842.358 8.32813 +0.1623 809.53 8.74144 +0.16566 822.783 8.08431 +0.16915 792.943 8.10552 +0.17255 774.308 7.87783 +0.1759 781.539 7.90816 +0.17919 756.562 7.97296 +0.18245 745.925 7.59066 +0.18596 725.982 7.13904 +0.18944 711.483 7.3287 +0.19275 709.157 7.24903 +0.19604 677.704 7.2411 +0.19929 659.648 6.90112 diff --git a/test/mumag/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv b/test/mumag/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv new file mode 100644 index 000000000..1c96f3d5f --- /dev/null +++ b/test/mumag/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv @@ -0,0 +1,53 @@ +0.02467 9119.79 98.2483 +0.02779 6716.34 72.6007 +0.03118 4992.66 56.2161 +0.03472 3831.98 45.1388 +0.03798 3145.6 40.9924 +0.04103 2635.02 36.2785 +0.0444 2353.33 28.4064 +0.04789 2051.02 26.7601 +0.05146 1820.51 22.7202 +0.05487 1702.5 23.3101 +0.0581 1582.43 20.8224 +0.06148 1455.78 18.7977 +0.06487 1396.8 18.5029 +0.06824 1347.58 16.9495 +0.07159 1258.02 16.4371 +0.07491 1231.28 15.5554 +0.07818 1164.47 15.0776 +0.0815 1146.97 14.2378 +0.08493 1109.77 13.533 +0.08833 1040.08 13.1167 +0.09172 1030.03 12.6919 +0.09498 996.502 12.5769 +0.09819 973.153 12.2625 +0.10178 933.855 10.4847 +0.10538 941.324 11.6421 +0.10865 891.14 10.747 +0.11192 890.927 10.9919 +0.1153 863.999 10.0862 +0.11876 860.652 10.1051 +0.12205 833.905 10.2392 +0.12531 831.414 9.54046 +0.12869 796.354 9.38666 +0.13215 809.376 9.11842 +0.13559 805.133 9.14629 +0.1388 791.474 9.50691 +0.14205 787.287 8.69915 +0.14546 761.22 8.65866 +0.1489 779.201 8.38098 +0.15232 771.323 8.50152 +0.1556 748.08 8.49235 +0.15897 748.238 7.8713 +0.16233 756.864 8.48551 +0.16569 723.545 7.61209 +0.16918 723.039 7.76626 +0.17258 714.249 7.58349 +0.17592 707.068 7.55031 +0.17922 695.999 7.67253 +0.18248 687.854 7.31121 +0.18599 672.503 6.89206 +0.18947 656.046 7.05985 +0.19277 644.64 6.93548 +0.19607 633.62 7.0287 +0.19932 617.369 6.7009 diff --git a/test/mumag/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv b/test/mumag/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv new file mode 100644 index 000000000..e349acefe --- /dev/null +++ b/test/mumag/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv @@ -0,0 +1,53 @@ +0.02466 8578.27 96.3713 +0.02778 6201.5 70.6884 +0.03117 4666.55 54.9081 +0.03471 3532.71 43.8556 +0.03797 2779.72 39.1195 +0.04102 2401.14 35.0436 +0.04438 2010.93 26.6446 +0.04788 1789.13 25.3004 +0.05144 1629 21.7057 +0.05485 1414.39 21.5471 +0.05808 1338.47 19.3969 +0.06145 1255.55 17.6425 +0.06485 1194.78 17.2789 +0.06822 1131.88 15.6792 +0.07157 1093.29 15.4062 +0.07489 1076.75 14.6325 +0.07815 990.83 13.9891 +0.08147 993.984 13.3123 +0.0849 949.429 12.5828 +0.0883 906.082 12.3081 +0.09169 901.543 11.9196 +0.09495 883.023 11.8721 +0.09815 842.784 11.4424 +0.10174 819.526 9.8676 +0.10534 802.736 10.7893 +0.10861 795.767 10.1828 +0.11188 791.163 10.3837 +0.11526 783.07 9.63416 +0.11872 771.734 9.59199 +0.12201 755.014 9.75865 +0.12527 763.25 9.14929 +0.12865 738.983 9.05459 +0.1321 735.65 8.71334 +0.13554 713.743 8.62175 +0.13875 720.548 9.08471 +0.142 726.975 8.37203 +0.14541 705.893 8.34698 +0.14884 717.099 8.0504 +0.15226 709.825 8.16294 +0.15554 709.595 8.27884 +0.15891 699.293 7.61937 +0.16227 704.678 8.19256 +0.16563 698.926 7.48706 +0.16912 685.563 7.56396 +0.17251 673.043 7.36594 +0.17586 671.398 7.36238 +0.17915 664.082 7.50135 +0.18241 667.157 7.20373 +0.18592 646.099 6.75787 +0.1894 640.973 6.98357 +0.1927 634.489 6.88246 +0.196 608.639 6.89728 +0.19924 599.163 6.60299 diff --git a/test/mumag/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv b/test/mumag/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv new file mode 100644 index 000000000..03d157c58 --- /dev/null +++ b/test/mumag/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv @@ -0,0 +1,53 @@ +0.02466 8403.24 95.8365 +0.02779 5866.26 69.5434 +0.03118 4356.78 53.6923 +0.03472 3299.25 42.8649 +0.03798 2597.38 38.2386 +0.04103 2129.79 33.557 +0.04439 1878.69 25.9888 +0.04789 1624.61 24.3861 +0.05145 1439.52 20.6737 +0.05487 1263.65 20.5759 +0.05809 1171.99 18.386 +0.06147 1079.56 16.577 +0.06487 1041.15 16.3129 +0.06823 1001.7 14.8847 +0.07159 961.645 14.563 +0.07491 923.442 13.6706 +0.07817 896.915 13.3973 +0.08149 883.652 12.6286 +0.08492 862.753 12.0581 +0.08832 824.722 11.795 +0.09171 784.35 11.1756 +0.09497 769.294 11.1579 +0.09818 755.349 10.8901 +0.10176 749.016 9.48228 +0.10537 742.393 10.4072 +0.10864 731.812 9.80011 +0.11191 725.902 9.97489 +0.11529 687.755 9.06119 +0.11874 695.826 9.13917 +0.12204 706.826 9.47552 +0.1253 686.062 8.69528 +0.12868 672.907 8.67583 +0.13213 693.14 8.48682 +0.13557 670.728 8.38538 +0.13878 665.705 8.76139 +0.14204 671.833 8.08011 +0.14544 675.608 8.18129 +0.14888 672.094 7.81614 +0.1523 674.683 7.97469 +0.15558 656.506 7.99112 +0.15895 676.236 7.50792 +0.16231 665.98 7.99164 +0.16567 649.237 7.2359 +0.16916 663.887 7.46039 +0.17256 654.732 7.28088 +0.1759 649.138 7.26044 +0.1792 637.918 7.36805 +0.18246 634.954 7.04588 +0.18596 615.952 6.61209 +0.18945 606.075 6.80618 +0.19275 602.38 6.72418 +0.19605 583.877 6.77081 +0.1993 592.832 6.58159 diff --git a/test/quantities/utest_math_operations.py b/test/quantities/utest_math_operations.py index 13fb27aa4..11d0b11b3 100644 --- a/test/quantities/utest_math_operations.py +++ b/test/quantities/utest_math_operations.py @@ -1,152 +1,164 @@ -""" Tests for math operations """ - -import numpy as np -import pytest - -from sasdata.quantities import units -from sasdata.quantities.quantity import NamedQuantity, tensordot, transpose - -order_list = [ - [0, 1, 2, 3], - [0, 2, 1], - [1, 0], - [0, 1], - [2, 0, 1], - [3, 1, 2, 0] -] - -@pytest.mark.parametrize("order", order_list) -def test_transpose_raw(order: list[int]): - """ Check that the transpose operation changes the order of indices correctly - uses sizes as way of tracking""" - - input_shape = tuple([i+1 for i in range(len(order))]) - expected_shape = tuple([i+1 for i in order]) - - input_mat = np.zeros(input_shape) - - measured_mat = transpose(input_mat, axes=tuple(order)) - - assert measured_mat.shape == expected_shape - - -@pytest.mark.parametrize("order", order_list) -def test_transpose_raw_with_quantity(order: list[int]): - """ Check that the transpose operation changes the order of indices correctly - uses sizes as way of tracking""" - input_shape = tuple([i + 1 for i in range(len(order))]) - expected_shape = tuple([i + 1 for i in order]) - - input_mat = NamedQuantity("testmat", np.zeros(input_shape), units=units.none) - - measured_mat = transpose(input_mat, axes=tuple(order)) - - assert measured_mat.value.shape == expected_shape - - -rng_seed = 1979 -tensor_product_with_identity_sizes = (4,6,5) - -@pytest.mark.parametrize("index, size", [tup for tup in enumerate(tensor_product_with_identity_sizes)]) -def test_tensor_product_with_identity_quantities(index, size): - """ Check the correctness of the tensor product by multiplying by the identity (quantity, quantity)""" - np.random.seed(rng_seed) - - x = NamedQuantity("x", np.random.rand(*tensor_product_with_identity_sizes), units=units.meters) - y = NamedQuantity("y", np.eye(size), units.seconds) - - z = tensordot(x, y, index, 0) - - # Check units - assert z.units == units.meters * units.seconds - - # Expected sizes - last index gets moved to end - output_order = [i for i in (0, 1, 2) if i != index] + [index] - output_sizes = [tensor_product_with_identity_sizes[i] for i in output_order] - - assert z.value.shape == tuple(output_sizes) - - # Restore original order and check - reverse_order = [-1, -1, -1] - for to_index, from_index in enumerate(output_order): - reverse_order[from_index] = to_index - - z_reordered = transpose(z, axes = tuple(reverse_order)) - - assert z_reordered.value.shape == tensor_product_with_identity_sizes - - # Check values - - mat_in = x.in_si() - mat_out = transpose(z, axes=tuple(reverse_order)).in_si() - - assert np.all(np.abs(mat_in - mat_out) < 1e-10) - - -@pytest.mark.parametrize("index, size", [tup for tup in enumerate(tensor_product_with_identity_sizes)]) -def test_tensor_product_with_identity_quantity_matrix(index, size): - """ Check the correctness of the tensor product by multiplying by the identity (quantity, matrix)""" - np.random.seed(rng_seed) - - x = NamedQuantity("x", np.random.rand(*tensor_product_with_identity_sizes), units.meters) - y = np.eye(size) - - z = tensordot(x, y, index, 0) - - assert z.units == units.meters - - # Expected sizes - last index gets moved to end - output_order = [i for i in (0, 1, 2) if i != index] + [index] - output_sizes = [tensor_product_with_identity_sizes[i] for i in output_order] - - assert z.value.shape == tuple(output_sizes) - - # Restore original order and check - reverse_order = [-1, -1, -1] - for to_index, from_index in enumerate(output_order): - reverse_order[from_index] = to_index - - z_reordered = transpose(z, axes = tuple(reverse_order)) - - assert z_reordered.value.shape == tensor_product_with_identity_sizes - - # Check values - - mat_in = x.in_si() - mat_out = transpose(z, axes=tuple(reverse_order)).in_si() - - assert np.all(np.abs(mat_in - mat_out) < 1e-10) - - -@pytest.mark.parametrize("index, size", [tup for tup in enumerate(tensor_product_with_identity_sizes)]) -def test_tensor_product_with_identity_matrix_quantity(index, size): - """ Check the correctness of the tensor product by multiplying by the identity (matrix, quantity)""" - np.random.seed(rng_seed) - - x = np.random.rand(*tensor_product_with_identity_sizes) - y = NamedQuantity("y", np.eye(size), units.seconds) - - z = tensordot(x, y, index, 0) - - assert z.units == units.seconds - - - # Expected sizes - last index gets moved to end - output_order = [i for i in (0, 1, 2) if i != index] + [index] - output_sizes = [tensor_product_with_identity_sizes[i] for i in output_order] - - assert z.value.shape == tuple(output_sizes) - - # Restore original order and check - reverse_order = [-1, -1, -1] - for to_index, from_index in enumerate(output_order): - reverse_order[from_index] = to_index - - z_reordered = transpose(z, axes = tuple(reverse_order)) - - assert z_reordered.value.shape == tensor_product_with_identity_sizes - - # Check values - - mat_in = x - mat_out = transpose(z, axes=tuple(reverse_order)).in_si() - - assert np.all(np.abs(mat_in - mat_out) < 1e-10) +"""Tests for math operations""" + +import numpy as np +import pytest + +from sasdata.quantities import units +from sasdata.quantities.quantity import NamedQuantity, matinv, tensordot, trace, transpose + +order_list = [[0, 1, 2, 3], [0, 2, 1], [1, 0], [0, 1], [2, 0, 1], [3, 1, 2, 0]] + + +@pytest.mark.parametrize("order", order_list) +def test_transpose(order: list[int]): + """Check that the transpose operation changes the order of indices correctly for raw data and quantities - uses sizes as way of tracking""" + + input_shape = tuple([i + 1 for i in range(len(order))]) + expected_shape = tuple([i + 1 for i in order]) + + input_mat = np.zeros(input_shape) + input_quantity = NamedQuantity("testmat", np.zeros(input_shape), units=units.none) + + measured_mat = transpose(input_mat, axes=tuple(order)) + measured_quantity = transpose(input_quantity, axes=tuple(order)) + + assert measured_mat.shape == expected_shape + assert measured_quantity.value.shape == expected_shape + + +@pytest.mark.parametrize( + "matrix, offset, expected_trace", + [ + (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 0, 15), + (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 1, 8), + (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 2, 3), + (np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), -1, 12), + ], +) +def test_trace_offset(matrix, offset, expected_trace): + """Check that the trace operation correctly identifies the offset value for raw data and quantities.""" + assert (trace(matrix, offset=offset) == expected_trace).all() + assert (trace(NamedQuantity("testmat", matrix, units=units.none), offset).value == expected_trace).all() + + +@pytest.mark.parametrize( + "matrix, axis1, axis2, expected_trace", + [ + (np.array([[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]), 0, 1, np.array([4, 6])), + (np.array([[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]), 1, 2, np.array([5, 5, 5])), + (np.array([[[1, 2], [3, 4]], [[1, 2], [3, 4]], [[1, 2], [3, 4]]]), 0, 2, np.array([3, 7])), + ], +) +def test_trace_axes(matrix, axis1, axis2, expected_trace): + """Check that the trace operation correctly identifies the offset value for raw data and quantities.""" + assert (trace(matrix, axis1=axis1, axis2=axis2) == expected_trace).all() + assert ( + trace(NamedQuantity("testmat", matrix, units=units.none), axis1=axis1, axis2=axis2).value == expected_trace + ).all() + + +@pytest.mark.parametrize( + "matrix, expected_inverse", + [ + (np.array([[1]]), np.array([[1]])), + (np.array([[-2.0, 1.0], [1.5, -0.5]]), np.array([[1, 2], [3, 4]])), + ], +) +def test_inverse(matrix, expected_inverse): + """Check that the matinv operation correctly inverse for raw data and quantities.""" + print(matinv(matrix)) + print(expected_inverse) + assert (matinv(matrix) == expected_inverse).all() + assert (matinv(NamedQuantity("testmat", matrix, units=units.none)).value == expected_inverse).all() + + +rng_seed = 1979 +tensor_product_with_identity_sizes = (4, 6, 5) + + +@pytest.mark.parametrize( + "x, x_unit", + [ + (NamedQuantity("x", np.random.rand(*tensor_product_with_identity_sizes), units=units.meters), units.meters), + ((np.random.rand(*tensor_product_with_identity_sizes), units.none)), + ], +) +@pytest.mark.parametrize("index, size", [tup for tup in enumerate(tensor_product_with_identity_sizes)]) +def test_tensor_product_with_identity_quantities(x, x_unit, index, size): + """Check the correctness of the tensor product by multiplying by the identity (quantity, quantity)""" + np.random.seed(rng_seed) + y = NamedQuantity("y", np.eye(size), units.seconds) + + z = tensordot(x, y, index, 0) + + # Check units + assert z.units == x_unit * units.seconds + + # Expected sizes - last index gets moved to end + output_order = [i for i in (0, 1, 2) if i != index] + [index] + output_sizes = [tensor_product_with_identity_sizes[i] for i in output_order] + + assert z.value.shape == tuple(output_sizes) + + # Restore original order and check + reverse_order = [-1, -1, -1] + for to_index, from_index in enumerate(output_order): + reverse_order[from_index] = to_index + + z_reordered = transpose(z, axes=tuple(reverse_order)) + + assert z_reordered.value.shape == tensor_product_with_identity_sizes + + # Check values + + try: + mat_in = x.in_si() + except AttributeError: + mat_in = x + + mat_out = transpose(z, axes=tuple(reverse_order)).in_si() + + assert np.all(np.abs(mat_in - mat_out) < 1e-10) + + +@pytest.mark.parametrize( + "x, x_unit", + [ + (NamedQuantity("x", np.random.rand(*tensor_product_with_identity_sizes), units=units.meters), units.meters), + ], +) +@pytest.mark.parametrize("index, size", [tup for tup in enumerate(tensor_product_with_identity_sizes)]) +def test_tensor_product_with_identity_quantity_matrix(x, x_unit, index, size): + """Check the correctness of the tensor product by multiplying by the identity (quantity, matrix)""" + np.random.seed(rng_seed) + y = np.eye(size) + + z = tensordot(x, y, index, 0) + + assert z.units == x_unit + + # Expected sizes - last index gets moved to end + output_order = [i for i in (0, 1, 2) if i != index] + [index] + output_sizes = [tensor_product_with_identity_sizes[i] for i in output_order] + + assert z.value.shape == tuple(output_sizes) + + # Restore original order and check + reverse_order = [-1, -1, -1] + for to_index, from_index in enumerate(output_order): + reverse_order[from_index] = to_index + + z_reordered = transpose(z, axes=tuple(reverse_order)) + + assert z_reordered.value.shape == tensor_product_with_identity_sizes + + # Check values + + try: + mat_in = x.in_si() + except AttributeError: + mat_in = x + + mat_out = transpose(z, axes=tuple(reverse_order)).in_si() + + assert np.all(np.abs(mat_in - mat_out) < 1e-10) diff --git a/test/quantities/utest_operations.py b/test/quantities/utest_operations.py index 2bfc400a4..77a9faa54 100644 --- a/test/quantities/utest_operations.py +++ b/test/quantities/utest_operations.py @@ -1,36 +1,82 @@ +import math + +import numpy as np import pytest from sasdata.quantities.quantity import ( Add, AdditiveIdentity, + ArcCos, + ArcSin, + ArcTan, Constant, + Cos, Div, + Dot, + Exp, Inv, + Ln, + Log, + MatInv, + MatMul, + MatrixIdentity, Mul, MultiplicativeIdentity, Neg, + Norm_1, + Norm_2, Operation, Pow, + Sin, Sub, + Tan, + Trace, + Transpose, Variable, ) -operation_with_everything = \ - Div( - Pow( - Mul( - Sub( - Add( - Neg(Inv(MultiplicativeIdentity())), - Variable("x")), - Constant(7)), - AdditiveIdentity()), - 2), - Variable("y")) +x = Variable("x") +y = Variable("y") +z = Variable("z") -def test_serialise_deserialise(): - print(operation_with_everything._serialise_json()) +operation_with_everything = Div( + Pow( + Mul( + Sub(Add(Neg(Inv(MultiplicativeIdentity())), Ln(Transpose(x))), Log(Constant(7), 2)), + AdditiveIdentity(), + ), + 2, + ), + y, +) + + +@pytest.fixture(params=[Inv, Exp, Ln, MatInv, Neg, Sin, ArcSin, Cos, ArcCos, Tan, ArcTan, Transpose]) +def unary_operation(request): + return request.param(x) + + +@pytest.fixture(params=[Add, Div, Dot, MatMul, Mul, Sub]) +def binary_operation(request): + return request.param(x, y) + + +@pytest.fixture(params=[Log, Pow]) +def log_pow_operation(request): + return request.param(x, 2) + + +@pytest.fixture(params=[Transpose, Norm_1, Norm_2]) +def axis_operation(request): + return request.param(x, (0,)) + +@pytest.fixture(params=[Transpose, Norm_1, Norm_2]) +def axis_none_operation(request): + return request.param(x, None) + + +def test_serialise_deserialise(): serialised = operation_with_everything.serialise() deserialised = Operation.deserialise(serialised) reserialised = deserialised.serialise() @@ -38,41 +84,259 @@ def test_serialise_deserialise(): assert serialised == reserialised -@pytest.mark.parametrize("op, a, b, result", [ - (Add, 1, 1, 2), - (Add, 7, 8, 15), - (Sub, 1, 1, 0), - (Sub, 7, 8, -1), - (Mul, 1, 1, 1), - (Mul, 7, 8, 56), - (Div, 1, 1, 1), - (Div, 7, 8, 7/8), - (Pow, 1, 1, 1), - (Pow, 7, 2, 49)]) +def test_unary_serialise_deserialise(unary_operation): + serialised = unary_operation.serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +def test_binary_serialise_deserialise(binary_operation): + serialised = binary_operation.serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +def test_log_pow_serialise_deserialise(log_pow_operation): + serialised = log_pow_operation.serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +def test_axis_serialise_deserialise(axis_operation): + serialised = axis_operation.serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +def test_axis_none_serialise_deserialise(axis_none_operation): + serialised = axis_none_operation.serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +def test_trace_serialise_deserialise(): + serialised = Trace(x).serialise() + deserialised = Operation.deserialise(serialised) + reserialised = deserialised.serialise() + + assert serialised == reserialised + + +@pytest.mark.parametrize( + "op, summary", + [(AdditiveIdentity, "0 [Add.Id.]"), (MultiplicativeIdentity, "1 [Mul.Id.]"), (Operation, "Operation(\n)")], +) +def test_summary(op, summary): + f = op() + assert f.summary() == summary + + +def test_matrix_id_summary(): + f = MatrixIdentity(1) + assert f.summary() == "1 [Matrix Id.]" + + +def test_variable_summary(): + assert x.summary() == "x" + + +def test_unary_summary(unary_operation): + assert unary_operation.summary() == f"{unary_operation.__class__.__name__}(\n x\n)" + + +def test_binary_summary(binary_operation): + assert binary_operation.summary() == f"{binary_operation.__class__.__name__}(\n x\n y\n)" + + +def test_log_pow_summary(log_pow_operation): + assert log_pow_operation.summary() == f"{log_pow_operation.__class__.__name__}(\n x\n 2\n)" + + +def test_axis_summary(axis_operation): + assert axis_operation.summary() == f"{axis_operation.__class__.__name__}(\n x\n [0]\n)" + + +def test_axis_none_summary(axis_none_operation): + assert axis_none_operation.summary() == f"{axis_none_operation.__class__.__name__}(\n x\n)" + + +def test_trace_summary(): + op = Trace(x) + assert op.summary() == f"{op.__class__.__name__}(\n x\n 0\n 0\n 1\n)" + + +@pytest.mark.parametrize("op, result", [(AdditiveIdentity, 0), (MultiplicativeIdentity, 1), (Operation, None)]) +def test_evaluation(op, result): + f = op() + assert f.evaluate({}) == result + + +@pytest.mark.parametrize( + "op, a, result", + [ + (Neg, 1, -1), + (Neg, -7, 7), + (Inv, 2, 0.5), + (Inv, 0.125, 8), + (Exp, 1, math.e), + (Exp, math.log(5.0), pytest.approx(5.0)), + (Ln, np.sqrt(math.e), 0.5), + (Ln, math.e**5, pytest.approx(5.0)), + (Sin, math.pi / 6.0, pytest.approx(0.5)), + (Sin, 0.5 * math.pi, pytest.approx(1.0)), + (Cos, 0.0, pytest.approx(1.0)), + (Cos, math.pi / 3.0, pytest.approx(0.5)), + (Tan, 0.0, pytest.approx(0.0)), + (Tan, 0.25 * math.pi, pytest.approx(1.0)), + (ArcSin, 1.0, 0.5 * math.pi), + (ArcSin, -1.0, -0.5 * math.pi), + (ArcCos, 1.0, 0.0), + (ArcCos, -1.0, math.pi), + (ArcTan, 0.0, 0.0), + (ArcTan, -1.0, -0.25 * math.pi), + (Trace, np.array([[1, 2], [3, 4]]), pytest.approx(5.0)), + (Trace, np.array([[1, 4, 1], [2, 4, 2], [3, 4, 3]]), pytest.approx(8.0)), + ], +) +def test_unary_evaluation(op, a, result): + f = op(Constant(a)) + assert f.evaluate({}) == result + + +@pytest.mark.parametrize( + "op, a, b, result", + [ + (Add, 1, 1, 2), + (Add, 7, 8, 15), + (Sub, 1, 1, 0), + (Sub, 7, 8, -1), + (Mul, 1, 1, 1), + (Mul, 7, 8, 56), + (Div, 1, 1, 1), + (Div, 7, 8, 7.0 / 8.0), + (Dot, [1, 2], [2, 1], 4), + (Dot, [7, 8], [8, 7], 112), + (Pow, 1, 1, 1), + (Pow, 7, 2, 49), + (Log, 100, 10, 2), + (Log, 256, 2, 8), + ], +) def test_binary_evaluation(op, a, b, result): - f = op(Constant(a), b if op == Pow else Constant(b)) + f = op(Constant(a), b if op == Log or op == Pow else Constant(b)) assert f.evaluate({}) == result -x = Variable("x") -y = Variable("y") -z = Variable("z") -@pytest.mark.parametrize("x_over_x", [ - Div(x,x), - Mul(Inv(x), x), - Mul(x, Inv(x)), -]) -def test_dx_over_x_by_dx_should_be_zero(x_over_x): +@pytest.mark.parametrize( + "op, a, b, result", + [ + (MatMul, np.array([[1, 1], [1, 1]]), np.array([[1, 1], [1, 1]]), np.array([[2, 2], [2, 2]])), + (MatMul, np.array([[7, 7], [7, 7]]), np.array([[8, 8], [8, 8]]), np.array([[112, 112], [112, 112]])), + ], +) +def test_matmul_evaluation(op, a, b, result): + f = op(Constant(a), Constant(b)) + assert (f.evaluate({}) == result).all() - dfdx = x_over_x.derivative(x) - print(dfdx.summary()) +@pytest.mark.parametrize( + "op, a, result", + [ + (Transpose, np.array([[1, 2]]), np.array([[1], [2]])), + (Transpose, [[1, 2], [3, 4]], [[1, 3], [2, 4]]), + (Norm_1, [[1, 2], [3, 4]], np.float64(6.0)), + (Norm_2, [[1, 2], [3, 4]], np.float64(np.sqrt(30.0))), + (Norm_2, [[1.0, 2.5], [3.0, 4.0]], np.float64(np.sqrt(32.25))), + ], +) +def test_axis_none_evaluation(op, a, result): + f = op(Constant(a)) + assert (f.evaluate({}) == result).all() + +@pytest.mark.parametrize( + "op, a, axes, result", + [ + (Transpose, [[1, 2], [3, 4]], (1, 0), [[1, 3], [2, 4]]), + (Norm_1, np.array([[1, 2], [3, 4]]), 1, np.array([3.0, 7.0])), + (Norm_2, np.array([[1, 2], [3, 4]]), 1, np.array([np.sqrt(5.0), 5.0])), + ], +) +def test_axis_evaluation(op, a, axes, result): + f = op(Constant(a), axes=axes) + assert (f.evaluate({}) == result).all() + + +@pytest.mark.parametrize( + "op, result", + [(AdditiveIdentity, AdditiveIdentity()), (MultiplicativeIdentity, AdditiveIdentity()), (Operation, None)], +) +def test_derivative(op, result): + f = op() + assert f.derivative(x, simplify=False) == result + + +@pytest.mark.parametrize( + "op", + [ + (Neg(Neg(x))), + (Inv(Inv(x))), + (MatInv(MatInv(x))), + ], +) +def test_clean_double_applications(op): + assert op._clean() == x + + +@pytest.mark.parametrize( + "op", + [ + (Exp(Ln(x))), + (Ln(Exp(x))), + ], +) +def test_clean_exp_ln_functions(op): + assert op._clean() == x + + +@pytest.mark.parametrize( + "op", + [ + (Sin(ArcSin(x))), + (Cos(ArcCos(x))), + (Tan(ArcTan(x))), + (ArcSin(Sin(x))), + (ArcCos(Cos(x))), + (ArcTan(Tan(x))), + ], +) +def test_clean_trig_functions(op): + assert op._clean() == x + + +@pytest.mark.parametrize( + "x_over_x", + [ + Div(x, x), + Mul(Inv(x), x), + Mul(x, Inv(x)), + ], +) +def test_dx_over_x_by_dx_should_be_zero(x_over_x): + dfdx = x_over_x.derivative(x) assert dfdx == AdditiveIdentity() def test_d_xyz_by_components_should_be_1(): f = Mul(Mul(x, y), z) assert f.derivative(x).derivative(y).derivative(z) == MultiplicativeIdentity() - - diff --git a/test/quantities/utest_quantities.py b/test/quantities/utest_quantities.py index fed48f808..7edfd14df 100644 --- a/test/quantities/utest_quantities.py +++ b/test/quantities/utest_quantities.py @@ -122,7 +122,7 @@ def test_conversion_errors(unit_1, unit_2): else: with pytest.raises(UnitError): - Quantity(1, units.seconds).in_units_of(units.meters) + Quantity(1, unit_1).in_units_of(unit_2) @pytest.mark.quantity diff --git a/test/quantities/utest_units.py b/test/quantities/utest_units.py index 3bc775313..c0d11b81a 100644 --- a/test/quantities/utest_units.py +++ b/test/quantities/utest_units.py @@ -1,72 +1,132 @@ import math -import sasdata.quantities.units as units -from sasdata.quantities.units import Unit - - -class EqualUnits: - def __init__(self, test_name: str, *units): - self.test_name = "Equality: " + test_name - self.units: list[Unit] = list(units) - - def run_test(self): - for i, unit_1 in enumerate(self.units): - for unit_2 in self.units[i + 1 :]: - assert unit_1.equivalent(unit_2), "Units should be equivalent" - assert unit_1 == unit_2, "Units should be equal" - - -class EquivalentButUnequalUnits: - def __init__(self, test_name: str, *units): - self.test_name = "Equivalence: " + test_name - self.units: list[Unit] = list(units) - - def run_test(self): - for i, unit_1 in enumerate(self.units): - for unit_2 in self.units[i + 1 :]: - assert unit_1.equivalent(unit_2), "Units should be equivalent" - assert unit_1 != unit_2, "Units should not be equal" - - -class DissimilarUnits: - def __init__(self, test_name: str, *units): - self.test_name = "Dissimilar: " + test_name - self.units: list[Unit] = list(units) - - def run_test(self): - for i, unit_1 in enumerate(self.units): - for unit_2 in self.units[i + 1 :]: - assert not unit_1.equivalent(unit_2), "Units should not be equivalent" - +import pytest -tests = [ - - EqualUnits("Pressure", - units.pascals, - units.newtons / units.meters ** 2, - units.micronewtons * units.millimeters ** -2), - - EqualUnits("Resistance", - units.ohms, - units.volts / units.amperes, - 1e-3/units.millisiemens), - - EquivalentButUnequalUnits("Angular frequency", - units.rotations / units.minutes, - units.degrees * units.hertz), - - EqualUnits("Angular frequency", - (units.rotations/units.minutes ), - (units.radians*units.hertz) * 2 * math.pi/60.0), - - DissimilarUnits("Frequency and Angular frequency", - (units.rotations/units.minutes), - (units.hertz)), - - -] - - -for test in tests: - print(test.test_name) - test.run_test() +import sasdata.quantities.units as units +from sasdata.quantities.units import UnknownUnit + +EQUAL_TERMS = { + "Pressure": [units.pascals, units.newtons / units.meters**2, units.micronewtons * units.millimeters**-2], + "Resistance": [units.ohms, units.volts / units.amperes, 1e-3 / units.millisiemens], + "Angular frequency": [(units.rotations / units.minutes), (units.radians * units.hertz) * 2 * math.pi / 60.0], + "Unknown Units": [UnknownUnit("Pizzas"), UnknownUnit(["Pizzas"])], + "Unknown Fractional Units": [ + UnknownUnit("Slices", denominator=["Pizzas"]), + UnknownUnit(["Slices"], denominator=["Pizzas"]), + ], + "Unknown Multiplication": [ + UnknownUnit("Pizzas") * UnknownUnit("People"), + UnknownUnit(["Pizzas", "People"]), + ], + "Unknown Multiplication with Units": [ + UnknownUnit("Pizzas") * units.meters, + units.meters * UnknownUnit(["Pizzas"]), + ], + "Unknown Power": [ + UnknownUnit(["Slices"], denominator=["Pizza"]) * UnknownUnit(["Slices"], denominator=["Pizza"]), + UnknownUnit(["Slices"], denominator=["Pizza"]) ** 2, + ], + "Unknown Fractional Power": [ + UnknownUnit(["Pizza", "Pizza", "Pizza"]), + UnknownUnit(["Pizza", "Pizza"]) ** 1.5, + ], + "Unknown Division": [ + UnknownUnit("Slices") / UnknownUnit("Pizza"), + UnknownUnit(["Slices"], denominator=["Pizza"]), + (1 / UnknownUnit("Pizza")) * UnknownUnit("Slices"), + 1 / (UnknownUnit("Pizza") / UnknownUnit("Slices")), + ], + "Unknown Complicated Math": [ + (UnknownUnit("Slices") / UnknownUnit("Person")) + / (UnknownUnit("Slices") / UnknownUnit("Pizzas")) + * UnknownUnit("Person"), + UnknownUnit("Pizzas"), + ], +} + + +@pytest.fixture(params=EQUAL_TERMS) +def equal_term(request): + return EQUAL_TERMS[request.param] + + +def test_unit_equality(equal_term): + for i, unit_1 in enumerate(equal_term): + for unit_2 in equal_term[i + 1 :]: + assert unit_1.equivalent(unit_2), "Units should be equivalent" + assert unit_1 == unit_2, "Units should be equal" + + +EQUIVALENT_TERMS = { + "Angular frequency": [units.rotations / units.minutes, units.degrees * units.hertz], +} + + +@pytest.fixture(params=EQUIVALENT_TERMS) +def equivalent_term(request): + return EQUIVALENT_TERMS[request.param] + + +def test_unit_equivalent(equivalent_term): + units = equivalent_term + for i, unit_1 in enumerate(units): + for unit_2 in units[i + 1 :]: + assert unit_1.equivalent(unit_2), "Units should be equivalent" + assert unit_1 != unit_2, "Units not should be equal" + + +DISSIMILAR_TERMS = { + "Frequency and Angular frequency": [(units.rotations / units.minutes), (units.hertz)], + "Different Unknown Units": [UnknownUnit("Pizzas"), UnknownUnit(["Donuts"])], + "Unknown Multiplication with Units": [ + UnknownUnit("Pizzas") * units.meters, + units.seconds * UnknownUnit(["Pizzas"]), + ], +} + + +@pytest.fixture(params=DISSIMILAR_TERMS) +def dissimilar_term(request): + return DISSIMILAR_TERMS[request.param] + + +def test_unit_dissimilar(dissimilar_term): + units = dissimilar_term + for i, unit_1 in enumerate(units): + for unit_2 in units[i + 1:]: + assert not unit_1.equivalent(unit_2), "Units should not be equivalent" + + +def test_unit_operations(): + pizza = UnknownUnit(["Pizza"]) + slice = UnknownUnit("Slice") + pineapple = UnknownUnit("Pineapple") + pie = UnknownUnit("Pie") + empty = UnknownUnit([]) + + with pytest.raises(RuntimeError): + UnknownUnit("a/b") + with pytest.raises(RuntimeError): + UnknownUnit(["a^b"]) + with pytest.raises(RuntimeError): + UnknownUnit({"a b": 1}) + with pytest.raises(RuntimeError): + UnknownUnit("a", {"a*b": 1}) + with pytest.raises(RuntimeError): + UnknownUnit("a", ["a^b"]) + with pytest.raises(RuntimeError): + UnknownUnit("a", "a/b") + + assert str(empty) == "" + + assert str(pizza) == "Pizza" + assert str(pizza * pineapple) == "Pineapple Pizza" + assert str(pizza * pizza) == "Pizza^2" + + assert str(1 / pizza) == "Pizza^-1" + assert str(1 / pizza / pineapple) == "Pineapple^-1 Pizza^-1" + assert str(slice / pizza) == "Slice Pizza^-1" + assert str(slice / pizza / pineapple) == "Slice Pineapple^-1 Pizza^-1" + assert str((slice / pizza) ** 2) == "Slice^2 Pizza^-2" + + assert str(pie**0.5) == "Pie^0.5" # A valid unit, because pie are square diff --git a/test/sasdataloader/data/1_33_1640_22.874115.csv b/test/sasdataloader/data/1_33_1640_22.874115.csv index 92b38bcf5..160f11da2 100644 --- a/test/sasdataloader/data/1_33_1640_22.874115.csv +++ b/test/sasdataloader/data/1_33_1640_22.874115.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 -3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 -3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 -3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 -4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 -4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 -4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 -4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 -5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 -5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 -5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 -5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 -5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 -6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 -6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 -6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 -7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 -7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 -7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 -7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 -7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 -8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 -8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 -8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 -8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 -8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 -9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 -1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 -1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 -1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 -1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 -1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 -1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 -1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 -1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 -1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 -1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 -1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 -1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 -1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 -1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 -1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 -1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 -2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 -2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 -2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 -2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 -2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 -2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 -2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 -2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 -2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 -2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 -2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 -2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 -2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 -2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 -2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 -2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 +2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 +3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 +3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 +3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 +4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 +4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 +4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 +4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 +5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 +5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 +5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 +5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 +5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 +6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 +6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 +6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 +7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 +7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 +7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 +7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 +7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 +8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 +8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 +8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 +8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 +8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 +9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 +1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 +1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 +1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 +1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 +1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 +1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 +1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 +1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 +1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 +1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 +1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 +1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 +1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 +1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 +1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 +1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 +2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 +2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 +2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 +2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 +2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 +2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 +2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 +2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 +2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 +2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 +2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 +2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 +2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 +2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 +2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 +2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 2.988199999999999745e-01 1.062256999999999962e+01 2.304619999999999891e+00 \ No newline at end of file diff --git a/test/sasdataloader/data/2_42_1640_23.456895.csv b/test/sasdataloader/data/2_42_1640_23.456895.csv index 831fa6a9d..80562dff5 100644 --- a/test/sasdataloader/data/2_42_1640_23.456895.csv +++ b/test/sasdataloader/data/2_42_1640_23.456895.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 -3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 -3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 -3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 -4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 -4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 -4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 -4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 -5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 -5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 -5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 -5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 -5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 -6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 -6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 -6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 -7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 -7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 -7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 -7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 -7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 -8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 -8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 -8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 -8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 -8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 -9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 -1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 -1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 -1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 -1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 -1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 -1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 -1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 -1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 -1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 -1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 -1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 -1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 -1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 -1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 -1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 -1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 -2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 -2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 -2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 -2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 -2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 -2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 -2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 -2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 -2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 -2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 -2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 -2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 -2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 -2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 -2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 -2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 +2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 +3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 +3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 +3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 +4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 +4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 +4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 +4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 +5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 +5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 +5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 +5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 +5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 +6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 +6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 +6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 +7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 +7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 +7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 +7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 +7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 +8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 +8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 +8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 +8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 +8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 +9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 +1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 +1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 +1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 +1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 +1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 +1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 +1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 +1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 +1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 +1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 +1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 +1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 +1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 +1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 +1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 +1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 +2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 +2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 +2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 +2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 +2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 +2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 +2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 +2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 +2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 +2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 +2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 +2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 +2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 +2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 +2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 +2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 2.987299999999999955e-01 9.904920000000000613e+00 2.225410000000000110e+00 \ No newline at end of file diff --git a/test/sasdataloader/data/3_61_1640_23.748285.csv b/test/sasdataloader/data/3_61_1640_23.748285.csv index 59e4cde42..6e68726d8 100644 --- a/test/sasdataloader/data/3_61_1640_23.748285.csv +++ b/test/sasdataloader/data/3_61_1640_23.748285.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 -3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 -3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 -3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 -4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 -4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 -4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 -4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 -5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 -5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 -5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 -5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 -5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 -6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 -6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 -6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 -7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 -7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 -7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 -7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 -7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 -8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 -8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 -8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 -8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 -8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 -9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 -1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 -1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 -1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 -1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 -1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 -1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 -1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 -1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 -1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 -1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 -1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 -1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 -1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 -1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 -1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 -1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 -2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 -2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 -2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 -2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 -2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 -2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 -2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 -2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 -2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 -2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 -2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 -2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 -2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 -2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 -2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 -2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 +2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 +3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 +3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 +3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 +4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 +4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 +4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 +4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 +5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 +5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 +5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 +5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 +5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 +6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 +6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 +6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 +7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 +7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 +7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 +7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 +7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 +8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 +8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 +8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 +8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 +8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 +9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 +1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 +1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 +1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 +1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 +1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 +1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 +1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 +1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 +1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 +1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 +1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 +1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 +1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 +1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 +1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 +1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 +2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 +2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 +2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 +2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 +2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 +2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 +2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 +2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 +2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 +2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 +2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 +2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 +2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 +2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 +2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 +2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 2.987299999999999955e-01 9.537290000000000489e+00 2.183720000000000105e+00 \ No newline at end of file diff --git a/test/sasdataloader/data/4_103_1640_24.039675.csv b/test/sasdataloader/data/4_103_1640_24.039675.csv index daf8f80a8..c33506202 100644 --- a/test/sasdataloader/data/4_103_1640_24.039675.csv +++ b/test/sasdataloader/data/4_103_1640_24.039675.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 -3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 -3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 -3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 -4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 -4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 -4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 -4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 -5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 -5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 -5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 -5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 -5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 -6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 -6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 -6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 -7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 -7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 -7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 -7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 -7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 -8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 -8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 -8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 -8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 -8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 -9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 -1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 -1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 -1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 -1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 -1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 -1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 -1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 -1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 -1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 -1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 -1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 -1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 -1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 -1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 -1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 -1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 -2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 -2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 -2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 -2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 -2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 -2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 -2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 -2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 -2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 -2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 -2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 -2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 -2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 -2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 -2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 -2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 +2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 +3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 +3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 +3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 +4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 +4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 +4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 +4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 +5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 +5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 +5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 +5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 +5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 +6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 +6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 +6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 +7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 +7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 +7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 +7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 +7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 +8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 +8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 +8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 +8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 +8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 +9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 +1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 +1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 +1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 +1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 +1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 +1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 +1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 +1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 +1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 +1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 +1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 +1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 +1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 +1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 +1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 +1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 +2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 +2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 +2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 +2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 +2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 +2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 +2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 +2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 +2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 +2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 +2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 +2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 +2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 +2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 +2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 +2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 2.988600000000000145e-01 9.559969999999999857e+00 2.186319999999999819e+00 \ No newline at end of file diff --git a/test/sasdataloader/data/5_312_1640_24.331065.csv b/test/sasdataloader/data/5_312_1640_24.331065.csv index 2f696f3b5..17968ec9e 100644 --- a/test/sasdataloader/data/5_312_1640_24.331065.csv +++ b/test/sasdataloader/data/5_312_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 -3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 -3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 -3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 -4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 -4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 -4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 -4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 -5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 -5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 -5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 -5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 -5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 -6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 -6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 -6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 -7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 -7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 -7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 -7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 -7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 -8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 -8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 -8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 -8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 -8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 -9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 -1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 -1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 -1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 -1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 -1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 -1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 -1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 -1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 -1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 -1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 -1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 -1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 -1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 -1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 -1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 -1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 -2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 -2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 -2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 -2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 -2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 -2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 -2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 -2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 -2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 -2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 -2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 -2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 -2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 -2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 -2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 -2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 +2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 +3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 +3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 +3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 +4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 +4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 +4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 +4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 +5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 +5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 +5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 +5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 +5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 +6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 +6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 +6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 +7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 +7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 +7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 +7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 +7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 +8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 +8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 +8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 +8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 +8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 +9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 +1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 +1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 +1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 +1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 +1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 +1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 +1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 +1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 +1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 +1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 +1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 +1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 +1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 +1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 +1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 +1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 +2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 +2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 +2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 +2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 +2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 +2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 +2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 +2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 +2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 +2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 +2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 +2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 +2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 +2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 +2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 +2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 2.988600000000000145e-01 9.385640000000000427e+00 2.166290000000000049e+00 \ No newline at end of file diff --git a/test/sasdataloader/data/6_1270_1640_24.331065.csv b/test/sasdataloader/data/6_1270_1640_24.331065.csv index e7dfab999..72272ed89 100644 --- a/test/sasdataloader/data/6_1270_1640_24.331065.csv +++ b/test/sasdataloader/data/6_1270_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 -3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 -3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 -3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 -4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 -4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 -4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 -4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 -5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 -5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 -5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 -5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 -5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 -6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 -6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 -6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 -7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 -7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 -7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 -7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 -7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 -8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 -8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 -8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 -8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 -8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 -9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 -1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 -1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 -1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 -1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 -1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 -1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 -1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 -1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 -1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 -1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 -1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 -1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 -1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 -1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 -1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 -1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 -2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 -2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 -2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 -2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 -2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 -2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 -2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 -2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 -2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 -2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 -2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 -2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 -2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 -2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 -2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 -2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 -2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 +2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 +3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 +3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 +3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 +4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 +4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 +4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 +4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 +5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 +5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 +5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 +5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 +5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 +6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 +6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 +6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 +7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 +7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 +7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 +7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 +7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 +8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 +8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 +8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 +8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 +8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 +9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 +1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 +1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 +1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 +1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 +1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 +1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 +1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 +1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 +1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 +1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 +1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 +1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 +1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 +1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 +1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 +1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 +2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 +2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 +2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 +2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 +2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 +2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 +2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 +2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 +2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 +2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 +2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 +2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 +2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 +2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 +2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 +2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 +2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 diff --git a/test/sasdataloader/data/nxcansas_1Dand2D_multisasdata.h5 b/test/sasdataloader/data/nxcansas_1Dand2D_multisasdata.h5 index 4002fcb7c..125c90633 100644 Binary files a/test/sasdataloader/data/nxcansas_1Dand2D_multisasdata.h5 and b/test/sasdataloader/data/nxcansas_1Dand2D_multisasdata.h5 differ diff --git a/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry.h5 b/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry.h5 index 220ae520b..fdce32035 100644 Binary files a/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry.h5 and b/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry.h5 differ diff --git a/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry_multisasdata.h5 b/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry_multisasdata.h5 index 917a5f4f9..fee4255d5 100644 Binary files a/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry_multisasdata.h5 and b/test/sasdataloader/data/nxcansas_1Dand2D_multisasentry_multisasdata.h5 differ diff --git a/test/sasdataloader/reference/nxcansas_1Dand2D_multisasdata.txt b/test/sasdataloader/reference/nxcansas_1Dand2D_multisasdata.txt index 8f13d2536..ad56786dd 100644 --- a/test/sasdataloader/reference/nxcansas_1Dand2D_multisasdata.txt +++ b/test/sasdataloader/reference/nxcansas_1Dand2D_multisasdata.txt @@ -23,7 +23,7 @@ Collimation: Length: None Detector: Name: front-detector - Distance: 2845.260009765625 mm + Distance: 2845.26 mm Offset: None Orientation: None Beam center: None @@ -31,7 +31,7 @@ Detector: Slit length: None Detector: Name: rear-detector - Distance: 4385.27978515625 mm + Distance: 4385.28 mm Offset: None Orientation: None Beam center: None diff --git a/test/sasdataloader/reference/nxcansas_1Dand2D_multisasentry.txt b/test/sasdataloader/reference/nxcansas_1Dand2D_multisasentry.txt index 3d375dcf7..9353db922 100644 --- a/test/sasdataloader/reference/nxcansas_1Dand2D_multisasentry.txt +++ b/test/sasdataloader/reference/nxcansas_1Dand2D_multisasentry.txt @@ -23,7 +23,7 @@ Collimation: Length: None Detector: Name: front-detector - Distance: 2845.260009765625 mm + Distance: 2845.26 mm Offset: None Orientation: None Beam center: None @@ -31,7 +31,7 @@ Detector: Slit length: None Detector: Name: rear-detector - Distance: 4385.27978515625 mm + Distance: 4385.28 mm Offset: None Orientation: None Beam center: None @@ -70,7 +70,7 @@ Collimation: Length: None Detector: Name: front-detector - Distance: 2845.260009765625 mm + Distance: 2845.26 mm Offset: None Orientation: None Beam center: None @@ -78,7 +78,7 @@ Detector: Slit length: None Detector: Name: rear-detector - Distance: 4385.27978515625 mm + Distance: 4385.28 mm Offset: None Orientation: None Beam center: None diff --git a/test/sasdataloader/utest_data_names.py b/test/sasdataloader/utest_data_names.py new file mode 100644 index 000000000..11dcb6773 --- /dev/null +++ b/test/sasdataloader/utest_data_names.py @@ -0,0 +1,43 @@ +""" +Tests for generation of unique, but reproducible, names for data quantities +""" + +import os + +import pytest + +from sasdata.data import SasData +from sasdata.temp_ascii_reader import load_data_default_params +from sasdata.temp_hdf5_reader import load_data as hdf_load_data +from sasdata.temp_xml_reader import load_data as xml_load_data + + +def local_load(path: str) -> SasData: + """Get local file path""" + base = os.path.join(os.path.dirname(__file__), path) + if os.path.exists(f"{base}.h5"): + return hdf_load_data(f"{base}.h5").values() + if os.path.exists(f"{base}.xml"): + return xml_load_data(f"{base}.xml").values() + if os.path.exists(f"{base}.txt"): + return load_data_default_params(f"{base}.txt") + assert False + + +test_file_names = [ + ("ascii_test_1", "::Q:3KrS58TPgclJ1rgyr0VQp3"), + ("ISIS_1_1", "TK49 c10_SANS:79680:Q:4TghWEoJi6xxhyeDXhS751"), + ("cansas1d", "Test title:1234:Q:440tNBqdx9jvci6CgjmrmD"), + ("MAR07232_rest", "MAR07232_rest_out.dat:2:/sasentry01/sasdata01/Qx:2Y0qTTb054KSJnJaJv0rFl"), + ("simpleexamplefile", "::/sasentry01/sasdata01/Q:uoHMeB8mukElC1uLCy7Sd"), +] + + +@pytest.mark.names +@pytest.mark.parametrize("x", test_file_names) +def test_quantity_name(x): + (f, expected) = x + data = [v for v in local_load(f"data/{f}")][0] + if data.metadata.title is not None: + assert data.abscissae.unique_id.startswith(data.metadata.title) + assert data.abscissae.unique_id == expected diff --git a/test/slicers/__init__.py b/test/slicers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/slicers/meshes_for_testing.py b/test/slicers/meshes_for_testing.py new file mode 100644 index 000000000..7e39ec75c --- /dev/null +++ b/test/slicers/meshes_for_testing.py @@ -0,0 +1,115 @@ +""" +Meshes used in testing along with some expected values +""" + +import numpy as np + +from sasdata.slicing.meshes.mesh import Mesh +from sasdata.slicing.meshes.meshmerge import meshmerge +from sasdata.slicing.meshes.voronoi_mesh import voronoi_mesh + +coords = np.arange(-4, 5) +grid_mesh = voronoi_mesh(*np.meshgrid(coords, coords)) + + +item_1 = np.array([ + [-3.5, -0.5], + [-0.5, 3.5], + [ 0.5, 3.5], + [ 3.5, -0.5], + [ 0.0, 1.5]], dtype=float) + +item_2 = np.array([ + [-1.0, -2.0], + [-2.0, -2.0], + [-2.0, -1.0], + [-1.0, -1.0]], dtype=float) + +mesh_points = np.concatenate((item_1, item_2), axis=0) +cells = [[0,1,2,3,4],[5,6,7,8]] + +shape_mesh = Mesh(mesh_points, cells) + +# Subset of the mappings that meshmerge should include +# This can be read off the plots generated below + + +expected_shape_mappings = [ + (100, -1), + (152, -1), + (141, -1), + (172, -1), + (170, -1), + (0, -1), + (1, -1), + (8, 0), + (9, 0), + (37, 0), + (83, 0), + (190, 1), + (186, 1), + (189, 1), + (193, 1) +] + +expected_grid_mappings = [ + (89, 0), + (90, 1), + (148, 16), + (175, 35), + (60, 47), + (44, 47), + (80, 60) +] + +# +# Mesh location tests +# + +location_test_mesh_points = np.array([ + [0, 0], # 0 + [0, 1], # 1 + [0, 2], # 2 + [1, 0], # 3 + [1, 1], # 4 + [1, 2], # 5 + [2, 0], # 6 + [2, 1], # 7 + [2, 2]], dtype=float) + +location_test_mesh_cells = [ + [0, 1, 4, 3], + [1, 2, 5, 4], + [3, 4, 7, 6], + [4, 5, 8, 7]] + +location_test_mesh = Mesh(location_test_mesh_points, location_test_mesh_cells) + +test_coords = 0.25 + 0.5*np.arange(4) +location_test_points_x, location_test_points_y = np.meshgrid(test_coords, test_coords) + +if __name__ == "__main__": + + import matplotlib.pyplot as plt + + combined_mesh, _, _ = meshmerge(grid_mesh, shape_mesh) + + plt.figure() + combined_mesh.show(actually_show=False, show_labels=True, color='k') + grid_mesh.show(actually_show=False, show_labels=True, color='r') + + plt.xlim([-5, 5]) + plt.ylim([-5, 5]) + + plt.figure() + combined_mesh.show(actually_show=False, show_labels=True, color='k') + shape_mesh.show(actually_show=False, show_labels=True, color='r') + + plt.xlim([-5, 5]) + plt.ylim([-5, 5]) + + plt.figure() + location_test_mesh.show(actually_show=False, show_labels=True) + plt.scatter(location_test_points_x, location_test_points_y) + + plt.show() diff --git a/test/slicers/utest_meshmerge.py b/test/slicers/utest_meshmerge.py new file mode 100644 index 000000000..a4a1645c2 --- /dev/null +++ b/test/slicers/utest_meshmerge.py @@ -0,0 +1,31 @@ +""" +Tests for mesh merging operations. + +It's pretty hard to test componentwise, but we can do some tests of the general behaviour +""" + +from sasdata.slicing.meshes.meshmerge import meshmerge +from test.slicers.meshes_for_testing import expected_grid_mappings, expected_shape_mappings, grid_mesh, shape_mesh + + +def test_meshmerge_mappings(): + """ Test the output of meshmerge is correct + + IMPORTANT IF TESTS FAIL!!!... The docs for scipy.spatial.Voronoi and Delaunay + say that the ordering of faces might depend on machine precession. Thus, these + tests might not be reliable... we'll see how they play out + """ + + import sys + if sys.platform == "darwin": + # It does indeed rely on machine precision, only run on windows and linux + return + + combined_mesh, grid_mappings, shape_mappings = meshmerge(grid_mesh, shape_mesh) + + for triangle_cell, grid_cell in expected_grid_mappings: + assert grid_mappings[triangle_cell] == grid_cell + + for triangle_cell, shape_cell in expected_shape_mappings: + assert shape_mappings[triangle_cell] == shape_cell + diff --git a/test/slicers/utest_point_assignment.py b/test/slicers/utest_point_assignment.py new file mode 100644 index 000000000..a82f1c790 --- /dev/null +++ b/test/slicers/utest_point_assignment.py @@ -0,0 +1,5 @@ + + + +def test_location_assignment(): + pass diff --git a/test/transforms/utest_NDrebin.py b/test/transforms/utest_NDrebin.py new file mode 100644 index 000000000..e5365a95d --- /dev/null +++ b/test/transforms/utest_NDrebin.py @@ -0,0 +1,272 @@ +import time + +import numpy as np +from matplotlib import pyplot as plt + +from sasdata.transforms.NDrebin import NDRebin + + +def test_1D_exact(show_plots: bool): + # Parameters for the Gaussian function + mu = 0.0 # Mean + sigma = 1.0 # Standard deviation + + # fiducial + xreal = np.linspace(-5, 5, 11) + Ireal = np.exp(-((xreal - mu) ** 2) / (2 * sigma ** 2)) / (sigma * np.sqrt(2 * np.pi)) + + # rebin to the exact same bins + rebin = NDRebin(Ireal, xreal, + lower=-5.5, upper=5.5, num_bins=11) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + + assert all(Ibin == Ireal) + assert all(qbin[0] == xreal) + + # Plot + if show_plots: + plt.figure() + plt.plot(qbin[0], Ibin, 'o', linewidth=2, label='bin') + plt.plot(xreal, Ireal, 'k-', linewidth=2, label='exact') + + plt.xlabel('x') + plt.ylabel('I') + plt.legend() + plt.tight_layout() + plt.show() + + + # rebin to the exact same bins with fractional + rebin = NDRebin(Ireal, xreal, + lower=-5.5, upper=5.5, num_bins=11, fractional=True) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + + assert all(Ibin == Ireal) + + # Plot + if show_plots: + plt.figure() + plt.plot(qbin[0], Ibin, 'o', linewidth=2, label='fractional bin') + plt.plot(xreal, Ireal, 'k-', linewidth=2, label='exact') + + plt.xlabel('x') + plt.ylabel('I') + plt.legend() + plt.tight_layout() + plt.show() + + + +def test_2D(show_plots: bool): + # Parameters of the 2D Gaussian + mu = np.array([0.15, 0.0, 0.0]) # Mean vector + sigma = np.array([0.015, 0.055, 0.05]) # Std dev in x and y + noise = 0. + SDD = 2.7 + k_0 = 2*np.pi/5 + pix_x = 1./128. + pix_y = 1./128. + + # Generate our 2D detector grid + x = np.arange(-64,64)*pix_x + y = np.arange(-64,64)*pix_y + + [xmesh, ymesh] = np.meshgrid(x, y) + + # calculate qx, qy, qz + qx = k_0*xmesh/np.sqrt(xmesh**2+ymesh**2+SDD**2) + qy = k_0*ymesh/np.sqrt(xmesh**2+ymesh**2+SDD**2) + qz = k_0-k_0*SDD/np.sqrt(xmesh**2+ymesh**2+SDD**2) + + # qmat + qmat0 = np.stack([qx,qy,qz], axis=2) + + # now rotate about y + angle_list = np.pi/180*np.linspace(-15,15,int(30/.25)) + qmat = np.zeros((len(x), len(y), len(angle_list), 3)) + for ind in range(len(angle_list)): + new_qmat = np.copy(qmat0) + new_qmat[:,:,0] = np.cos(angle_list[ind])*qmat0[:,:,0] - \ + np.sin(angle_list[ind])*qmat0[:,:,2] + new_qmat[:,:,2] = np.sin(angle_list[ind])*qmat0[:,:,0] + \ + np.cos(angle_list[ind])*qmat0[:,:,2] + qmat[:,:,ind,:] = qmat0 + + + # Evaluate Gaussian: + # G(x,y) = (1/(2πσxσy)) * exp(-[(x-μx)^2/(2σx^2) + (y-μy)^2/(2σy^2)]) + I_2D = ( + np.exp( + -((qmat[:,:,:,0] - mu[0])**2) / (2 * sigma[0]**2) + -((qmat[:,:,:,1] - mu[1])**2) / (2 * sigma[1]**2) + -((qmat[:,:,:,2] - mu[2])**2) / (2 * sigma[2]**2) + ) / + (2 * np.pi * sigma[0] * sigma[1] * sigma[2]) + ) + + # Add uniform noise + I_2D = I_2D - noise + 2 * noise * np.random.rand(*I_2D.shape) + + # Rebin in 2D. + # You can choose finite steps for both x and y depending on how you want bins defined. + start = time.perf_counter() + rebin = NDRebin(I_2D, qmat, + step_size=[0.006, 0.006, np.inf]) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + end = time.perf_counter() + print(f"Computed {qmat.size/3} points in {end - start:.6f} seconds") + + start = time.perf_counter() + rebin = NDRebin(I_2D, qmat, + step_size=[0.0035, 0.0035, np.inf], + fractional=True) + rebin.run() + Ibin2 = rebin.binned_data + qbin2 = rebin.bin_centers_list + end = time.perf_counter() + print(f"Computed {qmat.size/3} points with fractional binning in {end - start:.6f} seconds") + + + if show_plots: + # Fiducial 2D + [xmesh, ymesh] = np.meshgrid(qbin2[0], qbin2[1]) + Ireal = ( + np.exp( + -((xmesh - mu[0])**2) / (2 * sigma[0]**2) + -((ymesh - mu[1])**2) / (2 * sigma[1]**2) + ) / + (2 * np.pi * sigma[0] * sigma[1]) + ) + + # Plot a 1D slice of the binned data along x (y bins aggregated) + plt.figure(figsize=(4,8)) + + plt.subplot(3, 1, 1) + plt.pcolormesh(qbin[0], qbin[1], np.squeeze(Ibin.T), shading='nearest') + plt.xlabel('x') + plt.ylabel('y') + plt.title('sum') + plt.colorbar() + plt.tight_layout() + + plt.subplot(3, 1, 2) + plt.pcolormesh(qbin2[0], qbin2[1], np.squeeze(Ibin2.T), shading='nearest') + plt.xlabel('x') + plt.ylabel('y') + plt.title('sum') + plt.colorbar() + plt.tight_layout() + + plt.subplot(3, 1, 3) + plt.pcolormesh(xmesh, ymesh, Ireal, shading='nearest') + plt.xlabel('x') + plt.ylabel('y') + plt.title('real') + plt.colorbar() + plt.tight_layout() + plt.show() + + +def test_syntax(): + # test syntax + Ndims = 4 + Nvals = int(1e4) + qmat = np.random.rand(Ndims, Nvals) + Imat = np.random.rand(Nvals) + + rebin = NDRebin(Imat, qmat, + step_size=0.1*np.random.rand(Ndims)+0.05, + lower=0.1*np.random.rand(Ndims)+0.0, + upper=0.1*np.random.rand(Ndims)+0.9) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + + + # test syntax + Ndims = 2 + Nvals = int(1e4) + qmat = np.random.rand(Ndims, 100, Nvals) + Imat = np.random.rand(100, Nvals) + Imat_errs = np.random.rand(100, Nvals) + + rebin = NDRebin(Imat, qmat, + data_errs = Imat_errs, + num_bins=[10,20], + axes = np.eye(2), + fractional=True) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + Ibin_errs = rebin.binned_data_errs + bins_list = rebin.bins_list + step_size = rebin.step_size + num_bins = rebin.num_bins + + +# test ND gaussian +def test_ND(): + Ndims = 4 + mu = np.zeros(Ndims) # Mean vector + sigma = np.random.rand(Ndims) # Std dev in x and y + noise = 0.1 + Nvals = int(1e6) + + # Generate random points (x, y) in a 2D square + qmat = -5 + 10 * np.random.rand(Ndims, Nvals) + + # Evaluate 2D Gaussian: + # G(x,y) = (1/(2πσxσy)) * exp(-[(x-μx)^2/(2σx^2) + (y-μy)^2/(2σy^2)]) + exp_op = np.zeros(Nvals) + sigma_tot = 1 + for ind in range(Ndims): + exp_op = exp_op -((qmat[ind,:] - mu[ind])**2) / (2 * sigma[ind]**2) + sigma_tot = sigma_tot * sigma[ind] + I_ND = ( + np.exp(exp_op) / + (2 * np.pi * sigma_tot) + ) + + # Add uniform noise + I_ND = I_ND - noise + 2 * noise * np.random.rand(1,Nvals) + + # Rebin in 2D. + # You can choose finite steps for both x and y depending on how you want bins defined. + start = time.perf_counter() + rebin = NDRebin(I_ND, qmat, + step_size=0.2*np.random.rand(Ndims)+0.1, + lower=[1,2,3,0], + upper=[9,8,7,9.5] + ) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + end = time.perf_counter() + print(f"Computed {Nvals} points in {end - start:.6f} seconds") + + start = time.perf_counter() + rebin = NDRebin(I_ND, qmat, + step_size=0.2*np.random.rand(Ndims)+0.1, + lower=[1,2,3,0], + upper=[9,8,7,9.5], + fractional=True + ) + rebin.run() + Ibin = rebin.binned_data + qbin = rebin.bin_centers_list + end = time.perf_counter() + print(f"Computed {Nvals} points with fractional binning in {end - start:.6f} seconds") + + + +if __name__ == "__main__": + test_1D_exact(show_plots=True) + test_2D(show_plots=True) + test_syntax() + test_ND() diff --git a/test/transforms/utest_interpolation.py b/test/transforms/utest_interpolation.py index bfb0e54a3..9ac701ceb 100644 --- a/test/transforms/utest_interpolation.py +++ b/test/transforms/utest_interpolation.py @@ -1,101 +1,101 @@ -from collections.abc import Callable - -import numpy as np -import pytest -from matplotlib import pyplot as plt -from numpy.typing import ArrayLike - -from sasdata.quantities import units -from sasdata.quantities.plotting import quantity_plot -from sasdata.quantities.quantity import NamedQuantity, Quantity -from sasdata.transforms.rebinning import InterpolationOptions, calculate_interpolation_matrix_1d - -test_functions = [ - lambda x: x**2, - lambda x: 2*x, - lambda x: x**3 -] - -test_interpolation_orders = [ - InterpolationOptions.LINEAR, - InterpolationOptions.CUBIC -] - - -@pytest.mark.parametrize("fun", test_functions) -@pytest.mark.parametrize("order", test_interpolation_orders) -def test_interpolate_matrix_inside(fun: Callable[[Quantity[ArrayLike]], Quantity[ArrayLike]], order: InterpolationOptions, show_plots: bool): - original_points = NamedQuantity("x_base", np.linspace(-10,10, 31), units.meters) - test_points = NamedQuantity("x_test", np.linspace(-5, 5, 11), units.meters) - - - mapping, _ = calculate_interpolation_matrix_1d(original_points, test_points, order=order) - - y_original = fun(original_points) - y_test = y_original @ mapping - y_expected = fun(test_points) - - test_units = y_expected.units - - y_values_test = y_test.in_units_of(test_units) - y_values_expected = y_expected.in_units_of(test_units) - - if show_plots: - print(y_values_test) - print(y_values_expected) - - quantity_plot(original_points, y_original) - quantity_plot(test_points, y_test) - quantity_plot(test_points, y_expected) - plt.show() - - assert len(y_values_test) == len(y_values_expected) - - for t, e in zip(y_values_test, y_values_expected): - assert t == pytest.approx(e, abs=2) - - -@pytest.mark.parametrize("fun", test_functions) -@pytest.mark.parametrize("order", test_interpolation_orders) -def test_interpolate_different_units(fun: Callable[[Quantity[ArrayLike]], Quantity[ArrayLike]], order: InterpolationOptions, show_plots: bool): - original_points = NamedQuantity("x_base", np.linspace(-10,10, 107), units.meters) - test_points = NamedQuantity("x_test", np.linspace(-5000, 5000, 11), units.millimeters) - - mapping, _ = calculate_interpolation_matrix_1d(original_points, test_points, order=order) - - y_original = fun(original_points) - y_test = y_original @ mapping - y_expected = fun(test_points) - - test_units = y_expected.units - - y_values_test = y_test.in_units_of(test_units) - y_values_expected = y_expected.in_units_of(test_units) - - if show_plots: - print(y_values_test) - print(y_test.in_si()) - print(y_values_expected) - - plt.plot(original_points.in_si(), y_original.in_si()) - plt.plot(test_points.in_si(), y_test.in_si(), "x") - plt.plot(test_points.in_si(), y_expected.in_si(), "o") - plt.show() - - assert len(y_values_test) == len(y_values_expected) - - for t, e in zip(y_values_test, y_values_expected): - assert t == pytest.approx(e, rel=5e-2) - -@pytest.mark.parametrize("order", test_interpolation_orders) -def test_linear(order: InterpolationOptions): - """ Test linear interpolation between two points""" - x_and_y = NamedQuantity("x_base", np.linspace(-10, 10, 2), units.meters) - new_x = NamedQuantity("x_test", np.linspace(-5000, 5000, 101), units.millimeters) - - mapping, _ = calculate_interpolation_matrix_1d(x_and_y, new_x, order=order) - - linear_points = x_and_y @ mapping - - for t, e in zip(new_x.in_si(), linear_points.in_si()): - assert t == pytest.approx(e, rel=1e-3) +from collections.abc import Callable + +import numpy as np +import pytest +from matplotlib import pyplot as plt +from numpy.typing import ArrayLike + +from sasdata.quantities import units +from sasdata.quantities.plotting import quantity_plot +from sasdata.quantities.quantity import NamedQuantity, Quantity +from sasdata.transforms.rebinning import InterpolationOptions, calculate_interpolation_matrix_1d + +test_functions = [ + lambda x: x**2, + lambda x: 2*x, + lambda x: x**3 +] + +test_interpolation_orders = [ + InterpolationOptions.LINEAR, + InterpolationOptions.CUBIC +] + + +@pytest.mark.parametrize("fun", test_functions) +@pytest.mark.parametrize("order", test_interpolation_orders) +def test_interpolate_matrix_inside(fun: Callable[[Quantity[ArrayLike]], Quantity[ArrayLike]], order: InterpolationOptions, show_plots: bool): + original_points = NamedQuantity("x_base", np.linspace(-10,10, 31), units.meters) + test_points = NamedQuantity("x_test", np.linspace(-5, 5, 11), units.meters) + + + mapping, _ = calculate_interpolation_matrix_1d(original_points, test_points, order=order) + + y_original = fun(original_points) + y_test = y_original @ mapping + y_expected = fun(test_points) + + test_units = y_expected.units + + y_values_test = y_test.in_units_of(test_units) + y_values_expected = y_expected.in_units_of(test_units) + + if show_plots: + print(y_values_test) + print(y_values_expected) + + quantity_plot(original_points, y_original) + quantity_plot(test_points, y_test) + quantity_plot(test_points, y_expected) + plt.show() + + assert len(y_values_test) == len(y_values_expected) + + for t, e in zip(y_values_test, y_values_expected): + assert t == pytest.approx(e, abs=2) + + +@pytest.mark.parametrize("fun", test_functions) +@pytest.mark.parametrize("order", test_interpolation_orders) +def test_interpolate_different_units(fun: Callable[[Quantity[ArrayLike]], Quantity[ArrayLike]], order: InterpolationOptions, show_plots: bool): + original_points = NamedQuantity("x_base", np.linspace(-10,10, 107), units.meters) + test_points = NamedQuantity("x_test", np.linspace(-5000, 5000, 11), units.millimeters) + + mapping, _ = calculate_interpolation_matrix_1d(original_points, test_points, order=order) + + y_original = fun(original_points) + y_test = y_original @ mapping + y_expected = fun(test_points) + + test_units = y_expected.units + + y_values_test = y_test.in_units_of(test_units) + y_values_expected = y_expected.in_units_of(test_units) + + if show_plots: + print(y_values_test) + print(y_test.in_si()) + print(y_values_expected) + + plt.plot(original_points.in_si(), y_original.in_si()) + plt.plot(test_points.in_si(), y_test.in_si(), "x") + plt.plot(test_points.in_si(), y_expected.in_si(), "o") + plt.show() + + assert len(y_values_test) == len(y_values_expected) + + for t, e in zip(y_values_test, y_values_expected): + assert t == pytest.approx(e, rel=5e-2) + +@pytest.mark.parametrize("order", test_interpolation_orders) +def test_linear(order: InterpolationOptions): + """ Test linear interpolation between two points""" + x_and_y = NamedQuantity("x_base", np.linspace(-10, 10, 2), units.meters) + new_x = NamedQuantity("x_test", np.linspace(-5000, 5000, 101), units.millimeters) + + mapping, _ = calculate_interpolation_matrix_1d(x_and_y, new_x, order=order) + + linear_points = x_and_y @ mapping + + for t, e in zip(new_x.in_si(), linear_points.in_si()): + assert t == pytest.approx(e, rel=1e-3) diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv index 65305e2ab..8e9c70665 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/10_1000_1340_10.csv @@ -1,105 +1,105 @@ -3.624299999999999744e-02 7.295645247999999583e+01 1.637502872666669873e+01 -4.068929999999999769e-02 3.496757764333329987e+01 1.132330254166670080e+01 -4.510000000000000120e-02 2.871506291000000033e+01 8.366418418333330109e+00 -4.957960000000000145e-02 3.062621534000000167e+01 6.807088010000000189e+00 -5.414959999999999912e-02 1.698840335499999910e+01 5.315930135000000334e+00 -5.867460000000000037e-02 1.810732352000000134e+01 4.582343003333329889e+00 -6.313670000000000393e-02 1.758858145166669829e+01 3.753068668333329860e+00 -6.771770000000000567e-02 1.874808681500000063e+01 3.129801861666670071e+00 -7.237100000000000477e-02 1.219239694000000007e+01 2.701832888333330018e+00 -7.692330000000000001e-02 1.502033604000000011e+01 2.415586504999999828e+00 -8.164470000000000061e-02 1.051882241166670084e+01 2.003147743333329789e+00 -8.639470000000000482e-02 1.266539752666670005e+01 1.813845073333330005e+00 -9.106759999999999855e-02 1.164225125833329955e+01 1.590423455000000041e+00 -9.573710000000000553e-02 9.248378555000000389e+00 1.453449206666669991e+00 -1.004952999999999957e-01 1.082198768499999986e+01 1.296534581666670016e+00 -1.052397000000000055e-01 9.754544071666670035e+00 1.192202876666669908e+00 -1.099886000000000058e-01 9.770793396666670461e+00 1.074958141666670031e+00 -1.148422000000000054e-01 9.667035006666669261e+00 9.803857316666669819e-01 -1.197769999999999946e-01 8.381104240000000871e+00 8.964596183333329860e-01 -1.247698000000000002e-01 7.884219706666669936e+00 8.320707283333329540e-01 -1.298370000000000080e-01 8.175124921666670375e+00 7.497416000000000080e-01 -1.349077999999999944e-01 7.421197476666669957e+00 7.207336583333330271e-01 -1.399244000000000043e-01 8.545903931666670061e+00 6.648524133333330033e-01 -1.450733999999999913e-01 7.172791390000000433e+00 6.314494133333330428e-01 -1.502658000000000049e-01 6.110795001666669890e+00 5.924928833333330536e-01 -1.556062000000000001e-01 7.011488443333329990e+00 5.430119199999999813e-01 -1.572456999999999883e-01 7.121472013333329798e+00 1.740741033333330079e-01 -1.609471000000000096e-01 7.438929439999999893e+00 5.263131250000000483e-01 -1.661874999999999880e-01 6.540084590000000198e+00 4.946959550000000205e-01 -1.706292000000000086e-01 6.367655253333330378e+00 1.455746566666669961e-01 -1.715615000000000057e-01 6.476111691666670112e+00 4.707941449999999972e-01 -1.771270000000000067e-01 5.720913878333329983e+00 4.355610400000000104e-01 -1.827315999999999940e-01 6.117868691666670244e+00 4.186226383333330192e-01 -1.842428999999999872e-01 5.857041180000000402e+00 1.254778649999999940e-01 -1.883173999999999959e-01 5.849837826666670182e+00 4.069392433333329784e-01 -1.939794999999999991e-01 5.447672994999999574e+00 3.927526633333329742e-01 -1.982414999999999872e-01 5.391186461666669594e+00 1.085076650000000031e-01 -1.997663000000000078e-01 5.394637556666670442e+00 3.662608233333329855e-01 -2.055810999999999888e-01 5.784545713333329786e+00 3.603836316666669815e-01 -2.114655000000000007e-01 4.574601945000000391e+00 3.312713700000000094e-01 -2.120113000000000136e-01 5.084515549999999884e+00 9.927742500000000248e-02 -2.161903000000000019e-01 4.516358434999999893e+00 4.168106166666670220e-01 -2.259823999999999999e-01 4.782964421666670241e+00 8.791053666666670541e-02 -2.397845000000000115e-01 4.501217386666669817e+00 8.259429166666669431e-02 -2.537096999999999825e-01 4.179436571666670375e+00 7.562756833333329765e-02 -2.676275000000000182e-01 3.979478888333329856e+00 6.987285499999999761e-02 -2.817857999999999752e-01 3.702226940000000077e+00 6.482911333333329917e-02 -2.956398000000000081e-01 3.605992423333329810e+00 6.203536333333330155e-02 -3.099044000000000243e-01 3.377018353333329781e+00 5.670042833333330257e-02 -3.240645999999999805e-01 3.095807218333329836e+00 5.498817999999999762e-02 -3.388027000000000122e-01 2.841171323333330001e+00 4.897826333333329951e-02 -3.539140000000000064e-01 2.795649415000000193e+00 4.845330666666670255e-02 -3.687090000000000090e-01 2.622854690000000044e+00 4.475559833333329907e-02 -3.839813000000000254e-01 2.527809641666669993e+00 4.273165666666670082e-02 -3.988975000000000160e-01 2.232305030000000023e+00 4.094381166666669764e-02 -4.106734000000000218e-01 2.129986383333330124e+00 4.154637366666669857e-02 -4.136514000000000024e-01 2.084593566666669950e+00 3.891198166666669928e-02 -4.290628000000000219e-01 1.988620215000000080e+00 3.594587333333330165e-02 -4.295516999999999808e-01 1.964928603499999982e+00 3.519640899999999795e-02 -4.446014999999999828e-01 1.750614441666670018e+00 3.497378000000000292e-02 -4.466716000000000020e-01 1.709819834666669980e+00 3.112847050000000157e-02 -4.603325999999999807e-01 1.676685876666669905e+00 3.265084166666670090e-02 -4.685437000000000074e-01 1.638395569999999912e+00 3.101072850000000103e-02 -4.764860000000000206e-01 1.575855291666669933e+00 3.097528500000000171e-02 -4.834083000000000130e-01 1.443926158166670026e+00 2.913516383333330032e-02 -4.923204999999999942e-01 1.443778989999999984e+00 3.072023333333330150e-02 -5.046621000000000024e-01 1.382474827333330047e+00 2.709115466666670025e-02 -5.082708000000000226e-01 1.368563626666670086e+00 2.832584499999999880e-02 -5.230728999999999518e-01 1.117650907000000027e+00 2.515010599999999846e-02 -5.249162000000000550e-01 1.271594368333329950e+00 2.652784333333330080e-02 -5.416775999999999813e-01 1.132208539999999930e+00 2.601087833333329963e-02 -5.444001000000000534e-01 1.080469498666670081e+00 2.559191900000000117e-02 -5.583067999999999920e-01 1.032465565000000085e+00 2.510816333333330125e-02 -5.612614999999999688e-01 1.012286258500000091e+00 2.336018449999999885e-02 -5.753956999999999544e-01 9.763539783333330391e-01 2.332539999999999961e-02 -5.834072999999999620e-01 8.965217239999999643e-01 2.303063099999999933e-02 -5.927398999999999862e-01 9.096560916666670549e-01 2.248173499999999922e-02 -6.005747000000000169e-01 8.250965611666669641e-01 2.186496933333329992e-02 -6.099058000000000535e-01 8.168162183333329551e-01 2.170944500000000082e-02 -6.218546000000000351e-01 7.414260915000000507e-01 2.121375600000000028e-02 -6.275003000000000108e-01 7.444278466666669480e-01 2.046154333333330064e-02 -6.412082999999999533e-01 6.366966366666669819e-01 1.883217216666669899e-02 -6.447154999999999969e-01 6.422991433333330447e-01 2.075286000000000144e-02 -6.655497999999999692e-01 5.866493959999999896e-01 1.815403650000000160e-02 -6.843702000000000396e-01 5.515869356666670553e-01 2.025276583333330063e-02 -7.058105999999999547e-01 4.475886111666669831e-01 1.701240433333330027e-02 -7.258693999999999980e-01 4.775394179999999933e-01 1.840697383333329828e-02 -7.490480000000000471e-01 4.047520649999999942e-01 1.505153366666669990e-02 -7.720086999999999922e-01 3.731668894999999875e-01 1.706827766666670076e-02 -7.920989999999999975e-01 3.681129878333330163e-01 1.507231049999999996e-02 -8.155097999999999514e-01 3.208610430000000124e-01 1.529166149999999953e-02 -8.364475000000000104e-01 2.962226738333330056e-01 1.456896033333330079e-02 -8.619377000000000288e-01 2.765821119999999911e-01 1.371801400000000060e-02 -8.846403999999999934e-01 2.799105873333330163e-01 1.446314666666670065e-02 -9.081462000000000145e-01 2.318482950000000098e-01 1.260493333333330065e-02 -9.334447000000000161e-01 2.175556724999999914e-01 1.357374916666670081e-02 -9.551832000000000100e-01 1.903255399999999875e-01 1.273357800000000060e-02 -9.812971999999999806e-01 1.841620115000000002e-01 1.195187833333329931e-02 -1.006807800000000030e+00 1.608915558333330054e-01 1.233432733333329930e-02 -1.030406600000000061e+00 1.533644885000000069e-01 1.172346633333330029e-02 -1.057784300000000011e+00 1.661925581666670038e-01 1.091501716666670035e-02 -1.084600999999999926e+00 1.630933589999999933e-01 1.128103283333329980e-02 -1.109902299999999897e+00 1.327154809999999963e-01 1.088576583333330031e-02 -1.137751600000000085e+00 1.179623709999999964e-01 1.042595833333329926e-02 +3.624299999999999744e-02 7.295645247999999583e+01 1.637502872666669873e+01 +4.068929999999999769e-02 3.496757764333329987e+01 1.132330254166670080e+01 +4.510000000000000120e-02 2.871506291000000033e+01 8.366418418333330109e+00 +4.957960000000000145e-02 3.062621534000000167e+01 6.807088010000000189e+00 +5.414959999999999912e-02 1.698840335499999910e+01 5.315930135000000334e+00 +5.867460000000000037e-02 1.810732352000000134e+01 4.582343003333329889e+00 +6.313670000000000393e-02 1.758858145166669829e+01 3.753068668333329860e+00 +6.771770000000000567e-02 1.874808681500000063e+01 3.129801861666670071e+00 +7.237100000000000477e-02 1.219239694000000007e+01 2.701832888333330018e+00 +7.692330000000000001e-02 1.502033604000000011e+01 2.415586504999999828e+00 +8.164470000000000061e-02 1.051882241166670084e+01 2.003147743333329789e+00 +8.639470000000000482e-02 1.266539752666670005e+01 1.813845073333330005e+00 +9.106759999999999855e-02 1.164225125833329955e+01 1.590423455000000041e+00 +9.573710000000000553e-02 9.248378555000000389e+00 1.453449206666669991e+00 +1.004952999999999957e-01 1.082198768499999986e+01 1.296534581666670016e+00 +1.052397000000000055e-01 9.754544071666670035e+00 1.192202876666669908e+00 +1.099886000000000058e-01 9.770793396666670461e+00 1.074958141666670031e+00 +1.148422000000000054e-01 9.667035006666669261e+00 9.803857316666669819e-01 +1.197769999999999946e-01 8.381104240000000871e+00 8.964596183333329860e-01 +1.247698000000000002e-01 7.884219706666669936e+00 8.320707283333329540e-01 +1.298370000000000080e-01 8.175124921666670375e+00 7.497416000000000080e-01 +1.349077999999999944e-01 7.421197476666669957e+00 7.207336583333330271e-01 +1.399244000000000043e-01 8.545903931666670061e+00 6.648524133333330033e-01 +1.450733999999999913e-01 7.172791390000000433e+00 6.314494133333330428e-01 +1.502658000000000049e-01 6.110795001666669890e+00 5.924928833333330536e-01 +1.556062000000000001e-01 7.011488443333329990e+00 5.430119199999999813e-01 +1.572456999999999883e-01 7.121472013333329798e+00 1.740741033333330079e-01 +1.609471000000000096e-01 7.438929439999999893e+00 5.263131250000000483e-01 +1.661874999999999880e-01 6.540084590000000198e+00 4.946959550000000205e-01 +1.706292000000000086e-01 6.367655253333330378e+00 1.455746566666669961e-01 +1.715615000000000057e-01 6.476111691666670112e+00 4.707941449999999972e-01 +1.771270000000000067e-01 5.720913878333329983e+00 4.355610400000000104e-01 +1.827315999999999940e-01 6.117868691666670244e+00 4.186226383333330192e-01 +1.842428999999999872e-01 5.857041180000000402e+00 1.254778649999999940e-01 +1.883173999999999959e-01 5.849837826666670182e+00 4.069392433333329784e-01 +1.939794999999999991e-01 5.447672994999999574e+00 3.927526633333329742e-01 +1.982414999999999872e-01 5.391186461666669594e+00 1.085076650000000031e-01 +1.997663000000000078e-01 5.394637556666670442e+00 3.662608233333329855e-01 +2.055810999999999888e-01 5.784545713333329786e+00 3.603836316666669815e-01 +2.114655000000000007e-01 4.574601945000000391e+00 3.312713700000000094e-01 +2.120113000000000136e-01 5.084515549999999884e+00 9.927742500000000248e-02 +2.161903000000000019e-01 4.516358434999999893e+00 4.168106166666670220e-01 +2.259823999999999999e-01 4.782964421666670241e+00 8.791053666666670541e-02 +2.397845000000000115e-01 4.501217386666669817e+00 8.259429166666669431e-02 +2.537096999999999825e-01 4.179436571666670375e+00 7.562756833333329765e-02 +2.676275000000000182e-01 3.979478888333329856e+00 6.987285499999999761e-02 +2.817857999999999752e-01 3.702226940000000077e+00 6.482911333333329917e-02 +2.956398000000000081e-01 3.605992423333329810e+00 6.203536333333330155e-02 +3.099044000000000243e-01 3.377018353333329781e+00 5.670042833333330257e-02 +3.240645999999999805e-01 3.095807218333329836e+00 5.498817999999999762e-02 +3.388027000000000122e-01 2.841171323333330001e+00 4.897826333333329951e-02 +3.539140000000000064e-01 2.795649415000000193e+00 4.845330666666670255e-02 +3.687090000000000090e-01 2.622854690000000044e+00 4.475559833333329907e-02 +3.839813000000000254e-01 2.527809641666669993e+00 4.273165666666670082e-02 +3.988975000000000160e-01 2.232305030000000023e+00 4.094381166666669764e-02 +4.106734000000000218e-01 2.129986383333330124e+00 4.154637366666669857e-02 +4.136514000000000024e-01 2.084593566666669950e+00 3.891198166666669928e-02 +4.290628000000000219e-01 1.988620215000000080e+00 3.594587333333330165e-02 +4.295516999999999808e-01 1.964928603499999982e+00 3.519640899999999795e-02 +4.446014999999999828e-01 1.750614441666670018e+00 3.497378000000000292e-02 +4.466716000000000020e-01 1.709819834666669980e+00 3.112847050000000157e-02 +4.603325999999999807e-01 1.676685876666669905e+00 3.265084166666670090e-02 +4.685437000000000074e-01 1.638395569999999912e+00 3.101072850000000103e-02 +4.764860000000000206e-01 1.575855291666669933e+00 3.097528500000000171e-02 +4.834083000000000130e-01 1.443926158166670026e+00 2.913516383333330032e-02 +4.923204999999999942e-01 1.443778989999999984e+00 3.072023333333330150e-02 +5.046621000000000024e-01 1.382474827333330047e+00 2.709115466666670025e-02 +5.082708000000000226e-01 1.368563626666670086e+00 2.832584499999999880e-02 +5.230728999999999518e-01 1.117650907000000027e+00 2.515010599999999846e-02 +5.249162000000000550e-01 1.271594368333329950e+00 2.652784333333330080e-02 +5.416775999999999813e-01 1.132208539999999930e+00 2.601087833333329963e-02 +5.444001000000000534e-01 1.080469498666670081e+00 2.559191900000000117e-02 +5.583067999999999920e-01 1.032465565000000085e+00 2.510816333333330125e-02 +5.612614999999999688e-01 1.012286258500000091e+00 2.336018449999999885e-02 +5.753956999999999544e-01 9.763539783333330391e-01 2.332539999999999961e-02 +5.834072999999999620e-01 8.965217239999999643e-01 2.303063099999999933e-02 +5.927398999999999862e-01 9.096560916666670549e-01 2.248173499999999922e-02 +6.005747000000000169e-01 8.250965611666669641e-01 2.186496933333329992e-02 +6.099058000000000535e-01 8.168162183333329551e-01 2.170944500000000082e-02 +6.218546000000000351e-01 7.414260915000000507e-01 2.121375600000000028e-02 +6.275003000000000108e-01 7.444278466666669480e-01 2.046154333333330064e-02 +6.412082999999999533e-01 6.366966366666669819e-01 1.883217216666669899e-02 +6.447154999999999969e-01 6.422991433333330447e-01 2.075286000000000144e-02 +6.655497999999999692e-01 5.866493959999999896e-01 1.815403650000000160e-02 +6.843702000000000396e-01 5.515869356666670553e-01 2.025276583333330063e-02 +7.058105999999999547e-01 4.475886111666669831e-01 1.701240433333330027e-02 +7.258693999999999980e-01 4.775394179999999933e-01 1.840697383333329828e-02 +7.490480000000000471e-01 4.047520649999999942e-01 1.505153366666669990e-02 +7.720086999999999922e-01 3.731668894999999875e-01 1.706827766666670076e-02 +7.920989999999999975e-01 3.681129878333330163e-01 1.507231049999999996e-02 +8.155097999999999514e-01 3.208610430000000124e-01 1.529166149999999953e-02 +8.364475000000000104e-01 2.962226738333330056e-01 1.456896033333330079e-02 +8.619377000000000288e-01 2.765821119999999911e-01 1.371801400000000060e-02 +8.846403999999999934e-01 2.799105873333330163e-01 1.446314666666670065e-02 +9.081462000000000145e-01 2.318482950000000098e-01 1.260493333333330065e-02 +9.334447000000000161e-01 2.175556724999999914e-01 1.357374916666670081e-02 +9.551832000000000100e-01 1.903255399999999875e-01 1.273357800000000060e-02 +9.812971999999999806e-01 1.841620115000000002e-01 1.195187833333329931e-02 +1.006807800000000030e+00 1.608915558333330054e-01 1.233432733333329930e-02 +1.030406600000000061e+00 1.533644885000000069e-01 1.172346633333330029e-02 +1.057784300000000011e+00 1.661925581666670038e-01 1.091501716666670035e-02 +1.084600999999999926e+00 1.630933589999999933e-01 1.128103283333329980e-02 +1.109902299999999897e+00 1.327154809999999963e-01 1.088576583333330031e-02 +1.137751600000000085e+00 1.179623709999999964e-01 1.042595833333329926e-02 1.166036300000000026e+00 1.293750036666669878e-01 1.024355400000000020e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv index 96a87d0fe..bfbf36dcd 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/11_2000_1340_10.csv @@ -1,105 +1,105 @@ -3.625559999999999894e-02 4.452644707000000324e+01 1.628119149999999848e+01 -4.070349999999999663e-02 2.677295466333330154e+01 1.128515222166669929e+01 -4.511570000000000163e-02 2.350029203500000108e+01 8.338724138333329705e+00 -4.959680000000000338e-02 1.744413458166669884e+01 6.751264438333329565e+00 -5.416850000000000137e-02 9.909433441666669395e+00 5.280963783333329609e+00 -5.869510000000000005e-02 1.174714312999999954e+01 4.547423594999999708e+00 -6.315869999999999818e-02 1.312634901166670076e+01 3.725749208333330120e+00 -6.774130000000000429e-02 1.654730030333330149e+01 3.113655078333330106e+00 -7.239619999999999389e-02 7.792796271666669661e+00 2.672180411666670086e+00 -7.695009999999999351e-02 1.265325572666669984e+01 2.397233363333330036e+00 -8.167309999999999848e-02 6.069752713333330441e+00 1.971069876666670107e+00 -8.642469999999999319e-02 1.300927747833329917e+01 1.813635340000000040e+00 -9.109929999999999417e-02 9.757094948333330464e+00 1.573592551666670003e+00 -9.577040000000000552e-02 5.713518095000000407e+00 1.422093728333329921e+00 -1.005303000000000030e-01 7.313534973333330136e+00 1.265234731666670109e+00 -1.052763000000000032e-01 8.841184973333330532e+00 1.182077201666670074e+00 -1.100268999999999969e-01 7.404252198333329815e+00 1.051346621666670034e+00 -1.148821000000000009e-01 8.380590695000000423e+00 9.664303683333329564e-01 -1.198187000000000002e-01 7.413483668333330279e+00 8.855263516666670442e-01 -1.248133000000000020e-01 6.593134025000000342e+00 8.175650066666669824e-01 -1.298822000000000032e-01 6.731246111666670195e+00 7.333046399999999521e-01 -1.349548000000000136e-01 5.519098301666669926e+00 6.986229283333329487e-01 -1.399730999999999892e-01 7.581442331666670142e+00 6.528076566666669578e-01 -1.451239000000000001e-01 4.842304316666670161e+00 6.043489516666670225e-01 -1.503181000000000100e-01 5.135523888333329623e+00 5.802922499999999539e-01 -1.556604000000000043e-01 6.037988904999999740e+00 5.310080216666670516e-01 -1.573070000000000024e-01 6.020141886666669606e+00 1.700767950000000028e-01 -1.610031000000000101e-01 6.268605329999999753e+00 5.111983383333329467e-01 -1.662453999999999876e-01 5.536486726666669966e+00 4.815289200000000269e-01 -1.706957000000000058e-01 5.285752210000000062e+00 1.415798849999999887e-01 -1.716212000000000015e-01 5.016643598333329734e+00 4.522174083333330152e-01 -1.771887000000000045e-01 5.127789406666670047e+00 4.276572833333330270e-01 -1.827951999999999910e-01 5.311901800000000229e+00 4.077617766666670196e-01 -1.843146999999999980e-01 5.273006283333329769e+00 1.230909116666669967e-01 -1.883829999999999949e-01 4.028933333333330147e+00 3.832458766666669847e-01 -1.940469999999999973e-01 4.805727509999999647e+00 3.842635300000000198e-01 -1.983187999999999895e-01 4.783697818333330076e+00 1.059592133333329966e-01 -1.998358000000000079e-01 4.823453656666670142e+00 3.585670233333330126e-01 -2.056525999999999910e-01 4.659267076666670171e+00 3.454626916666669878e-01 -2.115392000000000106e-01 3.961550343333330115e+00 3.229926716666670083e-01 -2.120939000000000019e-01 4.350835990000000209e+00 9.606802500000000133e-02 -2.162656000000000023e-01 4.681036608333330129e+00 4.188060433333329891e-01 -2.260705000000000076e-01 4.224838659999999635e+00 8.541253666666670519e-02 -2.398779000000000050e-01 3.935926101666670007e+00 7.996145500000000073e-02 -2.538084999999999924e-01 3.694058728333330155e+00 7.335489833333329324e-02 -2.677318000000000198e-01 3.684019681666669932e+00 6.840629833333329579e-02 -2.818956000000000239e-01 3.452043701666669850e+00 6.355296333333329550e-02 -2.957549999999999901e-01 3.354666878333329993e+00 6.073878666666669701e-02 -3.100250999999999979e-01 3.092418856666669935e+00 5.527531000000000111e-02 -3.241909000000000041e-01 2.870290291666670157e+00 5.380070499999999728e-02 -3.389346999999999777e-01 2.729991994999999783e+00 4.836916333333329820e-02 -3.540519999999999778e-01 2.658729508333330216e+00 4.771163500000000224e-02 -3.688526999999999778e-01 2.488934241666670211e+00 4.403299000000000102e-02 -3.841308999999999974e-01 2.412009111666669980e+00 4.209804999999999797e-02 -3.990528999999999882e-01 2.203036439999999985e+00 4.070905166666669711e-02 -4.105667000000000066e-01 1.996977714666670067e+00 4.083280150000000164e-02 -4.138126999999999778e-01 2.043262161666670185e+00 3.862582833333329940e-02 -4.292300000000000004e-01 1.982205959999999934e+00 3.583282166666670182e-02 -4.294401999999999942e-01 1.834877223666669943e+00 3.458454216666669717e-02 -4.447747000000000228e-01 1.712660204999999936e+00 3.471672166666670001e-02 -4.465555999999999970e-01 1.615437673500000004e+00 3.068944266666669834e-02 -4.605119999999999769e-01 1.681440621666669966e+00 3.260043333333329657e-02 -4.684220000000000050e-01 1.529958281999999947e+00 3.049975383333329917e-02 -4.766716999999999760e-01 1.561241171666670091e+00 3.083583000000000157e-02 -4.832827000000000095e-01 1.369049060333330070e+00 2.875037449999999842e-02 -4.925123000000000140e-01 1.406416503333330015e+00 3.046807833333330107e-02 -5.045309999999999517e-01 1.316827885166669931e+00 2.677764066666669940e-02 -5.084689000000000014e-01 1.339987331666669945e+00 2.812536666666669988e-02 -5.229369999999999852e-01 1.082862526333330022e+00 2.496820599999999973e-02 -5.251208000000000542e-01 1.259172833333330077e+00 2.640966666666669932e-02 -5.418887000000000009e-01 1.134540908333329989e+00 2.596733000000000027e-02 -5.442586999999999842e-01 1.026980480500000015e+00 2.532101549999999854e-02 -5.585244000000000320e-01 1.057657990000000048e+00 2.518052499999999874e-02 -5.611156999999999950e-01 9.343203683333329845e-01 2.299225916666669881e-02 -5.756198999999999621e-01 9.598931866666670087e-01 2.319752666666670057e-02 -5.832557000000000436e-01 8.443178690000000541e-01 2.277228483333329848e-02 -5.929708999999999675e-01 9.115965033333329748e-01 2.244499833333329919e-02 -6.004186999999999719e-01 7.992612106666669991e-01 2.172028233333329894e-02 -6.101434999999999498e-01 8.528685350000000387e-01 2.184797833333329900e-02 -6.216930999999999985e-01 7.049236858333329803e-01 2.102741616666670144e-02 -6.277447999999999917e-01 7.853513183333330483e-01 2.062051499999999898e-02 -6.410417000000000476e-01 6.132204243333330140e-01 1.871036433333329863e-02 -6.449667999999999513e-01 7.011444599999999694e-01 2.101788333333329956e-02 -6.653769000000000489e-01 5.661603698333329548e-01 1.804829366666670099e-02 -6.841924999999999812e-01 5.085138883333329973e-01 2.002898349999999994e-02 -7.056272000000000100e-01 4.352650703333330040e-01 1.694186849999999855e-02 -7.256808000000000147e-01 4.355121908333329794e-01 1.820155999999999857e-02 -7.488534000000000024e-01 3.927147446666670039e-01 1.498729066666669961e-02 -7.718082000000000553e-01 3.535320510000000138e-01 1.696024266666670138e-02 -7.918933000000000222e-01 3.527103021666669891e-01 1.499266833333330086e-02 -8.152979999999999672e-01 3.240461856666669860e-01 1.528614783333329986e-02 -8.362302999999999820e-01 2.791947966666670222e-01 1.448550166666670060e-02 -8.617137999999999742e-01 2.463675190000000070e-01 1.359101549999999943e-02 -8.844106000000000467e-01 2.696912470000000228e-01 1.440389033333329925e-02 -9.079102999999999479e-01 2.246905299999999994e-01 1.256477649999999946e-02 -9.332021999999999817e-01 2.085629360000000043e-01 1.352310049999999944e-02 -9.549351000000000367e-01 1.738771078333329889e-01 1.265774100000000013e-02 -9.810423000000000338e-01 1.708308721666670082e-01 1.189189666666670003e-02 -1.006546299999999894e+00 1.505248680000000061e-01 1.228292216666669948e-02 -1.030138999999999916e+00 1.537520601666670095e-01 1.171224066666669977e-02 -1.057509599999999939e+00 1.534308791666670058e-01 1.086003916666669969e-02 -1.084319299999999986e+00 1.338797798333329903e-01 1.116524300000000004e-02 -1.109614000000000100e+00 1.189064603333330056e-01 1.082743033333329920e-02 -1.137456000000000023e+00 1.107916548333330031e-01 1.039160416666670000e-02 +3.625559999999999894e-02 4.452644707000000324e+01 1.628119149999999848e+01 +4.070349999999999663e-02 2.677295466333330154e+01 1.128515222166669929e+01 +4.511570000000000163e-02 2.350029203500000108e+01 8.338724138333329705e+00 +4.959680000000000338e-02 1.744413458166669884e+01 6.751264438333329565e+00 +5.416850000000000137e-02 9.909433441666669395e+00 5.280963783333329609e+00 +5.869510000000000005e-02 1.174714312999999954e+01 4.547423594999999708e+00 +6.315869999999999818e-02 1.312634901166670076e+01 3.725749208333330120e+00 +6.774130000000000429e-02 1.654730030333330149e+01 3.113655078333330106e+00 +7.239619999999999389e-02 7.792796271666669661e+00 2.672180411666670086e+00 +7.695009999999999351e-02 1.265325572666669984e+01 2.397233363333330036e+00 +8.167309999999999848e-02 6.069752713333330441e+00 1.971069876666670107e+00 +8.642469999999999319e-02 1.300927747833329917e+01 1.813635340000000040e+00 +9.109929999999999417e-02 9.757094948333330464e+00 1.573592551666670003e+00 +9.577040000000000552e-02 5.713518095000000407e+00 1.422093728333329921e+00 +1.005303000000000030e-01 7.313534973333330136e+00 1.265234731666670109e+00 +1.052763000000000032e-01 8.841184973333330532e+00 1.182077201666670074e+00 +1.100268999999999969e-01 7.404252198333329815e+00 1.051346621666670034e+00 +1.148821000000000009e-01 8.380590695000000423e+00 9.664303683333329564e-01 +1.198187000000000002e-01 7.413483668333330279e+00 8.855263516666670442e-01 +1.248133000000000020e-01 6.593134025000000342e+00 8.175650066666669824e-01 +1.298822000000000032e-01 6.731246111666670195e+00 7.333046399999999521e-01 +1.349548000000000136e-01 5.519098301666669926e+00 6.986229283333329487e-01 +1.399730999999999892e-01 7.581442331666670142e+00 6.528076566666669578e-01 +1.451239000000000001e-01 4.842304316666670161e+00 6.043489516666670225e-01 +1.503181000000000100e-01 5.135523888333329623e+00 5.802922499999999539e-01 +1.556604000000000043e-01 6.037988904999999740e+00 5.310080216666670516e-01 +1.573070000000000024e-01 6.020141886666669606e+00 1.700767950000000028e-01 +1.610031000000000101e-01 6.268605329999999753e+00 5.111983383333329467e-01 +1.662453999999999876e-01 5.536486726666669966e+00 4.815289200000000269e-01 +1.706957000000000058e-01 5.285752210000000062e+00 1.415798849999999887e-01 +1.716212000000000015e-01 5.016643598333329734e+00 4.522174083333330152e-01 +1.771887000000000045e-01 5.127789406666670047e+00 4.276572833333330270e-01 +1.827951999999999910e-01 5.311901800000000229e+00 4.077617766666670196e-01 +1.843146999999999980e-01 5.273006283333329769e+00 1.230909116666669967e-01 +1.883829999999999949e-01 4.028933333333330147e+00 3.832458766666669847e-01 +1.940469999999999973e-01 4.805727509999999647e+00 3.842635300000000198e-01 +1.983187999999999895e-01 4.783697818333330076e+00 1.059592133333329966e-01 +1.998358000000000079e-01 4.823453656666670142e+00 3.585670233333330126e-01 +2.056525999999999910e-01 4.659267076666670171e+00 3.454626916666669878e-01 +2.115392000000000106e-01 3.961550343333330115e+00 3.229926716666670083e-01 +2.120939000000000019e-01 4.350835990000000209e+00 9.606802500000000133e-02 +2.162656000000000023e-01 4.681036608333330129e+00 4.188060433333329891e-01 +2.260705000000000076e-01 4.224838659999999635e+00 8.541253666666670519e-02 +2.398779000000000050e-01 3.935926101666670007e+00 7.996145500000000073e-02 +2.538084999999999924e-01 3.694058728333330155e+00 7.335489833333329324e-02 +2.677318000000000198e-01 3.684019681666669932e+00 6.840629833333329579e-02 +2.818956000000000239e-01 3.452043701666669850e+00 6.355296333333329550e-02 +2.957549999999999901e-01 3.354666878333329993e+00 6.073878666666669701e-02 +3.100250999999999979e-01 3.092418856666669935e+00 5.527531000000000111e-02 +3.241909000000000041e-01 2.870290291666670157e+00 5.380070499999999728e-02 +3.389346999999999777e-01 2.729991994999999783e+00 4.836916333333329820e-02 +3.540519999999999778e-01 2.658729508333330216e+00 4.771163500000000224e-02 +3.688526999999999778e-01 2.488934241666670211e+00 4.403299000000000102e-02 +3.841308999999999974e-01 2.412009111666669980e+00 4.209804999999999797e-02 +3.990528999999999882e-01 2.203036439999999985e+00 4.070905166666669711e-02 +4.105667000000000066e-01 1.996977714666670067e+00 4.083280150000000164e-02 +4.138126999999999778e-01 2.043262161666670185e+00 3.862582833333329940e-02 +4.292300000000000004e-01 1.982205959999999934e+00 3.583282166666670182e-02 +4.294401999999999942e-01 1.834877223666669943e+00 3.458454216666669717e-02 +4.447747000000000228e-01 1.712660204999999936e+00 3.471672166666670001e-02 +4.465555999999999970e-01 1.615437673500000004e+00 3.068944266666669834e-02 +4.605119999999999769e-01 1.681440621666669966e+00 3.260043333333329657e-02 +4.684220000000000050e-01 1.529958281999999947e+00 3.049975383333329917e-02 +4.766716999999999760e-01 1.561241171666670091e+00 3.083583000000000157e-02 +4.832827000000000095e-01 1.369049060333330070e+00 2.875037449999999842e-02 +4.925123000000000140e-01 1.406416503333330015e+00 3.046807833333330107e-02 +5.045309999999999517e-01 1.316827885166669931e+00 2.677764066666669940e-02 +5.084689000000000014e-01 1.339987331666669945e+00 2.812536666666669988e-02 +5.229369999999999852e-01 1.082862526333330022e+00 2.496820599999999973e-02 +5.251208000000000542e-01 1.259172833333330077e+00 2.640966666666669932e-02 +5.418887000000000009e-01 1.134540908333329989e+00 2.596733000000000027e-02 +5.442586999999999842e-01 1.026980480500000015e+00 2.532101549999999854e-02 +5.585244000000000320e-01 1.057657990000000048e+00 2.518052499999999874e-02 +5.611156999999999950e-01 9.343203683333329845e-01 2.299225916666669881e-02 +5.756198999999999621e-01 9.598931866666670087e-01 2.319752666666670057e-02 +5.832557000000000436e-01 8.443178690000000541e-01 2.277228483333329848e-02 +5.929708999999999675e-01 9.115965033333329748e-01 2.244499833333329919e-02 +6.004186999999999719e-01 7.992612106666669991e-01 2.172028233333329894e-02 +6.101434999999999498e-01 8.528685350000000387e-01 2.184797833333329900e-02 +6.216930999999999985e-01 7.049236858333329803e-01 2.102741616666670144e-02 +6.277447999999999917e-01 7.853513183333330483e-01 2.062051499999999898e-02 +6.410417000000000476e-01 6.132204243333330140e-01 1.871036433333329863e-02 +6.449667999999999513e-01 7.011444599999999694e-01 2.101788333333329956e-02 +6.653769000000000489e-01 5.661603698333329548e-01 1.804829366666670099e-02 +6.841924999999999812e-01 5.085138883333329973e-01 2.002898349999999994e-02 +7.056272000000000100e-01 4.352650703333330040e-01 1.694186849999999855e-02 +7.256808000000000147e-01 4.355121908333329794e-01 1.820155999999999857e-02 +7.488534000000000024e-01 3.927147446666670039e-01 1.498729066666669961e-02 +7.718082000000000553e-01 3.535320510000000138e-01 1.696024266666670138e-02 +7.918933000000000222e-01 3.527103021666669891e-01 1.499266833333330086e-02 +8.152979999999999672e-01 3.240461856666669860e-01 1.528614783333329986e-02 +8.362302999999999820e-01 2.791947966666670222e-01 1.448550166666670060e-02 +8.617137999999999742e-01 2.463675190000000070e-01 1.359101549999999943e-02 +8.844106000000000467e-01 2.696912470000000228e-01 1.440389033333329925e-02 +9.079102999999999479e-01 2.246905299999999994e-01 1.256477649999999946e-02 +9.332021999999999817e-01 2.085629360000000043e-01 1.352310049999999944e-02 +9.549351000000000367e-01 1.738771078333329889e-01 1.265774100000000013e-02 +9.810423000000000338e-01 1.708308721666670082e-01 1.189189666666670003e-02 +1.006546299999999894e+00 1.505248680000000061e-01 1.228292216666669948e-02 +1.030138999999999916e+00 1.537520601666670095e-01 1.171224066666669977e-02 +1.057509599999999939e+00 1.534308791666670058e-01 1.086003916666669969e-02 +1.084319299999999986e+00 1.338797798333329903e-01 1.116524300000000004e-02 +1.109614000000000100e+00 1.189064603333330056e-01 1.082743033333329920e-02 +1.137456000000000023e+00 1.107916548333330031e-01 1.039160416666670000e-02 1.165733499999999978e+00 1.125385351666669947e-01 1.017680349999999963e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv index cb7796b60..9ae1c5f3e 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/12_3000_1340_10.csv @@ -1,105 +1,105 @@ -3.624610000000000332e-02 5.667029333499999666e+01 1.635708034166669833e+01 -4.069289999999999713e-02 2.663486052833329865e+01 1.131616966500000032e+01 -4.510390000000000232e-02 2.091145430999999988e+01 8.353784624999999409e+00 -4.958379999999999732e-02 1.655762528666669908e+01 6.766916158333329712e+00 -5.415430000000000244e-02 7.405398096666670149e+00 5.285856098333329811e+00 -5.867970000000000130e-02 1.609157327499999823e+01 4.579871853333330023e+00 -6.314219999999999555e-02 2.074624494500000083e+01 3.774208823333330187e+00 -6.772359999999999491e-02 1.622769223499999924e+01 3.121007619999999871e+00 -7.237720000000000264e-02 8.100976058333330343e+00 2.681633823333330113e+00 -7.692999999999999838e-02 7.297140411666670268e+00 2.370097993333330155e+00 -8.165179999999999660e-02 8.662000215000000836e+00 1.993900453333329992e+00 -8.640209999999999557e-02 1.195176863500000053e+01 1.811378463333330080e+00 -9.107550000000000368e-02 1.017929826333329935e+01 1.581605778333329937e+00 -9.574539999999999440e-02 8.299761948333330253e+00 1.447854706666670044e+00 -1.005039999999999961e-01 7.184010728333330320e+00 1.267957188333330043e+00 -1.052488000000000035e-01 7.705754226666670093e+00 1.175315996666669971e+00 -1.099981000000000014e-01 6.940137736666669888e+00 1.050239939999999983e+00 -1.148520999999999986e-01 7.227232895000000212e+00 9.582211533333330200e-01 -1.197872999999999993e-01 6.058664864999999899e+00 8.747766333333329980e-01 -1.247806000000000054e-01 5.235616768333329674e+00 8.060124016666669888e-01 -1.298481999999999970e-01 6.895559143333329644e+00 7.374701233333329498e-01 -1.349194999999999978e-01 5.596115646666669718e+00 7.017485283333330104e-01 -1.399364999999999915e-01 7.271002904999999572e+00 6.515097483333329720e-01 -1.450858999999999899e-01 5.001139740000000167e+00 6.081432883333329764e-01 -1.502787999999999902e-01 5.397041578333330314e+00 5.852662783333330010e-01 -1.556196999999999997e-01 5.201047356666670396e+00 5.230793849999999523e-01 -1.572660999999999920e-01 5.527525920000000426e+00 1.689539216666670063e-01 -1.609609999999999930e-01 6.050507654999999652e+00 5.103277550000000495e-01 -1.662019000000000135e-01 5.215723743333329665e+00 4.792083599999999999e-01 -1.706513000000000058e-01 5.031433279999999897e+00 1.411615750000000113e-01 -1.715762999999999872e-01 4.986483428333330359e+00 4.534299233333329848e-01 -1.771423000000000025e-01 5.106750501666669884e+00 4.289189133333329851e-01 -1.827474000000000043e-01 5.398633823333329751e+00 4.103611200000000236e-01 -1.842668000000000084e-01 4.914610723333329823e+00 1.221897900000000065e-01 -1.883336999999999928e-01 4.776135458333330419e+00 3.942386333333329773e-01 -1.939963000000000104e-01 4.310256373333330338e+00 3.794851616666670147e-01 -1.982673000000000074e-01 4.375084450000000125e+00 1.047416733333329936e-01 -1.997836000000000056e-01 4.425991520000000179e+00 3.548793383333330165e-01 -2.055989000000000011e-01 4.542295369999999721e+00 3.452195166666670034e-01 -2.114837999999999996e-01 4.392925553333330235e+00 3.296180283333329797e-01 -2.120387999999999995e-01 4.102498828333329683e+00 9.538819833333339604e-02 -2.162090000000000123e-01 4.067448908333330060e+00 4.099168333333330083e-01 -2.260118000000000127e-01 3.879140883333330070e+00 8.427184499999999800e-02 -2.398155999999999899e-01 3.717842756666669857e+00 7.930888666666670306e-02 -2.537425999999999848e-01 3.531988756666669893e+00 7.293178499999999898e-02 -2.676623000000000197e-01 3.501111030000000124e+00 6.786378666666670334e-02 -2.818223999999999729e-01 3.329498083333330083e+00 6.325724833333329356e-02 -2.956782000000000021e-01 3.079447669999999970e+00 5.969948499999999658e-02 -3.099446000000000145e-01 2.946954811666670171e+00 5.483356999999999815e-02 -3.241067000000000253e-01 2.705831398333330196e+00 5.323661166666669720e-02 -3.388467000000000007e-01 2.601996516666670090e+00 4.799289000000000333e-02 -3.539599999999999969e-01 2.517872383333330077e+00 4.725612833333329987e-02 -3.687568999999999986e-01 2.374362781666670141e+00 4.368410333333330037e-02 -3.840311000000000141e-01 2.195996148333330122e+00 4.125977166666670165e-02 -3.989493000000000067e-01 2.109030429999999789e+00 4.042385333333330111e-02 -4.107986000000000137e-01 1.888483604166669938e+00 4.043749766666669687e-02 -4.137051999999999952e-01 1.969810571666670063e+00 3.843483833333329741e-02 -4.291185000000000138e-01 1.859797011666669997e+00 3.539587999999999762e-02 -4.296826999999999730e-01 1.762954635166670059e+00 3.439219566666670141e-02 -4.446591999999999767e-01 1.624618943333330012e+00 3.443567000000000156e-02 -4.468077999999999772e-01 1.588049316333330019e+00 3.067751716666669917e-02 -4.603923999999999794e-01 1.585295316666669896e+00 3.227559333333329672e-02 -4.686866000000000088e-01 1.509168766666669992e+00 3.051112400000000058e-02 -4.765479000000000243e-01 1.429500135000000061e+00 3.031986666666669841e-02 -4.835556999999999772e-01 1.309360340500000053e+00 2.857159116666670162e-02 -4.923843999999999999e-01 1.363123808333329912e+00 3.037624166666669928e-02 -5.048160000000000425e-01 1.296483956833329954e+00 2.677855866666669846e-02 -5.083368000000000331e-01 1.254868451666669937e+00 2.782200166666669999e-02 -5.232324000000000419e-01 1.028253859833329953e+00 2.481625150000000071e-02 -5.249844000000000177e-01 1.223231273333329927e+00 2.634227000000000096e-02 -5.417480000000000073e-01 1.058531658333329961e+00 2.569255333333329838e-02 -5.445661000000000529e-01 1.022632484000000064e+00 2.537817800000000124e-02 -5.583793000000000228e-01 1.009770163333330029e+00 2.504100833333329848e-02 -5.614325999999999484e-01 9.522996788333329965e-01 2.313905700000000107e-02 -5.754704000000000486e-01 9.158985283333339611e-01 2.307270666666669939e-02 -5.835850999999999678e-01 8.544030651666669751e-01 2.288279616666670166e-02 -5.928168000000000326e-01 8.553651300000000290e-01 2.224781666666670113e-02 -6.007578000000000085e-01 7.747371155000000176e-01 2.167619850000000042e-02 -6.099849999999999994e-01 7.987110383333330121e-01 2.165553833333330042e-02 -6.220442000000000471e-01 6.615610463333330138e-01 2.089781950000000124e-02 -6.275817000000000201e-01 7.150054516666669580e-01 2.035196333333329916e-02 -6.414037999999999684e-01 6.088626698333330367e-01 1.874337833333329997e-02 -6.447992000000000168e-01 6.630811316666670452e-01 2.089752166666669977e-02 -6.657526999999999751e-01 5.716572943333330103e-01 1.811807299999999843e-02 -6.845788999999999902e-01 5.092866856666670161e-01 2.008440916666669879e-02 -7.060256999999999783e-01 4.113589818333330261e-01 1.688841199999999848e-02 -7.260906999999999778e-01 4.258370573333329911e-01 1.820484666666670123e-02 -7.492763000000000062e-01 3.814062795000000006e-01 1.498164383333329928e-02 -7.722440999999999889e-01 3.582434820000000020e-01 1.702263550000000097e-02 -7.923405000000000031e-01 3.290160251666670033e-01 1.493438950000000078e-02 -8.157583999999999946e-01 3.190799841666669967e-01 1.530228649999999975e-02 -8.367025000000000157e-01 2.762952625000000273e-01 1.450753649999999943e-02 -8.622005000000000363e-01 2.544186793333330088e-01 1.365137966666669922e-02 -8.849101000000000328e-01 2.424038613333329983e-01 1.432358516666669933e-02 -9.084231000000000389e-01 2.172930054999999971e-01 1.256612799999999933e-02 -9.337292000000000369e-01 2.202721591666670087e-01 1.359930866666670020e-02 -9.554743999999999460e-01 1.777866800000000025e-01 1.269970833333330072e-02 -9.815962999999999772e-01 1.676419470000000134e-01 1.190602366666669923e-02 -1.007114700000000029e+00 1.595580418333329975e-01 1.234223233333330005e-02 -1.030720700000000045e+00 1.541775503333329966e-01 1.173861049999999975e-02 -1.058106800000000014e+00 1.554276226666669869e-01 1.088984299999999975e-02 -1.084931700000000054e+00 1.440364893333329899e-01 1.122487333333329999e-02 -1.110240600000000022e+00 1.198653424999999995e-01 1.085281416666670010e-02 -1.138098400000000066e+00 1.211473946666670048e-01 1.044690799999999954e-02 +3.624610000000000332e-02 5.667029333499999666e+01 1.635708034166669833e+01 +4.069289999999999713e-02 2.663486052833329865e+01 1.131616966500000032e+01 +4.510390000000000232e-02 2.091145430999999988e+01 8.353784624999999409e+00 +4.958379999999999732e-02 1.655762528666669908e+01 6.766916158333329712e+00 +5.415430000000000244e-02 7.405398096666670149e+00 5.285856098333329811e+00 +5.867970000000000130e-02 1.609157327499999823e+01 4.579871853333330023e+00 +6.314219999999999555e-02 2.074624494500000083e+01 3.774208823333330187e+00 +6.772359999999999491e-02 1.622769223499999924e+01 3.121007619999999871e+00 +7.237720000000000264e-02 8.100976058333330343e+00 2.681633823333330113e+00 +7.692999999999999838e-02 7.297140411666670268e+00 2.370097993333330155e+00 +8.165179999999999660e-02 8.662000215000000836e+00 1.993900453333329992e+00 +8.640209999999999557e-02 1.195176863500000053e+01 1.811378463333330080e+00 +9.107550000000000368e-02 1.017929826333329935e+01 1.581605778333329937e+00 +9.574539999999999440e-02 8.299761948333330253e+00 1.447854706666670044e+00 +1.005039999999999961e-01 7.184010728333330320e+00 1.267957188333330043e+00 +1.052488000000000035e-01 7.705754226666670093e+00 1.175315996666669971e+00 +1.099981000000000014e-01 6.940137736666669888e+00 1.050239939999999983e+00 +1.148520999999999986e-01 7.227232895000000212e+00 9.582211533333330200e-01 +1.197872999999999993e-01 6.058664864999999899e+00 8.747766333333329980e-01 +1.247806000000000054e-01 5.235616768333329674e+00 8.060124016666669888e-01 +1.298481999999999970e-01 6.895559143333329644e+00 7.374701233333329498e-01 +1.349194999999999978e-01 5.596115646666669718e+00 7.017485283333330104e-01 +1.399364999999999915e-01 7.271002904999999572e+00 6.515097483333329720e-01 +1.450858999999999899e-01 5.001139740000000167e+00 6.081432883333329764e-01 +1.502787999999999902e-01 5.397041578333330314e+00 5.852662783333330010e-01 +1.556196999999999997e-01 5.201047356666670396e+00 5.230793849999999523e-01 +1.572660999999999920e-01 5.527525920000000426e+00 1.689539216666670063e-01 +1.609609999999999930e-01 6.050507654999999652e+00 5.103277550000000495e-01 +1.662019000000000135e-01 5.215723743333329665e+00 4.792083599999999999e-01 +1.706513000000000058e-01 5.031433279999999897e+00 1.411615750000000113e-01 +1.715762999999999872e-01 4.986483428333330359e+00 4.534299233333329848e-01 +1.771423000000000025e-01 5.106750501666669884e+00 4.289189133333329851e-01 +1.827474000000000043e-01 5.398633823333329751e+00 4.103611200000000236e-01 +1.842668000000000084e-01 4.914610723333329823e+00 1.221897900000000065e-01 +1.883336999999999928e-01 4.776135458333330419e+00 3.942386333333329773e-01 +1.939963000000000104e-01 4.310256373333330338e+00 3.794851616666670147e-01 +1.982673000000000074e-01 4.375084450000000125e+00 1.047416733333329936e-01 +1.997836000000000056e-01 4.425991520000000179e+00 3.548793383333330165e-01 +2.055989000000000011e-01 4.542295369999999721e+00 3.452195166666670034e-01 +2.114837999999999996e-01 4.392925553333330235e+00 3.296180283333329797e-01 +2.120387999999999995e-01 4.102498828333329683e+00 9.538819833333339604e-02 +2.162090000000000123e-01 4.067448908333330060e+00 4.099168333333330083e-01 +2.260118000000000127e-01 3.879140883333330070e+00 8.427184499999999800e-02 +2.398155999999999899e-01 3.717842756666669857e+00 7.930888666666670306e-02 +2.537425999999999848e-01 3.531988756666669893e+00 7.293178499999999898e-02 +2.676623000000000197e-01 3.501111030000000124e+00 6.786378666666670334e-02 +2.818223999999999729e-01 3.329498083333330083e+00 6.325724833333329356e-02 +2.956782000000000021e-01 3.079447669999999970e+00 5.969948499999999658e-02 +3.099446000000000145e-01 2.946954811666670171e+00 5.483356999999999815e-02 +3.241067000000000253e-01 2.705831398333330196e+00 5.323661166666669720e-02 +3.388467000000000007e-01 2.601996516666670090e+00 4.799289000000000333e-02 +3.539599999999999969e-01 2.517872383333330077e+00 4.725612833333329987e-02 +3.687568999999999986e-01 2.374362781666670141e+00 4.368410333333330037e-02 +3.840311000000000141e-01 2.195996148333330122e+00 4.125977166666670165e-02 +3.989493000000000067e-01 2.109030429999999789e+00 4.042385333333330111e-02 +4.107986000000000137e-01 1.888483604166669938e+00 4.043749766666669687e-02 +4.137051999999999952e-01 1.969810571666670063e+00 3.843483833333329741e-02 +4.291185000000000138e-01 1.859797011666669997e+00 3.539587999999999762e-02 +4.296826999999999730e-01 1.762954635166670059e+00 3.439219566666670141e-02 +4.446591999999999767e-01 1.624618943333330012e+00 3.443567000000000156e-02 +4.468077999999999772e-01 1.588049316333330019e+00 3.067751716666669917e-02 +4.603923999999999794e-01 1.585295316666669896e+00 3.227559333333329672e-02 +4.686866000000000088e-01 1.509168766666669992e+00 3.051112400000000058e-02 +4.765479000000000243e-01 1.429500135000000061e+00 3.031986666666669841e-02 +4.835556999999999772e-01 1.309360340500000053e+00 2.857159116666670162e-02 +4.923843999999999999e-01 1.363123808333329912e+00 3.037624166666669928e-02 +5.048160000000000425e-01 1.296483956833329954e+00 2.677855866666669846e-02 +5.083368000000000331e-01 1.254868451666669937e+00 2.782200166666669999e-02 +5.232324000000000419e-01 1.028253859833329953e+00 2.481625150000000071e-02 +5.249844000000000177e-01 1.223231273333329927e+00 2.634227000000000096e-02 +5.417480000000000073e-01 1.058531658333329961e+00 2.569255333333329838e-02 +5.445661000000000529e-01 1.022632484000000064e+00 2.537817800000000124e-02 +5.583793000000000228e-01 1.009770163333330029e+00 2.504100833333329848e-02 +5.614325999999999484e-01 9.522996788333329965e-01 2.313905700000000107e-02 +5.754704000000000486e-01 9.158985283333339611e-01 2.307270666666669939e-02 +5.835850999999999678e-01 8.544030651666669751e-01 2.288279616666670166e-02 +5.928168000000000326e-01 8.553651300000000290e-01 2.224781666666670113e-02 +6.007578000000000085e-01 7.747371155000000176e-01 2.167619850000000042e-02 +6.099849999999999994e-01 7.987110383333330121e-01 2.165553833333330042e-02 +6.220442000000000471e-01 6.615610463333330138e-01 2.089781950000000124e-02 +6.275817000000000201e-01 7.150054516666669580e-01 2.035196333333329916e-02 +6.414037999999999684e-01 6.088626698333330367e-01 1.874337833333329997e-02 +6.447992000000000168e-01 6.630811316666670452e-01 2.089752166666669977e-02 +6.657526999999999751e-01 5.716572943333330103e-01 1.811807299999999843e-02 +6.845788999999999902e-01 5.092866856666670161e-01 2.008440916666669879e-02 +7.060256999999999783e-01 4.113589818333330261e-01 1.688841199999999848e-02 +7.260906999999999778e-01 4.258370573333329911e-01 1.820484666666670123e-02 +7.492763000000000062e-01 3.814062795000000006e-01 1.498164383333329928e-02 +7.722440999999999889e-01 3.582434820000000020e-01 1.702263550000000097e-02 +7.923405000000000031e-01 3.290160251666670033e-01 1.493438950000000078e-02 +8.157583999999999946e-01 3.190799841666669967e-01 1.530228649999999975e-02 +8.367025000000000157e-01 2.762952625000000273e-01 1.450753649999999943e-02 +8.622005000000000363e-01 2.544186793333330088e-01 1.365137966666669922e-02 +8.849101000000000328e-01 2.424038613333329983e-01 1.432358516666669933e-02 +9.084231000000000389e-01 2.172930054999999971e-01 1.256612799999999933e-02 +9.337292000000000369e-01 2.202721591666670087e-01 1.359930866666670020e-02 +9.554743999999999460e-01 1.777866800000000025e-01 1.269970833333330072e-02 +9.815962999999999772e-01 1.676419470000000134e-01 1.190602366666669923e-02 +1.007114700000000029e+00 1.595580418333329975e-01 1.234223233333330005e-02 +1.030720700000000045e+00 1.541775503333329966e-01 1.173861049999999975e-02 +1.058106800000000014e+00 1.554276226666669869e-01 1.088984299999999975e-02 +1.084931700000000054e+00 1.440364893333329899e-01 1.122487333333329999e-02 +1.110240600000000022e+00 1.198653424999999995e-01 1.085281416666670010e-02 +1.138098400000000066e+00 1.211473946666670048e-01 1.044690799999999954e-02 1.166391799999999979e+00 1.189307901666669942e-01 1.021903716666669980e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv index 1161fab16..ee5f13e07 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/13_8000_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 6.302187949999999717e+01 1.635904319500000170e+01 -4.070000000000000007e-02 2.785521429499999968e+01 1.130956581166669928e+01 -4.511180000000000051e-02 1.008215536333329965e+01 8.312546360000000689e+00 -4.959249999999999770e-02 1.581932412333330085e+01 6.758513281666670203e+00 -5.416379999999999806e-02 7.750620351666669627e+00 5.282679641666669923e+00 -5.868999999999999911e-02 1.257659237500000060e+01 4.560014873333329888e+00 -6.315320000000000655e-02 1.891331758666670027e+01 3.761777425000000008e+00 -6.773540000000000116e-02 1.328150150333330082e+01 3.102479755000000061e+00 -7.238989999999999314e-02 9.795755306666670492e+00 2.689289660000000026e+00 -7.694339999999999513e-02 1.021541878833330053e+01 2.386645821666669942e+00 -8.166600000000000248e-02 7.264236756666670125e+00 1.982897978333330036e+00 -8.641719999999999957e-02 9.727612021666670827e+00 1.793249476666670006e+00 -9.109140000000000292e-02 9.940133039999999198e+00 1.578285125000000066e+00 -9.576210000000000278e-02 5.869161616666669801e+00 1.426304660000000002e+00 -1.005216000000000026e-01 6.271050506666670188e+00 1.258989316666669911e+00 -1.052672000000000052e-01 4.575212496666670070e+00 1.144957958333330028e+00 -1.100174000000000013e-01 6.675946670000000083e+00 1.046739891666669919e+00 -1.148721999999999938e-01 4.569861300000000348e+00 9.307519933333330275e-01 -1.198083000000000065e-01 4.073412075000000243e+00 8.536948699999999945e-01 -1.248023999999999939e-01 5.517398765000000260e+00 8.081908083333330106e-01 -1.298709000000000113e-01 6.055929844999999645e+00 7.277152516666669513e-01 -1.349431000000000103e-01 4.214499321666670184e+00 6.853886750000000028e-01 -1.399610000000000021e-01 4.711855326666669619e+00 6.206856016666669751e-01 -1.451112999999999986e-01 4.280988370000000209e+00 5.992362466666669718e-01 -1.503050999999999970e-01 3.350940026666669791e+00 5.604130616666670450e-01 -1.556469000000000047e-01 4.037392881666669986e+00 5.086757983333329847e-01 -1.572660999999999920e-01 4.116049464999999685e+00 1.639383783333329958e-01 -1.609891999999999990e-01 4.767404383333330387e+00 4.936060199999999787e-01 -1.662309999999999899e-01 4.092517224999999925e+00 4.643677516666669947e-01 -1.706513000000000058e-01 3.775210913333329810e+00 1.365719850000000068e-01 -1.716062999999999894e-01 4.067082121666669714e+00 4.413313999999999848e-01 -1.771733000000000058e-01 3.397890750000000182e+00 4.070909349999999871e-01 -1.827794000000000085e-01 4.061001236666670344e+00 3.925402433333329832e-01 -1.842668000000000084e-01 3.799252254999999856e+00 1.178310383333329991e-01 -1.883665999999999952e-01 3.208655455000000156e+00 3.733191000000000148e-01 -1.940302000000000138e-01 3.206445976666670195e+00 3.650098783333329822e-01 -1.982673000000000074e-01 3.425276903333330125e+00 1.008325449999999956e-01 -1.998185000000000100e-01 3.354815260000000077e+00 3.406662516666669749e-01 -2.056348000000000065e-01 3.721227830000000125e+00 3.339491649999999923e-01 -2.115208000000000088e-01 3.612948971666670062e+00 3.193275150000000062e-01 -2.120387999999999995e-01 3.205896688333329969e+00 9.145261000000000362e-02 -2.162467999999999890e-01 3.645113248333330169e+00 4.021025750000000176e-01 -2.260118000000000127e-01 3.104582965000000083e+00 8.081593333333329798e-02 -2.398155999999999899e-01 3.037513673333330111e+00 7.613482000000000582e-02 -2.537425999999999848e-01 2.836682165000000033e+00 6.969811833333329487e-02 -2.676623000000000197e-01 2.819590748333329788e+00 6.462849833333329796e-02 -2.818223999999999729e-01 2.721404538333330070e+00 6.033223166666670106e-02 -2.956782000000000021e-01 2.736251186666669888e+00 5.799425166666669768e-02 -3.099446000000000145e-01 2.543946483333329844e+00 5.286760000000000070e-02 -3.241067000000000253e-01 2.287160831666669836e+00 5.112056499999999976e-02 -3.388467000000000007e-01 2.288673078333329780e+00 4.649771999999999933e-02 -3.539599999999999969e-01 2.199149091666670053e+00 4.568711999999999773e-02 -3.687568999999999986e-01 2.068072668333329922e+00 4.217328666666669834e-02 -3.840311000000000141e-01 1.969221529999999998e+00 4.012745166666670249e-02 -3.989493000000000067e-01 1.908232941666669902e+00 3.938963333333329875e-02 -4.107629999999999892e-01 1.727702871333330004e+00 3.958386533333330126e-02 -4.137051999999999952e-01 1.726875600000000066e+00 3.720425833333330240e-02 -4.291185000000000138e-01 1.581841901666670047e+00 3.398506666666670228e-02 -4.296455000000000135e-01 1.691278518333330094e+00 3.404221949999999830e-02 -4.446591999999999767e-01 1.488087740000000103e+00 3.374035333333329917e-02 -4.467690999999999746e-01 1.413946998166669911e+00 2.991126200000000096e-02 -4.603923999999999794e-01 1.391984139999999925e+00 3.130147333333330173e-02 -4.686460000000000070e-01 1.392956528666670080e+00 2.997462383333330052e-02 -4.765479000000000243e-01 1.301627080000000047e+00 2.965699000000000113e-02 -4.835137999999999936e-01 1.193676802499999967e+00 2.800566683333330018e-02 -4.923843999999999999e-01 1.242278698333330045e+00 2.973970833333329858e-02 -5.047722000000000042e-01 1.149708217833329993e+00 2.613050733333329920e-02 -5.083368000000000331e-01 1.161310218333329924e+00 2.733334000000000111e-02 -5.231871000000000160e-01 9.503032668333329935e-01 2.446244750000000148e-02 -5.249844000000000177e-01 1.102167341666669964e+00 2.571981833333330039e-02 -5.417480000000000073e-01 9.754589783333329489e-01 2.525416166666670167e-02 -5.445189000000000279e-01 9.366835949999999800e-01 2.497178450000000008e-02 -5.583793000000000228e-01 8.831162099999999571e-01 2.438054666666670048e-02 -5.613839000000000468e-01 8.824506341666670250e-01 2.281443349999999828e-02 -5.754704000000000486e-01 8.100822066666669707e-01 2.253018666666670167e-02 -5.835346000000000144e-01 7.776236106666669645e-01 2.252483566666670101e-02 -5.928168000000000326e-01 7.764561633333330049e-01 2.182597999999999830e-02 -6.007057000000000091e-01 6.983251131666670108e-01 2.131793766666669962e-02 -6.099849999999999994e-01 7.099790583333329685e-01 2.117932666666669933e-02 -6.219902999999999960e-01 6.466382168333330016e-01 2.081252199999999997e-02 -6.275817000000000201e-01 6.603706066666670260e-01 2.006477833333330033e-02 -6.413482000000000349e-01 5.710830485000000234e-01 1.856948533333329862e-02 -6.447992000000000168e-01 5.732715750000000332e-01 2.040912500000000018e-02 -6.656950000000000367e-01 5.203726888333329859e-01 1.789587166666670170e-02 -6.845196000000000058e-01 4.749653629999999738e-01 1.990720683333329841e-02 -7.059646000000000532e-01 3.822856073333329996e-01 1.675657983333329881e-02 -7.260278000000000009e-01 3.886542691666670102e-01 1.802539466666670115e-02 -7.492113999999999718e-01 3.564554191666670091e-01 1.487377883333330063e-02 -7.721772000000000080e-01 3.333074428333330230e-01 1.689668533333330003e-02 -7.922717999999999705e-01 3.187338046666670088e-01 1.488059016666670037e-02 -8.156877999999999629e-01 3.010368924999999862e-01 1.521491216666670011e-02 -8.366301000000000432e-01 2.406595508333330136e-01 1.435568400000000050e-02 -8.621258000000000532e-01 2.223576200000000058e-01 1.352156766666669924e-02 -8.848333999999999921e-01 2.207387865000000060e-01 1.422139816666669922e-02 -9.083444000000000518e-01 2.134049949999999862e-01 1.254214099999999971e-02 -9.336484000000000449e-01 1.885945263333330124e-01 1.346345033333330027e-02 -9.553916000000000075e-01 1.698076676666669949e-01 1.265998783333329922e-02 -9.815112999999999754e-01 1.668850050000000029e-01 1.189438716666670059e-02 -1.007027499999999964e+00 1.441018685000000077e-01 1.227580483333329947e-02 -1.030631400000000086e+00 1.406578583333329968e-01 1.168073399999999991e-02 -1.058015099999999986e+00 1.399035711666669901e-01 1.082874783333329961e-02 -1.084837700000000016e+00 1.486492919999999884e-01 1.123307866666669978e-02 -1.110144500000000090e+00 1.008698655000000027e-01 1.077987283333329931e-02 -1.137999800000000006e+00 1.027075286666670056e-01 1.037853683333330064e-02 +3.625239999999999713e-02 6.302187949999999717e+01 1.635904319500000170e+01 +4.070000000000000007e-02 2.785521429499999968e+01 1.130956581166669928e+01 +4.511180000000000051e-02 1.008215536333329965e+01 8.312546360000000689e+00 +4.959249999999999770e-02 1.581932412333330085e+01 6.758513281666670203e+00 +5.416379999999999806e-02 7.750620351666669627e+00 5.282679641666669923e+00 +5.868999999999999911e-02 1.257659237500000060e+01 4.560014873333329888e+00 +6.315320000000000655e-02 1.891331758666670027e+01 3.761777425000000008e+00 +6.773540000000000116e-02 1.328150150333330082e+01 3.102479755000000061e+00 +7.238989999999999314e-02 9.795755306666670492e+00 2.689289660000000026e+00 +7.694339999999999513e-02 1.021541878833330053e+01 2.386645821666669942e+00 +8.166600000000000248e-02 7.264236756666670125e+00 1.982897978333330036e+00 +8.641719999999999957e-02 9.727612021666670827e+00 1.793249476666670006e+00 +9.109140000000000292e-02 9.940133039999999198e+00 1.578285125000000066e+00 +9.576210000000000278e-02 5.869161616666669801e+00 1.426304660000000002e+00 +1.005216000000000026e-01 6.271050506666670188e+00 1.258989316666669911e+00 +1.052672000000000052e-01 4.575212496666670070e+00 1.144957958333330028e+00 +1.100174000000000013e-01 6.675946670000000083e+00 1.046739891666669919e+00 +1.148721999999999938e-01 4.569861300000000348e+00 9.307519933333330275e-01 +1.198083000000000065e-01 4.073412075000000243e+00 8.536948699999999945e-01 +1.248023999999999939e-01 5.517398765000000260e+00 8.081908083333330106e-01 +1.298709000000000113e-01 6.055929844999999645e+00 7.277152516666669513e-01 +1.349431000000000103e-01 4.214499321666670184e+00 6.853886750000000028e-01 +1.399610000000000021e-01 4.711855326666669619e+00 6.206856016666669751e-01 +1.451112999999999986e-01 4.280988370000000209e+00 5.992362466666669718e-01 +1.503050999999999970e-01 3.350940026666669791e+00 5.604130616666670450e-01 +1.556469000000000047e-01 4.037392881666669986e+00 5.086757983333329847e-01 +1.572660999999999920e-01 4.116049464999999685e+00 1.639383783333329958e-01 +1.609891999999999990e-01 4.767404383333330387e+00 4.936060199999999787e-01 +1.662309999999999899e-01 4.092517224999999925e+00 4.643677516666669947e-01 +1.706513000000000058e-01 3.775210913333329810e+00 1.365719850000000068e-01 +1.716062999999999894e-01 4.067082121666669714e+00 4.413313999999999848e-01 +1.771733000000000058e-01 3.397890750000000182e+00 4.070909349999999871e-01 +1.827794000000000085e-01 4.061001236666670344e+00 3.925402433333329832e-01 +1.842668000000000084e-01 3.799252254999999856e+00 1.178310383333329991e-01 +1.883665999999999952e-01 3.208655455000000156e+00 3.733191000000000148e-01 +1.940302000000000138e-01 3.206445976666670195e+00 3.650098783333329822e-01 +1.982673000000000074e-01 3.425276903333330125e+00 1.008325449999999956e-01 +1.998185000000000100e-01 3.354815260000000077e+00 3.406662516666669749e-01 +2.056348000000000065e-01 3.721227830000000125e+00 3.339491649999999923e-01 +2.115208000000000088e-01 3.612948971666670062e+00 3.193275150000000062e-01 +2.120387999999999995e-01 3.205896688333329969e+00 9.145261000000000362e-02 +2.162467999999999890e-01 3.645113248333330169e+00 4.021025750000000176e-01 +2.260118000000000127e-01 3.104582965000000083e+00 8.081593333333329798e-02 +2.398155999999999899e-01 3.037513673333330111e+00 7.613482000000000582e-02 +2.537425999999999848e-01 2.836682165000000033e+00 6.969811833333329487e-02 +2.676623000000000197e-01 2.819590748333329788e+00 6.462849833333329796e-02 +2.818223999999999729e-01 2.721404538333330070e+00 6.033223166666670106e-02 +2.956782000000000021e-01 2.736251186666669888e+00 5.799425166666669768e-02 +3.099446000000000145e-01 2.543946483333329844e+00 5.286760000000000070e-02 +3.241067000000000253e-01 2.287160831666669836e+00 5.112056499999999976e-02 +3.388467000000000007e-01 2.288673078333329780e+00 4.649771999999999933e-02 +3.539599999999999969e-01 2.199149091666670053e+00 4.568711999999999773e-02 +3.687568999999999986e-01 2.068072668333329922e+00 4.217328666666669834e-02 +3.840311000000000141e-01 1.969221529999999998e+00 4.012745166666670249e-02 +3.989493000000000067e-01 1.908232941666669902e+00 3.938963333333329875e-02 +4.107629999999999892e-01 1.727702871333330004e+00 3.958386533333330126e-02 +4.137051999999999952e-01 1.726875600000000066e+00 3.720425833333330240e-02 +4.291185000000000138e-01 1.581841901666670047e+00 3.398506666666670228e-02 +4.296455000000000135e-01 1.691278518333330094e+00 3.404221949999999830e-02 +4.446591999999999767e-01 1.488087740000000103e+00 3.374035333333329917e-02 +4.467690999999999746e-01 1.413946998166669911e+00 2.991126200000000096e-02 +4.603923999999999794e-01 1.391984139999999925e+00 3.130147333333330173e-02 +4.686460000000000070e-01 1.392956528666670080e+00 2.997462383333330052e-02 +4.765479000000000243e-01 1.301627080000000047e+00 2.965699000000000113e-02 +4.835137999999999936e-01 1.193676802499999967e+00 2.800566683333330018e-02 +4.923843999999999999e-01 1.242278698333330045e+00 2.973970833333329858e-02 +5.047722000000000042e-01 1.149708217833329993e+00 2.613050733333329920e-02 +5.083368000000000331e-01 1.161310218333329924e+00 2.733334000000000111e-02 +5.231871000000000160e-01 9.503032668333329935e-01 2.446244750000000148e-02 +5.249844000000000177e-01 1.102167341666669964e+00 2.571981833333330039e-02 +5.417480000000000073e-01 9.754589783333329489e-01 2.525416166666670167e-02 +5.445189000000000279e-01 9.366835949999999800e-01 2.497178450000000008e-02 +5.583793000000000228e-01 8.831162099999999571e-01 2.438054666666670048e-02 +5.613839000000000468e-01 8.824506341666670250e-01 2.281443349999999828e-02 +5.754704000000000486e-01 8.100822066666669707e-01 2.253018666666670167e-02 +5.835346000000000144e-01 7.776236106666669645e-01 2.252483566666670101e-02 +5.928168000000000326e-01 7.764561633333330049e-01 2.182597999999999830e-02 +6.007057000000000091e-01 6.983251131666670108e-01 2.131793766666669962e-02 +6.099849999999999994e-01 7.099790583333329685e-01 2.117932666666669933e-02 +6.219902999999999960e-01 6.466382168333330016e-01 2.081252199999999997e-02 +6.275817000000000201e-01 6.603706066666670260e-01 2.006477833333330033e-02 +6.413482000000000349e-01 5.710830485000000234e-01 1.856948533333329862e-02 +6.447992000000000168e-01 5.732715750000000332e-01 2.040912500000000018e-02 +6.656950000000000367e-01 5.203726888333329859e-01 1.789587166666670170e-02 +6.845196000000000058e-01 4.749653629999999738e-01 1.990720683333329841e-02 +7.059646000000000532e-01 3.822856073333329996e-01 1.675657983333329881e-02 +7.260278000000000009e-01 3.886542691666670102e-01 1.802539466666670115e-02 +7.492113999999999718e-01 3.564554191666670091e-01 1.487377883333330063e-02 +7.721772000000000080e-01 3.333074428333330230e-01 1.689668533333330003e-02 +7.922717999999999705e-01 3.187338046666670088e-01 1.488059016666670037e-02 +8.156877999999999629e-01 3.010368924999999862e-01 1.521491216666670011e-02 +8.366301000000000432e-01 2.406595508333330136e-01 1.435568400000000050e-02 +8.621258000000000532e-01 2.223576200000000058e-01 1.352156766666669924e-02 +8.848333999999999921e-01 2.207387865000000060e-01 1.422139816666669922e-02 +9.083444000000000518e-01 2.134049949999999862e-01 1.254214099999999971e-02 +9.336484000000000449e-01 1.885945263333330124e-01 1.346345033333330027e-02 +9.553916000000000075e-01 1.698076676666669949e-01 1.265998783333329922e-02 +9.815112999999999754e-01 1.668850050000000029e-01 1.189438716666670059e-02 +1.007027499999999964e+00 1.441018685000000077e-01 1.227580483333329947e-02 +1.030631400000000086e+00 1.406578583333329968e-01 1.168073399999999991e-02 +1.058015099999999986e+00 1.399035711666669901e-01 1.082874783333329961e-02 +1.084837700000000016e+00 1.486492919999999884e-01 1.123307866666669978e-02 +1.110144500000000090e+00 1.008698655000000027e-01 1.077987283333329931e-02 +1.137999800000000006e+00 1.027075286666670056e-01 1.037853683333330064e-02 1.166290800000000072e+00 1.157098001666670012e-01 1.020088966666670045e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv index 741887c08..1c5c261ee 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/1_0_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 2.859171986188329811e+03 2.282233352000000082e+01 -4.070000000000000007e-02 1.037695935384999984e+03 1.390765389166669941e+01 -4.511180000000000051e-02 4.617414862783330136e+02 9.644274246666670436e+00 -4.959249999999999770e-02 2.830472148050000101e+02 7.651757100000000200e+00 -5.416379999999999806e-02 1.737180786733329967e+02 5.901133003333329796e+00 -5.868999999999999911e-02 1.284318533800000068e+02 5.055296333333330061e+00 -6.315320000000000655e-02 1.083304533916670067e+02 4.179970964999999872e+00 -6.773540000000000116e-02 8.164665742500000079e+01 3.449109084999999908e+00 -7.238989999999999314e-02 6.842710629666669320e+01 3.015091889999999886e+00 -7.694339999999999513e-02 6.503887503333329789e+01 2.712566869999999852e+00 -8.166600000000000248e-02 5.768616606333330310e+01 2.292022508333329878e+00 -8.641719999999999957e-02 4.726633163000000337e+01 2.052834279999999900e+00 -9.109140000000000292e-02 4.170182763166670270e+01 1.806841736666670029e+00 -9.576210000000000278e-02 3.278791741500000256e+01 1.635979810000000034e+00 -1.005216000000000026e-01 3.137094696333329935e+01 1.457612156666669989e+00 -1.052672000000000052e-01 2.858316747499999977e+01 1.352856671666669897e+00 -1.100174000000000013e-01 2.685582243333330155e+01 1.222659363333330029e+00 -1.148721999999999938e-01 2.463809722666670154e+01 1.115379456666669933e+00 -1.198083000000000065e-01 1.979913578000000030e+01 1.002652691666670037e+00 -1.248023999999999939e-01 1.884005529499999909e+01 9.371682333333329895e-01 -1.298709000000000113e-01 2.011378014833330141e+01 8.660532583333330203e-01 -1.349431000000000103e-01 1.548196221999999977e+01 8.040137483333329449e-01 -1.399610000000000021e-01 1.553817986500000004e+01 7.396018783333330182e-01 -1.451112999999999986e-01 1.380290046833330031e+01 7.008050850000000498e-01 -1.503050999999999970e-01 1.290957537833329916e+01 6.659874700000000258e-01 -1.556469000000000047e-01 1.188963399333329995e+01 5.958023666666669715e-01 -1.572456999999999883e-01 1.305280697499999931e+01 1.930089849999999940e-01 -1.609891999999999990e-01 1.134609165166670053e+01 5.714861916666670316e-01 -1.662309999999999899e-01 1.103891432833330022e+01 5.468199316666669807e-01 -1.706292000000000086e-01 1.121912493499999997e+01 1.614639983333329976e-01 -1.716062999999999894e-01 1.098087770333330049e+01 5.221648316666670508e-01 -1.771733000000000058e-01 9.846715853333330770e+00 4.826313150000000052e-01 -1.827794000000000085e-01 1.030369242166669963e+01 4.679303400000000002e-01 -1.842428999999999872e-01 9.629214631666670243e+00 1.387244099999999924e-01 -1.883665999999999952e-01 9.108624106666670883e+00 4.454082083333330000e-01 -1.940302000000000138e-01 8.056377178333329780e+00 4.232006716666670276e-01 -1.982414999999999872e-01 8.605072379999999299e+00 1.202604099999999981e-01 -1.998185000000000100e-01 8.229729869999999892e+00 3.995894999999999864e-01 -2.056348000000000065e-01 8.070094290000000115e+00 3.879820366666669740e-01 -2.115208000000000088e-01 7.741634115000000094e+00 3.686955350000000187e-01 -2.120113000000000136e-01 7.664225765000000301e+00 1.093220133333329958e-01 -2.162467999999999890e-01 7.363320653333330412e+00 4.626756216666669808e-01 -2.259823999999999999e-01 6.848802841666669750e+00 9.609777999999999376e-02 -2.397845000000000115e-01 6.337189861666669977e+00 9.020952999999999611e-02 -2.537096999999999825e-01 5.738702153333330003e+00 8.211384833333329469e-02 -2.676275000000000182e-01 5.346591223333329701e+00 7.572218666666670484e-02 -2.817857999999999752e-01 5.009933698333330021e+00 7.051459333333330581e-02 -2.956398000000000081e-01 4.597692046666669974e+00 6.646157833333329878e-02 -3.099044000000000243e-01 4.193400725000000051e+00 6.031815000000000093e-02 -3.240645999999999805e-01 3.804645918333330101e+00 5.825413166666670167e-02 -3.388027000000000122e-01 3.560888523333329836e+00 5.213344166666669666e-02 -3.539140000000000064e-01 3.375211385000000064e+00 5.107971833333330158e-02 -3.687090000000000090e-01 3.188264295000000192e+00 4.732182333333329743e-02 -3.839813000000000254e-01 2.892990108333330035e+00 4.441047333333329739e-02 -3.988975000000000160e-01 2.640608908333330174e+00 4.290645666666669661e-02 -4.106379000000000001e-01 2.501690660833329805e+00 4.331324033333330131e-02 -4.136514000000000024e-01 2.477246653333330162e+00 4.077528500000000139e-02 -4.290628000000000219e-01 2.358423203333329887e+00 3.769917166666669761e-02 -4.295145000000000213e-01 2.266923564999999918e+00 3.645828216666670285e-02 -4.446014999999999828e-01 2.023246533333329822e+00 3.627248666666670063e-02 -4.466328999999999994e-01 2.032174506166669836e+00 3.243397416666669864e-02 -4.603325999999999807e-01 1.951935533333329920e+00 3.395880333333330114e-02 -4.685032000000000085e-01 1.797322475499999905e+00 3.168831166666669780e-02 -4.764860000000000206e-01 1.814704324999999896e+00 3.212894000000000166e-02 -4.833663999999999739e-01 1.722621554333330085e+00 3.037123383333329915e-02 -4.923204999999999942e-01 1.658358661666669898e+00 3.178619500000000320e-02 -5.046184000000000225e-01 1.539108265666669917e+00 2.774163983333330016e-02 -5.082708000000000226e-01 1.547966548333330028e+00 2.920229666666670013e-02 -5.230276000000000369e-01 1.345057283333330078e+00 2.608127533333329945e-02 -5.249162000000000550e-01 1.417396718333330030e+00 2.724554333333329900e-02 -5.416775999999999813e-01 1.270799306666670070e+00 2.670250999999999875e-02 -5.443529999999999758e-01 1.250087865666670073e+00 2.633086933333329827e-02 -5.583067999999999920e-01 1.165305416666670091e+00 2.577655499999999961e-02 -5.612129000000000145e-01 1.147836548999999984e+00 2.393862083333329893e-02 -5.753956999999999544e-01 1.115183805000000028e+00 2.400332833333329932e-02 -5.833568000000000087e-01 1.044019996999999922e+00 2.366755300000000090e-02 -5.927398999999999862e-01 1.004017331666670065e+00 2.296542000000000028e-02 -6.005226999999999649e-01 9.482225546666670501e-01 2.240195116666670108e-02 -6.099058000000000535e-01 9.388455449999999480e-01 2.233828499999999939e-02 -6.218008000000000424e-01 8.511757086666670302e-01 2.168908733333330119e-02 -6.275003000000000108e-01 8.553386066666669452e-01 2.101305833333329959e-02 -6.411527999999999672e-01 7.761240236666669956e-01 1.940277716666670080e-02 -6.447154999999999969e-01 7.270576883333329521e-01 2.120466833333330137e-02 -6.654921999999999782e-01 7.007768106666669716e-01 1.861042133333330045e-02 -6.843110000000000026e-01 6.466361541666669766e-01 2.069310833333330019e-02 -7.057493999999999712e-01 5.771519323333329510e-01 1.752841666666669906e-02 -7.258065000000000211e-01 5.204018098333329512e-01 1.860044799999999859e-02 -7.489831000000000127e-01 4.984340896666670240e-01 1.540761000000000040e-02 -7.719418000000000113e-01 4.436713720000000083e-01 1.738589999999999927e-02 -7.920304000000000233e-01 4.316635041666669892e-01 1.532890283333330009e-02 -8.154392000000000307e-01 3.868879691666670118e-01 1.556857449999999969e-02 -8.363751000000000380e-01 3.670109628333330098e-01 1.484866983333330004e-02 -8.618630000000000457e-01 3.329731463333330255e-01 1.392995016666669951e-02 -8.845638000000000112e-01 3.302565831666670060e-01 1.467645416666669977e-02 -9.080675999999999748e-01 2.757098590000000016e-01 1.276754683333329934e-02 -9.333637999999999657e-01 2.804865558333329845e-01 1.382540016666669938e-02 -9.551005000000000189e-01 2.398962168333330092e-01 1.292395533333329932e-02 -9.812121999999999788e-01 2.360268241666670097e-01 1.213837400000000039e-02 -1.006720599999999965e+00 2.134167958333330062e-01 1.253179649999999930e-02 -1.030317399999999939e+00 2.102511210000000130e-01 1.193319533333330081e-02 -1.057692700000000041e+00 2.135461601666669984e-01 1.107935333333330032e-02 -1.084507099999999946e+00 1.969431385000000034e-01 1.140526600000000071e-02 -1.109806099999999907e+00 1.561050018333330069e-01 1.096976283333329916e-02 -1.137653000000000025e+00 1.629041234999999976e-01 1.057719600000000051e-02 +3.625239999999999713e-02 2.859171986188329811e+03 2.282233352000000082e+01 +4.070000000000000007e-02 1.037695935384999984e+03 1.390765389166669941e+01 +4.511180000000000051e-02 4.617414862783330136e+02 9.644274246666670436e+00 +4.959249999999999770e-02 2.830472148050000101e+02 7.651757100000000200e+00 +5.416379999999999806e-02 1.737180786733329967e+02 5.901133003333329796e+00 +5.868999999999999911e-02 1.284318533800000068e+02 5.055296333333330061e+00 +6.315320000000000655e-02 1.083304533916670067e+02 4.179970964999999872e+00 +6.773540000000000116e-02 8.164665742500000079e+01 3.449109084999999908e+00 +7.238989999999999314e-02 6.842710629666669320e+01 3.015091889999999886e+00 +7.694339999999999513e-02 6.503887503333329789e+01 2.712566869999999852e+00 +8.166600000000000248e-02 5.768616606333330310e+01 2.292022508333329878e+00 +8.641719999999999957e-02 4.726633163000000337e+01 2.052834279999999900e+00 +9.109140000000000292e-02 4.170182763166670270e+01 1.806841736666670029e+00 +9.576210000000000278e-02 3.278791741500000256e+01 1.635979810000000034e+00 +1.005216000000000026e-01 3.137094696333329935e+01 1.457612156666669989e+00 +1.052672000000000052e-01 2.858316747499999977e+01 1.352856671666669897e+00 +1.100174000000000013e-01 2.685582243333330155e+01 1.222659363333330029e+00 +1.148721999999999938e-01 2.463809722666670154e+01 1.115379456666669933e+00 +1.198083000000000065e-01 1.979913578000000030e+01 1.002652691666670037e+00 +1.248023999999999939e-01 1.884005529499999909e+01 9.371682333333329895e-01 +1.298709000000000113e-01 2.011378014833330141e+01 8.660532583333330203e-01 +1.349431000000000103e-01 1.548196221999999977e+01 8.040137483333329449e-01 +1.399610000000000021e-01 1.553817986500000004e+01 7.396018783333330182e-01 +1.451112999999999986e-01 1.380290046833330031e+01 7.008050850000000498e-01 +1.503050999999999970e-01 1.290957537833329916e+01 6.659874700000000258e-01 +1.556469000000000047e-01 1.188963399333329995e+01 5.958023666666669715e-01 +1.572456999999999883e-01 1.305280697499999931e+01 1.930089849999999940e-01 +1.609891999999999990e-01 1.134609165166670053e+01 5.714861916666670316e-01 +1.662309999999999899e-01 1.103891432833330022e+01 5.468199316666669807e-01 +1.706292000000000086e-01 1.121912493499999997e+01 1.614639983333329976e-01 +1.716062999999999894e-01 1.098087770333330049e+01 5.221648316666670508e-01 +1.771733000000000058e-01 9.846715853333330770e+00 4.826313150000000052e-01 +1.827794000000000085e-01 1.030369242166669963e+01 4.679303400000000002e-01 +1.842428999999999872e-01 9.629214631666670243e+00 1.387244099999999924e-01 +1.883665999999999952e-01 9.108624106666670883e+00 4.454082083333330000e-01 +1.940302000000000138e-01 8.056377178333329780e+00 4.232006716666670276e-01 +1.982414999999999872e-01 8.605072379999999299e+00 1.202604099999999981e-01 +1.998185000000000100e-01 8.229729869999999892e+00 3.995894999999999864e-01 +2.056348000000000065e-01 8.070094290000000115e+00 3.879820366666669740e-01 +2.115208000000000088e-01 7.741634115000000094e+00 3.686955350000000187e-01 +2.120113000000000136e-01 7.664225765000000301e+00 1.093220133333329958e-01 +2.162467999999999890e-01 7.363320653333330412e+00 4.626756216666669808e-01 +2.259823999999999999e-01 6.848802841666669750e+00 9.609777999999999376e-02 +2.397845000000000115e-01 6.337189861666669977e+00 9.020952999999999611e-02 +2.537096999999999825e-01 5.738702153333330003e+00 8.211384833333329469e-02 +2.676275000000000182e-01 5.346591223333329701e+00 7.572218666666670484e-02 +2.817857999999999752e-01 5.009933698333330021e+00 7.051459333333330581e-02 +2.956398000000000081e-01 4.597692046666669974e+00 6.646157833333329878e-02 +3.099044000000000243e-01 4.193400725000000051e+00 6.031815000000000093e-02 +3.240645999999999805e-01 3.804645918333330101e+00 5.825413166666670167e-02 +3.388027000000000122e-01 3.560888523333329836e+00 5.213344166666669666e-02 +3.539140000000000064e-01 3.375211385000000064e+00 5.107971833333330158e-02 +3.687090000000000090e-01 3.188264295000000192e+00 4.732182333333329743e-02 +3.839813000000000254e-01 2.892990108333330035e+00 4.441047333333329739e-02 +3.988975000000000160e-01 2.640608908333330174e+00 4.290645666666669661e-02 +4.106379000000000001e-01 2.501690660833329805e+00 4.331324033333330131e-02 +4.136514000000000024e-01 2.477246653333330162e+00 4.077528500000000139e-02 +4.290628000000000219e-01 2.358423203333329887e+00 3.769917166666669761e-02 +4.295145000000000213e-01 2.266923564999999918e+00 3.645828216666670285e-02 +4.446014999999999828e-01 2.023246533333329822e+00 3.627248666666670063e-02 +4.466328999999999994e-01 2.032174506166669836e+00 3.243397416666669864e-02 +4.603325999999999807e-01 1.951935533333329920e+00 3.395880333333330114e-02 +4.685032000000000085e-01 1.797322475499999905e+00 3.168831166666669780e-02 +4.764860000000000206e-01 1.814704324999999896e+00 3.212894000000000166e-02 +4.833663999999999739e-01 1.722621554333330085e+00 3.037123383333329915e-02 +4.923204999999999942e-01 1.658358661666669898e+00 3.178619500000000320e-02 +5.046184000000000225e-01 1.539108265666669917e+00 2.774163983333330016e-02 +5.082708000000000226e-01 1.547966548333330028e+00 2.920229666666670013e-02 +5.230276000000000369e-01 1.345057283333330078e+00 2.608127533333329945e-02 +5.249162000000000550e-01 1.417396718333330030e+00 2.724554333333329900e-02 +5.416775999999999813e-01 1.270799306666670070e+00 2.670250999999999875e-02 +5.443529999999999758e-01 1.250087865666670073e+00 2.633086933333329827e-02 +5.583067999999999920e-01 1.165305416666670091e+00 2.577655499999999961e-02 +5.612129000000000145e-01 1.147836548999999984e+00 2.393862083333329893e-02 +5.753956999999999544e-01 1.115183805000000028e+00 2.400332833333329932e-02 +5.833568000000000087e-01 1.044019996999999922e+00 2.366755300000000090e-02 +5.927398999999999862e-01 1.004017331666670065e+00 2.296542000000000028e-02 +6.005226999999999649e-01 9.482225546666670501e-01 2.240195116666670108e-02 +6.099058000000000535e-01 9.388455449999999480e-01 2.233828499999999939e-02 +6.218008000000000424e-01 8.511757086666670302e-01 2.168908733333330119e-02 +6.275003000000000108e-01 8.553386066666669452e-01 2.101305833333329959e-02 +6.411527999999999672e-01 7.761240236666669956e-01 1.940277716666670080e-02 +6.447154999999999969e-01 7.270576883333329521e-01 2.120466833333330137e-02 +6.654921999999999782e-01 7.007768106666669716e-01 1.861042133333330045e-02 +6.843110000000000026e-01 6.466361541666669766e-01 2.069310833333330019e-02 +7.057493999999999712e-01 5.771519323333329510e-01 1.752841666666669906e-02 +7.258065000000000211e-01 5.204018098333329512e-01 1.860044799999999859e-02 +7.489831000000000127e-01 4.984340896666670240e-01 1.540761000000000040e-02 +7.719418000000000113e-01 4.436713720000000083e-01 1.738589999999999927e-02 +7.920304000000000233e-01 4.316635041666669892e-01 1.532890283333330009e-02 +8.154392000000000307e-01 3.868879691666670118e-01 1.556857449999999969e-02 +8.363751000000000380e-01 3.670109628333330098e-01 1.484866983333330004e-02 +8.618630000000000457e-01 3.329731463333330255e-01 1.392995016666669951e-02 +8.845638000000000112e-01 3.302565831666670060e-01 1.467645416666669977e-02 +9.080675999999999748e-01 2.757098590000000016e-01 1.276754683333329934e-02 +9.333637999999999657e-01 2.804865558333329845e-01 1.382540016666669938e-02 +9.551005000000000189e-01 2.398962168333330092e-01 1.292395533333329932e-02 +9.812121999999999788e-01 2.360268241666670097e-01 1.213837400000000039e-02 +1.006720599999999965e+00 2.134167958333330062e-01 1.253179649999999930e-02 +1.030317399999999939e+00 2.102511210000000130e-01 1.193319533333330081e-02 +1.057692700000000041e+00 2.135461601666669984e-01 1.107935333333330032e-02 +1.084507099999999946e+00 1.969431385000000034e-01 1.140526600000000071e-02 +1.109806099999999907e+00 1.561050018333330069e-01 1.096976283333329916e-02 +1.137653000000000025e+00 1.629041234999999976e-01 1.057719600000000051e-02 1.165935399999999955e+00 1.774132069999999894e-01 1.040658966666670009e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv index a4e026fba..3fc895617 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/2_20_1340_10.csv @@ -1,105 +1,105 @@ -3.623980000000000257e-02 4.717095203250000282e+02 1.736400694499999986e+01 -4.068580000000000113e-02 2.786014172683330230e+02 1.198827076999999974e+01 -4.509610000000000007e-02 1.807710803516669955e+02 8.834240069999999889e+00 -4.957530000000000270e-02 1.404167299050000111e+02 7.187393765000000379e+00 -5.414490000000000275e-02 1.070548824566670021e+02 5.660295944999999662e+00 -5.866960000000000230e-02 9.429733434666670178e+01 4.914365443333330141e+00 -6.313130000000000130e-02 8.753748113499999306e+01 4.086659178333330367e+00 -6.771190000000000542e-02 8.007891920833330346e+01 3.441741584999999937e+00 -7.236470000000000402e-02 5.999202779333329971e+01 2.970499293333329849e+00 -7.691660000000000164e-02 5.902839900166669906e+01 2.678938321666669786e+00 -8.163760000000000461e-02 4.960764509333330352e+01 2.245417474999999996e+00 -8.638719999999999732e-02 4.414010876166670272e+01 2.032560301666670011e+00 -9.105969999999999342e-02 4.256424763833329905e+01 1.812761751666670085e+00 -9.572880000000000278e-02 3.308233848333330229e+01 1.638201501666670001e+00 -1.004865999999999954e-01 2.810971494833329842e+01 1.433384486666670066e+00 -1.052305999999999936e-01 2.588485028666670118e+01 1.331128581666670030e+00 -1.099790999999999963e-01 2.266535039333329848e+01 1.188278135000000013e+00 -1.148321999999999954e-01 2.068870146000000076e+01 1.081535063333330049e+00 -1.197666000000000008e-01 1.976825064833330003e+01 1.002416109999999971e+00 -1.247589999999999949e-01 1.708519936000000072e+01 9.212166283333329542e-01 -1.298257999999999912e-01 1.961539944500000132e+01 8.615532866666669731e-01 -1.348960999999999910e-01 1.509279464499999968e+01 8.002327049999999886e-01 -1.399122999999999895e-01 1.461401991333329953e+01 7.302237983333329518e-01 -1.450607999999999898e-01 1.234817605166669985e+01 6.862621599999999544e-01 -1.502527999999999919e-01 1.236984282499999921e+01 6.604921383333329787e-01 -1.555927000000000004e-01 1.196552256666669933e+01 5.966093183333329719e-01 -1.572660999999999920e-01 1.278021405166670021e+01 1.919547649999999994e-01 -1.609331999999999985e-01 1.153752966666669977e+01 5.736198133333330063e-01 -1.661730999999999903e-01 1.078861117833329963e+01 5.440816866666670082e-01 -1.706513000000000058e-01 1.087118622666669943e+01 1.601861350000000073e-01 -1.715465999999999935e-01 9.877732214999999982e+00 5.101304616666669789e-01 -1.771117000000000108e-01 1.016148657499999963e+01 4.860413033333330080e-01 -1.827158000000000115e-01 1.012859923499999937e+01 4.659961616666670192e-01 -1.842668000000000084e-01 9.892309961666670759e+00 1.394281016666669981e-01 -1.883010999999999990e-01 9.370592901666670471e+00 4.483600366666670167e-01 -1.939626999999999879e-01 7.953713988333330320e+00 4.220674716666670268e-01 -1.982673000000000074e-01 8.536490116666669792e+00 1.198682733333329975e-01 -1.997490000000000099e-01 8.016174306666670191e+00 3.972042266666669930e-01 -2.055633000000000044e-01 7.936747634999999690e+00 3.864501066666670148e-01 -2.114472000000000018e-01 7.092097319999999705e+00 3.613801233333330254e-01 -2.120387999999999995e-01 7.719984431666669700e+00 1.093860133333330042e-01 -2.161715999999999915e-01 7.279911723333330364e+00 4.614210216666669861e-01 -2.260118000000000127e-01 6.899103116666670310e+00 9.616077666666669743e-02 -2.398155999999999899e-01 6.131303501666669931e+00 8.927448999999999801e-02 -2.537425999999999848e-01 5.657937448333330011e+00 8.168489666666670090e-02 -2.676623000000000197e-01 5.142021448333330191e+00 7.478100833333330144e-02 -2.818223999999999729e-01 4.914665098333330207e+00 7.002304500000000598e-02 -2.956782000000000021e-01 4.446721935000000236e+00 6.572301166666670580e-02 -3.099446000000000145e-01 4.282954679999999570e+00 6.061547666666670248e-02 -3.241067000000000253e-01 3.767117071666670203e+00 5.800978500000000121e-02 -3.388467000000000007e-01 3.499952983333329826e+00 5.180699999999999888e-02 -3.539599999999999969e-01 3.303444670000000194e+00 5.069738166666670071e-02 -3.687568999999999986e-01 2.950319708333330126e+00 4.620904333333329672e-02 -3.840311000000000141e-01 2.864367984999999894e+00 4.422433499999999656e-02 -3.989493000000000067e-01 2.552979848333329915e+00 4.244176999999999672e-02 -4.107629999999999892e-01 2.431688859833330163e+00 4.295243233333329719e-02 -4.137051999999999952e-01 2.340746346666669808e+00 4.009275166666669693e-02 -4.291185000000000138e-01 2.236674611666670032e+00 3.708904500000000104e-02 -4.296455000000000135e-01 2.145105044333329936e+00 3.592934700000000037e-02 -4.446591999999999767e-01 1.951663006666670030e+00 3.589577499999999782e-02 -4.467690999999999746e-01 1.941018092166669984e+00 3.204738566666669869e-02 -4.603923999999999794e-01 1.841567858333329921e+00 3.340552499999999841e-02 -4.686460000000000070e-01 1.795296687500000044e+00 3.165418133333330192e-02 -4.765479000000000243e-01 1.725552725000000009e+00 3.166947999999999985e-02 -4.835137999999999936e-01 1.648896234833330032e+00 3.002704050000000111e-02 -4.923843999999999999e-01 1.592235150000000043e+00 3.142748499999999806e-02 -5.047722000000000042e-01 1.524318554666669989e+00 2.765916716666669967e-02 -5.083368000000000331e-01 1.470192684999999999e+00 2.879683666666670028e-02 -5.231871000000000160e-01 1.276008043333330066e+00 2.578494833333330044e-02 -5.249844000000000177e-01 1.335736669999999959e+00 2.682150333333329847e-02 -5.417480000000000073e-01 1.255200871666670048e+00 2.659473333333330081e-02 -5.445189000000000279e-01 1.181751707666669926e+00 2.602010650000000092e-02 -5.583793000000000228e-01 1.119981195000000040e+00 2.552491833333329907e-02 -5.613839000000000468e-01 1.109540133333329903e+00 2.376074416666670158e-02 -5.754704000000000486e-01 1.035568078333330089e+00 2.359670999999999991e-02 -5.835346000000000144e-01 1.009673415166669974e+00 2.350527950000000019e-02 -5.928168000000000326e-01 9.958746566666669686e-01 2.289775833333329916e-02 -6.007057000000000091e-01 9.162153768333329840e-01 2.224946400000000005e-02 -6.099849999999999994e-01 8.912180400000000446e-01 2.207391333333329902e-02 -6.219902999999999960e-01 8.127960751666669648e-01 2.151158183333330004e-02 -6.275817000000000201e-01 8.004247816666669735e-01 2.072389499999999912e-02 -6.413482000000000349e-01 7.426332359999999744e-01 1.925514349999999861e-02 -6.447992000000000168e-01 7.076525866666669717e-01 2.108122000000000121e-02 -6.656950000000000367e-01 6.442563610000000551e-01 1.837696600000000152e-02 -6.845196000000000058e-01 6.085390748333330269e-01 2.050695833333330068e-02 -7.059646000000000532e-01 5.280073378333329792e-01 1.732566899999999840e-02 -7.260278000000000009e-01 5.220653703333330009e-01 1.859470200000000115e-02 -7.492113999999999718e-01 4.598426163333330097e-01 1.525465250000000023e-02 -7.721772000000000080e-01 4.332637708333330062e-01 1.732895283333329983e-02 -7.922717999999999705e-01 4.105990393333330268e-01 1.523655316666669944e-02 -8.156877999999999629e-01 3.602943534999999975e-01 1.545041316666669919e-02 -8.366301000000000432e-01 3.406887861666669792e-01 1.473824349999999957e-02 -8.621258000000000532e-01 3.067601776666670221e-01 1.382606316666670082e-02 -8.848333999999999921e-01 3.015524316666670090e-01 1.454982116666670051e-02 -9.083444000000000518e-01 2.607474308333330160e-01 1.270642616666669937e-02 -9.336484000000000449e-01 2.588003018333330241e-01 1.373286349999999940e-02 -9.553916000000000075e-01 2.226530176666670080e-01 1.285228899999999938e-02 -9.815112999999999754e-01 2.127235584999999929e-01 1.205009299999999957e-02 -1.007027499999999964e+00 2.082924603333330127e-01 1.250585733333330063e-02 -1.030631400000000086e+00 1.912464838333330086e-01 1.185822249999999960e-02 -1.058015099999999986e+00 1.948314409999999941e-01 1.101004149999999966e-02 -1.084837700000000016e+00 1.896849941666670092e-01 1.137308499999999979e-02 -1.110144500000000090e+00 1.497566153333330097e-01 1.094208966666669960e-02 -1.137999800000000006e+00 1.454676966666670068e-01 1.051448583333330043e-02 +3.623980000000000257e-02 4.717095203250000282e+02 1.736400694499999986e+01 +4.068580000000000113e-02 2.786014172683330230e+02 1.198827076999999974e+01 +4.509610000000000007e-02 1.807710803516669955e+02 8.834240069999999889e+00 +4.957530000000000270e-02 1.404167299050000111e+02 7.187393765000000379e+00 +5.414490000000000275e-02 1.070548824566670021e+02 5.660295944999999662e+00 +5.866960000000000230e-02 9.429733434666670178e+01 4.914365443333330141e+00 +6.313130000000000130e-02 8.753748113499999306e+01 4.086659178333330367e+00 +6.771190000000000542e-02 8.007891920833330346e+01 3.441741584999999937e+00 +7.236470000000000402e-02 5.999202779333329971e+01 2.970499293333329849e+00 +7.691660000000000164e-02 5.902839900166669906e+01 2.678938321666669786e+00 +8.163760000000000461e-02 4.960764509333330352e+01 2.245417474999999996e+00 +8.638719999999999732e-02 4.414010876166670272e+01 2.032560301666670011e+00 +9.105969999999999342e-02 4.256424763833329905e+01 1.812761751666670085e+00 +9.572880000000000278e-02 3.308233848333330229e+01 1.638201501666670001e+00 +1.004865999999999954e-01 2.810971494833329842e+01 1.433384486666670066e+00 +1.052305999999999936e-01 2.588485028666670118e+01 1.331128581666670030e+00 +1.099790999999999963e-01 2.266535039333329848e+01 1.188278135000000013e+00 +1.148321999999999954e-01 2.068870146000000076e+01 1.081535063333330049e+00 +1.197666000000000008e-01 1.976825064833330003e+01 1.002416109999999971e+00 +1.247589999999999949e-01 1.708519936000000072e+01 9.212166283333329542e-01 +1.298257999999999912e-01 1.961539944500000132e+01 8.615532866666669731e-01 +1.348960999999999910e-01 1.509279464499999968e+01 8.002327049999999886e-01 +1.399122999999999895e-01 1.461401991333329953e+01 7.302237983333329518e-01 +1.450607999999999898e-01 1.234817605166669985e+01 6.862621599999999544e-01 +1.502527999999999919e-01 1.236984282499999921e+01 6.604921383333329787e-01 +1.555927000000000004e-01 1.196552256666669933e+01 5.966093183333329719e-01 +1.572660999999999920e-01 1.278021405166670021e+01 1.919547649999999994e-01 +1.609331999999999985e-01 1.153752966666669977e+01 5.736198133333330063e-01 +1.661730999999999903e-01 1.078861117833329963e+01 5.440816866666670082e-01 +1.706513000000000058e-01 1.087118622666669943e+01 1.601861350000000073e-01 +1.715465999999999935e-01 9.877732214999999982e+00 5.101304616666669789e-01 +1.771117000000000108e-01 1.016148657499999963e+01 4.860413033333330080e-01 +1.827158000000000115e-01 1.012859923499999937e+01 4.659961616666670192e-01 +1.842668000000000084e-01 9.892309961666670759e+00 1.394281016666669981e-01 +1.883010999999999990e-01 9.370592901666670471e+00 4.483600366666670167e-01 +1.939626999999999879e-01 7.953713988333330320e+00 4.220674716666670268e-01 +1.982673000000000074e-01 8.536490116666669792e+00 1.198682733333329975e-01 +1.997490000000000099e-01 8.016174306666670191e+00 3.972042266666669930e-01 +2.055633000000000044e-01 7.936747634999999690e+00 3.864501066666670148e-01 +2.114472000000000018e-01 7.092097319999999705e+00 3.613801233333330254e-01 +2.120387999999999995e-01 7.719984431666669700e+00 1.093860133333330042e-01 +2.161715999999999915e-01 7.279911723333330364e+00 4.614210216666669861e-01 +2.260118000000000127e-01 6.899103116666670310e+00 9.616077666666669743e-02 +2.398155999999999899e-01 6.131303501666669931e+00 8.927448999999999801e-02 +2.537425999999999848e-01 5.657937448333330011e+00 8.168489666666670090e-02 +2.676623000000000197e-01 5.142021448333330191e+00 7.478100833333330144e-02 +2.818223999999999729e-01 4.914665098333330207e+00 7.002304500000000598e-02 +2.956782000000000021e-01 4.446721935000000236e+00 6.572301166666670580e-02 +3.099446000000000145e-01 4.282954679999999570e+00 6.061547666666670248e-02 +3.241067000000000253e-01 3.767117071666670203e+00 5.800978500000000121e-02 +3.388467000000000007e-01 3.499952983333329826e+00 5.180699999999999888e-02 +3.539599999999999969e-01 3.303444670000000194e+00 5.069738166666670071e-02 +3.687568999999999986e-01 2.950319708333330126e+00 4.620904333333329672e-02 +3.840311000000000141e-01 2.864367984999999894e+00 4.422433499999999656e-02 +3.989493000000000067e-01 2.552979848333329915e+00 4.244176999999999672e-02 +4.107629999999999892e-01 2.431688859833330163e+00 4.295243233333329719e-02 +4.137051999999999952e-01 2.340746346666669808e+00 4.009275166666669693e-02 +4.291185000000000138e-01 2.236674611666670032e+00 3.708904500000000104e-02 +4.296455000000000135e-01 2.145105044333329936e+00 3.592934700000000037e-02 +4.446591999999999767e-01 1.951663006666670030e+00 3.589577499999999782e-02 +4.467690999999999746e-01 1.941018092166669984e+00 3.204738566666669869e-02 +4.603923999999999794e-01 1.841567858333329921e+00 3.340552499999999841e-02 +4.686460000000000070e-01 1.795296687500000044e+00 3.165418133333330192e-02 +4.765479000000000243e-01 1.725552725000000009e+00 3.166947999999999985e-02 +4.835137999999999936e-01 1.648896234833330032e+00 3.002704050000000111e-02 +4.923843999999999999e-01 1.592235150000000043e+00 3.142748499999999806e-02 +5.047722000000000042e-01 1.524318554666669989e+00 2.765916716666669967e-02 +5.083368000000000331e-01 1.470192684999999999e+00 2.879683666666670028e-02 +5.231871000000000160e-01 1.276008043333330066e+00 2.578494833333330044e-02 +5.249844000000000177e-01 1.335736669999999959e+00 2.682150333333329847e-02 +5.417480000000000073e-01 1.255200871666670048e+00 2.659473333333330081e-02 +5.445189000000000279e-01 1.181751707666669926e+00 2.602010650000000092e-02 +5.583793000000000228e-01 1.119981195000000040e+00 2.552491833333329907e-02 +5.613839000000000468e-01 1.109540133333329903e+00 2.376074416666670158e-02 +5.754704000000000486e-01 1.035568078333330089e+00 2.359670999999999991e-02 +5.835346000000000144e-01 1.009673415166669974e+00 2.350527950000000019e-02 +5.928168000000000326e-01 9.958746566666669686e-01 2.289775833333329916e-02 +6.007057000000000091e-01 9.162153768333329840e-01 2.224946400000000005e-02 +6.099849999999999994e-01 8.912180400000000446e-01 2.207391333333329902e-02 +6.219902999999999960e-01 8.127960751666669648e-01 2.151158183333330004e-02 +6.275817000000000201e-01 8.004247816666669735e-01 2.072389499999999912e-02 +6.413482000000000349e-01 7.426332359999999744e-01 1.925514349999999861e-02 +6.447992000000000168e-01 7.076525866666669717e-01 2.108122000000000121e-02 +6.656950000000000367e-01 6.442563610000000551e-01 1.837696600000000152e-02 +6.845196000000000058e-01 6.085390748333330269e-01 2.050695833333330068e-02 +7.059646000000000532e-01 5.280073378333329792e-01 1.732566899999999840e-02 +7.260278000000000009e-01 5.220653703333330009e-01 1.859470200000000115e-02 +7.492113999999999718e-01 4.598426163333330097e-01 1.525465250000000023e-02 +7.721772000000000080e-01 4.332637708333330062e-01 1.732895283333329983e-02 +7.922717999999999705e-01 4.105990393333330268e-01 1.523655316666669944e-02 +8.156877999999999629e-01 3.602943534999999975e-01 1.545041316666669919e-02 +8.366301000000000432e-01 3.406887861666669792e-01 1.473824349999999957e-02 +8.621258000000000532e-01 3.067601776666670221e-01 1.382606316666670082e-02 +8.848333999999999921e-01 3.015524316666670090e-01 1.454982116666670051e-02 +9.083444000000000518e-01 2.607474308333330160e-01 1.270642616666669937e-02 +9.336484000000000449e-01 2.588003018333330241e-01 1.373286349999999940e-02 +9.553916000000000075e-01 2.226530176666670080e-01 1.285228899999999938e-02 +9.815112999999999754e-01 2.127235584999999929e-01 1.205009299999999957e-02 +1.007027499999999964e+00 2.082924603333330127e-01 1.250585733333330063e-02 +1.030631400000000086e+00 1.912464838333330086e-01 1.185822249999999960e-02 +1.058015099999999986e+00 1.948314409999999941e-01 1.101004149999999966e-02 +1.084837700000000016e+00 1.896849941666670092e-01 1.137308499999999979e-02 +1.110144500000000090e+00 1.497566153333330097e-01 1.094208966666669960e-02 +1.137999800000000006e+00 1.454676966666670068e-01 1.051448583333330043e-02 1.166290800000000072e+00 1.467227160000000030e-01 1.029956333333329963e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv index 98341d530..5ef6a3266 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/3_35_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 2.531792558183329902e+02 1.680830338499999854e+01 -4.070000000000000007e-02 1.901177223299999923e+02 1.173664666500000031e+01 -4.511180000000000051e-02 1.217924648083329942e+02 8.645296186666669769e+00 -4.959249999999999770e-02 1.094275780066670052e+02 7.073034475000000043e+00 -5.416379999999999806e-02 8.791320813333329909e+01 5.581711248333330211e+00 -5.868999999999999911e-02 8.309104453833330695e+01 4.860535583333329690e+00 -6.315320000000000655e-02 7.081360745666670198e+01 4.003961999999999577e+00 -6.773540000000000116e-02 6.343291181166669901e+01 3.355398363333330192e+00 -7.238989999999999314e-02 4.842191466166669755e+01 2.903796691666669982e+00 -7.694339999999999513e-02 4.694420552666669977e+01 2.605583116666669863e+00 -8.166600000000000248e-02 4.367521950333330238e+01 2.207077676666670207e+00 -8.641719999999999957e-02 3.957930205499999943e+01 1.999356729999999915e+00 -9.109140000000000292e-02 3.553857484166670133e+01 1.762052579999999979e+00 -9.576210000000000278e-02 2.783675838666669833e+01 1.597004463333330015e+00 -1.005216000000000026e-01 2.705964543666669897e+01 1.423240978333329965e+00 -1.052672000000000052e-01 2.262947438833329983e+01 1.302317253333330038e+00 -1.100174000000000013e-01 2.182584247666670052e+01 1.179366926666669979e+00 -1.148721999999999938e-01 2.121788853500000016e+01 1.084366495000000041e+00 -1.198083000000000065e-01 1.779511935000000022e+01 9.833421683333329888e-01 -1.248023999999999939e-01 1.651748253666670152e+01 9.145048883333329881e-01 -1.298709000000000113e-01 1.721928703000000027e+01 8.380137100000000228e-01 -1.349431000000000103e-01 1.436323046666669967e+01 7.917284633333330213e-01 -1.399610000000000021e-01 1.550343697666670018e+01 7.379972516666669646e-01 -1.451112999999999986e-01 1.303663926666670037e+01 6.920347900000000108e-01 -1.503050999999999970e-01 1.200503839166669984e+01 6.556345366666670449e-01 -1.556469000000000047e-01 1.229304255666670009e+01 5.989305183333329952e-01 -1.573070000000000024e-01 1.257057899666670053e+01 1.910309249999999903e-01 -1.609891999999999990e-01 1.193592632666669928e+01 5.769697900000000379e-01 -1.662309999999999899e-01 1.125234698666669964e+01 5.482133000000000145e-01 -1.706957000000000058e-01 1.058112505166669948e+01 1.590339783333329926e-01 -1.716062999999999894e-01 1.070644689999999954e+01 5.183003699999999547e-01 -1.771733000000000058e-01 9.479454351666669609e+00 4.778282466666670114e-01 -1.827794000000000085e-01 9.400985496666670826e+00 4.569814249999999967e-01 -1.843146999999999980e-01 9.549487438333329692e+00 1.380682866666670117e-01 -1.883665999999999952e-01 8.342261173333330504e+00 4.359566316666669827e-01 -1.940302000000000138e-01 8.124126898333329905e+00 4.232381216666670221e-01 -1.983187999999999895e-01 8.328415036666669380e+00 1.189532799999999946e-01 -1.998185000000000100e-01 8.328210934999999537e+00 3.999954083333330246e-01 -2.056348000000000065e-01 8.350671104999999983e+00 3.905236483333329733e-01 -2.115208000000000088e-01 6.929636241666670138e+00 3.588886250000000167e-01 -2.120939000000000019e-01 7.535892504999999630e+00 1.085254183333329986e-01 -2.162467999999999890e-01 7.407988318333329936e+00 4.625349066666670228e-01 -2.260705000000000076e-01 6.743451298333329902e+00 9.541167166666669752e-02 -2.398779000000000050e-01 6.099490819999999758e+00 8.899463999999999986e-02 -2.538084999999999924e-01 5.555039073333330357e+00 8.113394833333330280e-02 -2.677318000000000198e-01 5.152730110000000252e+00 7.469547999999999466e-02 -2.818956000000000239e-01 4.837557096666669665e+00 6.957829666666670576e-02 -2.957549999999999901e-01 4.369791838333330070e+00 6.527595833333330044e-02 -3.100250999999999979e-01 4.110463069999999774e+00 5.977720166666670304e-02 -3.241909000000000041e-01 3.813721606666669928e+00 5.811357666666670113e-02 -3.389346999999999777e-01 3.461479851666669827e+00 5.155417166666669687e-02 -3.540519999999999778e-01 3.230298750000000219e+00 5.028755499999999767e-02 -3.688526999999999778e-01 2.998165658333329819e+00 4.634052999999999783e-02 -3.841308999999999974e-01 2.784144708333330165e+00 4.378963833333329725e-02 -3.990528999999999882e-01 2.595613363333329815e+00 4.256657166666669850e-02 -4.108341999999999827e-01 2.335089765499999803e+00 4.258898366666669794e-02 -4.138126999999999778e-01 2.324415418333329875e+00 3.994880166666670007e-02 -4.292300000000000004e-01 2.216248561666669836e+00 3.693022666666669757e-02 -4.297198999999999880e-01 2.134554158666670087e+00 3.596130699999999791e-02 -4.447747000000000228e-01 1.890609146666669904e+00 3.555346833333330320e-02 -4.468464999999999798e-01 1.908117816499999897e+00 3.198120466666670020e-02 -4.605119999999999769e-01 1.871098863333330087e+00 3.348654166666670262e-02 -4.687272000000000105e-01 1.810652348333330108e+00 3.178039216666669886e-02 -4.766716999999999760e-01 1.698277889999999957e+00 3.148857166666670093e-02 -4.835976000000000163e-01 1.613169754500000108e+00 2.993151466666670035e-02 -4.925123000000000140e-01 1.548358499999999971e+00 3.116390166666669834e-02 -5.048597000000000223e-01 1.494630669833330039e+00 2.759253283333330115e-02 -5.084689000000000014e-01 1.491590500000000041e+00 2.885127333333329866e-02 -5.232776999999999568e-01 1.248566430833329965e+00 2.572220416666669979e-02 -5.251208000000000542e-01 1.383180581666670017e+00 2.700447666666670049e-02 -5.418887000000000009e-01 1.221960488333329931e+00 2.639246833333330072e-02 -5.446132999999999669e-01 1.208971178333329899e+00 2.618446533333329898e-02 -5.585244000000000320e-01 1.107120358333330001e+00 2.542247833333330029e-02 -5.614812000000000136e-01 1.085889866500000078e+00 2.370511449999999909e-02 -5.756198999999999621e-01 1.024119451666670066e+00 2.350574000000000066e-02 -5.836356999999999795e-01 9.666399098333330331e-01 2.336446566666669847e-02 -5.929708999999999675e-01 9.753983600000000198e-01 2.276144833333329856e-02 -6.008097999999999494e-01 8.857038164999999630e-01 2.215761016666669900e-02 -6.101434999999999498e-01 9.144217283333330171e-01 2.215592499999999992e-02 -6.220980999999999872e-01 8.054969749999999484e-01 2.151697083333330152e-02 -6.277447999999999917e-01 7.972735800000000372e-01 2.067797666666670170e-02 -6.414592999999999545e-01 7.033510668333330385e-01 1.912904316666669963e-02 -6.449667999999999513e-01 7.010848466666670387e-01 2.101707333333329916e-02 -6.658104000000000244e-01 6.363828563333330246e-01 1.837497983333330129e-02 -6.846381999999999746e-01 5.758642446666669690e-01 2.039069533333329881e-02 -7.060868999999999618e-01 5.109788090000000338e-01 1.728495966666670006e-02 -7.261535999999999547e-01 4.885223020000000194e-01 1.847847583333329935e-02 -7.493412999999999879e-01 4.387949984999999775e-01 1.519840233333329994e-02 -7.723109999999999697e-01 3.923397161666670185e-01 1.717436333333329998e-02 -7.924090999999999774e-01 3.993512075000000272e-01 1.521433699999999965e-02 -8.158290999999999737e-01 3.564691013333329828e-01 1.545670316666669999e-02 -8.367750000000000465e-01 3.230009236666669947e-01 1.469029500000000078e-02 -8.622752000000000194e-01 2.878051181666669844e-01 1.377513966666669976e-02 -8.849867000000000150e-01 2.848005155000000177e-01 1.450056933333329981e-02 -9.085018000000000260e-01 2.630901753333330095e-01 1.273161166666669959e-02 -9.338100999999999763e-01 2.556641304999999753e-01 1.373873700000000087e-02 -9.555571000000000481e-01 2.110106781666669928e-01 1.282516266666670034e-02 -9.816814000000000373e-01 1.989191335000000116e-01 1.201689483333330012e-02 -1.007201999999999931e+00 1.798726026666669919e-01 1.241756500000000020e-02 -1.030810000000000004e+00 1.697684260000000001e-01 1.179553216666670047e-02 -1.058198500000000042e+00 1.911874938333329998e-01 1.101163099999999916e-02 -1.085025700000000093e+00 1.546144220000000014e-01 1.126302133333329999e-02 -1.110336800000000013e+00 1.274498698333330071e-01 1.087918116666669946e-02 -1.138196999999999903e+00 1.312019681666669879e-01 1.048030450000000079e-02 +3.625239999999999713e-02 2.531792558183329902e+02 1.680830338499999854e+01 +4.070000000000000007e-02 1.901177223299999923e+02 1.173664666500000031e+01 +4.511180000000000051e-02 1.217924648083329942e+02 8.645296186666669769e+00 +4.959249999999999770e-02 1.094275780066670052e+02 7.073034475000000043e+00 +5.416379999999999806e-02 8.791320813333329909e+01 5.581711248333330211e+00 +5.868999999999999911e-02 8.309104453833330695e+01 4.860535583333329690e+00 +6.315320000000000655e-02 7.081360745666670198e+01 4.003961999999999577e+00 +6.773540000000000116e-02 6.343291181166669901e+01 3.355398363333330192e+00 +7.238989999999999314e-02 4.842191466166669755e+01 2.903796691666669982e+00 +7.694339999999999513e-02 4.694420552666669977e+01 2.605583116666669863e+00 +8.166600000000000248e-02 4.367521950333330238e+01 2.207077676666670207e+00 +8.641719999999999957e-02 3.957930205499999943e+01 1.999356729999999915e+00 +9.109140000000000292e-02 3.553857484166670133e+01 1.762052579999999979e+00 +9.576210000000000278e-02 2.783675838666669833e+01 1.597004463333330015e+00 +1.005216000000000026e-01 2.705964543666669897e+01 1.423240978333329965e+00 +1.052672000000000052e-01 2.262947438833329983e+01 1.302317253333330038e+00 +1.100174000000000013e-01 2.182584247666670052e+01 1.179366926666669979e+00 +1.148721999999999938e-01 2.121788853500000016e+01 1.084366495000000041e+00 +1.198083000000000065e-01 1.779511935000000022e+01 9.833421683333329888e-01 +1.248023999999999939e-01 1.651748253666670152e+01 9.145048883333329881e-01 +1.298709000000000113e-01 1.721928703000000027e+01 8.380137100000000228e-01 +1.349431000000000103e-01 1.436323046666669967e+01 7.917284633333330213e-01 +1.399610000000000021e-01 1.550343697666670018e+01 7.379972516666669646e-01 +1.451112999999999986e-01 1.303663926666670037e+01 6.920347900000000108e-01 +1.503050999999999970e-01 1.200503839166669984e+01 6.556345366666670449e-01 +1.556469000000000047e-01 1.229304255666670009e+01 5.989305183333329952e-01 +1.573070000000000024e-01 1.257057899666670053e+01 1.910309249999999903e-01 +1.609891999999999990e-01 1.193592632666669928e+01 5.769697900000000379e-01 +1.662309999999999899e-01 1.125234698666669964e+01 5.482133000000000145e-01 +1.706957000000000058e-01 1.058112505166669948e+01 1.590339783333329926e-01 +1.716062999999999894e-01 1.070644689999999954e+01 5.183003699999999547e-01 +1.771733000000000058e-01 9.479454351666669609e+00 4.778282466666670114e-01 +1.827794000000000085e-01 9.400985496666670826e+00 4.569814249999999967e-01 +1.843146999999999980e-01 9.549487438333329692e+00 1.380682866666670117e-01 +1.883665999999999952e-01 8.342261173333330504e+00 4.359566316666669827e-01 +1.940302000000000138e-01 8.124126898333329905e+00 4.232381216666670221e-01 +1.983187999999999895e-01 8.328415036666669380e+00 1.189532799999999946e-01 +1.998185000000000100e-01 8.328210934999999537e+00 3.999954083333330246e-01 +2.056348000000000065e-01 8.350671104999999983e+00 3.905236483333329733e-01 +2.115208000000000088e-01 6.929636241666670138e+00 3.588886250000000167e-01 +2.120939000000000019e-01 7.535892504999999630e+00 1.085254183333329986e-01 +2.162467999999999890e-01 7.407988318333329936e+00 4.625349066666670228e-01 +2.260705000000000076e-01 6.743451298333329902e+00 9.541167166666669752e-02 +2.398779000000000050e-01 6.099490819999999758e+00 8.899463999999999986e-02 +2.538084999999999924e-01 5.555039073333330357e+00 8.113394833333330280e-02 +2.677318000000000198e-01 5.152730110000000252e+00 7.469547999999999466e-02 +2.818956000000000239e-01 4.837557096666669665e+00 6.957829666666670576e-02 +2.957549999999999901e-01 4.369791838333330070e+00 6.527595833333330044e-02 +3.100250999999999979e-01 4.110463069999999774e+00 5.977720166666670304e-02 +3.241909000000000041e-01 3.813721606666669928e+00 5.811357666666670113e-02 +3.389346999999999777e-01 3.461479851666669827e+00 5.155417166666669687e-02 +3.540519999999999778e-01 3.230298750000000219e+00 5.028755499999999767e-02 +3.688526999999999778e-01 2.998165658333329819e+00 4.634052999999999783e-02 +3.841308999999999974e-01 2.784144708333330165e+00 4.378963833333329725e-02 +3.990528999999999882e-01 2.595613363333329815e+00 4.256657166666669850e-02 +4.108341999999999827e-01 2.335089765499999803e+00 4.258898366666669794e-02 +4.138126999999999778e-01 2.324415418333329875e+00 3.994880166666670007e-02 +4.292300000000000004e-01 2.216248561666669836e+00 3.693022666666669757e-02 +4.297198999999999880e-01 2.134554158666670087e+00 3.596130699999999791e-02 +4.447747000000000228e-01 1.890609146666669904e+00 3.555346833333330320e-02 +4.468464999999999798e-01 1.908117816499999897e+00 3.198120466666670020e-02 +4.605119999999999769e-01 1.871098863333330087e+00 3.348654166666670262e-02 +4.687272000000000105e-01 1.810652348333330108e+00 3.178039216666669886e-02 +4.766716999999999760e-01 1.698277889999999957e+00 3.148857166666670093e-02 +4.835976000000000163e-01 1.613169754500000108e+00 2.993151466666670035e-02 +4.925123000000000140e-01 1.548358499999999971e+00 3.116390166666669834e-02 +5.048597000000000223e-01 1.494630669833330039e+00 2.759253283333330115e-02 +5.084689000000000014e-01 1.491590500000000041e+00 2.885127333333329866e-02 +5.232776999999999568e-01 1.248566430833329965e+00 2.572220416666669979e-02 +5.251208000000000542e-01 1.383180581666670017e+00 2.700447666666670049e-02 +5.418887000000000009e-01 1.221960488333329931e+00 2.639246833333330072e-02 +5.446132999999999669e-01 1.208971178333329899e+00 2.618446533333329898e-02 +5.585244000000000320e-01 1.107120358333330001e+00 2.542247833333330029e-02 +5.614812000000000136e-01 1.085889866500000078e+00 2.370511449999999909e-02 +5.756198999999999621e-01 1.024119451666670066e+00 2.350574000000000066e-02 +5.836356999999999795e-01 9.666399098333330331e-01 2.336446566666669847e-02 +5.929708999999999675e-01 9.753983600000000198e-01 2.276144833333329856e-02 +6.008097999999999494e-01 8.857038164999999630e-01 2.215761016666669900e-02 +6.101434999999999498e-01 9.144217283333330171e-01 2.215592499999999992e-02 +6.220980999999999872e-01 8.054969749999999484e-01 2.151697083333330152e-02 +6.277447999999999917e-01 7.972735800000000372e-01 2.067797666666670170e-02 +6.414592999999999545e-01 7.033510668333330385e-01 1.912904316666669963e-02 +6.449667999999999513e-01 7.010848466666670387e-01 2.101707333333329916e-02 +6.658104000000000244e-01 6.363828563333330246e-01 1.837497983333330129e-02 +6.846381999999999746e-01 5.758642446666669690e-01 2.039069533333329881e-02 +7.060868999999999618e-01 5.109788090000000338e-01 1.728495966666670006e-02 +7.261535999999999547e-01 4.885223020000000194e-01 1.847847583333329935e-02 +7.493412999999999879e-01 4.387949984999999775e-01 1.519840233333329994e-02 +7.723109999999999697e-01 3.923397161666670185e-01 1.717436333333329998e-02 +7.924090999999999774e-01 3.993512075000000272e-01 1.521433699999999965e-02 +8.158290999999999737e-01 3.564691013333329828e-01 1.545670316666669999e-02 +8.367750000000000465e-01 3.230009236666669947e-01 1.469029500000000078e-02 +8.622752000000000194e-01 2.878051181666669844e-01 1.377513966666669976e-02 +8.849867000000000150e-01 2.848005155000000177e-01 1.450056933333329981e-02 +9.085018000000000260e-01 2.630901753333330095e-01 1.273161166666669959e-02 +9.338100999999999763e-01 2.556641304999999753e-01 1.373873700000000087e-02 +9.555571000000000481e-01 2.110106781666669928e-01 1.282516266666670034e-02 +9.816814000000000373e-01 1.989191335000000116e-01 1.201689483333330012e-02 +1.007201999999999931e+00 1.798726026666669919e-01 1.241756500000000020e-02 +1.030810000000000004e+00 1.697684260000000001e-01 1.179553216666670047e-02 +1.058198500000000042e+00 1.911874938333329998e-01 1.101163099999999916e-02 +1.085025700000000093e+00 1.546144220000000014e-01 1.126302133333329999e-02 +1.110336800000000013e+00 1.274498698333330071e-01 1.087918116666669946e-02 +1.138196999999999903e+00 1.312019681666669879e-01 1.048030450000000079e-02 1.166492899999999944e+00 1.202452754999999984e-01 1.022370933333329943e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv index 2dcce686f..51227d3b8 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/4_50_1340_10.csv @@ -1,105 +1,105 @@ -3.624299999999999744e-02 2.421839941750000094e+02 1.681259771499999900e+01 -4.068929999999999769e-02 1.253477160583330061e+02 1.158261931833330038e+01 -4.510000000000000120e-02 1.038159109083329952e+02 8.606540843333329249e+00 -4.957960000000000145e-02 9.508877155000000414e+01 7.037626288333330038e+00 -5.414959999999999912e-02 7.142443308833330207e+01 5.530319266666669620e+00 -5.867460000000000037e-02 6.747951957166669956e+01 4.803320423333330424e+00 -6.313670000000000393e-02 6.491403129500000091e+01 3.984481885000000112e+00 -6.771770000000000567e-02 5.688806046833330043e+01 3.329560004999999823e+00 -7.237100000000000477e-02 4.031379161166670144e+01 2.864987329999999943e+00 -7.692330000000000001e-02 4.363721252500000247e+01 2.591659659999999921e+00 -8.164470000000000061e-02 3.499940050499999700e+01 2.159604903333330217e+00 -8.639470000000000482e-02 3.331168452000000002e+01 1.961486934999999932e+00 -9.106759999999999855e-02 3.141853618500000067e+01 1.737193953333330043e+00 -9.573710000000000553e-02 2.514925802833329982e+01 1.580249494999999893e+00 -1.004952999999999957e-01 2.418445705499999931e+01 1.404480071666670105e+00 -1.052397000000000055e-01 2.311071394833329862e+01 1.309208076666670051e+00 -1.099886000000000058e-01 2.234431306333329914e+01 1.186371084999999992e+00 -1.148422000000000054e-01 2.015011891333330141e+01 1.077548355000000013e+00 -1.197769999999999946e-01 1.762490517499999854e+01 9.840672733333329925e-01 -1.247698000000000002e-01 1.703488854000000075e+01 9.213895800000000413e-01 -1.298370000000000080e-01 1.644401272166669870e+01 8.327218266666670532e-01 -1.349077999999999944e-01 1.614025673666670002e+01 8.110203433333329492e-01 -1.399244000000000043e-01 1.432045983666669997e+01 7.277294366666670067e-01 -1.450733999999999913e-01 1.348007003166670081e+01 6.981156733333330200e-01 -1.502658000000000049e-01 1.217057146500000009e+01 6.589065133333330548e-01 -1.556062000000000001e-01 1.311354035333330081e+01 6.087518283333329672e-01 -1.573412999999999895e-01 1.262766263333329952e+01 1.918068450000000036e-01 -1.609471000000000096e-01 1.195521582166669994e+01 5.786270049999999721e-01 -1.661874999999999880e-01 1.070419187999999977e+01 5.435432616666669992e-01 -1.707328999999999930e-01 1.060603477499999947e+01 1.596232366666670011e-01 -1.715615000000000057e-01 1.106375028666669991e+01 5.234683166666670440e-01 -1.771270000000000067e-01 9.097135046666670277e+00 4.748174949999999783e-01 -1.827315999999999940e-01 9.232441778333329907e+00 4.562185283333329844e-01 -1.843548999999999882e-01 9.582483613333330652e+00 1.386399050000000077e-01 -1.883173999999999959e-01 9.681451038333330317e+00 4.521609416666669823e-01 -1.939794999999999991e-01 8.227612430000000643e+00 4.254379616666669750e-01 -1.983621000000000134e-01 8.295318078333329126e+00 1.192443799999999970e-01 -1.997663000000000078e-01 8.131970284999999521e+00 3.988034016666670012e-01 -2.055810999999999888e-01 7.142658796666670362e+00 3.773835349999999922e-01 -2.114655000000000007e-01 7.164933761666669731e+00 3.624743966666669759e-01 -2.121402000000000010e-01 7.387669431666670228e+00 1.083523799999999981e-01 -2.161903000000000019e-01 6.864321103333329788e+00 4.553583783333329804e-01 -2.261198000000000097e-01 6.847039901666669870e+00 9.614554833333330275e-02 -2.399302000000000101e-01 6.151464958333329847e+00 8.952354166666670610e-02 -2.538638999999999757e-01 5.563245829999999614e+00 8.146051666666670465e-02 -2.677901999999999783e-01 5.162996156666669556e+00 7.501275500000000040e-02 -2.819571000000000160e-01 4.731078383333329640e+00 6.938886333333330048e-02 -2.958196000000000159e-01 4.470382223333330352e+00 6.595420000000000449e-02 -3.100928000000000018e-01 4.071269568333329758e+00 5.983178000000000107e-02 -3.242616999999999861e-01 3.818289136666670025e+00 5.835058500000000342e-02 -3.390086999999999962e-01 3.464278166666669989e+00 5.175618166666669934e-02 -3.541291999999999773e-01 3.297458013333330218e+00 5.076983000000000190e-02 -3.689332000000000167e-01 3.070901008333330129e+00 4.683460500000000137e-02 -3.842147000000000201e-01 2.769801061666670172e+00 4.388707166666670073e-02 -3.991399999999999948e-01 2.510583560000000158e+00 4.232430333333329908e-02 -4.106022999999999756e-01 2.374815773499999949e+00 4.286182233333329927e-02 -4.139030000000000209e-01 2.373871081666670158e+00 4.032223833333330176e-02 -4.293236999999999748e-01 2.231085370000000179e+00 3.713437166666670036e-02 -4.294773000000000063e-01 2.156539414333329852e+00 3.612328016666670194e-02 -4.448717999999999839e-01 1.876962131666670031e+00 3.561285166666670193e-02 -4.465942999999999996e-01 1.963582529333329996e+00 3.226501116666669750e-02 -4.606124999999999803e-01 1.886281606666670108e+00 3.367513833333329876e-02 -4.684626000000000068e-01 1.795604685000000034e+00 3.177854483333329705e-02 -4.767757000000000245e-01 1.729912848333329922e+00 3.174894833333329752e-02 -4.833245999999999931e-01 1.643333701666670033e+00 3.012282700000000132e-02 -4.926197999999999966e-01 1.601281793333330095e+00 3.152871666666669931e-02 -5.045747000000000426e-01 1.513868059666670041e+00 2.772222300000000070e-02 -5.085798000000000263e-01 1.480025179999999940e+00 2.889593166666670071e-02 -5.229823000000000111e-01 1.292098316666669966e+00 2.594417883333329997e-02 -5.252354000000000189e-01 1.389690103333329985e+00 2.712855999999999948e-02 -5.420070000000000165e-01 1.207626951666670001e+00 2.641061333333330138e-02 -5.443057999999999508e-01 1.171074812333330106e+00 2.606778300000000062e-02 -5.586463000000000401e-01 1.131968480000000055e+00 2.562754666666669859e-02 -5.611642999999999493e-01 1.119771183833329964e+00 2.388942000000000149e-02 -5.757455000000000211e-01 1.050324178333329916e+00 2.370775166666670014e-02 -5.833063000000000553e-01 9.890430198333329814e-01 2.349970633333330061e-02 -5.931003000000000247e-01 9.529422783333330038e-01 2.272385333333330065e-02 -6.004707000000000239e-01 9.087951714999999986e-01 2.229426183333330092e-02 -6.102765999999999469e-01 8.968441200000000224e-01 2.213925333333329956e-02 -6.217470000000000496e-01 8.116193323333330545e-01 2.157820200000000119e-02 -6.278818000000000454e-01 7.745292049999999984e-01 2.063141833333330052e-02 -6.410972000000000337e-01 7.304547335000000086e-01 1.926881999999999900e-02 -6.451074999999999449e-01 7.030634049999999746e-01 2.109099333333330079e-02 -6.654345000000000399e-01 6.451808323333330097e-01 1.843812350000000044e-02 -6.842517000000000182e-01 5.969281796666670026e-01 2.051784966666669874e-02 -7.056883000000000461e-01 4.875458616666670242e-01 1.721726566666669997e-02 -7.257436999999999916e-01 5.206052460000000215e-01 1.864389433333329960e-02 -7.489183000000000368e-01 4.716855048333329914e-01 1.534349166666670004e-02 -7.718749999999999778e-01 3.996116843333329949e-01 1.723059933333330115e-02 -7.919618000000000491e-01 3.949704010000000265e-01 1.521841983333330033e-02 -8.153685999999999989e-01 3.711572033333330189e-01 1.553813883333329988e-02 -8.363026999999999544e-01 3.373120053333329982e-01 1.476541233333330053e-02 -8.617884000000000100e-01 3.012111169999999727e-01 1.384248800000000001e-02 -8.844872000000000289e-01 3.093801609999999869e-01 1.462152149999999991e-02 -9.079890000000000461e-01 2.725293346666670113e-01 1.278188633333329945e-02 -9.332829999999999737e-01 2.562172424999999976e-01 1.375849099999999943e-02 -9.550178000000000278e-01 2.195073688333329942e-01 1.287299783333330054e-02 -9.811271999999999771e-01 1.993873673333330099e-01 1.203331399999999982e-02 -1.006633399999999900e+00 1.965978770000000042e-01 1.249421516666670076e-02 -1.030228200000000038e+00 1.888581198333330047e-01 1.187900783333330039e-02 -1.057601100000000072e+00 2.019180355000000093e-01 1.106158266666669963e-02 -1.084413199999999966e+00 1.710308969999999873e-01 1.133507299999999933e-02 -1.109710100000000033e+00 1.385269876666669897e-01 1.092970799999999978e-02 -1.137554500000000024e+00 1.323425321666669985e-01 1.049619949999999920e-02 +3.624299999999999744e-02 2.421839941750000094e+02 1.681259771499999900e+01 +4.068929999999999769e-02 1.253477160583330061e+02 1.158261931833330038e+01 +4.510000000000000120e-02 1.038159109083329952e+02 8.606540843333329249e+00 +4.957960000000000145e-02 9.508877155000000414e+01 7.037626288333330038e+00 +5.414959999999999912e-02 7.142443308833330207e+01 5.530319266666669620e+00 +5.867460000000000037e-02 6.747951957166669956e+01 4.803320423333330424e+00 +6.313670000000000393e-02 6.491403129500000091e+01 3.984481885000000112e+00 +6.771770000000000567e-02 5.688806046833330043e+01 3.329560004999999823e+00 +7.237100000000000477e-02 4.031379161166670144e+01 2.864987329999999943e+00 +7.692330000000000001e-02 4.363721252500000247e+01 2.591659659999999921e+00 +8.164470000000000061e-02 3.499940050499999700e+01 2.159604903333330217e+00 +8.639470000000000482e-02 3.331168452000000002e+01 1.961486934999999932e+00 +9.106759999999999855e-02 3.141853618500000067e+01 1.737193953333330043e+00 +9.573710000000000553e-02 2.514925802833329982e+01 1.580249494999999893e+00 +1.004952999999999957e-01 2.418445705499999931e+01 1.404480071666670105e+00 +1.052397000000000055e-01 2.311071394833329862e+01 1.309208076666670051e+00 +1.099886000000000058e-01 2.234431306333329914e+01 1.186371084999999992e+00 +1.148422000000000054e-01 2.015011891333330141e+01 1.077548355000000013e+00 +1.197769999999999946e-01 1.762490517499999854e+01 9.840672733333329925e-01 +1.247698000000000002e-01 1.703488854000000075e+01 9.213895800000000413e-01 +1.298370000000000080e-01 1.644401272166669870e+01 8.327218266666670532e-01 +1.349077999999999944e-01 1.614025673666670002e+01 8.110203433333329492e-01 +1.399244000000000043e-01 1.432045983666669997e+01 7.277294366666670067e-01 +1.450733999999999913e-01 1.348007003166670081e+01 6.981156733333330200e-01 +1.502658000000000049e-01 1.217057146500000009e+01 6.589065133333330548e-01 +1.556062000000000001e-01 1.311354035333330081e+01 6.087518283333329672e-01 +1.573412999999999895e-01 1.262766263333329952e+01 1.918068450000000036e-01 +1.609471000000000096e-01 1.195521582166669994e+01 5.786270049999999721e-01 +1.661874999999999880e-01 1.070419187999999977e+01 5.435432616666669992e-01 +1.707328999999999930e-01 1.060603477499999947e+01 1.596232366666670011e-01 +1.715615000000000057e-01 1.106375028666669991e+01 5.234683166666670440e-01 +1.771270000000000067e-01 9.097135046666670277e+00 4.748174949999999783e-01 +1.827315999999999940e-01 9.232441778333329907e+00 4.562185283333329844e-01 +1.843548999999999882e-01 9.582483613333330652e+00 1.386399050000000077e-01 +1.883173999999999959e-01 9.681451038333330317e+00 4.521609416666669823e-01 +1.939794999999999991e-01 8.227612430000000643e+00 4.254379616666669750e-01 +1.983621000000000134e-01 8.295318078333329126e+00 1.192443799999999970e-01 +1.997663000000000078e-01 8.131970284999999521e+00 3.988034016666670012e-01 +2.055810999999999888e-01 7.142658796666670362e+00 3.773835349999999922e-01 +2.114655000000000007e-01 7.164933761666669731e+00 3.624743966666669759e-01 +2.121402000000000010e-01 7.387669431666670228e+00 1.083523799999999981e-01 +2.161903000000000019e-01 6.864321103333329788e+00 4.553583783333329804e-01 +2.261198000000000097e-01 6.847039901666669870e+00 9.614554833333330275e-02 +2.399302000000000101e-01 6.151464958333329847e+00 8.952354166666670610e-02 +2.538638999999999757e-01 5.563245829999999614e+00 8.146051666666670465e-02 +2.677901999999999783e-01 5.162996156666669556e+00 7.501275500000000040e-02 +2.819571000000000160e-01 4.731078383333329640e+00 6.938886333333330048e-02 +2.958196000000000159e-01 4.470382223333330352e+00 6.595420000000000449e-02 +3.100928000000000018e-01 4.071269568333329758e+00 5.983178000000000107e-02 +3.242616999999999861e-01 3.818289136666670025e+00 5.835058500000000342e-02 +3.390086999999999962e-01 3.464278166666669989e+00 5.175618166666669934e-02 +3.541291999999999773e-01 3.297458013333330218e+00 5.076983000000000190e-02 +3.689332000000000167e-01 3.070901008333330129e+00 4.683460500000000137e-02 +3.842147000000000201e-01 2.769801061666670172e+00 4.388707166666670073e-02 +3.991399999999999948e-01 2.510583560000000158e+00 4.232430333333329908e-02 +4.106022999999999756e-01 2.374815773499999949e+00 4.286182233333329927e-02 +4.139030000000000209e-01 2.373871081666670158e+00 4.032223833333330176e-02 +4.293236999999999748e-01 2.231085370000000179e+00 3.713437166666670036e-02 +4.294773000000000063e-01 2.156539414333329852e+00 3.612328016666670194e-02 +4.448717999999999839e-01 1.876962131666670031e+00 3.561285166666670193e-02 +4.465942999999999996e-01 1.963582529333329996e+00 3.226501116666669750e-02 +4.606124999999999803e-01 1.886281606666670108e+00 3.367513833333329876e-02 +4.684626000000000068e-01 1.795604685000000034e+00 3.177854483333329705e-02 +4.767757000000000245e-01 1.729912848333329922e+00 3.174894833333329752e-02 +4.833245999999999931e-01 1.643333701666670033e+00 3.012282700000000132e-02 +4.926197999999999966e-01 1.601281793333330095e+00 3.152871666666669931e-02 +5.045747000000000426e-01 1.513868059666670041e+00 2.772222300000000070e-02 +5.085798000000000263e-01 1.480025179999999940e+00 2.889593166666670071e-02 +5.229823000000000111e-01 1.292098316666669966e+00 2.594417883333329997e-02 +5.252354000000000189e-01 1.389690103333329985e+00 2.712855999999999948e-02 +5.420070000000000165e-01 1.207626951666670001e+00 2.641061333333330138e-02 +5.443057999999999508e-01 1.171074812333330106e+00 2.606778300000000062e-02 +5.586463000000000401e-01 1.131968480000000055e+00 2.562754666666669859e-02 +5.611642999999999493e-01 1.119771183833329964e+00 2.388942000000000149e-02 +5.757455000000000211e-01 1.050324178333329916e+00 2.370775166666670014e-02 +5.833063000000000553e-01 9.890430198333329814e-01 2.349970633333330061e-02 +5.931003000000000247e-01 9.529422783333330038e-01 2.272385333333330065e-02 +6.004707000000000239e-01 9.087951714999999986e-01 2.229426183333330092e-02 +6.102765999999999469e-01 8.968441200000000224e-01 2.213925333333329956e-02 +6.217470000000000496e-01 8.116193323333330545e-01 2.157820200000000119e-02 +6.278818000000000454e-01 7.745292049999999984e-01 2.063141833333330052e-02 +6.410972000000000337e-01 7.304547335000000086e-01 1.926881999999999900e-02 +6.451074999999999449e-01 7.030634049999999746e-01 2.109099333333330079e-02 +6.654345000000000399e-01 6.451808323333330097e-01 1.843812350000000044e-02 +6.842517000000000182e-01 5.969281796666670026e-01 2.051784966666669874e-02 +7.056883000000000461e-01 4.875458616666670242e-01 1.721726566666669997e-02 +7.257436999999999916e-01 5.206052460000000215e-01 1.864389433333329960e-02 +7.489183000000000368e-01 4.716855048333329914e-01 1.534349166666670004e-02 +7.718749999999999778e-01 3.996116843333329949e-01 1.723059933333330115e-02 +7.919618000000000491e-01 3.949704010000000265e-01 1.521841983333330033e-02 +8.153685999999999989e-01 3.711572033333330189e-01 1.553813883333329988e-02 +8.363026999999999544e-01 3.373120053333329982e-01 1.476541233333330053e-02 +8.617884000000000100e-01 3.012111169999999727e-01 1.384248800000000001e-02 +8.844872000000000289e-01 3.093801609999999869e-01 1.462152149999999991e-02 +9.079890000000000461e-01 2.725293346666670113e-01 1.278188633333329945e-02 +9.332829999999999737e-01 2.562172424999999976e-01 1.375849099999999943e-02 +9.550178000000000278e-01 2.195073688333329942e-01 1.287299783333330054e-02 +9.811271999999999771e-01 1.993873673333330099e-01 1.203331399999999982e-02 +1.006633399999999900e+00 1.965978770000000042e-01 1.249421516666670076e-02 +1.030228200000000038e+00 1.888581198333330047e-01 1.187900783333330039e-02 +1.057601100000000072e+00 2.019180355000000093e-01 1.106158266666669963e-02 +1.084413199999999966e+00 1.710308969999999873e-01 1.133507299999999933e-02 +1.109710100000000033e+00 1.385269876666669897e-01 1.092970799999999978e-02 +1.137554500000000024e+00 1.323425321666669985e-01 1.049619949999999920e-02 1.165834400000000048e+00 1.352444690000000060e-01 1.028587266666670073e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv index 8ef596703..e4a5c8ff1 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/5_75_1340_10.csv @@ -1,105 +1,105 @@ -3.623830000000000107e-02 1.262534512933330006e+02 1.649893105666669868e+01 -4.068399999999999794e-02 1.096408472683330046e+02 1.152156481833329948e+01 -4.509420000000000095e-02 6.843298548666669490e+01 8.484508865000000455e+00 -4.957310000000000189e-02 5.337196919333329959e+01 6.882409771666670117e+00 -5.414259999999999906e-02 4.824018401499999698e+01 5.433445991666670416e+00 -5.866699999999999693e-02 4.665372951666670076e+01 4.705492196666670068e+00 -6.312850000000000406e-02 5.221271013999999866e+01 3.917987768333329957e+00 -6.770890000000000242e-02 4.827582027833329903e+01 3.280544881666669799e+00 -7.236159999999999815e-02 3.618855914666669804e+01 2.837183351666670017e+00 -7.691330000000000389e-02 3.079150051333330040e+01 2.510836073333329921e+00 -8.163410000000000111e-02 3.296728457500000076e+01 2.143401925000000041e+00 -8.638339999999999907e-02 3.069841431000000043e+01 1.940150145000000048e+00 -9.105580000000000618e-02 2.710592771666669876e+01 1.703459686666670025e+00 -9.572469999999999590e-02 2.329590637833329936e+01 1.563327263333329942e+00 -1.004822999999999966e-01 2.091072460333329985e+01 1.376591528333330094e+00 -1.052260000000000001e-01 1.912562908333330114e+01 1.273402691666670083e+00 -1.099742999999999971e-01 1.787115249333330169e+01 1.146192773333329917e+00 -1.148272999999999933e-01 1.794118791666669921e+01 1.055988855000000060e+00 -1.197614000000000040e-01 1.653599519333329937e+01 9.723875616666669552e-01 -1.247536000000000062e-01 1.582743532666670028e+01 9.084356083333330334e-01 -1.298200999999999938e-01 1.478155951166669979e+01 8.152435350000000192e-01 -1.348902999999999908e-01 1.334408521333329922e+01 7.818770066666670404e-01 -1.399062000000000083e-01 1.377281605666670039e+01 7.205883533333330426e-01 -1.450545000000000029e-01 1.181691977333330001e+01 6.799812333333330461e-01 -1.502462999999999993e-01 1.213584320000000005e+01 6.572146300000000219e-01 -1.555860000000000021e-01 1.192358865166669979e+01 5.953690533333330093e-01 -1.572933999999999999e-01 1.181612013833330010e+01 1.889312700000000123e-01 -1.609261999999999915e-01 1.175466066000000076e+01 5.752044899999999572e-01 -1.661659000000000053e-01 1.042143580833329963e+01 5.392668716666669804e-01 -1.706808999999999965e-01 1.011778497999999971e+01 1.577585016666669948e-01 -1.715392000000000028e-01 9.758357795000000223e+00 5.081139666666669719e-01 -1.771040000000000114e-01 8.903400566666670457e+00 4.716962699999999731e-01 -1.827079000000000064e-01 9.178007346666669619e+00 4.546196783333329994e-01 -1.842987000000000097e-01 9.009516103333330861e+00 1.364224366666670074e-01 -1.882929000000000130e-01 8.406366826666669567e+00 4.368516150000000264e-01 -1.939542999999999962e-01 7.892936534999999587e+00 4.208100816666670019e-01 -1.983015999999999945e-01 7.968528981666669786e+00 1.178380566666669960e-01 -1.997403000000000095e-01 7.734987613333330181e+00 3.934730833333329736e-01 -2.055543999999999982e-01 7.979108915000000302e+00 3.863922049999999886e-01 -2.114380999999999899e-01 6.834691483333330098e+00 3.579354766666669740e-01 -2.120755000000000001e-01 7.473622876666669690e+00 1.084324933333330049e-01 -2.161621999999999988e-01 6.843431601666670083e+00 4.540542233333330069e-01 -2.260508999999999991e-01 6.624537448333329692e+00 9.508442500000000019e-02 -2.398570999999999898e-01 6.030806045000000282e+00 8.883706333333329930e-02 -2.537865999999999733e-01 5.548485336666669987e+00 8.121552666666670417e-02 -2.677086000000000188e-01 5.056279183333329819e+00 7.439664999999999473e-02 -2.818711999999999884e-01 4.746517688333329765e+00 6.929181333333329917e-02 -2.957293999999999756e-01 4.360488485000000303e+00 6.532353000000000465e-02 -3.099983000000000044e-01 4.042259101666670240e+00 5.956615500000000257e-02 -3.241628999999999761e-01 3.667612291666670021e+00 5.754424666666670130e-02 -3.389054000000000233e-01 3.392261260000000167e+00 5.132888666666669819e-02 -3.540212999999999832e-01 3.153369070000000107e+00 5.001504333333330055e-02 -3.688208000000000042e-01 2.957433689999999782e+00 4.622241666666670329e-02 -3.840975999999999835e-01 2.782086464999999897e+00 4.383930500000000202e-02 -3.990183999999999953e-01 2.497954614999999823e+00 4.216718166666669904e-02 -4.106379000000000001e-01 2.347253106833329994e+00 4.254085666666670290e-02 -4.137768000000000002e-01 2.313526113333329803e+00 3.995030166666670157e-02 -4.291927999999999854e-01 2.205677500000000180e+00 3.693004333333330114e-02 -4.295145000000000213e-01 2.125140473833329935e+00 3.583346700000000079e-02 -4.447362000000000259e-01 1.900926653333329996e+00 3.564656666666669860e-02 -4.466328999999999994e-01 1.939722618500000051e+00 3.202840516666669718e-02 -4.604721999999999982e-01 1.890633683333329929e+00 3.361991000000000285e-02 -4.685032000000000085e-01 1.753475375666670111e+00 3.146806816666670309e-02 -4.766304000000000096e-01 1.692544018333330014e+00 3.150160500000000197e-02 -4.833663999999999739e-01 1.571138671166669942e+00 2.967553150000000126e-02 -4.924697000000000102e-01 1.562743266666670072e+00 3.127265833333330025e-02 -5.046184000000000225e-01 1.517538195333330009e+00 2.762060549999999920e-02 -5.084248000000000101e-01 1.452519751666669912e+00 2.870172666666670133e-02 -5.230276000000000369e-01 1.280607860833330003e+00 2.579378549999999937e-02 -5.250753000000000226e-01 1.364635400000000054e+00 2.694985833333329861e-02 -5.418418000000000401e-01 1.180339848333330055e+00 2.622176999999999841e-02 -5.443529999999999758e-01 1.172893769833329936e+00 2.597214383333330129e-02 -5.584759999999999724e-01 1.116791568333330043e+00 2.550004666666669945e-02 -5.612129000000000145e-01 1.071752901666670033e+00 2.359418099999999879e-02 -5.755700000000000260e-01 1.003165499999999932e+00 2.343291166666670172e-02 -5.833568000000000087e-01 9.490407108333329678e-01 2.324037416666669895e-02 -5.929195000000000437e-01 9.286979850000000036e-01 2.255620333333329883e-02 -6.005226999999999649e-01 8.938147573333330431e-01 2.214501316666669939e-02 -6.100906000000000384e-01 8.779068549999999860e-01 2.199904499999999832e-02 -6.218008000000000424e-01 8.078191183333329750e-01 2.148254866666670163e-02 -6.276903999999999817e-01 7.890844949999999969e-01 2.066168499999999908e-02 -6.411527999999999672e-01 6.990414535000000207e-01 1.907308200000000162e-02 -6.449108999999999536e-01 7.027759316666669642e-01 2.104888333333329933e-02 -6.654921999999999782e-01 6.693195063333330364e-01 1.846815400000000051e-02 -6.843110000000000026e-01 5.654079498333329790e-01 2.030432683333329921e-02 -7.057493999999999712e-01 4.733216641666669888e-01 1.710506283333329894e-02 -7.258065000000000211e-01 4.881572298333329840e-01 1.844279849999999957e-02 -7.489831000000000127e-01 4.439720878333329734e-01 1.519038399999999948e-02 -7.719418000000000113e-01 4.063687451666669892e-01 1.720554133333329974e-02 -7.920304000000000233e-01 4.025809184999999957e-01 1.519988700000000047e-02 -8.154392000000000307e-01 3.522328571666670238e-01 1.541253149999999988e-02 -8.363751000000000380e-01 3.005755748333330257e-01 1.457862766666669953e-02 -8.618630000000000457e-01 2.801856756666670223e-01 1.372444566666669932e-02 -8.845638000000000112e-01 3.046253318333330129e-01 1.455751649999999925e-02 -9.080675999999999748e-01 2.540008221666669730e-01 1.267830250000000041e-02 -9.333637999999999657e-01 2.481020686666670083e-01 1.368678783333330054e-02 -9.551005000000000189e-01 1.938199579999999866e-01 1.274076333333330063e-02 -9.812121999999999788e-01 1.905731619999999904e-01 1.196892649999999926e-02 -1.006720599999999965e+00 1.784818836666670072e-01 1.239337400000000040e-02 -1.030317399999999939e+00 1.750911911666669929e-01 1.179671083333330012e-02 -1.057692700000000041e+00 1.705610396666669970e-01 1.092493383333329945e-02 -1.084507099999999946e+00 1.719191243333330066e-01 1.130716749999999965e-02 -1.109806099999999907e+00 1.366376699999999889e-01 1.089438483333329995e-02 -1.137653000000000025e+00 1.239800338333330032e-01 1.044124700000000072e-02 +3.623830000000000107e-02 1.262534512933330006e+02 1.649893105666669868e+01 +4.068399999999999794e-02 1.096408472683330046e+02 1.152156481833329948e+01 +4.509420000000000095e-02 6.843298548666669490e+01 8.484508865000000455e+00 +4.957310000000000189e-02 5.337196919333329959e+01 6.882409771666670117e+00 +5.414259999999999906e-02 4.824018401499999698e+01 5.433445991666670416e+00 +5.866699999999999693e-02 4.665372951666670076e+01 4.705492196666670068e+00 +6.312850000000000406e-02 5.221271013999999866e+01 3.917987768333329957e+00 +6.770890000000000242e-02 4.827582027833329903e+01 3.280544881666669799e+00 +7.236159999999999815e-02 3.618855914666669804e+01 2.837183351666670017e+00 +7.691330000000000389e-02 3.079150051333330040e+01 2.510836073333329921e+00 +8.163410000000000111e-02 3.296728457500000076e+01 2.143401925000000041e+00 +8.638339999999999907e-02 3.069841431000000043e+01 1.940150145000000048e+00 +9.105580000000000618e-02 2.710592771666669876e+01 1.703459686666670025e+00 +9.572469999999999590e-02 2.329590637833329936e+01 1.563327263333329942e+00 +1.004822999999999966e-01 2.091072460333329985e+01 1.376591528333330094e+00 +1.052260000000000001e-01 1.912562908333330114e+01 1.273402691666670083e+00 +1.099742999999999971e-01 1.787115249333330169e+01 1.146192773333329917e+00 +1.148272999999999933e-01 1.794118791666669921e+01 1.055988855000000060e+00 +1.197614000000000040e-01 1.653599519333329937e+01 9.723875616666669552e-01 +1.247536000000000062e-01 1.582743532666670028e+01 9.084356083333330334e-01 +1.298200999999999938e-01 1.478155951166669979e+01 8.152435350000000192e-01 +1.348902999999999908e-01 1.334408521333329922e+01 7.818770066666670404e-01 +1.399062000000000083e-01 1.377281605666670039e+01 7.205883533333330426e-01 +1.450545000000000029e-01 1.181691977333330001e+01 6.799812333333330461e-01 +1.502462999999999993e-01 1.213584320000000005e+01 6.572146300000000219e-01 +1.555860000000000021e-01 1.192358865166669979e+01 5.953690533333330093e-01 +1.572933999999999999e-01 1.181612013833330010e+01 1.889312700000000123e-01 +1.609261999999999915e-01 1.175466066000000076e+01 5.752044899999999572e-01 +1.661659000000000053e-01 1.042143580833329963e+01 5.392668716666669804e-01 +1.706808999999999965e-01 1.011778497999999971e+01 1.577585016666669948e-01 +1.715392000000000028e-01 9.758357795000000223e+00 5.081139666666669719e-01 +1.771040000000000114e-01 8.903400566666670457e+00 4.716962699999999731e-01 +1.827079000000000064e-01 9.178007346666669619e+00 4.546196783333329994e-01 +1.842987000000000097e-01 9.009516103333330861e+00 1.364224366666670074e-01 +1.882929000000000130e-01 8.406366826666669567e+00 4.368516150000000264e-01 +1.939542999999999962e-01 7.892936534999999587e+00 4.208100816666670019e-01 +1.983015999999999945e-01 7.968528981666669786e+00 1.178380566666669960e-01 +1.997403000000000095e-01 7.734987613333330181e+00 3.934730833333329736e-01 +2.055543999999999982e-01 7.979108915000000302e+00 3.863922049999999886e-01 +2.114380999999999899e-01 6.834691483333330098e+00 3.579354766666669740e-01 +2.120755000000000001e-01 7.473622876666669690e+00 1.084324933333330049e-01 +2.161621999999999988e-01 6.843431601666670083e+00 4.540542233333330069e-01 +2.260508999999999991e-01 6.624537448333329692e+00 9.508442500000000019e-02 +2.398570999999999898e-01 6.030806045000000282e+00 8.883706333333329930e-02 +2.537865999999999733e-01 5.548485336666669987e+00 8.121552666666670417e-02 +2.677086000000000188e-01 5.056279183333329819e+00 7.439664999999999473e-02 +2.818711999999999884e-01 4.746517688333329765e+00 6.929181333333329917e-02 +2.957293999999999756e-01 4.360488485000000303e+00 6.532353000000000465e-02 +3.099983000000000044e-01 4.042259101666670240e+00 5.956615500000000257e-02 +3.241628999999999761e-01 3.667612291666670021e+00 5.754424666666670130e-02 +3.389054000000000233e-01 3.392261260000000167e+00 5.132888666666669819e-02 +3.540212999999999832e-01 3.153369070000000107e+00 5.001504333333330055e-02 +3.688208000000000042e-01 2.957433689999999782e+00 4.622241666666670329e-02 +3.840975999999999835e-01 2.782086464999999897e+00 4.383930500000000202e-02 +3.990183999999999953e-01 2.497954614999999823e+00 4.216718166666669904e-02 +4.106379000000000001e-01 2.347253106833329994e+00 4.254085666666670290e-02 +4.137768000000000002e-01 2.313526113333329803e+00 3.995030166666670157e-02 +4.291927999999999854e-01 2.205677500000000180e+00 3.693004333333330114e-02 +4.295145000000000213e-01 2.125140473833329935e+00 3.583346700000000079e-02 +4.447362000000000259e-01 1.900926653333329996e+00 3.564656666666669860e-02 +4.466328999999999994e-01 1.939722618500000051e+00 3.202840516666669718e-02 +4.604721999999999982e-01 1.890633683333329929e+00 3.361991000000000285e-02 +4.685032000000000085e-01 1.753475375666670111e+00 3.146806816666670309e-02 +4.766304000000000096e-01 1.692544018333330014e+00 3.150160500000000197e-02 +4.833663999999999739e-01 1.571138671166669942e+00 2.967553150000000126e-02 +4.924697000000000102e-01 1.562743266666670072e+00 3.127265833333330025e-02 +5.046184000000000225e-01 1.517538195333330009e+00 2.762060549999999920e-02 +5.084248000000000101e-01 1.452519751666669912e+00 2.870172666666670133e-02 +5.230276000000000369e-01 1.280607860833330003e+00 2.579378549999999937e-02 +5.250753000000000226e-01 1.364635400000000054e+00 2.694985833333329861e-02 +5.418418000000000401e-01 1.180339848333330055e+00 2.622176999999999841e-02 +5.443529999999999758e-01 1.172893769833329936e+00 2.597214383333330129e-02 +5.584759999999999724e-01 1.116791568333330043e+00 2.550004666666669945e-02 +5.612129000000000145e-01 1.071752901666670033e+00 2.359418099999999879e-02 +5.755700000000000260e-01 1.003165499999999932e+00 2.343291166666670172e-02 +5.833568000000000087e-01 9.490407108333329678e-01 2.324037416666669895e-02 +5.929195000000000437e-01 9.286979850000000036e-01 2.255620333333329883e-02 +6.005226999999999649e-01 8.938147573333330431e-01 2.214501316666669939e-02 +6.100906000000000384e-01 8.779068549999999860e-01 2.199904499999999832e-02 +6.218008000000000424e-01 8.078191183333329750e-01 2.148254866666670163e-02 +6.276903999999999817e-01 7.890844949999999969e-01 2.066168499999999908e-02 +6.411527999999999672e-01 6.990414535000000207e-01 1.907308200000000162e-02 +6.449108999999999536e-01 7.027759316666669642e-01 2.104888333333329933e-02 +6.654921999999999782e-01 6.693195063333330364e-01 1.846815400000000051e-02 +6.843110000000000026e-01 5.654079498333329790e-01 2.030432683333329921e-02 +7.057493999999999712e-01 4.733216641666669888e-01 1.710506283333329894e-02 +7.258065000000000211e-01 4.881572298333329840e-01 1.844279849999999957e-02 +7.489831000000000127e-01 4.439720878333329734e-01 1.519038399999999948e-02 +7.719418000000000113e-01 4.063687451666669892e-01 1.720554133333329974e-02 +7.920304000000000233e-01 4.025809184999999957e-01 1.519988700000000047e-02 +8.154392000000000307e-01 3.522328571666670238e-01 1.541253149999999988e-02 +8.363751000000000380e-01 3.005755748333330257e-01 1.457862766666669953e-02 +8.618630000000000457e-01 2.801856756666670223e-01 1.372444566666669932e-02 +8.845638000000000112e-01 3.046253318333330129e-01 1.455751649999999925e-02 +9.080675999999999748e-01 2.540008221666669730e-01 1.267830250000000041e-02 +9.333637999999999657e-01 2.481020686666670083e-01 1.368678783333330054e-02 +9.551005000000000189e-01 1.938199579999999866e-01 1.274076333333330063e-02 +9.812121999999999788e-01 1.905731619999999904e-01 1.196892649999999926e-02 +1.006720599999999965e+00 1.784818836666670072e-01 1.239337400000000040e-02 +1.030317399999999939e+00 1.750911911666669929e-01 1.179671083333330012e-02 +1.057692700000000041e+00 1.705610396666669970e-01 1.092493383333329945e-02 +1.084507099999999946e+00 1.719191243333330066e-01 1.130716749999999965e-02 +1.109806099999999907e+00 1.366376699999999889e-01 1.089438483333329995e-02 +1.137653000000000025e+00 1.239800338333330032e-01 1.044124700000000072e-02 1.165935399999999955e+00 1.310211675000000076e-01 1.024458533333330069e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv index 4f571dd57..2b03b80a5 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/6_100_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 1.213206534416670053e+02 1.651067908166670151e+01 -4.070000000000000007e-02 8.158564289333330066e+01 1.146150313666669973e+01 -4.511180000000000051e-02 6.728303165833330013e+01 8.493610868333329122e+00 -4.959249999999999770e-02 5.609321657833329766e+01 6.902234358333330100e+00 -5.416379999999999806e-02 4.208391674666670212e+01 5.417946521666669568e+00 -5.868999999999999911e-02 4.572918046833329697e+01 4.708583066666670369e+00 -6.315320000000000655e-02 4.506950746166670285e+01 3.890110903333329873e+00 -6.773540000000000116e-02 3.932771859999999720e+01 3.240109296666669803e+00 -7.238989999999999314e-02 3.425092975666670014e+01 2.830867521666669884e+00 -7.694339999999999513e-02 2.785716006499999864e+01 2.497106951666669961e+00 -8.166600000000000248e-02 2.647316349333329910e+01 2.106834523333330100e+00 -8.641719999999999957e-02 2.865549820000000025e+01 1.929370503333329934e+00 -9.109140000000000292e-02 2.617781355833329826e+01 1.699746431666669944e+00 -9.576210000000000278e-02 2.262414874833330103e+01 1.560889624999999947e+00 -1.005216000000000026e-01 2.072404344833330114e+01 1.377539340000000001e+00 -1.052672000000000052e-01 1.924028949499999896e+01 1.276625569999999987e+00 -1.100174000000000013e-01 1.836748323999999855e+01 1.152518286666670111e+00 -1.148721999999999938e-01 1.699007782666669897e+01 1.049408108333329981e+00 -1.198083000000000065e-01 1.493712180833330017e+01 9.595881783333329862e-01 -1.248023999999999939e-01 1.484142020166670051e+01 9.009069050000000356e-01 -1.298709000000000113e-01 1.473895257666669956e+01 8.163899350000000110e-01 -1.349431000000000103e-01 1.308340819666669930e+01 7.807371766666669766e-01 -1.399610000000000021e-01 1.350568340499999920e+01 7.192249033333329988e-01 -1.451112999999999986e-01 1.173611615333330072e+01 6.804578466666669767e-01 -1.503050999999999970e-01 1.154060497666669960e+01 6.523238550000000080e-01 -1.556469000000000047e-01 1.191625231333330071e+01 5.964806683333330195e-01 -1.573344999999999883e-01 1.139197852166670089e+01 1.879402166666669927e-01 -1.609891999999999990e-01 1.125507998666670062e+01 5.708663616666670437e-01 -1.662309999999999899e-01 1.041113468166670053e+01 5.402433599999999503e-01 -1.707255000000000023e-01 1.013307594333329931e+01 1.580824633333330065e-01 -1.716062999999999894e-01 9.500610554999999735e+00 5.062648633333329817e-01 -1.771733000000000058e-01 8.706795813333329193e+00 4.704599616666669815e-01 -1.827794000000000085e-01 9.156035623333330875e+00 4.553047450000000107e-01 -1.843469000000000080e-01 9.118870355000000316e+00 1.370399833333330042e-01 -1.883665999999999952e-01 7.952454938333329615e+00 4.325042000000000053e-01 -1.940302000000000138e-01 8.034647969999999972e+00 4.232443883333329993e-01 -1.983534999999999882e-01 8.119139649999999264e+00 1.185909816666669975e-01 -1.998185000000000100e-01 7.527596430000000005e+00 3.919050766666670182e-01 -2.056348000000000065e-01 7.553855535000000287e+00 3.822255366666669762e-01 -2.115208000000000088e-01 6.617426820000000376e+00 3.561540533333329983e-01 -2.121309999999999862e-01 7.390867828333330003e+00 1.083323783333329932e-01 -2.162467999999999890e-01 6.635593964999999983e+00 4.517541333333329745e-01 -2.261101000000000083e-01 6.488236141666670065e+00 9.474941333333329607e-02 -2.399198999999999915e-01 5.939089416666670118e+00 8.864513000000000253e-02 -2.538528999999999924e-01 5.445706584999999933e+00 8.096326333333329905e-02 -2.677785999999999778e-01 5.020975218333330048e+00 7.440106833333330616e-02 -2.819448999999999983e-01 4.782109235000000069e+00 6.958310166666670238e-02 -2.958067999999999809e-01 4.377367741666669865e+00 6.553075166666670615e-02 -3.100794000000000050e-01 4.070373518333330054e+00 5.980910666666670178e-02 -3.242476000000000247e-01 3.688249826666670117e+00 5.775312500000000238e-02 -3.389940000000000175e-01 3.411490240000000007e+00 5.151532000000000333e-02 -3.541138999999999815e-01 3.221007965000000084e+00 5.041618500000000225e-02 -3.689172000000000007e-01 2.942401639999999929e+00 4.624927499999999941e-02 -3.841980999999999868e-01 2.767105533333329870e+00 4.386071833333329839e-02 -3.991226999999999969e-01 2.564823933333329808e+00 4.256582833333329846e-02 -4.106734000000000218e-01 2.300881685499999829e+00 4.238948299999999864e-02 -4.138850000000000029e-01 2.413576710000000070e+00 4.049426666666670199e-02 -4.293050999999999950e-01 2.233726248333329778e+00 3.713503166666669991e-02 -4.295516999999999808e-01 2.156876818999999834e+00 3.601888033333330158e-02 -4.448524999999999840e-01 1.902652508333330106e+00 3.572283666666670188e-02 -4.466716000000000020e-01 1.934442038833330102e+00 3.205653166666670023e-02 -4.605926000000000187e-01 1.874115690000000001e+00 3.360869833333329781e-02 -4.685437000000000074e-01 1.737730488500000003e+00 3.144913299999999717e-02 -4.767550999999999872e-01 1.772107871666670054e+00 3.193823833333329920e-02 -4.834083000000000130e-01 1.581873448666669901e+00 2.976716433333330067e-02 -4.925984999999999947e-01 1.570737606666670061e+00 3.137136000000000091e-02 -5.046621000000000024e-01 1.492830698499999942e+00 2.756047650000000016e-02 -5.085577999999999488e-01 1.485373084999999982e+00 2.891283166666670096e-02 -5.230728999999999518e-01 1.159546245333330061e+00 2.533816566666670031e-02 -5.252126000000000294e-01 1.354185358333330091e+00 2.695080999999999866e-02 -5.419834999999999514e-01 1.186315898333329955e+00 2.629908666666670031e-02 -5.444001000000000534e-01 1.201936935333330014e+00 2.613158683333329999e-02 -5.586221000000000103e-01 1.109243371666670086e+00 2.550917499999999852e-02 -5.612614999999999688e-01 1.098874749833330000e+00 2.373973216666670077e-02 -5.757206000000000268e-01 1.029040688333330067e+00 2.359920000000000073e-02 -5.834072999999999620e-01 9.811238644999999980e-01 2.340685516666669852e-02 -5.930746000000000073e-01 9.534806916666670462e-01 2.272023833333329870e-02 -6.005747000000000169e-01 8.956047156666669951e-01 2.218217800000000031e-02 -6.102501999999999649e-01 8.805252883333329894e-01 2.205115333333329888e-02 -6.218546000000000351e-01 8.076579554999999688e-01 2.150926133333330020e-02 -6.278546000000000404e-01 8.143317416666669972e-01 2.081983000000000097e-02 -6.412082999999999533e-01 7.185076576666670212e-01 1.917512450000000146e-02 -6.450795999999999752e-01 7.187583950000000499e-01 2.116659499999999985e-02 -6.655497999999999692e-01 6.417931828333329758e-01 1.838261283333330123e-02 -6.843702000000000396e-01 5.677104609999999996e-01 2.033867249999999835e-02 -7.058105999999999547e-01 5.146355146666670155e-01 1.728668516666670082e-02 -7.258693999999999980e-01 5.183306771666670310e-01 1.859332783333330144e-02 -7.490480000000000471e-01 4.413184218333329745e-01 1.519721516666669957e-02 -7.720086999999999922e-01 4.069291728333330194e-01 1.722663266666669968e-02 -7.920989999999999975e-01 3.912903401666669723e-01 1.517220816666670080e-02 -8.155097999999999514e-01 3.620392363333330144e-01 1.546880433333329939e-02 -8.364475000000000104e-01 3.218374210000000124e-01 1.467598383333330002e-02 -8.619377000000000288e-01 2.793489951666670024e-01 1.373524349999999915e-02 -8.846403999999999934e-01 2.729738648333330242e-01 1.444214883333330007e-02 -9.081462000000000145e-01 2.731246803333329809e-01 1.275928200000000026e-02 -9.334447000000000161e-01 2.513956430000000020e-01 1.371339566666670076e-02 -9.551832000000000100e-01 2.075616728333329886e-01 1.280443116666669934e-02 -9.812971999999999806e-01 2.026315226666670077e-01 1.202260966666669935e-02 -1.006807800000000030e+00 1.715856353333329865e-01 1.237966916666670067e-02 -1.030406600000000061e+00 1.813217336666670121e-01 1.183022066666669994e-02 -1.057784300000000011e+00 1.874246033333329953e-01 1.099227083333330010e-02 -1.084600999999999926e+00 1.682342156666669919e-01 1.130467983333329970e-02 -1.109902299999999897e+00 1.305937931666669993e-01 1.088363799999999930e-02 -1.137751600000000085e+00 1.264251891666670069e-01 1.045857849999999936e-02 +3.625239999999999713e-02 1.213206534416670053e+02 1.651067908166670151e+01 +4.070000000000000007e-02 8.158564289333330066e+01 1.146150313666669973e+01 +4.511180000000000051e-02 6.728303165833330013e+01 8.493610868333329122e+00 +4.959249999999999770e-02 5.609321657833329766e+01 6.902234358333330100e+00 +5.416379999999999806e-02 4.208391674666670212e+01 5.417946521666669568e+00 +5.868999999999999911e-02 4.572918046833329697e+01 4.708583066666670369e+00 +6.315320000000000655e-02 4.506950746166670285e+01 3.890110903333329873e+00 +6.773540000000000116e-02 3.932771859999999720e+01 3.240109296666669803e+00 +7.238989999999999314e-02 3.425092975666670014e+01 2.830867521666669884e+00 +7.694339999999999513e-02 2.785716006499999864e+01 2.497106951666669961e+00 +8.166600000000000248e-02 2.647316349333329910e+01 2.106834523333330100e+00 +8.641719999999999957e-02 2.865549820000000025e+01 1.929370503333329934e+00 +9.109140000000000292e-02 2.617781355833329826e+01 1.699746431666669944e+00 +9.576210000000000278e-02 2.262414874833330103e+01 1.560889624999999947e+00 +1.005216000000000026e-01 2.072404344833330114e+01 1.377539340000000001e+00 +1.052672000000000052e-01 1.924028949499999896e+01 1.276625569999999987e+00 +1.100174000000000013e-01 1.836748323999999855e+01 1.152518286666670111e+00 +1.148721999999999938e-01 1.699007782666669897e+01 1.049408108333329981e+00 +1.198083000000000065e-01 1.493712180833330017e+01 9.595881783333329862e-01 +1.248023999999999939e-01 1.484142020166670051e+01 9.009069050000000356e-01 +1.298709000000000113e-01 1.473895257666669956e+01 8.163899350000000110e-01 +1.349431000000000103e-01 1.308340819666669930e+01 7.807371766666669766e-01 +1.399610000000000021e-01 1.350568340499999920e+01 7.192249033333329988e-01 +1.451112999999999986e-01 1.173611615333330072e+01 6.804578466666669767e-01 +1.503050999999999970e-01 1.154060497666669960e+01 6.523238550000000080e-01 +1.556469000000000047e-01 1.191625231333330071e+01 5.964806683333330195e-01 +1.573344999999999883e-01 1.139197852166670089e+01 1.879402166666669927e-01 +1.609891999999999990e-01 1.125507998666670062e+01 5.708663616666670437e-01 +1.662309999999999899e-01 1.041113468166670053e+01 5.402433599999999503e-01 +1.707255000000000023e-01 1.013307594333329931e+01 1.580824633333330065e-01 +1.716062999999999894e-01 9.500610554999999735e+00 5.062648633333329817e-01 +1.771733000000000058e-01 8.706795813333329193e+00 4.704599616666669815e-01 +1.827794000000000085e-01 9.156035623333330875e+00 4.553047450000000107e-01 +1.843469000000000080e-01 9.118870355000000316e+00 1.370399833333330042e-01 +1.883665999999999952e-01 7.952454938333329615e+00 4.325042000000000053e-01 +1.940302000000000138e-01 8.034647969999999972e+00 4.232443883333329993e-01 +1.983534999999999882e-01 8.119139649999999264e+00 1.185909816666669975e-01 +1.998185000000000100e-01 7.527596430000000005e+00 3.919050766666670182e-01 +2.056348000000000065e-01 7.553855535000000287e+00 3.822255366666669762e-01 +2.115208000000000088e-01 6.617426820000000376e+00 3.561540533333329983e-01 +2.121309999999999862e-01 7.390867828333330003e+00 1.083323783333329932e-01 +2.162467999999999890e-01 6.635593964999999983e+00 4.517541333333329745e-01 +2.261101000000000083e-01 6.488236141666670065e+00 9.474941333333329607e-02 +2.399198999999999915e-01 5.939089416666670118e+00 8.864513000000000253e-02 +2.538528999999999924e-01 5.445706584999999933e+00 8.096326333333329905e-02 +2.677785999999999778e-01 5.020975218333330048e+00 7.440106833333330616e-02 +2.819448999999999983e-01 4.782109235000000069e+00 6.958310166666670238e-02 +2.958067999999999809e-01 4.377367741666669865e+00 6.553075166666670615e-02 +3.100794000000000050e-01 4.070373518333330054e+00 5.980910666666670178e-02 +3.242476000000000247e-01 3.688249826666670117e+00 5.775312500000000238e-02 +3.389940000000000175e-01 3.411490240000000007e+00 5.151532000000000333e-02 +3.541138999999999815e-01 3.221007965000000084e+00 5.041618500000000225e-02 +3.689172000000000007e-01 2.942401639999999929e+00 4.624927499999999941e-02 +3.841980999999999868e-01 2.767105533333329870e+00 4.386071833333329839e-02 +3.991226999999999969e-01 2.564823933333329808e+00 4.256582833333329846e-02 +4.106734000000000218e-01 2.300881685499999829e+00 4.238948299999999864e-02 +4.138850000000000029e-01 2.413576710000000070e+00 4.049426666666670199e-02 +4.293050999999999950e-01 2.233726248333329778e+00 3.713503166666669991e-02 +4.295516999999999808e-01 2.156876818999999834e+00 3.601888033333330158e-02 +4.448524999999999840e-01 1.902652508333330106e+00 3.572283666666670188e-02 +4.466716000000000020e-01 1.934442038833330102e+00 3.205653166666670023e-02 +4.605926000000000187e-01 1.874115690000000001e+00 3.360869833333329781e-02 +4.685437000000000074e-01 1.737730488500000003e+00 3.144913299999999717e-02 +4.767550999999999872e-01 1.772107871666670054e+00 3.193823833333329920e-02 +4.834083000000000130e-01 1.581873448666669901e+00 2.976716433333330067e-02 +4.925984999999999947e-01 1.570737606666670061e+00 3.137136000000000091e-02 +5.046621000000000024e-01 1.492830698499999942e+00 2.756047650000000016e-02 +5.085577999999999488e-01 1.485373084999999982e+00 2.891283166666670096e-02 +5.230728999999999518e-01 1.159546245333330061e+00 2.533816566666670031e-02 +5.252126000000000294e-01 1.354185358333330091e+00 2.695080999999999866e-02 +5.419834999999999514e-01 1.186315898333329955e+00 2.629908666666670031e-02 +5.444001000000000534e-01 1.201936935333330014e+00 2.613158683333329999e-02 +5.586221000000000103e-01 1.109243371666670086e+00 2.550917499999999852e-02 +5.612614999999999688e-01 1.098874749833330000e+00 2.373973216666670077e-02 +5.757206000000000268e-01 1.029040688333330067e+00 2.359920000000000073e-02 +5.834072999999999620e-01 9.811238644999999980e-01 2.340685516666669852e-02 +5.930746000000000073e-01 9.534806916666670462e-01 2.272023833333329870e-02 +6.005747000000000169e-01 8.956047156666669951e-01 2.218217800000000031e-02 +6.102501999999999649e-01 8.805252883333329894e-01 2.205115333333329888e-02 +6.218546000000000351e-01 8.076579554999999688e-01 2.150926133333330020e-02 +6.278546000000000404e-01 8.143317416666669972e-01 2.081983000000000097e-02 +6.412082999999999533e-01 7.185076576666670212e-01 1.917512450000000146e-02 +6.450795999999999752e-01 7.187583950000000499e-01 2.116659499999999985e-02 +6.655497999999999692e-01 6.417931828333329758e-01 1.838261283333330123e-02 +6.843702000000000396e-01 5.677104609999999996e-01 2.033867249999999835e-02 +7.058105999999999547e-01 5.146355146666670155e-01 1.728668516666670082e-02 +7.258693999999999980e-01 5.183306771666670310e-01 1.859332783333330144e-02 +7.490480000000000471e-01 4.413184218333329745e-01 1.519721516666669957e-02 +7.720086999999999922e-01 4.069291728333330194e-01 1.722663266666669968e-02 +7.920989999999999975e-01 3.912903401666669723e-01 1.517220816666670080e-02 +8.155097999999999514e-01 3.620392363333330144e-01 1.546880433333329939e-02 +8.364475000000000104e-01 3.218374210000000124e-01 1.467598383333330002e-02 +8.619377000000000288e-01 2.793489951666670024e-01 1.373524349999999915e-02 +8.846403999999999934e-01 2.729738648333330242e-01 1.444214883333330007e-02 +9.081462000000000145e-01 2.731246803333329809e-01 1.275928200000000026e-02 +9.334447000000000161e-01 2.513956430000000020e-01 1.371339566666670076e-02 +9.551832000000000100e-01 2.075616728333329886e-01 1.280443116666669934e-02 +9.812971999999999806e-01 2.026315226666670077e-01 1.202260966666669935e-02 +1.006807800000000030e+00 1.715856353333329865e-01 1.237966916666670067e-02 +1.030406600000000061e+00 1.813217336666670121e-01 1.183022066666669994e-02 +1.057784300000000011e+00 1.874246033333329953e-01 1.099227083333330010e-02 +1.084600999999999926e+00 1.682342156666669919e-01 1.130467983333329970e-02 +1.109902299999999897e+00 1.305937931666669993e-01 1.088363799999999930e-02 +1.137751600000000085e+00 1.264251891666670069e-01 1.045857849999999936e-02 1.166036300000000026e+00 1.206125236666669986e-01 1.021913349999999977e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv index 69ff8c3df..e8e9c9a0b 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/7_200_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 8.265676436333329491e+01 1.638320715333329858e+01 -4.070000000000000007e-02 5.464383480166669926e+01 1.136626790833330070e+01 -4.511180000000000051e-02 2.996549328500000087e+01 8.362137733333330658e+00 -4.959249999999999770e-02 3.902000664833330035e+01 6.829579628333330099e+00 -5.416379999999999806e-02 2.960868386499999971e+01 5.359635035000000158e+00 -5.868999999999999911e-02 2.775202533166670094e+01 4.620562245000000345e+00 -6.315320000000000655e-02 2.923420741833329828e+01 3.806268636666669813e+00 -6.773540000000000116e-02 2.925570898666670061e+01 3.181662941666670186e+00 -7.238989999999999314e-02 2.438109743166669929e+01 2.769415394999999780e+00 -7.694339999999999513e-02 2.082174377999999848e+01 2.449056793333329818e+00 -8.166600000000000248e-02 2.093264007666670068e+01 2.067833788333329981e+00 -8.641719999999999957e-02 2.065156679166669917e+01 1.869354308333329939e+00 -9.109140000000000292e-02 2.096371475999999845e+01 1.658336066666669995e+00 -9.576210000000000278e-02 1.686565956500000141e+01 1.512923419999999908e+00 -1.005216000000000026e-01 1.674424940666670025e+01 1.343149441666670052e+00 -1.052672000000000052e-01 1.453594207833329932e+01 1.233355748333329949e+00 -1.100174000000000013e-01 1.743436942499999986e+01 1.141890178333329953e+00 -1.148721999999999938e-01 1.514907325499999935e+01 1.030380964999999982e+00 -1.198083000000000065e-01 1.335097668833330076e+01 9.427780516666669497e-01 -1.248023999999999939e-01 1.334016233833330034e+01 8.846290449999999472e-01 -1.298709000000000113e-01 1.370878951499999943e+01 8.044898483333330352e-01 -1.349431000000000103e-01 1.169732300833329930e+01 7.648545733333329544e-01 -1.399610000000000021e-01 1.178831958166670013e+01 6.994071549999999471e-01 -1.451112999999999986e-01 1.065116290166669977e+01 6.676857533333330208e-01 -1.503050999999999970e-01 9.325193926666669242e+00 6.273500633333329857e-01 -1.556469000000000047e-01 1.029459589333329994e+01 5.781039766666670188e-01 -1.572456999999999883e-01 1.000640059000000015e+01 1.830944850000000013e-01 -1.609891999999999990e-01 1.045812633999999974e+01 5.605480683333330383e-01 -1.662309999999999899e-01 9.379805284999999770e+00 5.273011283333329802e-01 -1.706292000000000086e-01 9.152038171666669442e+00 1.545153300000000063e-01 -1.716062999999999894e-01 9.072271783333329509e+00 5.002084749999999858e-01 -1.771733000000000058e-01 8.299759079999999400e+00 4.647556766666670058e-01 -1.827794000000000085e-01 8.918414625000000484e+00 4.514085349999999996e-01 -1.842428999999999872e-01 8.303275895000000517e+00 1.338776349999999948e-01 -1.883665999999999952e-01 8.087114149999999668e+00 4.329608600000000029e-01 -1.940302000000000138e-01 6.940626968333329927e+00 4.097805333333329747e-01 -1.982414999999999872e-01 7.399220633333330355e+00 1.156899150000000043e-01 -1.998185000000000100e-01 7.671813116666670318e+00 3.925434549999999856e-01 -2.056348000000000065e-01 7.058416683333329722e+00 3.753756766666669908e-01 -2.115208000000000088e-01 6.186979153333330039e+00 3.502447450000000240e-01 -2.120113000000000136e-01 6.509825833333329648e+00 1.046767516666669978e-01 -2.162467999999999890e-01 6.237968744999999871e+00 4.443455150000000242e-01 -2.259823999999999999e-01 6.054194650000000344e+00 9.278840666666669790e-02 -2.397845000000000115e-01 5.564811654999999746e+00 8.685724833333340056e-02 -2.537096999999999825e-01 5.167096618333330227e+00 7.958348833333329930e-02 -2.676275000000000182e-01 4.857346653333330266e+00 7.348198000000000230e-02 -2.817857999999999752e-01 4.540460176666670122e+00 6.833893833333329337e-02 -2.956398000000000081e-01 4.237780543333330208e+00 6.471250666666669704e-02 -3.099044000000000243e-01 3.935048769999999863e+00 5.903304000000000190e-02 -3.240645999999999805e-01 3.478254921666669830e+00 5.662396666666669881e-02 -3.388027000000000122e-01 3.303115776666670111e+00 5.088800999999999741e-02 -3.539140000000000064e-01 3.111107356666670043e+00 4.976782999999999901e-02 -3.687090000000000090e-01 2.860701315000000022e+00 4.573441000000000312e-02 -3.839813000000000254e-01 2.699693565000000017e+00 4.341666500000000012e-02 -3.988975000000000160e-01 2.495346641666670084e+00 4.210437499999999944e-02 -4.106734000000000218e-01 2.304978501333330154e+00 4.227540733333329942e-02 -4.136514000000000024e-01 2.281161938333330141e+00 3.975256666666669714e-02 -4.290628000000000219e-01 2.190969609999999790e+00 3.681797500000000278e-02 -4.295516999999999808e-01 2.110397390999999789e+00 3.571657216666670326e-02 -4.446014999999999828e-01 1.879588453333330023e+00 3.550642500000000118e-02 -4.466716000000000020e-01 1.816268564666670082e+00 3.148649049999999866e-02 -4.603325999999999807e-01 1.793649588333330103e+00 3.313105499999999953e-02 -4.685437000000000074e-01 1.770170460833329962e+00 3.148902633333330175e-02 -4.764860000000000206e-01 1.682140176666669928e+00 3.141608500000000331e-02 -4.834083000000000130e-01 1.536765404999999918e+00 2.947832866666669910e-02 -4.923204999999999942e-01 1.511959243333329983e+00 3.099057499999999937e-02 -5.046621000000000024e-01 1.465441131499999994e+00 2.736933133333329868e-02 -5.082708000000000226e-01 1.365583310000000106e+00 2.825172333333330135e-02 -5.230728999999999518e-01 1.154780808166669948e+00 2.524863800000000033e-02 -5.249162000000000550e-01 1.329800611666670074e+00 2.675280666666670151e-02 -5.416775999999999813e-01 1.188958583333330044e+00 2.623523499999999911e-02 -5.444001000000000534e-01 1.154485974333330001e+00 2.585743066666670170e-02 -5.583067999999999920e-01 1.077189841666670089e+00 2.527868166666669830e-02 -5.612614999999999688e-01 1.051792144833330056e+00 2.347724083333330158e-02 -5.753956999999999544e-01 1.014095294999999952e+00 2.346036166666670003e-02 -5.834072999999999620e-01 9.588631039999999661e-01 2.325032483333330097e-02 -5.927398999999999862e-01 9.388917833333330076e-01 2.258296499999999998e-02 -6.005747000000000169e-01 8.756694673333329515e-01 2.203778849999999886e-02 -6.099058000000000535e-01 8.473022983333330371e-01 2.182166666666670099e-02 -6.218546000000000351e-01 7.881510335000000422e-01 2.137202599999999883e-02 -6.275003000000000108e-01 7.785123416666670515e-01 2.058900166666670015e-02 -6.412082999999999533e-01 7.088910750000000371e-01 1.908878433333329946e-02 -6.447154999999999969e-01 6.898300916666669780e-01 2.096122833333330035e-02 -6.655497999999999692e-01 6.325061706666670336e-01 1.830133016666669887e-02 -6.843702000000000396e-01 5.535274884999999978e-01 2.022582083333330019e-02 -7.058105999999999547e-01 4.772884753333330177e-01 1.710068249999999873e-02 -7.258693999999999980e-01 4.794482545000000040e-01 1.838371499999999839e-02 -7.490480000000000471e-01 4.303608649999999813e-01 1.512209783333329921e-02 -7.720086999999999922e-01 3.958678310000000033e-01 1.713988450000000080e-02 -7.920989999999999975e-01 3.804415833333329999e-01 1.509590366666670007e-02 -8.155097999999999514e-01 3.391658666666669819e-01 1.534219399999999997e-02 -8.364475000000000104e-01 2.920511656666670008e-01 1.453006433333330072e-02 -8.619377000000000288e-01 2.768105268333330149e-01 1.369777266666669970e-02 -8.846403999999999934e-01 2.773741731666670152e-01 1.443021766666669967e-02 -9.081462000000000145e-01 2.284839270000000033e-01 1.257401600000000036e-02 -9.334447000000000161e-01 2.262680790000000108e-01 1.358766933333330033e-02 -9.551832000000000100e-01 2.014745451666669906e-01 1.275664699999999943e-02 -9.812971999999999806e-01 1.828399243333329871e-01 1.193000216666669985e-02 -1.006807800000000030e+00 1.768480391666669982e-01 1.237525766666669989e-02 -1.030406600000000061e+00 1.607457411666670111e-01 1.173357283333329934e-02 -1.057784300000000011e+00 1.603443938333329877e-01 1.087976483333330004e-02 -1.084600999999999926e+00 1.672401265000000026e-01 1.127955949999999950e-02 -1.109902299999999897e+00 1.308651896666669923e-01 1.086452716666670010e-02 -1.137751600000000085e+00 1.208445169999999985e-01 1.042120399999999988e-02 +3.625239999999999713e-02 8.265676436333329491e+01 1.638320715333329858e+01 +4.070000000000000007e-02 5.464383480166669926e+01 1.136626790833330070e+01 +4.511180000000000051e-02 2.996549328500000087e+01 8.362137733333330658e+00 +4.959249999999999770e-02 3.902000664833330035e+01 6.829579628333330099e+00 +5.416379999999999806e-02 2.960868386499999971e+01 5.359635035000000158e+00 +5.868999999999999911e-02 2.775202533166670094e+01 4.620562245000000345e+00 +6.315320000000000655e-02 2.923420741833329828e+01 3.806268636666669813e+00 +6.773540000000000116e-02 2.925570898666670061e+01 3.181662941666670186e+00 +7.238989999999999314e-02 2.438109743166669929e+01 2.769415394999999780e+00 +7.694339999999999513e-02 2.082174377999999848e+01 2.449056793333329818e+00 +8.166600000000000248e-02 2.093264007666670068e+01 2.067833788333329981e+00 +8.641719999999999957e-02 2.065156679166669917e+01 1.869354308333329939e+00 +9.109140000000000292e-02 2.096371475999999845e+01 1.658336066666669995e+00 +9.576210000000000278e-02 1.686565956500000141e+01 1.512923419999999908e+00 +1.005216000000000026e-01 1.674424940666670025e+01 1.343149441666670052e+00 +1.052672000000000052e-01 1.453594207833329932e+01 1.233355748333329949e+00 +1.100174000000000013e-01 1.743436942499999986e+01 1.141890178333329953e+00 +1.148721999999999938e-01 1.514907325499999935e+01 1.030380964999999982e+00 +1.198083000000000065e-01 1.335097668833330076e+01 9.427780516666669497e-01 +1.248023999999999939e-01 1.334016233833330034e+01 8.846290449999999472e-01 +1.298709000000000113e-01 1.370878951499999943e+01 8.044898483333330352e-01 +1.349431000000000103e-01 1.169732300833329930e+01 7.648545733333329544e-01 +1.399610000000000021e-01 1.178831958166670013e+01 6.994071549999999471e-01 +1.451112999999999986e-01 1.065116290166669977e+01 6.676857533333330208e-01 +1.503050999999999970e-01 9.325193926666669242e+00 6.273500633333329857e-01 +1.556469000000000047e-01 1.029459589333329994e+01 5.781039766666670188e-01 +1.572456999999999883e-01 1.000640059000000015e+01 1.830944850000000013e-01 +1.609891999999999990e-01 1.045812633999999974e+01 5.605480683333330383e-01 +1.662309999999999899e-01 9.379805284999999770e+00 5.273011283333329802e-01 +1.706292000000000086e-01 9.152038171666669442e+00 1.545153300000000063e-01 +1.716062999999999894e-01 9.072271783333329509e+00 5.002084749999999858e-01 +1.771733000000000058e-01 8.299759079999999400e+00 4.647556766666670058e-01 +1.827794000000000085e-01 8.918414625000000484e+00 4.514085349999999996e-01 +1.842428999999999872e-01 8.303275895000000517e+00 1.338776349999999948e-01 +1.883665999999999952e-01 8.087114149999999668e+00 4.329608600000000029e-01 +1.940302000000000138e-01 6.940626968333329927e+00 4.097805333333329747e-01 +1.982414999999999872e-01 7.399220633333330355e+00 1.156899150000000043e-01 +1.998185000000000100e-01 7.671813116666670318e+00 3.925434549999999856e-01 +2.056348000000000065e-01 7.058416683333329722e+00 3.753756766666669908e-01 +2.115208000000000088e-01 6.186979153333330039e+00 3.502447450000000240e-01 +2.120113000000000136e-01 6.509825833333329648e+00 1.046767516666669978e-01 +2.162467999999999890e-01 6.237968744999999871e+00 4.443455150000000242e-01 +2.259823999999999999e-01 6.054194650000000344e+00 9.278840666666669790e-02 +2.397845000000000115e-01 5.564811654999999746e+00 8.685724833333340056e-02 +2.537096999999999825e-01 5.167096618333330227e+00 7.958348833333329930e-02 +2.676275000000000182e-01 4.857346653333330266e+00 7.348198000000000230e-02 +2.817857999999999752e-01 4.540460176666670122e+00 6.833893833333329337e-02 +2.956398000000000081e-01 4.237780543333330208e+00 6.471250666666669704e-02 +3.099044000000000243e-01 3.935048769999999863e+00 5.903304000000000190e-02 +3.240645999999999805e-01 3.478254921666669830e+00 5.662396666666669881e-02 +3.388027000000000122e-01 3.303115776666670111e+00 5.088800999999999741e-02 +3.539140000000000064e-01 3.111107356666670043e+00 4.976782999999999901e-02 +3.687090000000000090e-01 2.860701315000000022e+00 4.573441000000000312e-02 +3.839813000000000254e-01 2.699693565000000017e+00 4.341666500000000012e-02 +3.988975000000000160e-01 2.495346641666670084e+00 4.210437499999999944e-02 +4.106734000000000218e-01 2.304978501333330154e+00 4.227540733333329942e-02 +4.136514000000000024e-01 2.281161938333330141e+00 3.975256666666669714e-02 +4.290628000000000219e-01 2.190969609999999790e+00 3.681797500000000278e-02 +4.295516999999999808e-01 2.110397390999999789e+00 3.571657216666670326e-02 +4.446014999999999828e-01 1.879588453333330023e+00 3.550642500000000118e-02 +4.466716000000000020e-01 1.816268564666670082e+00 3.148649049999999866e-02 +4.603325999999999807e-01 1.793649588333330103e+00 3.313105499999999953e-02 +4.685437000000000074e-01 1.770170460833329962e+00 3.148902633333330175e-02 +4.764860000000000206e-01 1.682140176666669928e+00 3.141608500000000331e-02 +4.834083000000000130e-01 1.536765404999999918e+00 2.947832866666669910e-02 +4.923204999999999942e-01 1.511959243333329983e+00 3.099057499999999937e-02 +5.046621000000000024e-01 1.465441131499999994e+00 2.736933133333329868e-02 +5.082708000000000226e-01 1.365583310000000106e+00 2.825172333333330135e-02 +5.230728999999999518e-01 1.154780808166669948e+00 2.524863800000000033e-02 +5.249162000000000550e-01 1.329800611666670074e+00 2.675280666666670151e-02 +5.416775999999999813e-01 1.188958583333330044e+00 2.623523499999999911e-02 +5.444001000000000534e-01 1.154485974333330001e+00 2.585743066666670170e-02 +5.583067999999999920e-01 1.077189841666670089e+00 2.527868166666669830e-02 +5.612614999999999688e-01 1.051792144833330056e+00 2.347724083333330158e-02 +5.753956999999999544e-01 1.014095294999999952e+00 2.346036166666670003e-02 +5.834072999999999620e-01 9.588631039999999661e-01 2.325032483333330097e-02 +5.927398999999999862e-01 9.388917833333330076e-01 2.258296499999999998e-02 +6.005747000000000169e-01 8.756694673333329515e-01 2.203778849999999886e-02 +6.099058000000000535e-01 8.473022983333330371e-01 2.182166666666670099e-02 +6.218546000000000351e-01 7.881510335000000422e-01 2.137202599999999883e-02 +6.275003000000000108e-01 7.785123416666670515e-01 2.058900166666670015e-02 +6.412082999999999533e-01 7.088910750000000371e-01 1.908878433333329946e-02 +6.447154999999999969e-01 6.898300916666669780e-01 2.096122833333330035e-02 +6.655497999999999692e-01 6.325061706666670336e-01 1.830133016666669887e-02 +6.843702000000000396e-01 5.535274884999999978e-01 2.022582083333330019e-02 +7.058105999999999547e-01 4.772884753333330177e-01 1.710068249999999873e-02 +7.258693999999999980e-01 4.794482545000000040e-01 1.838371499999999839e-02 +7.490480000000000471e-01 4.303608649999999813e-01 1.512209783333329921e-02 +7.720086999999999922e-01 3.958678310000000033e-01 1.713988450000000080e-02 +7.920989999999999975e-01 3.804415833333329999e-01 1.509590366666670007e-02 +8.155097999999999514e-01 3.391658666666669819e-01 1.534219399999999997e-02 +8.364475000000000104e-01 2.920511656666670008e-01 1.453006433333330072e-02 +8.619377000000000288e-01 2.768105268333330149e-01 1.369777266666669970e-02 +8.846403999999999934e-01 2.773741731666670152e-01 1.443021766666669967e-02 +9.081462000000000145e-01 2.284839270000000033e-01 1.257401600000000036e-02 +9.334447000000000161e-01 2.262680790000000108e-01 1.358766933333330033e-02 +9.551832000000000100e-01 2.014745451666669906e-01 1.275664699999999943e-02 +9.812971999999999806e-01 1.828399243333329871e-01 1.193000216666669985e-02 +1.006807800000000030e+00 1.768480391666669982e-01 1.237525766666669989e-02 +1.030406600000000061e+00 1.607457411666670111e-01 1.173357283333329934e-02 +1.057784300000000011e+00 1.603443938333329877e-01 1.087976483333330004e-02 +1.084600999999999926e+00 1.672401265000000026e-01 1.127955949999999950e-02 +1.109902299999999897e+00 1.308651896666669923e-01 1.086452716666670010e-02 +1.137751600000000085e+00 1.208445169999999985e-01 1.042120399999999988e-02 1.166036300000000026e+00 1.219414448333329959e-01 1.020481383333330001e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv index c61ec5437..c576fb9ba 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/8_300_1340_10.csv @@ -1,105 +1,105 @@ -3.625710000000000044e-02 7.586499487000000386e+01 1.637401323166670153e+01 -4.070529999999999982e-02 4.481643682666670259e+01 1.134473448500000003e+01 -4.511769999999999670e-02 3.187475403666670104e+01 8.372120233333330219e+00 -4.959899999999999726e-02 2.997679580000000144e+01 6.801308398333329563e+00 -5.417079999999999812e-02 2.394855565499999983e+01 5.340431286666669664e+00 -5.869760000000000255e-02 2.142582576833330066e+01 4.594792676666670239e+00 -6.316149999999999542e-02 3.089957102166669856e+01 3.816311058333329953e+00 -6.774429999999999341e-02 2.654007947166670078e+01 3.169185818333330129e+00 -7.239929999999999977e-02 1.943375908333329960e+01 2.742530958333329938e+00 -7.695340000000000513e-02 1.976728253666669843e+01 2.443851029999999813e+00 -8.167670000000000485e-02 1.925900297000000094e+01 2.058348746666669893e+00 -8.642850000000000532e-02 1.891829230833329945e+01 1.858069830000000033e+00 -9.110319999999999530e-02 1.827805419833330092e+01 1.639507476666669961e+00 -9.577460000000000140e-02 1.569160155166670023e+01 1.504524439999999963e+00 -1.005346000000000017e-01 1.326347007166669911e+01 1.315847523333329994e+00 -1.052808999999999967e-01 1.528716061000000082e+01 1.240626203333329958e+00 -1.100316999999999962e-01 1.357029930000000029e+01 1.108701733333329997e+00 -1.148871000000000059e-01 1.268526336333330029e+01 1.008324261666670107e+00 -1.198237999999999942e-01 1.157206131499999913e+01 9.266636050000000013e-01 -1.248187000000000046e-01 1.139260776499999928e+01 8.664271866666669597e-01 -1.298877999999999977e-01 1.288652256499999993e+01 7.969746983333330093e-01 -1.349605999999999861e-01 1.079102049499999971e+01 7.560191466666670301e-01 -1.399791999999999981e-01 1.105679143000000053e+01 6.920319183333329960e-01 -1.451301000000000119e-01 1.044385611833330074e+01 6.659680816666669889e-01 -1.503246000000000027e-01 9.389620521666669717e+00 6.284466633333329888e-01 -1.556671000000000027e-01 9.365269319999999453e+00 5.685768949999999711e-01 -1.572933999999999999e-01 9.202126339999999516e+00 1.807199866666669985e-01 -1.610100999999999893e-01 9.725111731666670423e+00 5.526473100000000027e-01 -1.662526000000000004e-01 8.453553321666669618e+00 5.170390433333329483e-01 -1.706808999999999965e-01 8.508661829999999426e+00 1.525917300000000087e-01 -1.716285999999999923e-01 8.248625778333330771e+00 4.912094450000000223e-01 -1.771963000000000010e-01 7.860151886666669974e+00 4.601271083333329792e-01 -1.828030999999999962e-01 8.179063558333330874e+00 4.431557566666670112e-01 -1.842987000000000097e-01 7.789301021666670266e+00 1.322509683333329966e-01 -1.883911000000000058e-01 7.284922560000000047e+00 4.239183200000000151e-01 -1.940553999999999890e-01 6.860865920000000173e+00 4.091373166666669725e-01 -1.983015999999999945e-01 6.984366938333329777e+00 1.143283233333329957e-01 -1.998445000000000082e-01 7.321059296666669880e+00 3.888106266666669919e-01 -2.056614999999999971e-01 6.516638536666669701e+00 3.691254600000000163e-01 -2.115482999999999947e-01 5.813378858333329902e+00 3.460794933333329881e-01 -2.120755000000000001e-01 6.410695145000000039e+00 1.044179233333329959e-01 -2.162748999999999922e-01 6.046752721666670105e+00 4.416217800000000193e-01 -2.260508999999999991e-01 5.970100884999999913e+00 9.257100833333330170e-02 -2.398570999999999898e-01 5.328183368333330172e+00 8.599138666666669706e-02 -2.537865999999999733e-01 5.025059630000000332e+00 7.909936500000000481e-02 -2.677086000000000188e-01 4.638679231666669622e+00 7.265197833333329747e-02 -2.818711999999999884e-01 4.320586221666670390e+00 6.748263000000000178e-02 -2.957293999999999756e-01 4.003143766666670267e+00 6.376038000000000538e-02 -3.099983000000000044e-01 3.820362695000000031e+00 5.861029000000000239e-02 -3.241628999999999761e-01 3.476478435000000200e+00 5.668581000000000314e-02 -3.389054000000000233e-01 3.203212216666670109e+00 5.052067666666670148e-02 -3.540212999999999832e-01 3.082675891666669887e+00 4.970334166666669912e-02 -3.688208000000000042e-01 2.852994409999999981e+00 4.575685000000000169e-02 -3.840975999999999835e-01 2.619206445000000105e+00 4.310591500000000159e-02 -3.990183999999999953e-01 2.447015261666670050e+00 4.192961333333330293e-02 -4.106022999999999756e-01 2.250148667666670210e+00 4.208387400000000028e-02 -4.137768000000000002e-01 2.199470903333330174e+00 3.941821333333329902e-02 -4.291927999999999854e-01 2.152990283333330090e+00 3.668624166666670239e-02 -4.294773000000000063e-01 2.066339865166670009e+00 3.559078633333329772e-02 -4.447362000000000259e-01 1.856158275000000080e+00 3.543832166666670280e-02 -4.465942999999999996e-01 1.863514126000000104e+00 3.172593550000000345e-02 -4.604721999999999982e-01 1.785743791666670077e+00 3.313367500000000132e-02 -4.684626000000000068e-01 1.701883971166670007e+00 3.125393900000000141e-02 -4.766304000000000096e-01 1.673134868333330028e+00 3.141082333333330284e-02 -4.833245999999999931e-01 1.561424375333329895e+00 2.963426116666669982e-02 -4.924697000000000102e-01 1.528741043333329941e+00 3.110879000000000075e-02 -5.045747000000000426e-01 1.440318964999999896e+00 2.730927600000000038e-02 -5.084248000000000101e-01 1.414442154999999923e+00 2.852017166666670142e-02 -5.229823000000000111e-01 1.195010044500000035e+00 2.544837383333330150e-02 -5.250753000000000226e-01 1.305492214999999900e+00 2.666661666666670163e-02 -5.418418000000000401e-01 1.152673440000000049e+00 2.608773333333330030e-02 -5.443057999999999508e-01 1.145610492499999911e+00 2.585580999999999990e-02 -5.584759999999999724e-01 1.067225758333329999e+00 2.525753999999999846e-02 -5.611642999999999493e-01 1.067666433166670092e+00 2.357715833333329930e-02 -5.755700000000000260e-01 1.029394661666670041e+00 2.355942499999999842e-02 -5.833063000000000553e-01 9.377488744999999959e-01 2.319254466666669998e-02 -5.929195000000000437e-01 9.657185166666669707e-01 2.274125999999999925e-02 -6.004707000000000239e-01 8.602252591666670334e-01 2.200228683333330104e-02 -6.100906000000000384e-01 8.435776883333330201e-01 2.182633499999999879e-02 -6.217470000000000496e-01 7.760975660000000165e-01 2.134885499999999992e-02 -6.276903999999999817e-01 7.741666183333330009e-01 2.058969000000000077e-02 -6.410972000000000337e-01 7.019246166666669451e-01 1.908517183333329967e-02 -6.449108999999999536e-01 6.851353900000000108e-01 2.095862666666669857e-02 -6.654345000000000399e-01 5.961630181666669470e-01 1.818150283333330036e-02 -6.842517000000000182e-01 5.507593983333329835e-01 2.023759049999999948e-02 -7.056883000000000461e-01 4.903288296666670210e-01 1.717216466666670119e-02 -7.257436999999999916e-01 4.865799499999999833e-01 1.843612033333329875e-02 -7.489183000000000368e-01 4.252237993333329857e-01 1.512044316666670031e-02 -7.718749999999999778e-01 3.910920323333330062e-01 1.713838283333329882e-02 -7.919618000000000491e-01 3.921714671666670093e-01 1.515910683333330025e-02 -8.153685999999999989e-01 3.357406613333330236e-01 1.534501599999999952e-02 -8.363026999999999544e-01 3.075498956666670169e-01 1.460560383333329992e-02 -8.617884000000000100e-01 2.857851470000000171e-01 1.374501849999999921e-02 -8.844872000000000289e-01 2.740424961666669823e-01 1.443190633333329975e-02 -9.079890000000000461e-01 2.574230581666669959e-01 1.269050000000000039e-02 -9.332829999999999737e-01 2.258197691666669893e-01 1.359980449999999980e-02 -9.550178000000000278e-01 1.934376846666669980e-01 1.273933533333329940e-02 -9.811271999999999771e-01 1.665732448333329951e-01 1.188447333333329976e-02 -1.006633399999999900e+00 1.640185443333329884e-01 1.234030849999999922e-02 -1.030228200000000038e+00 1.357939996666669979e-01 1.165456533333330061e-02 -1.057601100000000072e+00 1.607766528333330058e-01 1.089187166666670016e-02 -1.084413199999999966e+00 1.505459054999999935e-01 1.123158833333329915e-02 -1.109710100000000033e+00 1.282342724999999961e-01 1.086581349999999994e-02 -1.137554500000000024e+00 1.161345933333329944e-01 1.041549200000000015e-02 +3.625710000000000044e-02 7.586499487000000386e+01 1.637401323166670153e+01 +4.070529999999999982e-02 4.481643682666670259e+01 1.134473448500000003e+01 +4.511769999999999670e-02 3.187475403666670104e+01 8.372120233333330219e+00 +4.959899999999999726e-02 2.997679580000000144e+01 6.801308398333329563e+00 +5.417079999999999812e-02 2.394855565499999983e+01 5.340431286666669664e+00 +5.869760000000000255e-02 2.142582576833330066e+01 4.594792676666670239e+00 +6.316149999999999542e-02 3.089957102166669856e+01 3.816311058333329953e+00 +6.774429999999999341e-02 2.654007947166670078e+01 3.169185818333330129e+00 +7.239929999999999977e-02 1.943375908333329960e+01 2.742530958333329938e+00 +7.695340000000000513e-02 1.976728253666669843e+01 2.443851029999999813e+00 +8.167670000000000485e-02 1.925900297000000094e+01 2.058348746666669893e+00 +8.642850000000000532e-02 1.891829230833329945e+01 1.858069830000000033e+00 +9.110319999999999530e-02 1.827805419833330092e+01 1.639507476666669961e+00 +9.577460000000000140e-02 1.569160155166670023e+01 1.504524439999999963e+00 +1.005346000000000017e-01 1.326347007166669911e+01 1.315847523333329994e+00 +1.052808999999999967e-01 1.528716061000000082e+01 1.240626203333329958e+00 +1.100316999999999962e-01 1.357029930000000029e+01 1.108701733333329997e+00 +1.148871000000000059e-01 1.268526336333330029e+01 1.008324261666670107e+00 +1.198237999999999942e-01 1.157206131499999913e+01 9.266636050000000013e-01 +1.248187000000000046e-01 1.139260776499999928e+01 8.664271866666669597e-01 +1.298877999999999977e-01 1.288652256499999993e+01 7.969746983333330093e-01 +1.349605999999999861e-01 1.079102049499999971e+01 7.560191466666670301e-01 +1.399791999999999981e-01 1.105679143000000053e+01 6.920319183333329960e-01 +1.451301000000000119e-01 1.044385611833330074e+01 6.659680816666669889e-01 +1.503246000000000027e-01 9.389620521666669717e+00 6.284466633333329888e-01 +1.556671000000000027e-01 9.365269319999999453e+00 5.685768949999999711e-01 +1.572933999999999999e-01 9.202126339999999516e+00 1.807199866666669985e-01 +1.610100999999999893e-01 9.725111731666670423e+00 5.526473100000000027e-01 +1.662526000000000004e-01 8.453553321666669618e+00 5.170390433333329483e-01 +1.706808999999999965e-01 8.508661829999999426e+00 1.525917300000000087e-01 +1.716285999999999923e-01 8.248625778333330771e+00 4.912094450000000223e-01 +1.771963000000000010e-01 7.860151886666669974e+00 4.601271083333329792e-01 +1.828030999999999962e-01 8.179063558333330874e+00 4.431557566666670112e-01 +1.842987000000000097e-01 7.789301021666670266e+00 1.322509683333329966e-01 +1.883911000000000058e-01 7.284922560000000047e+00 4.239183200000000151e-01 +1.940553999999999890e-01 6.860865920000000173e+00 4.091373166666669725e-01 +1.983015999999999945e-01 6.984366938333329777e+00 1.143283233333329957e-01 +1.998445000000000082e-01 7.321059296666669880e+00 3.888106266666669919e-01 +2.056614999999999971e-01 6.516638536666669701e+00 3.691254600000000163e-01 +2.115482999999999947e-01 5.813378858333329902e+00 3.460794933333329881e-01 +2.120755000000000001e-01 6.410695145000000039e+00 1.044179233333329959e-01 +2.162748999999999922e-01 6.046752721666670105e+00 4.416217800000000193e-01 +2.260508999999999991e-01 5.970100884999999913e+00 9.257100833333330170e-02 +2.398570999999999898e-01 5.328183368333330172e+00 8.599138666666669706e-02 +2.537865999999999733e-01 5.025059630000000332e+00 7.909936500000000481e-02 +2.677086000000000188e-01 4.638679231666669622e+00 7.265197833333329747e-02 +2.818711999999999884e-01 4.320586221666670390e+00 6.748263000000000178e-02 +2.957293999999999756e-01 4.003143766666670267e+00 6.376038000000000538e-02 +3.099983000000000044e-01 3.820362695000000031e+00 5.861029000000000239e-02 +3.241628999999999761e-01 3.476478435000000200e+00 5.668581000000000314e-02 +3.389054000000000233e-01 3.203212216666670109e+00 5.052067666666670148e-02 +3.540212999999999832e-01 3.082675891666669887e+00 4.970334166666669912e-02 +3.688208000000000042e-01 2.852994409999999981e+00 4.575685000000000169e-02 +3.840975999999999835e-01 2.619206445000000105e+00 4.310591500000000159e-02 +3.990183999999999953e-01 2.447015261666670050e+00 4.192961333333330293e-02 +4.106022999999999756e-01 2.250148667666670210e+00 4.208387400000000028e-02 +4.137768000000000002e-01 2.199470903333330174e+00 3.941821333333329902e-02 +4.291927999999999854e-01 2.152990283333330090e+00 3.668624166666670239e-02 +4.294773000000000063e-01 2.066339865166670009e+00 3.559078633333329772e-02 +4.447362000000000259e-01 1.856158275000000080e+00 3.543832166666670280e-02 +4.465942999999999996e-01 1.863514126000000104e+00 3.172593550000000345e-02 +4.604721999999999982e-01 1.785743791666670077e+00 3.313367500000000132e-02 +4.684626000000000068e-01 1.701883971166670007e+00 3.125393900000000141e-02 +4.766304000000000096e-01 1.673134868333330028e+00 3.141082333333330284e-02 +4.833245999999999931e-01 1.561424375333329895e+00 2.963426116666669982e-02 +4.924697000000000102e-01 1.528741043333329941e+00 3.110879000000000075e-02 +5.045747000000000426e-01 1.440318964999999896e+00 2.730927600000000038e-02 +5.084248000000000101e-01 1.414442154999999923e+00 2.852017166666670142e-02 +5.229823000000000111e-01 1.195010044500000035e+00 2.544837383333330150e-02 +5.250753000000000226e-01 1.305492214999999900e+00 2.666661666666670163e-02 +5.418418000000000401e-01 1.152673440000000049e+00 2.608773333333330030e-02 +5.443057999999999508e-01 1.145610492499999911e+00 2.585580999999999990e-02 +5.584759999999999724e-01 1.067225758333329999e+00 2.525753999999999846e-02 +5.611642999999999493e-01 1.067666433166670092e+00 2.357715833333329930e-02 +5.755700000000000260e-01 1.029394661666670041e+00 2.355942499999999842e-02 +5.833063000000000553e-01 9.377488744999999959e-01 2.319254466666669998e-02 +5.929195000000000437e-01 9.657185166666669707e-01 2.274125999999999925e-02 +6.004707000000000239e-01 8.602252591666670334e-01 2.200228683333330104e-02 +6.100906000000000384e-01 8.435776883333330201e-01 2.182633499999999879e-02 +6.217470000000000496e-01 7.760975660000000165e-01 2.134885499999999992e-02 +6.276903999999999817e-01 7.741666183333330009e-01 2.058969000000000077e-02 +6.410972000000000337e-01 7.019246166666669451e-01 1.908517183333329967e-02 +6.449108999999999536e-01 6.851353900000000108e-01 2.095862666666669857e-02 +6.654345000000000399e-01 5.961630181666669470e-01 1.818150283333330036e-02 +6.842517000000000182e-01 5.507593983333329835e-01 2.023759049999999948e-02 +7.056883000000000461e-01 4.903288296666670210e-01 1.717216466666670119e-02 +7.257436999999999916e-01 4.865799499999999833e-01 1.843612033333329875e-02 +7.489183000000000368e-01 4.252237993333329857e-01 1.512044316666670031e-02 +7.718749999999999778e-01 3.910920323333330062e-01 1.713838283333329882e-02 +7.919618000000000491e-01 3.921714671666670093e-01 1.515910683333330025e-02 +8.153685999999999989e-01 3.357406613333330236e-01 1.534501599999999952e-02 +8.363026999999999544e-01 3.075498956666670169e-01 1.460560383333329992e-02 +8.617884000000000100e-01 2.857851470000000171e-01 1.374501849999999921e-02 +8.844872000000000289e-01 2.740424961666669823e-01 1.443190633333329975e-02 +9.079890000000000461e-01 2.574230581666669959e-01 1.269050000000000039e-02 +9.332829999999999737e-01 2.258197691666669893e-01 1.359980449999999980e-02 +9.550178000000000278e-01 1.934376846666669980e-01 1.273933533333329940e-02 +9.811271999999999771e-01 1.665732448333329951e-01 1.188447333333329976e-02 +1.006633399999999900e+00 1.640185443333329884e-01 1.234030849999999922e-02 +1.030228200000000038e+00 1.357939996666669979e-01 1.165456533333330061e-02 +1.057601100000000072e+00 1.607766528333330058e-01 1.089187166666670016e-02 +1.084413199999999966e+00 1.505459054999999935e-01 1.123158833333329915e-02 +1.109710100000000033e+00 1.282342724999999961e-01 1.086581349999999994e-02 +1.137554500000000024e+00 1.161345933333329944e-01 1.041549200000000015e-02 1.165834400000000048e+00 1.239725849999999963e-01 1.022116500000000081e-02 \ No newline at end of file diff --git a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv index c04b643c3..c869ca7de 100644 --- a/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv +++ b/test/trend_test_data/FeNiB_perpendicular_Bersweiler_et_al/9_600_1340_10.csv @@ -1,105 +1,105 @@ -3.625239999999999713e-02 5.114892415500000311e+01 1.631213251166670020e+01 -4.070000000000000007e-02 4.576787608166669941e+01 1.134772132833330005e+01 -4.511180000000000051e-02 4.331816215999999997e+01 8.407984515000000769e+00 -4.959249999999999770e-02 2.519454865000000154e+01 6.784784965000000057e+00 -5.416379999999999806e-02 1.407789967999999980e+01 5.302135776666670353e+00 -5.868999999999999911e-02 1.337527417166669963e+01 4.558895663333330184e+00 -6.315320000000000655e-02 2.088227957833329995e+01 3.767553325000000175e+00 -6.773540000000000116e-02 2.352067832833330030e+01 3.153463791666669902e+00 -7.238989999999999314e-02 1.459065788833330046e+01 2.714546644999999980e+00 -7.694339999999999513e-02 1.643097480333329941e+01 2.423213508333330157e+00 -8.166600000000000248e-02 1.564276924666670077e+01 2.035339249999999822e+00 -8.641719999999999957e-02 1.609254856500000130e+01 1.837833853333330048e+00 -9.109140000000000292e-02 1.279946007166670086e+01 1.598433549999999981e+00 -9.576210000000000278e-02 1.168004799999999932e+01 1.472505774999999906e+00 -1.005216000000000026e-01 1.239115217500000021e+01 1.308776653333330042e+00 -1.052672000000000052e-01 1.104442360666669920e+01 1.203200884999999998e+00 -1.100174000000000013e-01 1.264824788499999997e+01 1.100505863333330003e+00 -1.148721999999999938e-01 1.068150069333329988e+01 9.895295950000000396e-01 -1.198083000000000065e-01 1.062919121333329997e+01 9.177280949999999660e-01 -1.248023999999999939e-01 8.480228023333330256e+00 8.376397483333329896e-01 -1.298709000000000113e-01 1.054387282333330056e+01 7.736622133333329598e-01 -1.349431000000000103e-01 8.823326103333329229e+00 7.353996000000000421e-01 -1.399610000000000021e-01 9.107303678333330765e+00 6.707318450000000487e-01 -1.451112999999999986e-01 7.568946575000000010e+00 6.354211899999999691e-01 -1.503050999999999970e-01 7.486937655000000191e+00 6.076642716666670330e-01 -1.556469000000000047e-01 8.316071640000000542e+00 5.572019216666670438e-01 -1.572933999999999999e-01 8.082806423333330770e+00 1.772221983333329975e-01 -1.609891999999999990e-01 8.406204656666670161e+00 5.374420016666670019e-01 -1.662309999999999899e-01 7.305961626666669595e+00 5.035922400000000243e-01 -1.706808999999999965e-01 7.409980823333330413e+00 1.490785450000000067e-01 -1.716062999999999894e-01 7.126663556666669841e+00 4.782201200000000263e-01 -1.771733000000000058e-01 6.104670323333330373e+00 4.398585833333329975e-01 -1.827794000000000085e-01 6.314649313333330127e+00 4.207942599999999755e-01 -1.842987000000000097e-01 6.985669296666669581e+00 1.295300000000000062e-01 -1.883665999999999952e-01 7.196837438333330006e+00 4.229003000000000068e-01 -1.940302000000000138e-01 5.456149725000000394e+00 3.926154199999999928e-01 -1.983015999999999945e-01 6.101519538333329606e+00 1.111746183333330029e-01 -1.998185000000000100e-01 6.715507050000000255e+00 3.818104066666669905e-01 -2.056348000000000065e-01 5.954089436666669677e+00 3.622545733333329965e-01 -2.115208000000000088e-01 5.823000606666670187e+00 3.462099583333330122e-01 -2.120755000000000001e-01 5.689073146666670411e+00 1.016859966666670001e-01 -2.162467999999999890e-01 5.274567024999999632e+00 4.291691899999999782e-01 -2.260508999999999991e-01 5.306054011666669901e+00 9.002336499999999408e-02 -2.398570999999999898e-01 4.872989734999999989e+00 8.416759833333330165e-02 -2.537865999999999733e-01 4.590923198333330291e+00 7.736351666666670124e-02 -2.677086000000000188e-01 4.288802803333330083e+00 7.121471833333330170e-02 -2.818711999999999884e-01 4.093612151666669696e+00 6.655526166666669852e-02 -2.957293999999999756e-01 3.790488160000000217e+00 6.286535166666669394e-02 -3.099983000000000044e-01 3.646502630000000078e+00 5.789795166666669712e-02 -3.241628999999999761e-01 3.269809508333330061e+00 5.578990999999999811e-02 -3.389054000000000233e-01 3.057003066666669877e+00 4.992672166666670130e-02 -3.540212999999999832e-01 3.010102380000000188e+00 4.942106333333329965e-02 -3.688208000000000042e-01 2.669906414999999811e+00 4.496581333333329877e-02 -3.840975999999999835e-01 2.619258584999999862e+00 4.314465499999999704e-02 -3.990183999999999953e-01 2.335828473333330102e+00 4.143680999999999753e-02 -4.106379000000000001e-01 2.148179208166669962e+00 4.160297799999999879e-02 -4.137768000000000002e-01 2.129094906666670006e+00 3.911823833333329808e-02 -4.291927999999999854e-01 2.070782439999999891e+00 3.633175833333329718e-02 -4.295145000000000213e-01 2.006558257333329820e+00 3.534480766666669993e-02 -4.447362000000000259e-01 1.796411879999999961e+00 3.518650999999999723e-02 -4.466328999999999994e-01 1.795892682000000073e+00 3.145603500000000025e-02 -4.604721999999999982e-01 1.744876515000000072e+00 3.296921333333330262e-02 -4.685032000000000085e-01 1.640983006833329982e+00 3.099933850000000102e-02 -4.766304000000000096e-01 1.643527214999999986e+00 3.129624333333329983e-02 -4.833663999999999739e-01 1.494623838666669924e+00 2.933965966666670158e-02 -4.924697000000000102e-01 1.485128543333330109e+00 3.092004166666669981e-02 -5.046184000000000225e-01 1.428664912499999939e+00 2.726148050000000087e-02 -5.084248000000000101e-01 1.392996424999999983e+00 2.844018666666670025e-02 -5.230276000000000369e-01 1.160762609500000098e+00 2.531033383333329903e-02 -5.250753000000000226e-01 1.272159111666669951e+00 2.652694499999999969e-02 -5.418418000000000401e-01 1.157124196666670102e+00 2.613007999999999997e-02 -5.443529999999999758e-01 1.137421045666670016e+00 2.582160033333329857e-02 -5.584759999999999724e-01 1.068463686666669910e+00 2.528335666666670090e-02 -5.612129000000000145e-01 1.030207043666669930e+00 2.342105016666670009e-02 -5.755700000000000260e-01 9.590708749999999894e-01 2.323855999999999838e-02 -5.833568000000000087e-01 9.226566683333330410e-01 2.312843766666669923e-02 -5.929195000000000437e-01 9.361494049999999900e-01 2.261169999999999847e-02 -6.005226999999999649e-01 8.377321681666669573e-01 2.190618299999999921e-02 -6.100906000000000384e-01 8.074355933333330348e-01 2.165867833333329912e-02 -6.218008000000000424e-01 7.338905468333329907e-01 2.116956166666670094e-02 -6.276903999999999817e-01 7.588048750000000453e-01 2.052974999999999939e-02 -6.411527999999999672e-01 6.602236648333329461e-01 1.891721183333330142e-02 -6.449108999999999536e-01 6.976061483333330093e-01 2.103810166666670103e-02 -6.654921999999999782e-01 5.868389913333329488e-01 1.814479133333329886e-02 -6.843110000000000026e-01 5.442379206666669855e-01 2.020865366666670104e-02 -7.057493999999999712e-01 4.561023925000000090e-01 1.703726683333330050e-02 -7.258065000000000211e-01 4.680557555000000036e-01 1.835656600000000124e-02 -7.489831000000000127e-01 4.286472281666670048e-01 1.513358700000000043e-02 -7.719418000000000113e-01 3.942902281666669784e-01 1.715291783333329836e-02 -7.920304000000000233e-01 3.917498161666669865e-01 1.515774683333329965e-02 -8.154392000000000307e-01 3.437863165000000221e-01 1.537817166666670052e-02 -8.363751000000000380e-01 2.882515494999999817e-01 1.453092849999999998e-02 -8.618630000000000457e-01 2.511196196666670155e-01 1.361783299999999933e-02 -8.845638000000000112e-01 2.644882184999999830e-01 1.439263916666670001e-02 -9.080675999999999748e-01 2.444909116666670046e-01 1.264447816666670020e-02 -9.333637999999999657e-01 2.291532736666669900e-01 1.361314100000000048e-02 -9.551005000000000189e-01 1.942403736666669933e-01 1.274254833333329957e-02 -9.812121999999999788e-01 1.854263468333330056e-01 1.195107366666670057e-02 -1.006720599999999965e+00 1.833105325000000119e-01 1.241118433333330065e-02 -1.030317399999999939e+00 1.560276093333330116e-01 1.172809033333330024e-02 -1.057692700000000041e+00 1.687616888333330067e-01 1.091902633333330028e-02 -1.084507099999999946e+00 1.609880563333329906e-01 1.126864266666669986e-02 -1.109806099999999907e+00 1.237764021666669934e-01 1.085079116666669979e-02 -1.137653000000000025e+00 1.252411816666670064e-01 1.044549983333330039e-02 +3.625239999999999713e-02 5.114892415500000311e+01 1.631213251166670020e+01 +4.070000000000000007e-02 4.576787608166669941e+01 1.134772132833330005e+01 +4.511180000000000051e-02 4.331816215999999997e+01 8.407984515000000769e+00 +4.959249999999999770e-02 2.519454865000000154e+01 6.784784965000000057e+00 +5.416379999999999806e-02 1.407789967999999980e+01 5.302135776666670353e+00 +5.868999999999999911e-02 1.337527417166669963e+01 4.558895663333330184e+00 +6.315320000000000655e-02 2.088227957833329995e+01 3.767553325000000175e+00 +6.773540000000000116e-02 2.352067832833330030e+01 3.153463791666669902e+00 +7.238989999999999314e-02 1.459065788833330046e+01 2.714546644999999980e+00 +7.694339999999999513e-02 1.643097480333329941e+01 2.423213508333330157e+00 +8.166600000000000248e-02 1.564276924666670077e+01 2.035339249999999822e+00 +8.641719999999999957e-02 1.609254856500000130e+01 1.837833853333330048e+00 +9.109140000000000292e-02 1.279946007166670086e+01 1.598433549999999981e+00 +9.576210000000000278e-02 1.168004799999999932e+01 1.472505774999999906e+00 +1.005216000000000026e-01 1.239115217500000021e+01 1.308776653333330042e+00 +1.052672000000000052e-01 1.104442360666669920e+01 1.203200884999999998e+00 +1.100174000000000013e-01 1.264824788499999997e+01 1.100505863333330003e+00 +1.148721999999999938e-01 1.068150069333329988e+01 9.895295950000000396e-01 +1.198083000000000065e-01 1.062919121333329997e+01 9.177280949999999660e-01 +1.248023999999999939e-01 8.480228023333330256e+00 8.376397483333329896e-01 +1.298709000000000113e-01 1.054387282333330056e+01 7.736622133333329598e-01 +1.349431000000000103e-01 8.823326103333329229e+00 7.353996000000000421e-01 +1.399610000000000021e-01 9.107303678333330765e+00 6.707318450000000487e-01 +1.451112999999999986e-01 7.568946575000000010e+00 6.354211899999999691e-01 +1.503050999999999970e-01 7.486937655000000191e+00 6.076642716666670330e-01 +1.556469000000000047e-01 8.316071640000000542e+00 5.572019216666670438e-01 +1.572933999999999999e-01 8.082806423333330770e+00 1.772221983333329975e-01 +1.609891999999999990e-01 8.406204656666670161e+00 5.374420016666670019e-01 +1.662309999999999899e-01 7.305961626666669595e+00 5.035922400000000243e-01 +1.706808999999999965e-01 7.409980823333330413e+00 1.490785450000000067e-01 +1.716062999999999894e-01 7.126663556666669841e+00 4.782201200000000263e-01 +1.771733000000000058e-01 6.104670323333330373e+00 4.398585833333329975e-01 +1.827794000000000085e-01 6.314649313333330127e+00 4.207942599999999755e-01 +1.842987000000000097e-01 6.985669296666669581e+00 1.295300000000000062e-01 +1.883665999999999952e-01 7.196837438333330006e+00 4.229003000000000068e-01 +1.940302000000000138e-01 5.456149725000000394e+00 3.926154199999999928e-01 +1.983015999999999945e-01 6.101519538333329606e+00 1.111746183333330029e-01 +1.998185000000000100e-01 6.715507050000000255e+00 3.818104066666669905e-01 +2.056348000000000065e-01 5.954089436666669677e+00 3.622545733333329965e-01 +2.115208000000000088e-01 5.823000606666670187e+00 3.462099583333330122e-01 +2.120755000000000001e-01 5.689073146666670411e+00 1.016859966666670001e-01 +2.162467999999999890e-01 5.274567024999999632e+00 4.291691899999999782e-01 +2.260508999999999991e-01 5.306054011666669901e+00 9.002336499999999408e-02 +2.398570999999999898e-01 4.872989734999999989e+00 8.416759833333330165e-02 +2.537865999999999733e-01 4.590923198333330291e+00 7.736351666666670124e-02 +2.677086000000000188e-01 4.288802803333330083e+00 7.121471833333330170e-02 +2.818711999999999884e-01 4.093612151666669696e+00 6.655526166666669852e-02 +2.957293999999999756e-01 3.790488160000000217e+00 6.286535166666669394e-02 +3.099983000000000044e-01 3.646502630000000078e+00 5.789795166666669712e-02 +3.241628999999999761e-01 3.269809508333330061e+00 5.578990999999999811e-02 +3.389054000000000233e-01 3.057003066666669877e+00 4.992672166666670130e-02 +3.540212999999999832e-01 3.010102380000000188e+00 4.942106333333329965e-02 +3.688208000000000042e-01 2.669906414999999811e+00 4.496581333333329877e-02 +3.840975999999999835e-01 2.619258584999999862e+00 4.314465499999999704e-02 +3.990183999999999953e-01 2.335828473333330102e+00 4.143680999999999753e-02 +4.106379000000000001e-01 2.148179208166669962e+00 4.160297799999999879e-02 +4.137768000000000002e-01 2.129094906666670006e+00 3.911823833333329808e-02 +4.291927999999999854e-01 2.070782439999999891e+00 3.633175833333329718e-02 +4.295145000000000213e-01 2.006558257333329820e+00 3.534480766666669993e-02 +4.447362000000000259e-01 1.796411879999999961e+00 3.518650999999999723e-02 +4.466328999999999994e-01 1.795892682000000073e+00 3.145603500000000025e-02 +4.604721999999999982e-01 1.744876515000000072e+00 3.296921333333330262e-02 +4.685032000000000085e-01 1.640983006833329982e+00 3.099933850000000102e-02 +4.766304000000000096e-01 1.643527214999999986e+00 3.129624333333329983e-02 +4.833663999999999739e-01 1.494623838666669924e+00 2.933965966666670158e-02 +4.924697000000000102e-01 1.485128543333330109e+00 3.092004166666669981e-02 +5.046184000000000225e-01 1.428664912499999939e+00 2.726148050000000087e-02 +5.084248000000000101e-01 1.392996424999999983e+00 2.844018666666670025e-02 +5.230276000000000369e-01 1.160762609500000098e+00 2.531033383333329903e-02 +5.250753000000000226e-01 1.272159111666669951e+00 2.652694499999999969e-02 +5.418418000000000401e-01 1.157124196666670102e+00 2.613007999999999997e-02 +5.443529999999999758e-01 1.137421045666670016e+00 2.582160033333329857e-02 +5.584759999999999724e-01 1.068463686666669910e+00 2.528335666666670090e-02 +5.612129000000000145e-01 1.030207043666669930e+00 2.342105016666670009e-02 +5.755700000000000260e-01 9.590708749999999894e-01 2.323855999999999838e-02 +5.833568000000000087e-01 9.226566683333330410e-01 2.312843766666669923e-02 +5.929195000000000437e-01 9.361494049999999900e-01 2.261169999999999847e-02 +6.005226999999999649e-01 8.377321681666669573e-01 2.190618299999999921e-02 +6.100906000000000384e-01 8.074355933333330348e-01 2.165867833333329912e-02 +6.218008000000000424e-01 7.338905468333329907e-01 2.116956166666670094e-02 +6.276903999999999817e-01 7.588048750000000453e-01 2.052974999999999939e-02 +6.411527999999999672e-01 6.602236648333329461e-01 1.891721183333330142e-02 +6.449108999999999536e-01 6.976061483333330093e-01 2.103810166666670103e-02 +6.654921999999999782e-01 5.868389913333329488e-01 1.814479133333329886e-02 +6.843110000000000026e-01 5.442379206666669855e-01 2.020865366666670104e-02 +7.057493999999999712e-01 4.561023925000000090e-01 1.703726683333330050e-02 +7.258065000000000211e-01 4.680557555000000036e-01 1.835656600000000124e-02 +7.489831000000000127e-01 4.286472281666670048e-01 1.513358700000000043e-02 +7.719418000000000113e-01 3.942902281666669784e-01 1.715291783333329836e-02 +7.920304000000000233e-01 3.917498161666669865e-01 1.515774683333329965e-02 +8.154392000000000307e-01 3.437863165000000221e-01 1.537817166666670052e-02 +8.363751000000000380e-01 2.882515494999999817e-01 1.453092849999999998e-02 +8.618630000000000457e-01 2.511196196666670155e-01 1.361783299999999933e-02 +8.845638000000000112e-01 2.644882184999999830e-01 1.439263916666670001e-02 +9.080675999999999748e-01 2.444909116666670046e-01 1.264447816666670020e-02 +9.333637999999999657e-01 2.291532736666669900e-01 1.361314100000000048e-02 +9.551005000000000189e-01 1.942403736666669933e-01 1.274254833333329957e-02 +9.812121999999999788e-01 1.854263468333330056e-01 1.195107366666670057e-02 +1.006720599999999965e+00 1.833105325000000119e-01 1.241118433333330065e-02 +1.030317399999999939e+00 1.560276093333330116e-01 1.172809033333330024e-02 +1.057692700000000041e+00 1.687616888333330067e-01 1.091902633333330028e-02 +1.084507099999999946e+00 1.609880563333329906e-01 1.126864266666669986e-02 +1.109806099999999907e+00 1.237764021666669934e-01 1.085079116666669979e-02 +1.137653000000000025e+00 1.252411816666670064e-01 1.044549983333330039e-02 1.165935399999999955e+00 1.143170270000000016e-01 1.018908599999999998e-02 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv index 92b38bcf5..160f11da2 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/1_33_1640_22.874115.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 -3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 -3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 -3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 -4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 -4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 -4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 -4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 -5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 -5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 -5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 -5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 -5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 -6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 -6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 -6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 -7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 -7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 -7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 -7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 -7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 -8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 -8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 -8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 -8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 -8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 -9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 -1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 -1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 -1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 -1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 -1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 -1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 -1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 -1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 -1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 -1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 -1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 -1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 -1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 -1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 -1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 -1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 -2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 -2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 -2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 -2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 -2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 -2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 -2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 -2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 -2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 -2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 -2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 -2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 -2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 -2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 -2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 -2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 +2.732000000000000053e-02 5.247581629999999677e+03 5.122294999999999732e+01 +3.090999999999999998e-02 3.911350339999999960e+03 4.422301999999999822e+01 +3.452999999999999819e-02 2.897911560000000009e+03 3.806515000000000271e+01 +3.812999999999999723e-02 2.151411560000000009e+03 3.279795000000000016e+01 +4.173999999999999932e-02 1.629610879999999952e+03 2.854479999999999862e+01 +4.542999999999999816e-02 1.229812930000000051e+03 2.479730999999999952e+01 +4.646000000000000130e-02 1.191418850000000020e+03 2.440716000000000108e+01 +4.909000000000000169e-02 9.198557799999999816e+02 2.144593000000000060e+01 +5.254999999999999949e-02 7.981839199999999437e+02 1.997728999999999999e+01 +5.270999999999999991e-02 7.205761899999999969e+02 1.898125999999999891e+01 +5.630999999999999894e-02 5.509914999999999736e+02 1.659806000000000026e+01 +5.870999999999999830e-02 5.012570499999999925e+02 1.583125000000000071e+01 +5.988000000000000267e-02 4.332142900000000054e+02 1.471757999999999988e+01 +6.353999999999999926e-02 3.420333299999999781e+02 1.307732999999999990e+01 +6.482999999999999874e-02 3.398080699999999865e+02 1.303472000000000008e+01 +6.716999999999999360e-02 2.726683699999999817e+02 1.167622000000000071e+01 +7.073000000000000120e-02 2.204248299999999858e+02 1.049821000000000026e+01 +7.095999999999999530e-02 2.235476199999999949e+02 1.057230999999999987e+01 +7.434999999999999942e-02 1.760958799999999940e+02 9.383390000000000342e+00 +7.724000000000000310e-02 1.542382200000000125e+02 8.781750000000000611e+00 +7.799999999999999989e-02 1.457825499999999863e+02 8.537639999999999674e+00 +8.164000000000000423e-02 1.201677600000000012e+02 7.751380000000000159e+00 +8.346000000000000640e-02 1.089934400000000068e+02 7.382189999999999586e+00 +8.525000000000000633e-02 9.836262000000000683e+01 7.012940000000000396e+00 +8.881999999999999618e-02 8.192439000000000249e+01 6.400170000000000137e+00 +8.962000000000000521e-02 7.733648999999999774e+01 6.218379999999999797e+00 +9.572999999999999565e-02 5.882012000000000285e+01 5.423099999999999810e+00 +1.018000000000000016e-01 4.406902000000000186e+01 4.694090000000000096e+00 +1.080300000000000010e-01 3.487624000000000279e+01 4.175900000000000389e+00 +1.141999999999999960e-01 2.769241999999999848e+01 3.721049999999999969e+00 +1.202399999999999997e-01 2.227824000000000026e+01 3.337530000000000108e+00 +1.263900000000000023e-01 1.858717000000000041e+01 3.048540000000000028e+00 +1.325999999999999956e-01 1.587791999999999959e+01 2.817619999999999791e+00 +1.388199999999999990e-01 1.416899000000000086e+01 2.661669999999999980e+00 +1.449499999999999955e-01 1.174597999999999942e+01 2.423430000000000195e+00 +1.509900000000000131e-01 1.047161000000000008e+01 2.288190000000000168e+00 +1.571599999999999941e-01 9.681599999999999540e+00 2.200180000000000025e+00 +1.633799999999999975e-01 8.894579999999999487e+00 2.108859999999999957e+00 +1.695599999999999885e-01 8.317479999999999762e+00 2.039299999999999891e+00 +1.756800000000000028e-01 7.913870000000000182e+00 1.989200000000000079e+00 +1.818599999999999939e-01 7.771530000000000271e+00 1.971230000000000038e+00 +1.880699999999999872e-01 7.882909999999999862e+00 1.985309999999999908e+00 +1.941799999999999915e-01 7.707720000000000127e+00 1.963130000000000042e+00 +2.002800000000000136e-01 7.676859999999999573e+00 1.959189999999999987e+00 +2.064199999999999924e-01 7.872259999999999813e+00 1.983970000000000011e+00 +2.126000000000000112e-01 7.870400000000000063e+00 1.983729999999999993e+00 +2.187500000000000000e-01 7.977940000000000254e+00 1.997239999999999904e+00 +2.248699999999999866e-01 8.152039999999999509e+00 2.018920000000000048e+00 +2.310500000000000054e-01 8.298420000000000130e+00 2.036960000000000104e+00 +2.372700000000000087e-01 8.716689999999999827e+00 2.087660000000000071e+00 +2.434399999999999897e-01 8.782600000000000406e+00 2.095540000000000180e+00 +2.495600000000000041e-01 8.933479999999999421e+00 2.113469999999999960e+00 +2.556899999999999729e-01 9.374109999999999943e+00 2.164960000000000218e+00 +2.618500000000000272e-01 9.457430000000000447e+00 2.174560000000000048e+00 +2.680500000000000105e-01 9.702469999999999928e+00 2.202550000000000008e+00 +2.742100000000000093e-01 9.923930000000000362e+00 2.227549999999999919e+00 +2.802999999999999936e-01 1.008966000000000030e+01 2.246070000000000011e+00 +2.864599999999999924e-01 1.031367999999999974e+01 2.270869999999999944e+00 +2.926699999999999857e-01 1.058960000000000079e+01 2.301039999999999974e+00 2.988199999999999745e-01 1.062256999999999962e+01 2.304619999999999891e+00 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv index 831fa6a9d..80562dff5 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/2_42_1640_23.456895.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 -3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 -3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 -3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 -4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 -4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 -4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 -4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 -5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 -5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 -5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 -5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 -5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 -6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 -6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 -6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 -7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 -7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 -7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 -7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 -7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 -8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 -8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 -8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 -8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 -8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 -9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 -1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 -1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 -1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 -1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 -1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 -1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 -1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 -1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 -1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 -1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 -1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 -1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 -1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 -1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 -1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 -1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 -2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 -2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 -2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 -2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 -2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 -2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 -2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 -2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 -2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 -2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 -2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 -2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 -2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 -2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 -2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 -2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 +2.732000000000000053e-02 3.883615650000000187e+03 4.406595000000000084e+01 +3.090000000000000038e-02 3.072013609999999971e+03 3.919192000000000320e+01 +3.452999999999999819e-02 2.355659860000000208e+03 3.431953000000000031e+01 +3.812999999999999723e-02 1.806985030000000052e+03 3.005815000000000126e+01 +4.173999999999999932e-02 1.389839799999999968e+03 2.636132999999999882e+01 +4.542000000000000204e-02 1.072684349999999995e+03 2.315906000000000020e+01 +4.644000000000000211e-02 9.624380499999999756e+02 2.193669999999999831e+01 +4.907999999999999863e-02 8.065360500000000457e+02 2.008153000000000077e+01 +5.253000000000000030e-02 6.666923000000000457e+02 1.825777000000000072e+01 +5.270999999999999991e-02 6.432540800000000445e+02 1.793395999999999901e+01 +5.630000000000000282e-02 4.985809499999999730e+02 1.578894000000000020e+01 +5.868999999999999911e-02 4.290448299999999904e+02 1.464658000000000015e+01 +5.986999999999999961e-02 3.918163299999999936e+02 1.399671999999999983e+01 +6.353000000000000314e-02 3.098850299999999720e+02 1.244758999999999993e+01 +6.481000000000000649e-02 2.946982499999999732e+02 1.213874000000000031e+01 +6.715999999999999748e-02 2.516384400000000028e+02 1.121692000000000000e+01 +7.072000000000000508e-02 2.028407500000000141e+02 1.007076999999999956e+01 +7.094000000000000306e-02 1.948358800000000031e+02 9.870050000000000878e+00 +7.434000000000000330e-02 1.633427599999999984e+02 9.037219999999999587e+00 +7.721000000000000085e-02 1.371933899999999937e+02 8.282310000000000727e+00 +7.799000000000000377e-02 1.347819700000000012e+02 8.209199999999999164e+00 +8.162999999999999423e-02 1.123165999999999940e+02 7.493879999999999875e+00 +8.343000000000000416e-02 9.602442000000000633e+01 6.929079999999999906e+00 +8.523999999999999633e-02 9.249591999999999814e+01 6.800589999999999691e+00 +8.880000000000000393e-02 7.934887999999999408e+01 6.298759999999999692e+00 +8.959000000000000297e-02 7.016214999999999691e+01 5.922930000000000028e+00 +9.568999999999999728e-02 5.357988000000000284e+01 5.175900000000000389e+00 +1.017699999999999994e-01 4.050641000000000247e+01 4.500359999999999694e+00 +1.079900000000000027e-01 3.194395000000000095e+01 3.996500000000000163e+00 +1.141599999999999976e-01 2.563089000000000084e+01 3.579870000000000108e+00 +1.202000000000000013e-01 2.144641999999999982e+01 3.274630000000000152e+00 +1.263499999999999901e-01 1.696240999999999843e+01 2.912249999999999783e+00 +1.325600000000000112e-01 1.453672000000000075e+01 2.695990000000000109e+00 +1.387700000000000045e-01 1.265718999999999994e+01 2.515670000000000073e+00 +1.449000000000000010e-01 1.114897000000000027e+01 2.361029999999999962e+00 +1.509399999999999908e-01 1.005156999999999989e+01 2.241830000000000211e+00 +1.571099999999999997e-01 9.313710000000000377e+00 2.157970000000000166e+00 +1.633300000000000030e-01 8.668530000000000513e+00 2.081890000000000018e+00 +1.695099999999999940e-01 7.810069999999999624e+00 1.976120000000000099e+00 +1.756300000000000083e-01 7.695079999999999920e+00 1.961519999999999930e+00 +1.817999999999999894e-01 7.222220000000000084e+00 1.900290000000000035e+00 +1.880100000000000104e-01 7.386999999999999567e+00 1.921850000000000058e+00 +1.941199999999999870e-01 7.239320000000000199e+00 1.902539999999999898e+00 +2.002200000000000091e-01 7.279099999999999682e+00 1.907759999999999900e+00 +2.063500000000000056e-01 7.406340000000000146e+00 1.924360000000000070e+00 +2.125299999999999967e-01 7.439199999999999591e+00 1.928630000000000067e+00 +2.186800000000000133e-01 7.556879999999999598e+00 1.943820000000000103e+00 +2.247899999999999898e-01 7.730520000000000280e+00 1.966029999999999944e+00 +2.309799999999999909e-01 8.106099999999999639e+00 2.013220000000000010e+00 +2.371999999999999942e-01 8.398609999999999687e+00 2.049220000000000041e+00 +2.433599999999999930e-01 8.171440000000000481e+00 2.021319999999999784e+00 +2.494800000000000073e-01 8.478289999999999438e+00 2.058920000000000083e+00 +2.556100000000000039e-01 8.796279999999999433e+00 2.097170000000000201e+00 +2.617700000000000027e-01 8.973420000000000840e+00 2.118189999999999795e+00 +2.679699999999999860e-01 9.270730000000000359e+00 2.152989999999999959e+00 +2.741299999999999848e-01 9.463879999999999626e+00 2.175300000000000011e+00 +2.802100000000000146e-01 9.409150000000000347e+00 2.169000000000000039e+00 +2.863700000000000134e-01 9.709509999999999863e+00 2.203349999999999920e+00 +2.925800000000000067e-01 9.851300000000000168e+00 2.219380000000000130e+00 2.987299999999999955e-01 9.904920000000000613e+00 2.225410000000000110e+00 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv index 59e4cde42..6e68726d8 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/3_61_1640_23.748285.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 -3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 -3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 -3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 -4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 -4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 -4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 -4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 -5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 -5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 -5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 -5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 -5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 -6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 -6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 -6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 -7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 -7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 -7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 -7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 -7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 -8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 -8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 -8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 -8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 -8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 -9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 -1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 -1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 -1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 -1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 -1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 -1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 -1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 -1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 -1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 -1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 -1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 -1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 -1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 -1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 -1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 -1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 -2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 -2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 -2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 -2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 -2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 -2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 -2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 -2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 -2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 -2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 -2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 -2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 -2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 -2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 -2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 -2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 +2.732000000000000053e-02 2.792353740000000016e+03 3.736545000000000272e+01 +3.090000000000000038e-02 2.271702040000000125e+03 3.370239000000000118e+01 +3.452000000000000207e-02 1.788897279999999910e+03 2.990733000000000175e+01 +3.812000000000000111e-02 1.407023470000000088e+03 2.652380000000000138e+01 +4.173000000000000320e-02 1.095009520000000066e+03 2.339882000000000062e+01 +4.542000000000000204e-02 8.376734699999999521e+02 2.046549999999999869e+01 +4.644000000000000211e-02 7.836296200000000454e+02 1.979430999999999941e+01 +4.907000000000000250e-02 6.414952399999999670e+02 1.790943000000000040e+01 +5.253000000000000030e-02 5.516777200000000221e+02 1.660839999999999961e+01 +5.269999999999999685e-02 5.141714299999999866e+02 1.603388999999999953e+01 +5.628999999999999976e-02 3.988418399999999906e+02 1.412165000000000070e+01 +5.868999999999999911e-02 3.579082799999999907e+02 1.337737000000000087e+01 +5.985999999999999654e-02 3.164397999999999911e+02 1.257854999999999990e+01 +6.351999999999999313e-02 2.486343500000000120e+02 1.114976000000000056e+01 +6.481000000000000649e-02 2.482066299999999899e+02 1.114016999999999946e+01 +6.715000000000000135e-02 2.006787799999999891e+02 1.001695999999999920e+01 +7.070999999999999508e-02 1.657927200000000028e+02 9.104739999999999611e+00 +7.094000000000000306e-02 1.667760000000000105e+02 9.131700000000000372e+00 +7.431999999999999718e-02 1.326982299999999952e+02 8.145500000000000185e+00 +7.721000000000000085e-02 1.181177100000000024e+02 7.684980000000000366e+00 +7.796999999999999764e-02 1.108474499999999949e+02 7.444709999999999717e+00 +8.161999999999999811e-02 9.087302999999999997e+01 6.740660000000000096e+00 +8.343000000000000416e-02 8.290343000000000018e+01 6.438299999999999912e+00 +8.522000000000000408e-02 7.588799000000000206e+01 6.159869999999999735e+00 +8.878999999999999393e-02 6.486343999999999710e+01 5.694890000000000008e+00 +8.959000000000000297e-02 6.133471999999999724e+01 5.537810000000000343e+00 +9.568999999999999728e-02 4.711737999999999715e+01 4.853729999999999656e+00 +1.017699999999999994e-01 3.554666000000000281e+01 4.215840000000000032e+00 +1.079900000000000027e-01 2.833098000000000027e+01 3.763710000000000111e+00 +1.141599999999999976e-01 2.318925000000000125e+01 3.405089999999999950e+00 +1.202000000000000013e-01 1.876435000000000031e+01 3.063029999999999919e+00 +1.263499999999999901e-01 1.568601999999999919e+01 2.800539999999999807e+00 +1.325600000000000112e-01 1.346410000000000018e+01 2.594619999999999926e+00 +1.387700000000000045e-01 1.173840000000000039e+01 2.422639999999999905e+00 +1.449000000000000010e-01 1.054757999999999996e+01 2.296469999999999789e+00 +1.509399999999999908e-01 9.084839999999999804e+00 2.131299999999999972e+00 +1.571099999999999997e-01 8.239589999999999748e+00 2.029729999999999812e+00 +1.633300000000000030e-01 7.767660000000000231e+00 1.970739999999999936e+00 +1.695099999999999940e-01 7.631929999999999659e+00 1.953449999999999909e+00 +1.756300000000000083e-01 7.253739999999999633e+00 1.904430000000000067e+00 +1.817999999999999894e-01 6.968580000000000219e+00 1.866630000000000011e+00 +1.880100000000000104e-01 7.029829999999999579e+00 1.874810000000000088e+00 +1.941199999999999870e-01 6.805609999999999715e+00 1.844670000000000032e+00 +2.002200000000000091e-01 7.007130000000000081e+00 1.871779999999999999e+00 +2.063500000000000056e-01 7.083709999999999951e+00 1.881979999999999986e+00 +2.125299999999999967e-01 6.971890000000000143e+00 1.867070000000000007e+00 +2.186800000000000133e-01 7.549360000000000070e+00 1.942849999999999966e+00 +2.247899999999999898e-01 7.451310000000000322e+00 1.930199999999999916e+00 +2.309799999999999909e-01 7.449589999999999712e+00 1.929969999999999963e+00 +2.371999999999999942e-01 7.776720000000000077e+00 1.971889999999999921e+00 +2.433599999999999930e-01 8.157130000000000436e+00 2.019550000000000178e+00 +2.494800000000000073e-01 8.339280000000000470e+00 2.041970000000000063e+00 +2.556100000000000039e-01 8.448100000000000165e+00 2.055250000000000021e+00 +2.617700000000000027e-01 8.746420000000000528e+00 2.091219999999999857e+00 +2.679699999999999860e-01 9.040720000000000312e+00 2.126110000000000166e+00 +2.741299999999999848e-01 9.130409999999999471e+00 2.136629999999999807e+00 +2.802100000000000146e-01 9.247719999999999274e+00 2.150319999999999787e+00 +2.863700000000000134e-01 9.291150000000000020e+00 2.155359999999999943e+00 +2.925800000000000067e-01 9.640140000000000597e+00 2.195469999999999811e+00 2.987299999999999955e-01 9.537290000000000489e+00 2.183720000000000105e+00 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv index daf8f80a8..c33506202 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/4_103_1640_24.039675.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 -3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 -3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 -3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 -4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 -4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 -4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 -4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 -5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 -5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 -5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 -5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 -5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 -6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 -6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 -6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 -7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 -7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 -7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 -7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 -7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 -8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 -8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 -8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 -8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 -8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 -9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 -1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 -1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 -1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 -1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 -1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 -1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 -1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 -1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 -1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 -1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 -1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 -1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 -1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 -1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 -1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 -1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 -2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 -2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 -2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 -2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 -2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 -2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 -2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 -2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 -2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 -2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 -2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 -2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 -2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 -2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 -2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 -2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 +2.733000000000000013e-02 2.320909860000000208e+03 3.406544999999999845e+01 +3.090999999999999998e-02 1.910828909999999951e+03 3.090978000000000137e+01 +3.454000000000000126e-02 1.519815650000000005e+03 2.756643000000000043e+01 +3.814000000000000029e-02 1.188850680000000011e+03 2.438083999999999918e+01 +4.175000000000000239e-02 9.312768700000000308e+02 2.157865999999999929e+01 +4.544000000000000122e-02 7.201697299999999586e+02 1.897589999999999932e+01 +4.646000000000000130e-02 6.728012599999999566e+02 1.834122999999999948e+01 +4.909999999999999781e-02 5.453608799999999519e+02 1.651304000000000016e+01 +5.256000000000000255e-02 4.724414499999999748e+02 1.536946999999999974e+01 +5.272000000000000297e-02 4.318700699999999983e+02 1.469472999999999985e+01 +5.632000000000000201e-02 3.382353699999999890e+02 1.300453000000000081e+01 +5.870999999999999830e-02 3.073326000000000136e+02 1.239621999999999957e+01 +5.988999999999999879e-02 2.634156100000000151e+02 1.147639999999999993e+01 +6.356000000000000538e-02 2.076918699999999944e+02 1.019048000000000087e+01 +6.483999999999999486e-02 2.125336499999999944e+02 1.030857999999999919e+01 +6.718999999999999972e-02 1.688028199999999970e+02 9.187020000000000408e+00 +7.073999999999999733e-02 1.362696899999999971e+02 8.254379999999999384e+00 +7.097000000000000530e-02 1.410024300000000039e+02 8.396499999999999631e+00 +7.435999999999999555e-02 1.127603699999999947e+02 7.508670000000000400e+00 +7.724999999999999922e-02 9.965560999999999581e+01 7.058880000000000265e+00 +7.800999999999999601e-02 9.194693999999999789e+01 6.780369999999999564e+00 +8.165999999999999648e-02 7.522768999999999551e+01 6.133009999999999629e+00 +8.347000000000000253e-02 7.049939999999999429e+01 5.937149999999999928e+00 +8.526000000000000245e-02 6.411020000000000607e+01 5.661719999999999864e+00 +8.883000000000000618e-02 5.376234999999999786e+01 5.184709999999999930e+00 +8.963000000000000134e-02 5.217504000000000275e+01 5.107590000000000074e+00 +9.574000000000000565e-02 4.054399999999999693e+01 4.502439999999999998e+00 +1.018199999999999938e-01 3.096013999999999911e+01 3.934470000000000134e+00 +1.080399999999999971e-01 2.426012000000000057e+01 3.482819999999999805e+00 +1.142200000000000021e-01 1.991522000000000148e+01 3.155569999999999986e+00 +1.202600000000000058e-01 1.696463999999999928e+01 2.912440000000000140e+00 +1.264099999999999946e-01 1.406012999999999913e+01 2.651429999999999954e+00 +1.326199999999999879e-01 1.186475000000000080e+01 2.435649999999999871e+00 +1.388300000000000090e-01 1.075843000000000060e+01 2.319310000000000205e+00 +1.449699999999999878e-01 9.447770000000000223e+00 2.173449999999999882e+00 +1.510100000000000053e-01 8.521739999999999426e+00 2.064189999999999969e+00 +1.571799999999999864e-01 7.782460000000000377e+00 1.972620000000000040e+00 +1.634099999999999997e-01 7.576889999999999681e+00 1.946390000000000065e+00 +1.695800000000000085e-01 7.175270000000000259e+00 1.894109999999999960e+00 +1.756999999999999951e-01 6.609770000000000145e+00 1.817930000000000046e+00 +1.818799999999999861e-01 6.690150000000000041e+00 1.828950000000000076e+00 +1.880999999999999894e-01 6.763010000000000410e+00 1.838889999999999914e+00 +1.942000000000000115e-01 6.479930000000000412e+00 1.799989999999999979e+00 +2.003099999999999881e-01 6.931930000000000369e+00 1.861709999999999976e+00 +2.064499999999999946e-01 7.058690000000000353e+00 1.878649999999999931e+00 +2.126300000000000134e-01 6.966739999999999711e+00 1.866379999999999928e+00 +2.187699999999999922e-01 7.155350000000000321e+00 1.891469999999999985e+00 +2.248999999999999888e-01 7.328820000000000334e+00 1.914260000000000073e+00 +2.310800000000000076e-01 7.623789999999999623e+00 1.952409999999999979e+00 +2.373000000000000109e-01 7.870739999999999625e+00 1.983780000000000099e+00 +2.434699999999999920e-01 7.865639999999999965e+00 1.983130000000000059e+00 +2.495900000000000063e-01 8.081390000000000740e+00 2.010149999999999881e+00 +2.557300000000000129e-01 8.480309999999999349e+00 2.059159999999999879e+00 +2.618900000000000117e-01 8.708700000000000330e+00 2.086710000000000065e+00 +2.680899999999999950e-01 8.823320000000000718e+00 2.100389999999999979e+00 +2.742499999999999938e-01 9.030450000000000088e+00 2.124909999999999854e+00 +2.803300000000000236e-01 9.222670000000000812e+00 2.147400000000000198e+00 +2.864999999999999769e-01 9.345430000000000348e+00 2.161649999999999849e+00 +2.927100000000000257e-01 9.660539999999999239e+00 2.197789999999999910e+00 2.988600000000000145e-01 9.559969999999999857e+00 2.186319999999999819e+00 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv index 2f696f3b5..17968ec9e 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/5_312_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 -3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 -3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 -3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 -4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 -4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 -4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 -4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 -5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 -5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 -5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 -5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 -5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 -6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 -6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 -6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 -7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 -7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 -7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 -7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 -7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 -8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 -8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 -8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 -8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 -8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 -9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 -1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 -1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 -1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 -1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 -1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 -1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 -1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 -1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 -1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 -1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 -1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 -1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 -1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 -1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 -1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 -1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 -2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 -2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 -2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 -2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 -2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 -2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 -2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 -2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 -2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 -2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 -2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 -2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 -2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 -2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 -2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 -2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 +2.733000000000000013e-02 1.791495509999999967e+03 2.992905000000000015e+01 +3.091999999999999957e-02 1.477992469999999912e+03 2.718449000000000026e+01 +3.454000000000000126e-02 1.172791189999999915e+03 2.421561000000000163e+01 +3.814000000000000029e-02 9.196233300000000099e+02 2.144322000000000017e+01 +4.175000000000000239e-02 7.160111200000000053e+02 1.892102999999999824e+01 +4.544000000000000122e-02 5.391461900000000469e+02 1.641867999999999839e+01 +4.646000000000000130e-02 4.929036699999999769e+02 1.569877999999999929e+01 +4.909999999999999781e-02 4.129331099999999992e+02 1.436894000000000027e+01 +5.256000000000000255e-02 3.482022600000000239e+02 1.319473999999999947e+01 +5.272999999999999909e-02 3.242194700000000012e+02 1.273222999999999949e+01 +5.632000000000000201e-02 2.454095199999999863e+02 1.107722000000000051e+01 +5.870999999999999830e-02 2.218204599999999971e+02 1.053139000000000003e+01 +5.990000000000000185e-02 1.931666899999999885e+02 9.827680000000000859e+00 +6.356000000000000538e-02 1.505020900000000097e+02 8.674739999999999895e+00 +6.483999999999999486e-02 1.511605900000000133e+02 8.693690000000000140e+00 +6.718999999999999972e-02 1.202856799999999993e+02 7.755180000000000184e+00 +7.074999999999999345e-02 9.616129999999999711e+01 6.934020000000000294e+00 +7.097000000000000530e-02 9.870516999999999541e+01 7.025140000000000384e+00 +7.435999999999999555e-02 7.818730999999999653e+01 6.252489999999999881e+00 +7.724999999999999922e-02 6.837958000000000425e+01 5.847199999999999953e+00 +7.802000000000000601e-02 6.371482000000000312e+01 5.644239999999999924e+00 +8.165999999999999648e-02 5.179379999999999740e+01 5.088899999999999757e+00 +8.347000000000000253e-02 4.836007000000000033e+01 4.917320000000000135e+00 +8.526999999999999857e-02 4.457972000000000179e+01 4.721210000000000129e+00 +8.884000000000000230e-02 3.751116999999999990e+01 4.330770000000000231e+00 +8.963000000000000134e-02 3.544118999999999886e+01 4.209579999999999878e+00 +9.574000000000000565e-02 2.739192999999999856e+01 3.700810000000000155e+00 +1.018199999999999938e-01 2.084316000000000102e+01 3.228250000000000064e+00 +1.080399999999999971e-01 1.702296000000000120e+01 2.917440000000000033e+00 +1.142200000000000021e-01 1.391883999999999943e+01 2.638069999999999915e+00 +1.202600000000000058e-01 1.148202000000000034e+01 2.396040000000000170e+00 +1.264099999999999946e-01 9.887589999999999435e+00 2.223460000000000214e+00 +1.326199999999999879e-01 8.618710000000000093e+00 2.075899999999999856e+00 +1.388300000000000090e-01 7.875820000000000043e+00 1.984420000000000073e+00 +1.449699999999999878e-01 7.119869999999999699e+00 1.886779999999999902e+00 +1.510100000000000053e-01 6.691399999999999793e+00 1.829129999999999923e+00 +1.571799999999999864e-01 6.133020000000000138e+00 1.751139999999999919e+00 +1.634099999999999997e-01 5.984770000000000145e+00 1.729850000000000110e+00 +1.695800000000000085e-01 5.802669999999999995e+00 1.703330000000000011e+00 +1.756999999999999951e-01 5.772070000000000256e+00 1.698830000000000062e+00 +1.818799999999999861e-01 5.866640000000000299e+00 1.712690000000000046e+00 +1.880999999999999894e-01 5.880740000000000300e+00 1.714749999999999996e+00 +1.942000000000000115e-01 5.856810000000000294e+00 1.711260000000000003e+00 +2.003099999999999881e-01 6.138060000000000294e+00 1.751870000000000038e+00 +2.064499999999999946e-01 6.406990000000000407e+00 1.789830000000000032e+00 +2.126300000000000134e-01 6.462060000000000137e+00 1.797509999999999941e+00 +2.187699999999999922e-01 6.501079999999999970e+00 1.802929999999999922e+00 +2.248999999999999888e-01 6.991179999999999950e+00 1.869650000000000034e+00 +2.310800000000000076e-01 7.014639999999999986e+00 1.872779999999999889e+00 +2.373000000000000109e-01 7.136879999999999669e+00 1.889029999999999987e+00 +2.434699999999999920e-01 7.547889999999999766e+00 1.942660000000000053e+00 +2.495900000000000063e-01 7.608620000000000161e+00 1.950460000000000083e+00 +2.557300000000000129e-01 7.913459999999999717e+00 1.989149999999999974e+00 +2.618900000000000117e-01 8.245919999999999916e+00 2.030510000000000037e+00 +2.680899999999999950e-01 8.604509999999999437e+00 2.074190000000000200e+00 +2.742499999999999938e-01 8.711750000000000327e+00 2.087070000000000203e+00 +2.803300000000000236e-01 8.863739999999999952e+00 2.105199999999999960e+00 +2.864999999999999769e-01 8.911099999999999355e+00 2.110819999999999919e+00 +2.927100000000000257e-01 9.338430000000000675e+00 2.160839999999999872e+00 2.988600000000000145e-01 9.385640000000000427e+00 2.166290000000000049e+00 \ No newline at end of file diff --git a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv index e7dfab999..72272ed89 100644 --- a/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv +++ b/test/trend_test_data/Nanoperm_perpendicular_Honecker_et_al/6_1270_1640_24.331065.csv @@ -1,60 +1,60 @@ -2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 -3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 -3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 -3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 -4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 -4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 -4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 -4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 -5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 -5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 -5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 -5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 -5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 -6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 -6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 -6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 -7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 -7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 -7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 -7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 -7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 -8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 -8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 -8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 -8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 -8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 -9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 -1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 -1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 -1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 -1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 -1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 -1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 -1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 -1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 -1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 -1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 -1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 -1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 -1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 -1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 -1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 -1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 -2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 -2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 -2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 -2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 -2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 -2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 -2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 -2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 -2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 -2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 -2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 -2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 -2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 -2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 -2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 -2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 -2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 +2.732000000000000053e-02 1.517870979999999918e+03 2.754878000000000071e+01 +3.090999999999999998e-02 1.252144950000000108e+03 2.502143999999999835e+01 +3.452999999999999819e-02 9.849326300000000174e+02 2.219157999999999831e+01 +3.812999999999999723e-02 7.635778900000000249e+02 1.953941999999999979e+01 +4.173999999999999932e-02 5.910564900000000534e+02 1.719093000000000160e+01 +4.542999999999999816e-02 4.454160299999999779e+02 1.492340000000000089e+01 +4.644000000000000211e-02 4.097451399999999921e+02 1.431337000000000081e+01 +4.907999999999999863e-02 3.412573399999999992e+02 1.306249000000000038e+01 +5.254000000000000337e-02 2.833860500000000116e+02 1.190348999999999968e+01 +5.270999999999999991e-02 2.587516299999999774e+02 1.137434999999999974e+01 +5.630000000000000282e-02 1.972410900000000140e+02 9.930790000000000006e+00 +5.868999999999999911e-02 1.820288400000000024e+02 9.540150000000000574e+00 +5.988000000000000267e-02 1.548462399999999946e+02 8.799039999999999750e+00 +6.353999999999999926e-02 1.208091600000000057e+02 7.772039999999999615e+00 +6.481000000000000649e-02 1.228846300000000014e+02 7.838510000000000311e+00 +6.716999999999999360e-02 9.485747999999999536e+01 6.886849999999999916e+00 +7.072000000000000508e-02 7.616365000000000407e+01 6.171050000000000146e+00 +7.094999999999999918e-02 7.959243999999999630e+01 6.308419999999999916e+00 +7.434000000000000330e-02 6.139544999999999675e+01 5.540549999999999642e+00 +7.721999999999999698e-02 5.528307999999999822e+01 5.257520000000000415e+00 +7.799000000000000377e-02 5.105310999999999666e+01 5.052380000000000315e+00 +8.164000000000000423e-02 4.131436000000000064e+01 4.545020000000000060e+00 +8.343000000000000416e-02 3.883191999999999666e+01 4.406349999999999767e+00 +8.523999999999999633e-02 3.386838999999999800e+01 4.115120000000000111e+00 +8.881000000000000005e-02 2.873742000000000019e+01 3.790610000000000035e+00 +8.959999999999999909e-02 2.744166999999999845e+01 3.704159999999999897e+00 +9.569999999999999341e-02 2.114314999999999856e+01 3.251399999999999846e+00 +1.017799999999999955e-01 1.639198000000000022e+01 2.862859999999999960e+00 +1.079999999999999988e-01 1.302345000000000041e+01 2.551810000000000134e+00 +1.141699999999999937e-01 1.067233000000000054e+01 2.310010000000000119e+00 +1.202099999999999974e-01 8.927680000000000504e+00 2.112779999999999880e+00 +1.263600000000000001e-01 7.691300000000000026e+00 1.961030000000000051e+00 +1.325600000000000112e-01 6.633219999999999672e+00 1.821159999999999890e+00 +1.387799999999999867e-01 6.187759999999999927e+00 1.758939999999999948e+00 +1.449100000000000110e-01 5.397269999999999790e+00 1.642749999999999932e+00 +1.509500000000000008e-01 5.127299999999999969e+00 1.601140000000000008e+00 +1.571200000000000097e-01 4.947350000000000136e+00 1.572789999999999910e+00 +1.633400000000000130e-01 4.791970000000000063e+00 1.547900000000000054e+00 +1.695200000000000040e-01 4.839830000000000076e+00 1.555609999999999937e+00 +1.756399999999999906e-01 4.855599999999999916e+00 1.558140000000000081e+00 +1.818099999999999994e-01 4.971189999999999998e+00 1.576580000000000092e+00 +1.880199999999999927e-01 4.996179999999999843e+00 1.580540000000000056e+00 +1.941299999999999970e-01 5.231489999999999974e+00 1.617329999999999934e+00 +2.002299999999999913e-01 5.461660000000000181e+00 1.652519999999999989e+00 +2.063699999999999979e-01 5.566430000000000433e+00 1.668299999999999894e+00 +2.125400000000000067e-01 5.749649999999999928e+00 1.695529999999999982e+00 +2.186899999999999955e-01 5.962720000000000020e+00 1.726660000000000084e+00 +2.248100000000000098e-01 6.366220000000000212e+00 1.784129999999999994e+00 +2.309900000000000009e-01 6.576419999999999710e+00 1.813339999999999952e+00 +2.372100000000000042e-01 6.993730000000000224e+00 1.869990000000000041e+00 +2.433800000000000130e-01 7.112300000000000288e+00 1.885780000000000012e+00 +2.494999999999999996e-01 7.346860000000000390e+00 1.916619999999999990e+00 +2.556300000000000239e-01 7.629410000000000025e+00 1.953130000000000033e+00 +2.617900000000000227e-01 7.827810000000000379e+00 1.978359999999999896e+00 +2.679900000000000060e-01 8.252810000000000201e+00 2.031359999999999832e+00 +2.741399999999999948e-01 8.304840000000000444e+00 2.037749999999999950e+00 +2.802200000000000246e-01 8.705450000000000799e+00 2.086320000000000174e+00 +2.863899999999999779e-01 8.881330000000000169e+00 2.107289999999999885e+00 +2.926000000000000267e-01 9.112230000000000274e+00 2.134510000000000129e+00 +2.987500000000000155e-01 9.303969999999999629e+00 2.156849999999999934e+00 diff --git a/test/trend_test_data/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv b/test/trend_test_data/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv index 48bb9bce9..efaf03f7e 100644 --- a/test/trend_test_data/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv +++ b/test/trend_test_data/NdFeB_parallel_Bick_et_al/1_8000_1600_1070.csv @@ -1,53 +1,53 @@ -0.02466 11161.7 105.066 -0.02779 8582.24 78.8702 -0.03118 6929.14 63.4309 -0.03472 5567.83 52.0489 -0.03798 4896.87 48.9428 -0.04103 4301.45 44.2537 -0.04439 3931.56 35.32 -0.04789 3532.24 33.8506 -0.05145 3225.93 29.1479 -0.05487 3001.52 30.0366 -0.05809 2808.67 26.8966 -0.06147 2656.59 24.6464 -0.06487 2544.49 24.3544 -0.06823 2417.04 22.1946 -0.07159 2285.04 21.753 -0.07491 2209.24 20.4624 -0.07817 2057.47 19.703 -0.08149 2022.7 18.6311 -0.08492 1895.55 17.4353 -0.08832 1842.28 17.2068 -0.09171 1764.56 16.4013 -0.09497 1702.47 16.2564 -0.09818 1650.68 15.7993 -0.10176 1598.61 13.5448 -0.10537 1517.07 14.6455 -0.10864 1470.19 13.6872 -0.11191 1422.64 13.7771 -0.11529 1373.82 12.5952 -0.11874 1333.67 12.468 -0.12204 1309.38 12.7116 -0.1253 1256.04 11.6755 -0.12868 1224.03 11.535 -0.13213 1180.94 10.9145 -0.13557 1163.16 10.9427 -0.13878 1135.89 11.2995 -0.14204 1129.91 10.3422 -0.14544 1101.7 10.3463 -0.14888 1050.46 9.68171 -0.1523 1034.3 9.79525 -0.15558 1022.51 9.86417 -0.15895 1003.15 9.06883 -0.16231 984.02 9.61305 -0.16567 956.076 8.69603 -0.16916 941.039 8.81872 -0.17256 914.22 8.5457 -0.1759 903.557 8.49062 -0.1792 862.822 8.49027 -0.18246 857.39 8.12443 -0.18596 822.372 7.58423 -0.18945 803.539 7.77639 -0.19275 787.933 7.6279 -0.19605 759.06 7.64242 -0.1993 746.444 7.32989 +0.02466 11161.7 105.066 +0.02779 8582.24 78.8702 +0.03118 6929.14 63.4309 +0.03472 5567.83 52.0489 +0.03798 4896.87 48.9428 +0.04103 4301.45 44.2537 +0.04439 3931.56 35.32 +0.04789 3532.24 33.8506 +0.05145 3225.93 29.1479 +0.05487 3001.52 30.0366 +0.05809 2808.67 26.8966 +0.06147 2656.59 24.6464 +0.06487 2544.49 24.3544 +0.06823 2417.04 22.1946 +0.07159 2285.04 21.753 +0.07491 2209.24 20.4624 +0.07817 2057.47 19.703 +0.08149 2022.7 18.6311 +0.08492 1895.55 17.4353 +0.08832 1842.28 17.2068 +0.09171 1764.56 16.4013 +0.09497 1702.47 16.2564 +0.09818 1650.68 15.7993 +0.10176 1598.61 13.5448 +0.10537 1517.07 14.6455 +0.10864 1470.19 13.6872 +0.11191 1422.64 13.7771 +0.11529 1373.82 12.5952 +0.11874 1333.67 12.468 +0.12204 1309.38 12.7116 +0.1253 1256.04 11.6755 +0.12868 1224.03 11.535 +0.13213 1180.94 10.9145 +0.13557 1163.16 10.9427 +0.13878 1135.89 11.2995 +0.14204 1129.91 10.3422 +0.14544 1101.7 10.3463 +0.14888 1050.46 9.68171 +0.1523 1034.3 9.79525 +0.15558 1022.51 9.86417 +0.15895 1003.15 9.06883 +0.16231 984.02 9.61305 +0.16567 956.076 8.69603 +0.16916 941.039 8.81872 +0.17256 914.22 8.5457 +0.1759 903.557 8.49062 +0.1792 862.822 8.49027 +0.18246 857.39 8.12443 +0.18596 822.372 7.58423 +0.18945 803.539 7.77639 +0.19275 787.933 7.6279 +0.19605 759.06 7.64242 +0.1993 746.444 7.32989 diff --git a/test/trend_test_data/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv b/test/trend_test_data/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv index 2464d9ffa..ede4f8121 100644 --- a/test/trend_test_data/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv +++ b/test/trend_test_data/NdFeB_parallel_Bick_et_al/2_10000_1600_1070.csv @@ -1,53 +1,53 @@ -0.02466 9785.87 100.498 -0.02779 7387.61 74.8808 -0.03118 5638.9 58.6706 -0.03472 4473.77 47.7572 -0.03797 3723.19 43.7134 -0.04102 3256.4 39.3915 -0.04439 2850.7 30.7019 -0.04789 2561.59 29.3595 -0.05145 2280.01 24.9612 -0.05487 2158.85 25.8372 -0.05809 1997.24 23.0262 -0.06147 1891.61 21.0832 -0.06486 1796.03 20.6896 -0.06823 1698.02 18.8045 -0.07158 1613.84 18.4277 -0.0749 1560.07 17.3367 -0.07817 1481.58 16.8421 -0.08149 1400.5 15.6189 -0.08492 1362.71 14.8771 -0.08832 1326.21 14.6884 -0.09171 1308.1 14.1935 -0.09497 1238.48 13.9232 -0.09817 1217.12 13.6217 -0.10176 1182.01 11.7148 -0.10536 1125.29 12.6688 -0.10863 1086.39 11.8029 -0.1119 1069.27 11.9783 -0.11528 1037.53 10.9946 -0.11874 1000.25 10.8391 -0.12203 1030.21 11.3207 -0.12529 996.562 10.4091 -0.12867 937.635 10.1418 -0.13213 932.787 9.7458 -0.13557 936.093 9.83598 -0.13878 902.903 10.118 -0.14204 895.331 9.2379 -0.14544 894.523 9.3444 -0.14887 873.213 8.84172 -0.15229 870.028 8.99453 -0.15558 846.466 8.9992 -0.15895 842.358 8.32813 -0.1623 809.53 8.74144 -0.16566 822.783 8.08431 -0.16915 792.943 8.10552 -0.17255 774.308 7.87783 -0.1759 781.539 7.90816 -0.17919 756.562 7.97296 -0.18245 745.925 7.59066 -0.18596 725.982 7.13904 -0.18944 711.483 7.3287 -0.19275 709.157 7.24903 -0.19604 677.704 7.2411 -0.19929 659.648 6.90112 +0.02466 9785.87 100.498 +0.02779 7387.61 74.8808 +0.03118 5638.9 58.6706 +0.03472 4473.77 47.7572 +0.03797 3723.19 43.7134 +0.04102 3256.4 39.3915 +0.04439 2850.7 30.7019 +0.04789 2561.59 29.3595 +0.05145 2280.01 24.9612 +0.05487 2158.85 25.8372 +0.05809 1997.24 23.0262 +0.06147 1891.61 21.0832 +0.06486 1796.03 20.6896 +0.06823 1698.02 18.8045 +0.07158 1613.84 18.4277 +0.0749 1560.07 17.3367 +0.07817 1481.58 16.8421 +0.08149 1400.5 15.6189 +0.08492 1362.71 14.8771 +0.08832 1326.21 14.6884 +0.09171 1308.1 14.1935 +0.09497 1238.48 13.9232 +0.09817 1217.12 13.6217 +0.10176 1182.01 11.7148 +0.10536 1125.29 12.6688 +0.10863 1086.39 11.8029 +0.1119 1069.27 11.9783 +0.11528 1037.53 10.9946 +0.11874 1000.25 10.8391 +0.12203 1030.21 11.3207 +0.12529 996.562 10.4091 +0.12867 937.635 10.1418 +0.13213 932.787 9.7458 +0.13557 936.093 9.83598 +0.13878 902.903 10.118 +0.14204 895.331 9.2379 +0.14544 894.523 9.3444 +0.14887 873.213 8.84172 +0.15229 870.028 8.99453 +0.15558 846.466 8.9992 +0.15895 842.358 8.32813 +0.1623 809.53 8.74144 +0.16566 822.783 8.08431 +0.16915 792.943 8.10552 +0.17255 774.308 7.87783 +0.1759 781.539 7.90816 +0.17919 756.562 7.97296 +0.18245 745.925 7.59066 +0.18596 725.982 7.13904 +0.18944 711.483 7.3287 +0.19275 709.157 7.24903 +0.19604 677.704 7.2411 +0.19929 659.648 6.90112 diff --git a/test/trend_test_data/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv b/test/trend_test_data/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv index 517a96859..1c96f3d5f 100644 --- a/test/trend_test_data/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv +++ b/test/trend_test_data/NdFeB_parallel_Bick_et_al/3_12000_1600_1070.csv @@ -1,53 +1,53 @@ -0.02467 9119.79 98.2483 -0.02779 6716.34 72.6007 -0.03118 4992.66 56.2161 -0.03472 3831.98 45.1388 -0.03798 3145.6 40.9924 -0.04103 2635.02 36.2785 -0.0444 2353.33 28.4064 -0.04789 2051.02 26.7601 -0.05146 1820.51 22.7202 -0.05487 1702.5 23.3101 -0.0581 1582.43 20.8224 -0.06148 1455.78 18.7977 -0.06487 1396.8 18.5029 -0.06824 1347.58 16.9495 -0.07159 1258.02 16.4371 -0.07491 1231.28 15.5554 -0.07818 1164.47 15.0776 -0.0815 1146.97 14.2378 -0.08493 1109.77 13.533 -0.08833 1040.08 13.1167 -0.09172 1030.03 12.6919 -0.09498 996.502 12.5769 -0.09819 973.153 12.2625 -0.10178 933.855 10.4847 -0.10538 941.324 11.6421 -0.10865 891.14 10.747 -0.11192 890.927 10.9919 -0.1153 863.999 10.0862 -0.11876 860.652 10.1051 -0.12205 833.905 10.2392 -0.12531 831.414 9.54046 -0.12869 796.354 9.38666 -0.13215 809.376 9.11842 -0.13559 805.133 9.14629 -0.1388 791.474 9.50691 -0.14205 787.287 8.69915 -0.14546 761.22 8.65866 -0.1489 779.201 8.38098 -0.15232 771.323 8.50152 -0.1556 748.08 8.49235 -0.15897 748.238 7.8713 -0.16233 756.864 8.48551 -0.16569 723.545 7.61209 -0.16918 723.039 7.76626 -0.17258 714.249 7.58349 -0.17592 707.068 7.55031 -0.17922 695.999 7.67253 -0.18248 687.854 7.31121 -0.18599 672.503 6.89206 -0.18947 656.046 7.05985 -0.19277 644.64 6.93548 -0.19607 633.62 7.0287 -0.19932 617.369 6.7009 +0.02467 9119.79 98.2483 +0.02779 6716.34 72.6007 +0.03118 4992.66 56.2161 +0.03472 3831.98 45.1388 +0.03798 3145.6 40.9924 +0.04103 2635.02 36.2785 +0.0444 2353.33 28.4064 +0.04789 2051.02 26.7601 +0.05146 1820.51 22.7202 +0.05487 1702.5 23.3101 +0.0581 1582.43 20.8224 +0.06148 1455.78 18.7977 +0.06487 1396.8 18.5029 +0.06824 1347.58 16.9495 +0.07159 1258.02 16.4371 +0.07491 1231.28 15.5554 +0.07818 1164.47 15.0776 +0.0815 1146.97 14.2378 +0.08493 1109.77 13.533 +0.08833 1040.08 13.1167 +0.09172 1030.03 12.6919 +0.09498 996.502 12.5769 +0.09819 973.153 12.2625 +0.10178 933.855 10.4847 +0.10538 941.324 11.6421 +0.10865 891.14 10.747 +0.11192 890.927 10.9919 +0.1153 863.999 10.0862 +0.11876 860.652 10.1051 +0.12205 833.905 10.2392 +0.12531 831.414 9.54046 +0.12869 796.354 9.38666 +0.13215 809.376 9.11842 +0.13559 805.133 9.14629 +0.1388 791.474 9.50691 +0.14205 787.287 8.69915 +0.14546 761.22 8.65866 +0.1489 779.201 8.38098 +0.15232 771.323 8.50152 +0.1556 748.08 8.49235 +0.15897 748.238 7.8713 +0.16233 756.864 8.48551 +0.16569 723.545 7.61209 +0.16918 723.039 7.76626 +0.17258 714.249 7.58349 +0.17592 707.068 7.55031 +0.17922 695.999 7.67253 +0.18248 687.854 7.31121 +0.18599 672.503 6.89206 +0.18947 656.046 7.05985 +0.19277 644.64 6.93548 +0.19607 633.62 7.0287 +0.19932 617.369 6.7009 diff --git a/test/trend_test_data/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv b/test/trend_test_data/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv index 838f64e5b..e349acefe 100644 --- a/test/trend_test_data/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv +++ b/test/trend_test_data/NdFeB_parallel_Bick_et_al/4_14000_1600_1070.csv @@ -1,53 +1,53 @@ -0.02466 8578.27 96.3713 -0.02778 6201.5 70.6884 -0.03117 4666.55 54.9081 -0.03471 3532.71 43.8556 -0.03797 2779.72 39.1195 -0.04102 2401.14 35.0436 -0.04438 2010.93 26.6446 -0.04788 1789.13 25.3004 -0.05144 1629 21.7057 -0.05485 1414.39 21.5471 -0.05808 1338.47 19.3969 -0.06145 1255.55 17.6425 -0.06485 1194.78 17.2789 -0.06822 1131.88 15.6792 -0.07157 1093.29 15.4062 -0.07489 1076.75 14.6325 -0.07815 990.83 13.9891 -0.08147 993.984 13.3123 -0.0849 949.429 12.5828 -0.0883 906.082 12.3081 -0.09169 901.543 11.9196 -0.09495 883.023 11.8721 -0.09815 842.784 11.4424 -0.10174 819.526 9.8676 -0.10534 802.736 10.7893 -0.10861 795.767 10.1828 -0.11188 791.163 10.3837 -0.11526 783.07 9.63416 -0.11872 771.734 9.59199 -0.12201 755.014 9.75865 -0.12527 763.25 9.14929 -0.12865 738.983 9.05459 -0.1321 735.65 8.71334 -0.13554 713.743 8.62175 -0.13875 720.548 9.08471 -0.142 726.975 8.37203 -0.14541 705.893 8.34698 -0.14884 717.099 8.0504 -0.15226 709.825 8.16294 -0.15554 709.595 8.27884 -0.15891 699.293 7.61937 -0.16227 704.678 8.19256 -0.16563 698.926 7.48706 -0.16912 685.563 7.56396 -0.17251 673.043 7.36594 -0.17586 671.398 7.36238 -0.17915 664.082 7.50135 -0.18241 667.157 7.20373 -0.18592 646.099 6.75787 -0.1894 640.973 6.98357 -0.1927 634.489 6.88246 -0.196 608.639 6.89728 -0.19924 599.163 6.60299 +0.02466 8578.27 96.3713 +0.02778 6201.5 70.6884 +0.03117 4666.55 54.9081 +0.03471 3532.71 43.8556 +0.03797 2779.72 39.1195 +0.04102 2401.14 35.0436 +0.04438 2010.93 26.6446 +0.04788 1789.13 25.3004 +0.05144 1629 21.7057 +0.05485 1414.39 21.5471 +0.05808 1338.47 19.3969 +0.06145 1255.55 17.6425 +0.06485 1194.78 17.2789 +0.06822 1131.88 15.6792 +0.07157 1093.29 15.4062 +0.07489 1076.75 14.6325 +0.07815 990.83 13.9891 +0.08147 993.984 13.3123 +0.0849 949.429 12.5828 +0.0883 906.082 12.3081 +0.09169 901.543 11.9196 +0.09495 883.023 11.8721 +0.09815 842.784 11.4424 +0.10174 819.526 9.8676 +0.10534 802.736 10.7893 +0.10861 795.767 10.1828 +0.11188 791.163 10.3837 +0.11526 783.07 9.63416 +0.11872 771.734 9.59199 +0.12201 755.014 9.75865 +0.12527 763.25 9.14929 +0.12865 738.983 9.05459 +0.1321 735.65 8.71334 +0.13554 713.743 8.62175 +0.13875 720.548 9.08471 +0.142 726.975 8.37203 +0.14541 705.893 8.34698 +0.14884 717.099 8.0504 +0.15226 709.825 8.16294 +0.15554 709.595 8.27884 +0.15891 699.293 7.61937 +0.16227 704.678 8.19256 +0.16563 698.926 7.48706 +0.16912 685.563 7.56396 +0.17251 673.043 7.36594 +0.17586 671.398 7.36238 +0.17915 664.082 7.50135 +0.18241 667.157 7.20373 +0.18592 646.099 6.75787 +0.1894 640.973 6.98357 +0.1927 634.489 6.88246 +0.196 608.639 6.89728 +0.19924 599.163 6.60299 diff --git a/test/trend_test_data/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv b/test/trend_test_data/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv index ebbe41831..03d157c58 100644 --- a/test/trend_test_data/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv +++ b/test/trend_test_data/NdFeB_parallel_Bick_et_al/5_16000_1600_1070.csv @@ -1,53 +1,53 @@ -0.02466 8403.24 95.8365 -0.02779 5866.26 69.5434 -0.03118 4356.78 53.6923 -0.03472 3299.25 42.8649 -0.03798 2597.38 38.2386 -0.04103 2129.79 33.557 -0.04439 1878.69 25.9888 -0.04789 1624.61 24.3861 -0.05145 1439.52 20.6737 -0.05487 1263.65 20.5759 -0.05809 1171.99 18.386 -0.06147 1079.56 16.577 -0.06487 1041.15 16.3129 -0.06823 1001.7 14.8847 -0.07159 961.645 14.563 -0.07491 923.442 13.6706 -0.07817 896.915 13.3973 -0.08149 883.652 12.6286 -0.08492 862.753 12.0581 -0.08832 824.722 11.795 -0.09171 784.35 11.1756 -0.09497 769.294 11.1579 -0.09818 755.349 10.8901 -0.10176 749.016 9.48228 -0.10537 742.393 10.4072 -0.10864 731.812 9.80011 -0.11191 725.902 9.97489 -0.11529 687.755 9.06119 -0.11874 695.826 9.13917 -0.12204 706.826 9.47552 -0.1253 686.062 8.69528 -0.12868 672.907 8.67583 -0.13213 693.14 8.48682 -0.13557 670.728 8.38538 -0.13878 665.705 8.76139 -0.14204 671.833 8.08011 -0.14544 675.608 8.18129 -0.14888 672.094 7.81614 -0.1523 674.683 7.97469 -0.15558 656.506 7.99112 -0.15895 676.236 7.50792 -0.16231 665.98 7.99164 -0.16567 649.237 7.2359 -0.16916 663.887 7.46039 -0.17256 654.732 7.28088 -0.1759 649.138 7.26044 -0.1792 637.918 7.36805 -0.18246 634.954 7.04588 -0.18596 615.952 6.61209 -0.18945 606.075 6.80618 -0.19275 602.38 6.72418 -0.19605 583.877 6.77081 -0.1993 592.832 6.58159 +0.02466 8403.24 95.8365 +0.02779 5866.26 69.5434 +0.03118 4356.78 53.6923 +0.03472 3299.25 42.8649 +0.03798 2597.38 38.2386 +0.04103 2129.79 33.557 +0.04439 1878.69 25.9888 +0.04789 1624.61 24.3861 +0.05145 1439.52 20.6737 +0.05487 1263.65 20.5759 +0.05809 1171.99 18.386 +0.06147 1079.56 16.577 +0.06487 1041.15 16.3129 +0.06823 1001.7 14.8847 +0.07159 961.645 14.563 +0.07491 923.442 13.6706 +0.07817 896.915 13.3973 +0.08149 883.652 12.6286 +0.08492 862.753 12.0581 +0.08832 824.722 11.795 +0.09171 784.35 11.1756 +0.09497 769.294 11.1579 +0.09818 755.349 10.8901 +0.10176 749.016 9.48228 +0.10537 742.393 10.4072 +0.10864 731.812 9.80011 +0.11191 725.902 9.97489 +0.11529 687.755 9.06119 +0.11874 695.826 9.13917 +0.12204 706.826 9.47552 +0.1253 686.062 8.69528 +0.12868 672.907 8.67583 +0.13213 693.14 8.48682 +0.13557 670.728 8.38538 +0.13878 665.705 8.76139 +0.14204 671.833 8.08011 +0.14544 675.608 8.18129 +0.14888 672.094 7.81614 +0.1523 674.683 7.97469 +0.15558 656.506 7.99112 +0.15895 676.236 7.50792 +0.16231 665.98 7.99164 +0.16567 649.237 7.2359 +0.16916 663.887 7.46039 +0.17256 654.732 7.28088 +0.1759 649.138 7.26044 +0.1792 637.918 7.36805 +0.18246 634.954 7.04588 +0.18596 615.952 6.61209 +0.18945 606.075 6.80618 +0.19275 602.38 6.72418 +0.19605 583.877 6.77081 +0.1993 592.832 6.58159 diff --git a/test/utest_new_sasdata.py b/test/utest_new_sasdata.py index 16665c20f..cc497d9ae 100644 --- a/test/utest_new_sasdata.py +++ b/test/utest_new_sasdata.py @@ -2,9 +2,11 @@ from sasdata.data import SasData from sasdata.data_backing import Group -from sasdata.dataset_types import one_dim, two_dim +from sasdata.dataset_types import one_dim, three_dim, two_dim +from sasdata.metadata import Instrument, Metadata, Source +from sasdata.postprocess import deduce_qz from sasdata.quantities.quantity import Quantity -from sasdata.quantities.units import per_angstrom, per_centimeter +from sasdata.quantities.units import angstroms, per_angstrom, per_centimeter def test_1d(): @@ -46,3 +48,60 @@ def test_2d(): assert all(data.ordinate.value == np.array(i)) assert (data.abscissae.value == np.array([[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]])).all().all() + +def test_3d(): + # test base 3D class + qx = [1, 1, 1, 2, 2, 2, 3, 3, 3] + qy = [1, 2, 3, 1, 2, 3, 1, 2, 3] + qz = [0, 1, 0, 1, 0, 1, 0, 1, 0] + i = [1, 2, 3] + + qx_quantity = Quantity(np.array(qx), per_angstrom) + qy_quantity = Quantity(np.array(qy), per_angstrom) + qz_quantity = Quantity(np.array(qz), per_angstrom) + i_quantity = Quantity(np.array(i), per_centimeter) + + data_contents = { + 'Qx': qx_quantity, + 'Qy': qy_quantity, + 'Qz': qz_quantity, + 'I': i_quantity + } + + data = SasData('TestData', data_contents, three_dim, Group('root', {}), True) + + assert (data._data_contents['Qx'].value == np.array(qx)).all() + + + + # test autogenerated qz from qx, qy, and wavelength + wavelength = Quantity(1., angstroms) + source = Source(radiation=None, + beam_shape=None, + beam_size=None, + wavelength=wavelength, + wavelength_max=None, + wavelength_min=None, + wavelength_spread=None) + instrument = Instrument(collimations=[], + source=source, + detector=[]) + metadata=Metadata(title=None, + run=[], + definition=None, + process=[], + sample=None, + instrument=instrument, + raw=None) + + data_contents = { + 'Qx': qx_quantity, + 'Qy': qy_quantity, + 'I': i_quantity + } + + data = SasData('TestData', data_contents, two_dim, metadata, True) + + deduce_qz(data) + + assert (data._data_contents['Qz'].value != (0*data._data_contents['Qx'].value)).all() diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..54dfeb507 --- /dev/null +++ b/tox.ini @@ -0,0 +1,3 @@ +[pycodestyle] +max-line-length = 120 +ignore = E501,W503 \ No newline at end of file