Beispiel #1
0
def run(g, samsize, interval, outdir):

    logger.info(
        "Spectral Test for Modulus {} Multiplier {} Samsize {} Interval {}".
        format(g.get_modulus(), g.get_multiplier(), samsize, interval))

    filename = path.join(
        outdir, "mod{}_mul{}".format(g.get_modulus(), g.get_multiplier()))

    # Statistics: [(u1, u2),(u2,u3)...,(un-1,un)]
    test.statistics(filename + ".csv", g, samsize, interval)

    # Report
    r = SimpleReport("SPECTRAL TEST")
    r.add("Generator", "Class", g.__class__.__name__)
    r.add("Generator", "Modulus", g.get_modulus())
    r.add("Generator", "Multiplier", g.get_multiplier())
    r.add("Generator", "Seed", g.get_initial_seed())
    r.add("Test Parameters", "Sample Size", samsize)
    r.add("Test Parameters", "Interval", interval)

    r.save_txt(filename + "_report.txt")
    r.save_csv(filename + "_report.csv")

    logger.info("Report:\n{}".format(r))
Beispiel #2
0
def run(g, samsize, bins, confidence, d, outdir):

    logger.info(
        "Extremes Test for Modulus {} Multiplier {} Streams {} Jumper {} Bins {} Samsize {} D {} Confidence {}"
        .format(g.get_modulus(), g.get_multiplier(), g.get_nstreams(),
                g.get_jumper(), bins, samsize, d, confidence))

    filename = path.join(
        outdir, "mod{}_mul{}_str{}".format(g.get_modulus(), g.get_multiplier(),
                                           g.get_nstreams()))

    # Statistics: [(stream_1, chi_1),(stream_2,chi_2),...,(stream_n,chi_n)]
    data = test.statistics(g, samsize, bins, d)
    save_csv(filename + ".csv", ["stream", "value"], data, empty=True)

    # Critical Bounds
    mn = test.critical_min(bins, confidence)
    mx = test.critical_max(bins, confidence)

    # Theoretical/Empirical Error
    err = test.error(data, mn, mx, confidence)

    # Result
    success = err["err_emp"] <= err["err_thr"]
    sugg_confidence = 1 - err["err_emp_perc"]

    # Report
    r = SimpleReport("TEST OF EXTREMES")
    r.add("Generator", "Class", g.__class__.__name__)
    r.add("Generator", "Streams", g.get_nstreams())
    r.add("Generator", "Modulus", g.get_modulus())
    r.add("Generator", "Multiplier", g.get_multiplier())
    r.add("Generator", "Jumper", g.get_jumper())
    r.add("Generator", "Seed", g.get_initial_seed())
    r.add("Test Parameters", "Sample Size", samsize)
    r.add("Test Parameters", "Bins", bins)
    r.add("Test Parameters", "Confidence", round(confidence * 100, 3))
    r.add("Test Parameters", "D", d)
    r.add("Critical Bounds", "Lower Bound", mn)
    r.add("Critical Bounds", "Upper Bound", mx)
    r.add(
        "Error",
        "Theoretical", "{} ({} %)".format(err["err_thr"],
                                          round(err["err_thr_perc"] * 100, 3)))
    r.add(
        "Error",
        "Empirical", "{} ({} %)".format(err["err_emp"],
                                        round(err["err_emp_perc"] * 100, 3)))
    r.add(
        "Error", "Empirical Lower Bound",
        "{} ({} %)".format(err["err_mn"], round(err["err_mn_perc"] * 100, 3)))
    r.add(
        "Error", "Empirical Upper Bound",
        "{} ({} %)".format(err["err_mx"], round(err["err_mx_perc"] * 100, 3)))
    r.add("Result", "Suggested Confidence", round(sugg_confidence * 100, 3))
    r.add("Result", "Success", success)

    r.save_txt(filename + "_report.txt")
    r.save_csv(filename + "_report.csv")

    logger.info("Report:\n{}".format(r))
