Beispiel #1
0
    def impl_stats_const_file(self, shape, dtype, buffer_size):
        dtype = cb.get_dtype(dtype)
        shape = Shape(shape)
        file_format = 'raw'
        filename_format = "stats_const_{shape}_{dtype}.{format}"
        filename = filename_format.format(shape=shape, dtype=dtype, format=file_format)
        dmin = 3
        for d in shape:
            assert d >= dmin, "d={} < {}".format(d, dmin)
        cube_max_index = tuple(0 for i in shape)
        cube_min_index = tuple(1 for i in shape)
        cube_zero_index = tuple(2 for i in shape)
        cube_value = 1.0
        cube_max = 10.0
        cube_min = -23.0
        cube_zero = 0.0
        cube_sum = cube_max + cube_min + cube_value * (shape.count() - dmin)
        cube_ave = cube_sum / float(shape.count())
        cube = cb.const_cube(shape=shape, dtype=dtype, value=cube_value)
        cube[cube_max_index] = cube_max
        cube[cube_min_index] = cube_min
        cube[cube_zero_index] = cube_zero
        cube_count_zero = 1
        cube_count_nonzero = shape.count() - cube_count_zero
        cube_count_nan = 0
        cube_count_inf = 0

        stats_info_cube = cb.stats_info(cube)

        self.assertEqual(stats_info_cube.cube_sum, cube_sum)
        self.assertEqual(stats_info_cube.cube_ave, cube_ave)
        self.assertEqual(stats_info_cube.cube_max, cube_max)
        self.assertEqual(stats_info_cube.cube_min, cube_min)
        self.assertEqual(stats_info_cube.cube_max_index, cube_max_index)
        self.assertEqual(stats_info_cube.cube_min_index, cube_min_index)
        self.assertEqual(stats_info_cube.cube_count_zero, cube_count_zero)
        self.assertEqual(stats_info_cube.cube_count_nonzero, cube_count_nonzero)
        self.assertEqual(stats_info_cube.cube_count_nan, cube_count_nan)
        self.assertEqual(stats_info_cube.cube_count_inf, cube_count_inf)

        cube.tofile(filename)
        self.assertFileExistsAndHasShape(filename, shape=shape, dtype=dtype)

        stats_info_oc = cb.stats_file(filename, shape=shape, dtype=dtype, file_format=file_format,
                                      out_of_core=False)
       
        self.assertEqual(stats_info_oc, stats_info_cube)

        stats_info_ooc = cb.stats_file(filename, shape=shape, dtype=dtype, file_format=file_format,
                                       out_of_core=True, progress_frequency=-1.0, buffer_size=buffer_size)
       
        self.assertEqual(stats_info_ooc, stats_info_cube)
Beispiel #2
0
 def write_linear_cube_out_of_core_4x4_int64(self):
     dtype = np.int64
     shape = Shape("4x4")
     self.impl_write_cube_out_of_core(kind='linear',
                                      shape=shape,
                                      dtype=dtype,
                                      buffer_size=shape.count() *
                                      dtype().itemsize / 2)
Beispiel #3
0
 def assertFileExistsAndHasShape(self, filename, shape, dtype=None):
     self.assertFileExists(filename)
     dtype = cb.get_dtype(dtype)
     if not isinstance(shape, Shape):
         shape = Shape(shape)
     size = shape.count() * dtype().itemsize
     filesize = os.stat(filename).st_size
     if filesize != size:
         raise AssertionError("file {!r} has size {} != {} [shape={}, dtype={}]".format(filename, filesize, size, shape, dtype.__name__))
