# AP_FLAKE8_CLEAN


import math

from LogAnalyzer import Test, TestResult


class TestNaN(Test):
    '''test for NaNs present in log'''

    def __init__(self):
        Test.__init__(self)
        self.name = "NaNs"

    def run(self, logdata, verbose):
        self.result = TestResult()
        self.result.status = TestResult.StatusType.GOOD

        def FAIL():
            self.result.status = TestResult.StatusType.FAIL

        nans_ok = {
            "CTUN": ["DSAlt", "TAlt"],
            "POS": ["RelOriginAlt"],
        }

        for channel in logdata.channels.keys():
            for field in logdata.channels[channel].keys():
                if channel in nans_ok and field in nans_ok[channel]:
                    continue
                try:
                    for tupe in logdata.channels[channel][field].listData:
                        (ts, val) = tupe
                        if isinstance(val, float) and math.isnan(val):
                            FAIL()
                            self.result.statusMessage += "Found NaN in %s.%s\n" % (
                                channel,
                                field,
                            )
                            raise ValueError()
                except ValueError:
                    continue