Beispiel #3
0
def run(g, test_name, test_params, outdir=DEFAULT_OUTDIR):

    logger.info(
        "Kolmogorov-Smirnov Test ({}) for Modulus {} Multiplier {} Streams {} Jumper {}"
        .format(test_name, g.get_modulus(), g.get_multiplier(),
                g.get_nstreams(), g.get_jumper()))

    filename = path.join(
        outdir, "mod{}_mul{}_str{}".format(g.get_modulus(), g.get_multiplier(),
                                           g.get_nstreams()))

    if test_name == "uniformity_u":
        raise NotImplementedError(
            "Kolmogorov-Smirnov on {} is not yet implemented".format(
                test_name))
        # data = uniformity_univariate.statistics(generator, streams, samsize, bins)
    elif test_name == "uniformity_b":
        raise NotImplementedError(
            "Kolmogorov-Smirnov on {} is not yet implemented".format(
                test_name))
        # data = uniformity_bivariate.statistics(generator, streams, samsize, bins)
    elif test_name == "extremes":
        chi_square_statistics = extremes.statistics(g, test_params["samsize"],
                                                    test_params["bins"],
                                                    test_params["d"])
    elif test_name == "runsup":
        raise NotImplementedError(
            "Kolmogorov-Smirnov on {} is not yet implemented".format(
                test_name))
        # data = runsup.statistics(generator, streams, samsize, bins)
    elif test_name == "gap":
        raise NotImplementedError(
            "Kolmogorov-Smirnov on {} is not yet implemented".format(
                test_name))
        # data = gap.statistics(generator, streams, samsize, bins, test_params["a"], test_params["b"])
    elif test_name == "permutation":
        raise NotImplementedError(
            "Kolmogorov-Smirnov on {} is not yet implemented".format(
                test_name))
        # data = permutation.statistics(generator, streams, samsize, bins, test_params["t"])
    else:
        raise ValueError("{} is not a valid testname".format(test_name))

    save_csv(filename + ".csv", ["stream", "value"],
             chi_square_statistics,
             empty=True)

    # KS Statistic
    ks_distances = test.compute_ks_distances(chi_square_statistics,
                                             test_params["bins"])
    ks_statistic = test.compute_ks_statistic(ks_distances)
    ks_point = test.compute_ks_point(ks_distances)

    # KS Critical
    ks_critical_distance = test.compute_ks_critical_distance(
        g.get_nstreams(), test_params["confidence"])

    # Result
    success = ks_statistic < ks_critical_distance

    # Report
    r = SimpleReport("TEST OF KOLMOGOROV-SMIRNOV")
    r.add("Generator", "Class", g.__class__.__name__)
    r.add("Generator", "Streams", g.get_nstreams())
    r.add("Generator", "Modulus", g.get_modulus())
    r.add("Generator", "Multiplier", g.get_multiplier())
    r.add("Generator", "Jumper", g.get_jumper())
    r.add("Generator", "Seed", g.get_initial_seed())
    r.add("Test Parameters", "ChiSquare Test", test_name)
    r.add("Test Parameters", "Sample Size", test_params["samsize"])
    r.add("Test Parameters", "Bins", test_params["bins"])
    r.add("Test Parameters", "Confidence",
          round(test_params["confidence"] * 100, 3))
    if test_name == "extremes":
        r.add("Test Parameters", "D", test_params["d"])
    elif test_name == "gap":
        r.add("Test Parameters", "A", test_params["a"])
        r.add("Test Parameters", "B", test_params["b"])
    elif test_name == "permutation":
        r.add("Test Parameters", "T", test_params["t"])
    r.add("KS", "KS Statistic", round(ks_statistic, 3))
    r.add("KS", "KS Point X", round(ks_point, 3))
    r.add("KS", "KS Critical Distance", round(ks_critical_distance, 3))
    r.add("Result", "Success", success)

    r.save_txt(filename + "_report.txt")
    r.save_csv(filename + "_report.csv")

    logger.info("Report:\n{}".format(r))
Beispiel #4
0
class ReportTest(unittest.TestCase):
    def setUp(self):
        """
        The test setup.
        :return: None
        """
        self.r = SimpleReport("SAMPLE REPORT")
        self.r.add("Section-1", "1st Value", 1)
        self.r.add("Section-1", "2nd Value", 2.123)
        self.r.add("Section-1", "3rd Value", "Hello World")
        self.r.add("Section-2/Subsection-1", "1st Value", 1)
        self.r.add("Section-2/Subsection-1", "2nd Value", 2.123)
        self.r.add("Section-2/Subsection-1", "3rd Value", "Hello World")
        self.r.add("Section-3", "1st Value", 1)
        self.r.add("Section-3", "2nd Value", 2.123)
        self.r.add("Section-3", "3rd Value", "Hello World")

        self.file_txt = "test.txt"
        self.file_csv = "test.csv"

    def test_string_representation(self):
        """
        Test the report string representation.
        :return: None
        """
        s = "\n"
        s += "==================================================\n"
        s += "                  SAMPLE REPORT                   \n"
        s += "==================================================\n"
        s += "\n"
        s += "                    Section-1                     \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"
        s += "\n"
        s += "              Section-2/Subsection-1              \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"
        s += "\n"
        s += "                    Section-3                     \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"

        self.assertEqual(s, str(self.r),
                         "String representation is not correct.")

    def test_save_txt(self):
        """
        Test the report saving to a TXT file.
        :return: None
        """
        s = "\n"
        s += "==================================================\n"
        s += "                  SAMPLE REPORT                   \n"
        s += "==================================================\n"
        s += "\n"
        s += "                    Section-1                     \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"
        s += "\n"
        s += "              Section-2/Subsection-1              \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"
        s += "\n"
        s += "                    Section-3                     \n"
        s += "1st Value........................................1\n"
        s += "2nd Value....................................2.123\n"
        s += "3rd Value..............................Hello World\n"

        self.r.save_txt(self.file_txt)

        with open(self.file_txt, "r") as f:
            actual = f.read()

        self.assertEqual(s, actual, "TXT file representation is not correct.")

    def test_save_csv(self):
        """
        Test the report saving to a CSV file.
        :return: None
        """
        s = "name,section-1.1st_value,section-1.2nd_value,section-1.3rd_value,section-2/subsection-1.1st_value,section-2/subsection-1.2nd_value,section-2/subsection-1.3rd_value,section-3.1st_value,section-3.2nd_value,section-3.3rd_value\n"
        s += "SAMPLE REPORT,1,2.123,Hello World,1,2.123,Hello World,1,2.123,Hello World\n"

        self.r.save_csv(self.file_csv)

        with open(self.file_csv, "r") as f:
            actual = f.read()

        self.assertEqual(s, actual, "CSV file representation is not correct.")