Beispiel #4
0
 def impl_data_type(self, keys, actual_data_type=None, actual_file_format=None, const_value=None):
     shape = Shape("4x5")
     data_type = keys.get('data_type', 'float32')
     options = keys.get('options', None)
     dtype = cb.get_dtype(data_type)
     file_format = keys.get('file_format', 'raw')
     if actual_data_type is None:
         actual_data_type = data_type
     actual_dtype = cb.get_dtype(actual_data_type)
     if actual_file_format is None:
         actual_file_format = file_format
     rubik_dir = os.getcwd()
     rubik_config = config.get_config()
     rubik_config_data_type = os.path.join(rubik_dir, "rubik.config.{data_type}.{file_format}")
     rubik_config.default_data_type = data_type
     rubik_config.default_file_format = file_format
     if options is not None:
         rubik_config.default_options = options
     with open(rubik_config_data_type, "w") as f:
         rubik_config.write_config_file(f)
     current_rubik_dir = os.environ.get("RUBIK_DIR", None)
     current_rubik_config = os.environ.get("RUBIK_CONFIG", None)
     out_filename_format = 'ctmp_{shape}_{dtype}.{format}'
     out_filename = out_filename_format.format(shape=shape, dtype=actual_data_type, format=file_format)
     try:
         os.environ["RUBIK_DIR"] = rubik_dir
         os.environ["RUBIK_CONFIG"] = rubik_config_data_type
         environment.load_rubik_environment()
         returncode, output, error = self.run_program(
             """-e 'cb.const_cube("{s}", value={c})' -o '{o}'""".format(
                 s=shape,
                 c=const_value,
                 o=out_filename_format))
         self.assertEqual(returncode, 0)
         if actual_file_format == 'raw':
             self.assertFileExistsAndHasShape(out_filename, shape=shape, dtype=actual_data_type)
         else:
             self.assertFileExists(out_filename)
         returncode, output, error = self.run_program(
             """-i '{o}' -s {s} -e 'i0.sum()' --print""".format(
                 s=shape,
                 o=out_filename_format),
             join_stderr_stdout=False)
         value = actual_dtype(output.rstrip('\n'))
         self.assertEqual(value, shape.count() * const_value)
     finally:
         if current_rubik_dir is None:
             del os.environ["RUBIK_DIR"]
         else:
             os.environ["RUBIK_DIR"] = current_rubik_dir
         if current_rubik_config is None:
             del os.environ["RUBIK_CONFIG"]
         else:
             os.environ["RUBIK_CONFIG"] = rubik_config_data_type
         environment.load_rubik_environment()
Beispiel #5
0
 def impl_data_type(self,
                    keys,
                    actual_data_type=None,
                    actual_file_format=None,
                    const_value=None):
     shape = Shape("4x5")
     data_type = keys.get('data_type', 'float32')
     options = keys.get('options', None)
     dtype = cb.get_dtype(data_type)
     file_format = keys.get('file_format', 'raw')
     if actual_data_type is None:
         actual_data_type = data_type
     actual_dtype = cb.get_dtype(actual_data_type)
     if actual_file_format is None:
         actual_file_format = file_format
     rubik_dir = os.getcwd()
     rubik_config = config.get_config()
     rubik_config_data_type = os.path.join(
         rubik_dir, "rubik.config.{data_type}.{file_format}")
     rubik_config.default_data_type = data_type
     rubik_config.default_file_format = file_format
     if options is not None:
         rubik_config.default_options = options
     with open(rubik_config_data_type, "w") as f:
         rubik_config.write_config_file(f)
     current_rubik_dir = os.environ.get("RUBIK_DIR", None)
     current_rubik_config = os.environ.get("RUBIK_CONFIG", None)
     out_filename_format = 'ctmp_{shape}_{dtype}.{format}'
     out_filename = out_filename_format.format(shape=shape,
                                               dtype=actual_data_type,
                                               format=file_format)
     try:
         os.environ["RUBIK_DIR"] = rubik_dir
         os.environ["RUBIK_CONFIG"] = rubik_config_data_type
         environment.load_rubik_environment()
         returncode, output, error = self.run_program(
             """-e 'cb.const_cube("{s}", value={c})' -o '{o}'""".format(
                 s=shape, c=const_value, o=out_filename_format))
         self.assertEqual(returncode, 0)
         if actual_file_format == 'raw':
             self.assertFileExistsAndHasShape(out_filename,
                                              shape=shape,
                                              dtype=actual_data_type)
         else:
             self.assertFileExists(out_filename)
         returncode, output, error = self.run_program(
             """-i '{o}' -s {s} -e 'i0.sum()' --print""".format(
                 s=shape, o=out_filename_format),
             join_stderr_stdout=False)
         value = actual_dtype(output.rstrip('\n'))
         self.assertEqual(value, shape.count() * const_value)
     finally:
         if current_rubik_dir is None:
             del os.environ["RUBIK_DIR"]
         else:
             os.environ["RUBIK_DIR"] = current_rubik_dir
         if current_rubik_config is None:
             del os.environ["RUBIK_CONFIG"]
         else:
             os.environ["RUBIK_CONFIG"] = rubik_config_data_type
         environment.load_rubik_environment()
Beispiel #6
0
 def count(self):
     for shape_t, shape_s, count in self._shapes:
         shape_ft = Shape(shape_t)
         shape_fs = Shape(shape_s)
         self.assertEqual(shape_ft.count(), shape_fs.count())
         self.assertEqual(shape_ft.count(), count)
