def test_statistics_calculator_power_spectral_density():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("powerSpectralDensity")
    testData = {
        24: {
            "psdEx": 912.0,
            "psdEy": 640.0,
            "psdHx": 1496.0,
            "psdHy": 1680.0
        },
        40: {
            "psdEx": 784.0,
            "psdEy": 480.0,
            "psdHx": 792.0,
            "psdHy": 1344.0
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])
def test_statistics_calculator_coherence():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("coherence")
    testData = {
        24: {
            "cohExHx": 0.5462519936204147,
            "cohExHy": 0.13675856307435255,
            "cohEyHx": 0.590909090909091,
            "cohEyHy": 0.19523809523809524,
        },
        40: {
            "cohExHx": 0.49360956503813647,
            "cohExHy": 0.6379980563654033,
            "cohEyHx": 0.6734006734006734,
            "cohEyHy": 0.20634920634920634,
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])
def test_statistics_calculator_transfer_function():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("transferFunction")
    testData = {
        24: {
            "ExHxRes": 0.0051423310440927615,
            "ExHxPhase": -38.08089717250079,
            "ExHxReal": 0.6183338309943266,
            "ExHxImag": -0.484502836667662,
            "ExHyRes": 0.002406937394247041,
            "ExHyPhase": -79.49669804710025,
            "ExHyReal": 0.09796954314720807,
            "ExHyImag": -0.5284263959390865,
            "EyHxRes": 0.003364188314919875,
            "EyHxPhase": 40.70059399014801,
            "EyHxReal": 0.48169602866527317,
            "EyHxImag": 0.4143326366079426,
            "EyHyRes": 0.001522842639593909,
            "EyHyPhase": 49.044485574181074,
            "EyHyReal": 0.2802030456852794,
            "EyHyImag": 0.3228426395939085,
        },
        40: {
            "ExHxRes": 0.0021009588268471532,
            "ExHxPhase": -12.512585801455565,
            "ExHxReal": 0.6328257191201355,
            "ExHxImag": -0.14043993231810512,
            "ExHyRes": 0.0017318809926677931,
            "ExHyPhase": -91.1943471837543,
            "ExHyReal": -0.012267343485617588,
            "ExHyImag": -0.5884094754653127,
            "EyHxRes": 0.002820078962210943,
            "EyHxPhase": 120.6095367512591,
            "EyHxReal": -0.3824027072758038,
            "EyHxImag": 0.6463620981387479,
            "EyHyRes": 0.0006838691483361542,
            "EyHyPhase": 1.4419233716812918,
            "EyHyReal": 0.36971235194585467,
            "EyHyImag": 0.009306260575296085,
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])
def test_statistics_calculator_absval():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("absvalEqn")
    testData = {
        24: {
            "absExHx": 53.956000593075835,
            "absEyHx": 47.01063709417264,
            "absHxHx": 93.5,
            "absHyHx": 38.01315561749642,
            "absExHy": 28.609439001839934,
            "absEyHy": 28.635642126552707,
            "absHxHy": 38.01315561749642,
            "absHyHy": 105.0,
            "absExEx": 57.0,
            "absEyEx": 40.0,
            "absHxEx": 53.956000593075835,
            "absHyEx": 28.609439001839934,
            "absExEy": 40.0,
            "absEyEy": 40.0,
            "absHxEy": 47.01063709417264,
            "absHyEy": 28.635642126552707,
        },
        40: {
            "absExHx": 34.60130055359191,
            "absEyHx": 31.622776601683793,
            "absHxHx": 49.5,
            "absHyHx": 24.73863375370596,
            "absExHy": 51.24451190127583,
            "absEyHy": 22.80350850198276,
            "absHxHy": 24.73863375370596,
            "absHyHy": 84.0,
            "absExEx": 49.0,
            "absEyEx": 33.83784863137726,
            "absHxEx": 34.60130055359191,
            "absHyEx": 51.24451190127583,
            "absExEy": 33.83784863137726,
            "absEyEy": 30.0,
            "absHxEy": 31.622776601683793,
            "absHyEy": 22.80350850198276,
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])
def test_statistics_calculator_partial_coherence():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("partialCoherence")
    testData = {
        24: {
            "cohExHx": 0.5462519936204147,
            "cohExHy": 0.13675856307435255,
            "cohEyHx": 0.590909090909091,
            "cohEyHy": 0.19523809523809524,
            "bivarEx": (1 + 0j),
            "parExHx": (1 + 0j),
            "parExHy": (1 + 0j),
            "bivarEy": (1 + 4.4408920985006264e-17j),
            "parEyHx": (1 + 5.518268288077701e-17j),
            "parEyHy": (0.9999999999999999 + 1.085551401855709e-16j),
        },
        40: {
            "cohExHx": 0.49360956503813647,
            "cohExHy": 0.6379980563654033,
            "cohEyHx": 0.6734006734006734,
            "cohEyHy": 0.20634920634920634,
            "bivarEx": (1 + 0j),
            "parExHx": (1 + 0j),
            "parExHy": (1 + 0j),
            "bivarEy": (1 + 2.960594732333751e-17j),
            "parEyHx": (0.9999999999999999 + 3.7303493627405256e-17j),
            "parEyHy": (0.9999999999999999 + 9.064913768073444e-17j),
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])
def test_statistics_calculator_polarisation_direction():
    """Test absolute value calculator"""
    from resistics.statistics.calculator import StatisticCalculator
    import numpy as np

    specData, evalfreq = get_spectrum_data()
    calculator = StatisticCalculator()
    calculator.winLen = 1
    assert calculator.winLen == 1
    calculator.setSpectra(specData.freqArray, specData, evalfreq)
    statData = calculator.getDataForStatName("polarisationDirection")
    testData = {
        24: {
            "polExEy": 0.0,
            "polHxHy": 80.4010969314582
        },
        40: {
            "polExEy": -63.43494882292201,
            "polHxHy": -54.293308599397115
        },
    }
    for efreq in evalfreq:
        for key, val in statData[efreq].items():
            np.testing.assert_almost_equal(val, testData[efreq][key])