Beispiel #7
0
    def impl_stats_const_file(self, shape, dtype, buffer_size):
        dtype = cb.get_dtype(dtype)
        shape = Shape(shape)
        file_format = 'raw'
        filename_format = "stats_const_{shape}_{dtype}.{format}"
        filename = filename_format.format(shape=shape,
                                          dtype=dtype,
                                          format=file_format)
        dmin = 3
        for d in shape:
            assert d >= dmin, "d={} < {}".format(d, dmin)
        cube_max_index = tuple(0 for i in shape)
        cube_min_index = tuple(1 for i in shape)
        cube_zero_index = tuple(2 for i in shape)
        cube_value = 1.0
        cube_max = 10.0
        cube_min = -23.0
        cube_zero = 0.0
        cube_sum = cube_max + cube_min + cube_value * (shape.count() - dmin)
        cube_ave = cube_sum / float(shape.count())
        cube = cb.const_cube(shape=shape, dtype=dtype, value=cube_value)
        cube[cube_max_index] = cube_max
        cube[cube_min_index] = cube_min
        cube[cube_zero_index] = cube_zero
        cube_count_zero = 1
        cube_count_nonzero = shape.count() - cube_count_zero
        cube_count_nan = 0
        cube_count_inf = 0

        stats_info_cube = cb.stats_info(cube)

        self.assertEqual(stats_info_cube.cube_sum, cube_sum)
        self.assertEqual(stats_info_cube.cube_ave, cube_ave)
        self.assertEqual(stats_info_cube.cube_max, cube_max)
        self.assertEqual(stats_info_cube.cube_min, cube_min)
        self.assertEqual(stats_info_cube.cube_max_index, cube_max_index)
        self.assertEqual(stats_info_cube.cube_min_index, cube_min_index)
        self.assertEqual(stats_info_cube.cube_count_zero, cube_count_zero)
        self.assertEqual(stats_info_cube.cube_count_nonzero,
                         cube_count_nonzero)
        self.assertEqual(stats_info_cube.cube_count_nan, cube_count_nan)
        self.assertEqual(stats_info_cube.cube_count_inf, cube_count_inf)

        cube.tofile(filename)
        self.assertFileExistsAndHasShape(filename, shape=shape, dtype=dtype)

        stats_info_oc = cb.stats_file(filename,
                                      shape=shape,
                                      dtype=dtype,
                                      file_format=file_format,
                                      out_of_core=False)

        self.assertEqual(stats_info_oc, stats_info_cube)

        stats_info_ooc = cb.stats_file(filename,
                                       shape=shape,
                                       dtype=dtype,
                                       file_format=file_format,
                                       out_of_core=True,
                                       progress_frequency=-1.0,
                                       buffer_size=buffer_size)

        self.assertEqual(stats_info_ooc, stats_info_cube)
 def write_linear_cube_out_of_core_4x4_float32(self):
     dtype = np.float32
     shape = Shape("4x4")
     self.impl_write_cube_out_of_core(
         kind="linear", shape=shape, dtype=dtype, buffer_size=shape.count() * dtype().itemsize / 2
     )
    def impl_write_cube_out_of_core(self, kind, shape, dtype, buffer_size=None):
        dtype = utilities.get_dtype(dtype)
        shape = Shape(shape)
        filename_format_a = "a_{kind}_{{shape}}_{{dtype}}.{{format}}".format(kind=kind)
        filename_format_b = "b_{kind}_{{shape}}_{{dtype}}.{{format}}".format(kind=kind)
        filename_format_c = "c_{kind}_{{shape}}_{{dtype}}.{{format}}".format(kind=kind)
        if issubclass(dtype, np.integer):
            l_start = dtype(3)
            l_increment = dtype(2)
            c_value = dtype(7)
        else:
            l_start = dtype(0.5)
            l_increment = dtype(1.5)
            c_value = dtype(7.5)
        p_args = []
        n_args = {}
        if kind == "random":
            ooc_function = cb.write_random_cube
            oc_function = cb.random_cube
        elif kind == "linear":
            ooc_function = cb.write_linear_cube
            oc_function = cb.linear_cube
            n_args["start"] = l_start
            n_args["increment"] = l_increment
        elif kind == "const":
            ooc_function = cb.write_const_cube
            oc_function = cb.const_cube
            n_args["value"] = c_value
        else:
            assert False, kind
        cb.set_random_seed(10)
        ooc_function(filename_format_a, shape=shape, dtype=dtype, *p_args, **n_args)
        filename_a = filename_format_a.format(shape=shape, dtype=dtype.__name__, format="raw")
        self.assertFileExistsAndHasShape(filename_a, shape=shape, dtype=dtype)
        ooc_cube = cb.read_cube_raw(filename_format_a, shape=shape, dtype=dtype)
        self.assertTrue(ooc_cube.dtype == dtype)
        self.assertEqual(ooc_cube.size, shape.count())

        cb.set_random_seed(10)
        oc_cube = oc_function(shape=shape, dtype=dtype, *p_args, **n_args)
        self.assertCubesAreEqual(ooc_cube, oc_cube)

        if kind == "random":
            pass
        elif kind == "linear":
            #     0) start +    0 * increment
            #     1) start +    1 * increment
            #     2) start +    2 * increment
            #     3) start +    3 * increment
            #        ...
            # count) start + count * increment
            # ==    (start * count) + (((count - 1) * count) // 2) * increment
            count = shape.count()
            sum_count = ((count - 1) * count) // 2
            l_sum = (l_start * count) + (l_increment * sum_count)
            self.assertEqual(cb.precise_sum(ooc_cube), l_sum)
        elif kind == "const":
            self.assertEqual(cb.precise_sum(ooc_cube), shape.count() * c_value)
        filename_b = filename_format_b.format(shape=shape, dtype=dtype.__name__, format="raw")
        ooc_cube.tofile(filename_b)
        self.assertFilesAreEqual(filename_a, filename_b)
Beispiel #10
0
class RubikTestComparison(RubikTestCase):
    METHOD_NAMES = []

    def setUp(self):
        self.shape = Shape("3x4x5")
        self.l0 = cb.linear_cube(self.shape, start=0.5, increment=1.5)
        self.l1 = cb.linear_cube(self.shape, start=0.5, increment=0.5)
        self.l2 = cb.linear_cube(self.shape, start=-1.0, increment=0.5)

        self.epsilon = 1.0e-8
        e = self.epsilon
        self.c0 = np.array([0.0, 0.0, e, 1.0, 1.0 + e, 1.0], )
        self.c1 = np.array([0.0, e, 0.0, 1.0, 1.0, 1.0 + e])

    # tolerance 0.0
    @testmethod
    def not_equals_cube_t0(self):
        cube = cb.not_equals_cube(self.l0, self.l1, tolerance=0.0)
        self.assertFalse(cube[0, 0, 0])
        self.assertEqual(cube.sum(), self.shape.count() - 1)

    @testmethod
    def equals_cube_t0(self):
        cube = cb.equals_cube(self.l0, self.l1, tolerance=0.0)
        self.assertTrue(cube[0, 0, 0])
        self.assertEqual(cube.sum(), 1)

    @testmethod
    def not_equals_num_t0(self):
        num = cb.not_equals_num(self.l0, self.l1, tolerance=0.0)
        self.assertEqual(num, self.shape.count() - 1)

    @testmethod
    def equals_num_t0(self):
        num = cb.equals_num(self.l0, self.l1, tolerance=0.0)
        self.assertEqual(num, 1)

    @testmethod
    def not_equals_t0(self):
        self.assertTrue(cb.not_equals(self.l0, self.l1, tolerance=0.0))

    @testmethod
    def equals_t0(self):
        self.assertFalse(cb.equals(self.l0, self.l1, tolerance=0.0))

    # tolerance 2.0
    @testmethod
    def not_equals_cube_t2(self):
        cube = cb.not_equals_cube(self.l0, self.l1, tolerance=2.0)
        self.assertFalse(cube[0, 0, 0])
        self.assertFalse(cube[0, 0, 1])
        self.assertFalse(cube[0, 0, 2])
        self.assertEqual(cube.sum(), self.shape.count() - 3)

    @testmethod
    def equals_cube_t2(self):
        cube = cb.equals_cube(self.l0, self.l1, tolerance=2.0)
        self.assertTrue(cube[0, 0, 0])
        self.assertTrue(cube[0, 0, 1])
        self.assertTrue(cube[0, 0, 2])
        self.assertEqual(cube.sum(), 3)

    @testmethod
    def not_equals_num_t2(self):
        num = cb.not_equals_num(self.l0, self.l1, tolerance=2.0)
        self.assertEqual(num, self.shape.count() - 3)

    @testmethod
    def equals_num_t2(self):
        num = cb.equals_num(self.l0, self.l1, tolerance=2.0)
        self.assertEqual(num, 3)

    @testmethod
    def not_equals_t2(self):
        self.assertTrue(cb.not_equals(self.l0, self.l1, tolerance=2.0))

    @testmethod
    def equals_t2(self):
        self.assertFalse(cb.equals(self.l0, self.l1, tolerance=2.0))

    # tolerance 10000.0
    @testmethod
    def not_equals_t10000(self):
        self.assertFalse(cb.not_equals(self.l0, self.l1, tolerance=10000.0))

    @testmethod
    def equals_t10000(self):
        self.assertTrue(cb.equals(self.l0, self.l1, tolerance=10000.0))

    # threshold
    @testmethod
    def threshold_cube_3(self):
        cube = cb.threshold_cube(self.l0, 3.0, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # 0.5
        self.assertEqual(cube[0, 0, 1], -9.0)  # 2.0
        self.assertEqual(cube[0, 0, 2], self.l0[0, 0, 2])  # 3.5

    @testmethod
    def threshold_cube_1(self):
        cube = cb.threshold_cube(self.l0, 1.0, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # 0.5
        self.assertEqual(cube[0, 0, 1], self.l0[0, 0, 1])  # 2.0

    @testmethod
    def threshold_cube_0(self):
        cube = cb.threshold_cube(self.l2, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # -1.0
        self.assertEqual(cube[0, 0, 1], -9.0)  # -0.5
        self.assertEqual(cube[0, 0, 2], -9.0)  #  0.0
        self.assertEqual(cube[0, 0, 3], self.l2[0, 0, 3])  #  0.5

    # threshold
    @testmethod
    def abs_threshold_cube_0p6(self):
        cube = cb.abs_threshold_cube(self.l2, 0.6, value=-9.0)
        self.assertEqual(cube[0, 0, 0], self.l2[0, 0, 0])  # -1.0
        self.assertEqual(cube[0, 0, 1], -9.0)  # -0.5
        self.assertEqual(cube[0, 0, 2], -9.0)  #  0.0
        self.assertEqual(cube[0, 0, 3], -9.0)  #  0.5
        self.assertEqual(cube[0, 0, 4], self.l2[0, 0, 4])  #  1.0

    # abs_diff_cube
    # self.c0:
    # [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],

    # self.c1:
    # [0.0,   e, 0.0, 1.0,     1.0, 1.0 + e]

    @testmethod
    def abs_diff_cube_t0(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1)
        cube_cmp = np.array([0.0, e, e, 0.0, e, e])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_inTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1, in_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, e, e])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_outTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1, out_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_inTn6_outTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0,
                                self.c1,
                                in_threshold=1e-6,
                                out_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    # rel_diff_cube
    # self.c0:
    # [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],

    # self.c1:
    # [0.0,   e, 0.0, 1.0,     1.0, 1.0 + e]

    @testmethod
    def rel_diff_cube_t0(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1)
        self.assertEqual(cube[0], 0.0)
        self.assertGreater(cube[1], 1.0e30)
        self.assertGreater(cube[2], 0.0)
        self.assertAlmostEqual(cube[3], e / (1.0 + e))
        self.assertAlmostEqual(cube[4], e)

    @testmethod
    def rel_diff_cube_inTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1, in_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertEqual(cube[1], 0.0)
        self.assertEqual(cube[2], 0.0)
        self.assertAlmostEqual(cube[3], e / (1.0 + e))
        self.assertAlmostEqual(cube[4], e)

    @testmethod
    def rel_diff_cube_outTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1, out_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertGreater(cube[1], 1.0e30)
        self.assertGreater(cube[2], 0.0)
        self.assertEqual(cube[3], 0.0)
        self.assertEqual(cube[4], 0.0)

    @testmethod
    def rel_diff_cube_inTn6_outTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0,
                                self.c1,
                                in_threshold=1e-6,
                                out_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertEqual(cube[1], 0.0)
        self.assertEqual(cube[2], 0.0)
        self.assertEqual(cube[3], 0.0)
        self.assertEqual(cube[4], 0.0)

    @testmethod
    def rel_diff_cube_fraction(self):
        c0 = np.array([2.0])
        c1 = np.array([1.0])
        cube = cb.rel_diff_cube(c0, c1)
        self.assertAlmostEqual(cube[0], 0.5)

    @testmethod
    def rel_diff_cube_percentage(self):
        c0 = np.array([2.0])
        c1 = np.array([1.0])
        cube = cb.rel_diff_cube(c0, c1, percentage=True)
        self.assertAlmostEqual(cube[0], 50.0)

    @testmethod
    def zero_cube(self):
        #c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.zero_cube(self.c0)
        cube_cmp = np.array([True, True, False, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, v1)

    @testmethod
    def zero_cube_Tn6(self):
        #c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.zero_cube(self.c0, tolerance=1e-6)
        cube_cmp = np.array([True, True, True, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, v1)

    @testmethod
    def nonzero_cube(self):
        #c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.nonzero_cube(self.c0)
        cube_cmp = np.array([True, True, False, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, not v1)

    @testmethod
    def nonzero_cube_Tn6(self):
        #c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.nonzero_cube(self.c0, tolerance=1e-6)
        cube_cmp = np.array([True, True, True, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, not v1)

    @testmethod
    def where_indices(self):
        a = np.eye(3)
        a[1, 2] = -2.0
        a[2, 1] = 2.0
        cube = cb.where_indices(a)
        self.assertEqual(cube.shape, (5, 3))
        self.assertCubesAreEqual(cube[0], np.array([0.0, 0.0, 1.0]))
        self.assertCubesAreEqual(cube[1], np.array([1.0, 1.0, 1.0]))
        self.assertCubesAreEqual(cube[2], np.array([1.0, 2.0, -2.0]))
        self.assertCubesAreEqual(cube[3], np.array([2.0, 1.0, 2.0]))
        self.assertCubesAreEqual(cube[4], np.array([2.0, 2.0, 1.0]))

    @testmethod
    def where_indices_condition(self):
        a = np.eye(3)
        a[1, 2] = -2.0
        a[2, 1] = 2.0
        cube = cb.where_indices(a, np.abs(a) > 1.0)
        self.assertEqual(cube.shape, (2, 3))
        self.assertCubesAreEqual(cube[0], np.array([1.0, 2.0, -2.0]))
        self.assertCubesAreEqual(cube[1], np.array([2.0, 1.0, 2.0]))
Beispiel #11
0
    def impl_write_cube_out_of_core(self,
                                    kind,
                                    shape,
                                    dtype,
                                    buffer_size=None):
        dtype = utilities.get_dtype(dtype)
        shape = Shape(shape)
        filename_format_a = "a_{kind}_{{shape}}_{{dtype}}.{{format}}".format(
            kind=kind)
        filename_format_b = "b_{kind}_{{shape}}_{{dtype}}.{{format}}".format(
            kind=kind)
        filename_format_c = "c_{kind}_{{shape}}_{{dtype}}.{{format}}".format(
            kind=kind)
        if issubclass(dtype, np.integer):
            l_start = dtype(3)
            l_increment = dtype(2)
            c_value = dtype(7)
        else:
            l_start = dtype(0.5)
            l_increment = dtype(1.5)
            c_value = dtype(7.5)
        p_args = []
        n_args = {}
        if kind == 'random':
            ooc_function = cb.write_random_cube
            oc_function = cb.random_cube
        elif kind == 'linear':
            ooc_function = cb.write_linear_cube
            oc_function = cb.linear_cube
            n_args['start'] = l_start
            n_args['increment'] = l_increment
        elif kind == 'const':
            ooc_function = cb.write_const_cube
            oc_function = cb.const_cube
            n_args['value'] = c_value
        else:
            assert False, kind
        cb.set_random_seed(10)
        ooc_function(filename_format_a,
                     shape=shape,
                     dtype=dtype,
                     *p_args,
                     **n_args)
        filename_a = filename_format_a.format(
            shape=shape,
            dtype=dtype.__name__,
            format='raw',
        )
        self.assertFileExistsAndHasShape(filename_a, shape=shape, dtype=dtype)
        ooc_cube = cb.read_cube_raw(filename_format_a,
                                    shape=shape,
                                    dtype=dtype)
        self.assertTrue(ooc_cube.dtype == dtype)
        self.assertEqual(ooc_cube.size, shape.count())

        cb.set_random_seed(10)
        oc_cube = oc_function(shape=shape, dtype=dtype, *p_args, **n_args)
        self.assertCubesAreEqual(ooc_cube, oc_cube)

        if kind == 'random':
            pass
        elif kind == 'linear':
            #     0) start +    0 * increment
            #     1) start +    1 * increment
            #     2) start +    2 * increment
            #     3) start +    3 * increment
            #        ...
            # count) start + count * increment
            # ==    (start * count) + (((count - 1) * count) // 2) * increment
            count = shape.count()
            sum_count = ((count - 1) * count) // 2
            l_sum = (l_start * count) + (l_increment * sum_count)
            self.assertEqual(cb.precise_sum(ooc_cube), l_sum)
        elif kind == 'const':
            self.assertEqual(cb.precise_sum(ooc_cube), shape.count() * c_value)
        filename_b = filename_format_b.format(
            shape=shape,
            dtype=dtype.__name__,
            format='raw',
        )
        ooc_cube.tofile(filename_b)
        self.assertFilesAreEqual(filename_a, filename_b)
Beispiel #12
0
 def count(self):
     for shape_t, shape_s, count in self._shapes:
         shape_ft = Shape(shape_t)
         shape_fs = Shape(shape_s)
         self.assertEqual(shape_ft.count(), shape_fs.count())
         self.assertEqual(shape_ft.count(), count)
Beispiel #13
0
class RubikTestComparison(RubikTestCase):
    METHOD_NAMES = []

    def setUp(self):
        self.shape = Shape("3x4x5")
        self.l0 = cb.linear_cube(self.shape, start=0.5, increment=1.5)
        self.l1 = cb.linear_cube(self.shape, start=0.5, increment=0.5)
        self.l2 = cb.linear_cube(self.shape, start=-1.0, increment=0.5)

        self.epsilon = 1.0e-8
        e = self.epsilon
        self.c0 = np.array([0.0, 0.0, e, 1.0, 1.0 + e, 1.0])
        self.c1 = np.array([0.0, e, 0.0, 1.0, 1.0, 1.0 + e])

    # tolerance 0.0
    @testmethod
    def not_equals_cube_t0(self):
        cube = cb.not_equals_cube(self.l0, self.l1, tolerance=0.0)
        self.assertFalse(cube[0, 0, 0])
        self.assertEqual(cube.sum(), self.shape.count() - 1)

    @testmethod
    def equals_cube_t0(self):
        cube = cb.equals_cube(self.l0, self.l1, tolerance=0.0)
        self.assertTrue(cube[0, 0, 0])
        self.assertEqual(cube.sum(), 1)

    @testmethod
    def not_equals_num_t0(self):
        num = cb.not_equals_num(self.l0, self.l1, tolerance=0.0)
        self.assertEqual(num, self.shape.count() - 1)

    @testmethod
    def equals_num_t0(self):
        num = cb.equals_num(self.l0, self.l1, tolerance=0.0)
        self.assertEqual(num, 1)

    @testmethod
    def not_equals_t0(self):
        self.assertTrue(cb.not_equals(self.l0, self.l1, tolerance=0.0))

    @testmethod
    def equals_t0(self):
        self.assertFalse(cb.equals(self.l0, self.l1, tolerance=0.0))

    # tolerance 2.0
    @testmethod
    def not_equals_cube_t2(self):
        cube = cb.not_equals_cube(self.l0, self.l1, tolerance=2.0)
        self.assertFalse(cube[0, 0, 0])
        self.assertFalse(cube[0, 0, 1])
        self.assertFalse(cube[0, 0, 2])
        self.assertEqual(cube.sum(), self.shape.count() - 3)

    @testmethod
    def equals_cube_t2(self):
        cube = cb.equals_cube(self.l0, self.l1, tolerance=2.0)
        self.assertTrue(cube[0, 0, 0])
        self.assertTrue(cube[0, 0, 1])
        self.assertTrue(cube[0, 0, 2])
        self.assertEqual(cube.sum(), 3)

    @testmethod
    def not_equals_num_t2(self):
        num = cb.not_equals_num(self.l0, self.l1, tolerance=2.0)
        self.assertEqual(num, self.shape.count() - 3)

    @testmethod
    def equals_num_t2(self):
        num = cb.equals_num(self.l0, self.l1, tolerance=2.0)
        self.assertEqual(num, 3)

    @testmethod
    def not_equals_t2(self):
        self.assertTrue(cb.not_equals(self.l0, self.l1, tolerance=2.0))

    @testmethod
    def equals_t2(self):
        self.assertFalse(cb.equals(self.l0, self.l1, tolerance=2.0))

    # tolerance 10000.0
    @testmethod
    def not_equals_t10000(self):
        self.assertFalse(cb.not_equals(self.l0, self.l1, tolerance=10000.0))

    @testmethod
    def equals_t10000(self):
        self.assertTrue(cb.equals(self.l0, self.l1, tolerance=10000.0))

    # threshold
    @testmethod
    def threshold_cube_3(self):
        cube = cb.threshold_cube(self.l0, 3.0, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # 0.5
        self.assertEqual(cube[0, 0, 1], -9.0)  # 2.0
        self.assertEqual(cube[0, 0, 2], self.l0[0, 0, 2])  # 3.5

    @testmethod
    def threshold_cube_1(self):
        cube = cb.threshold_cube(self.l0, 1.0, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # 0.5
        self.assertEqual(cube[0, 0, 1], self.l0[0, 0, 1])  # 2.0

    @testmethod
    def threshold_cube_0(self):
        cube = cb.threshold_cube(self.l2, value=-9.0)
        self.assertEqual(cube[0, 0, 0], -9.0)  # -1.0
        self.assertEqual(cube[0, 0, 1], -9.0)  # -0.5
        self.assertEqual(cube[0, 0, 2], -9.0)  #  0.0
        self.assertEqual(cube[0, 0, 3], self.l2[0, 0, 3])  #  0.5

    # threshold
    @testmethod
    def abs_threshold_cube_0p6(self):
        cube = cb.abs_threshold_cube(self.l2, 0.6, value=-9.0)
        self.assertEqual(cube[0, 0, 0], self.l2[0, 0, 0])  # -1.0
        self.assertEqual(cube[0, 0, 1], -9.0)  # -0.5
        self.assertEqual(cube[0, 0, 2], -9.0)  #  0.0
        self.assertEqual(cube[0, 0, 3], -9.0)  #  0.5
        self.assertEqual(cube[0, 0, 4], self.l2[0, 0, 4])  #  1.0

    # abs_diff_cube
    # self.c0:
    # [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],

    # self.c1:
    # [0.0,   e, 0.0, 1.0,     1.0, 1.0 + e]

    @testmethod
    def abs_diff_cube_t0(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1)
        cube_cmp = np.array([0.0, e, e, 0.0, e, e])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_inTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1, in_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, e, e])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_outTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1, out_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    @testmethod
    def abs_diff_cube_inTn6_outTn6(self):
        e = self.epsilon
        cube = cb.abs_diff_cube(self.c0, self.c1, in_threshold=1e-6, out_threshold=1e-6)
        cube_cmp = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
        for v0, v1 in zip(self.c0, self.c1):
            self.assertAlmostEqual(v0, v1)

    # rel_diff_cube
    # self.c0:
    # [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],

    # self.c1:
    # [0.0,   e, 0.0, 1.0,     1.0, 1.0 + e]

    @testmethod
    def rel_diff_cube_t0(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1)
        self.assertEqual(cube[0], 0.0)
        self.assertGreater(cube[1], 1.0e30)
        self.assertGreater(cube[2], 0.0)
        self.assertAlmostEqual(cube[3], e / (1.0 + e))
        self.assertAlmostEqual(cube[4], e)

    @testmethod
    def rel_diff_cube_inTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1, in_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertEqual(cube[1], 0.0)
        self.assertEqual(cube[2], 0.0)
        self.assertAlmostEqual(cube[3], e / (1.0 + e))
        self.assertAlmostEqual(cube[4], e)

    @testmethod
    def rel_diff_cube_outTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1, out_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertGreater(cube[1], 1.0e30)
        self.assertGreater(cube[2], 0.0)
        self.assertEqual(cube[3], 0.0)
        self.assertEqual(cube[4], 0.0)

    @testmethod
    def rel_diff_cube_inTn6_outTn6(self):
        e = self.epsilon
        cube = cb.rel_diff_cube(self.c0, self.c1, in_threshold=1e-6, out_threshold=1e-6)
        self.assertEqual(cube[0], 0.0)
        self.assertEqual(cube[1], 0.0)
        self.assertEqual(cube[2], 0.0)
        self.assertEqual(cube[3], 0.0)
        self.assertEqual(cube[4], 0.0)

    @testmethod
    def rel_diff_cube_fraction(self):
        c0 = np.array([2.0])
        c1 = np.array([1.0])
        cube = cb.rel_diff_cube(c0, c1)
        self.assertAlmostEqual(cube[0], 0.5)

    @testmethod
    def rel_diff_cube_percentage(self):
        c0 = np.array([2.0])
        c1 = np.array([1.0])
        cube = cb.rel_diff_cube(c0, c1, percentage=True)
        self.assertAlmostEqual(cube[0], 50.0)

    @testmethod
    def zero_cube(self):
        # c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.zero_cube(self.c0)
        cube_cmp = np.array([True, True, False, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, v1)

    @testmethod
    def zero_cube_Tn6(self):
        # c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.zero_cube(self.c0, tolerance=1e-6)
        cube_cmp = np.array([True, True, True, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, v1)

    @testmethod
    def nonzero_cube(self):
        # c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.nonzero_cube(self.c0)
        cube_cmp = np.array([True, True, False, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, not v1)

    @testmethod
    def nonzero_cube_Tn6(self):
        # c0: [0.0, 0.0,   e, 1.0, 1.0 + e,     1.0],
        cube = cb.nonzero_cube(self.c0, tolerance=1e-6)
        cube_cmp = np.array([True, True, True, False, False, False])
        for v0, v1 in zip(cube, cube_cmp):
            self.assertEqual(v0, not v1)

    @testmethod
    def where_indices(self):
        a = np.eye(3)
        a[1, 2] = -2.0
        a[2, 1] = 2.0
        cube = cb.where_indices(a)
        self.assertEqual(cube.shape, (5, 3))
        self.assertCubesAreEqual(cube[0], np.array([0.0, 0.0, 1.0]))
        self.assertCubesAreEqual(cube[1], np.array([1.0, 1.0, 1.0]))
        self.assertCubesAreEqual(cube[2], np.array([1.0, 2.0, -2.0]))
        self.assertCubesAreEqual(cube[3], np.array([2.0, 1.0, 2.0]))
        self.assertCubesAreEqual(cube[4], np.array([2.0, 2.0, 1.0]))

    @testmethod
    def where_indices_condition(self):
        a = np.eye(3)
        a[1, 2] = -2.0
        a[2, 1] = 2.0
        cube = cb.where_indices(a, np.abs(a) > 1.0)
        self.assertEqual(cube.shape, (2, 3))
        self.assertCubesAreEqual(cube[0], np.array([1.0, 2.0, -2.0]))
        self.assertCubesAreEqual(cube[1], np.array([2.0, 1.0, 2.0]))