Esempio n. 1
0
    def test_outer_multiply(self):
        # Scalar - scalar
        scalars = tf.constant(2.0), tf.constant(3.0)
        vectors = tf.constant([1.0, 2.0]), tf.constant([3.0, 5.0, 1.0])
        matrices = (tf.constant([[1., 2],
                                 [2., 3]]), tf.constant([[1., 2, 3], [4, 5,
                                                                      6]]))
        result1 = self.evaluate(bm_utils.outer_multiply(
            scalars[0], scalars[1]))
        self.assertEqual(result1, 6)
        # Scalar - vector
        result2 = self.evaluate(bm_utils.outer_multiply(
            scalars[0], vectors[1]))
        np.testing.assert_allclose(result2, [6.0, 10.0, 2.0])
        # Vector - scalar
        result3 = self.evaluate(bm_utils.outer_multiply(
            vectors[0], scalars[1]))
        np.testing.assert_allclose(result3, [3.0, 6.0])

        # Vector - vector
        result4 = self.evaluate(bm_utils.outer_multiply(
            vectors[0], vectors[1]))
        np.testing.assert_allclose(result4,
                                   [[3.0, 5.0, 1.0], [6.0, 10.0, 2.0]])

        # Vector - vector non commutative
        result5 = self.evaluate(bm_utils.outer_multiply(
            vectors[1], vectors[0]))
        np.testing.assert_allclose(result5,
                                   [[3.0, 6.0], [5.0, 10.0], [1.0, 2.0]])

        # Vector - matrix
        result6 = self.evaluate(
            bm_utils.outer_multiply(vectors[0], matrices[0]))
        np.testing.assert_allclose(result6,
                                   [[[1., 2], [2, 3]], [[2, 4], [4, 6]]])

        # Matrix - matrix
        result7 = self.evaluate(
            bm_utils.outer_multiply(matrices[1], matrices[0]))
        np.testing.assert_allclose(
            result7,
            [[[[1., 2], [2., 3]], [[2., 4], [4., 6]], [[3., 6], [6., 9]]],
             [[[4., 8], [8., 12]], [[5., 10], [10., 15]], [[6., 12], [12., 18]]
              ]])
Esempio n. 2
0
    def test_construct_vol_covar_and_vol_callables(self):
        dtype = np.float64
        vol_matrix = np.array([[1.0, 0.21, -0.33], [0.61, 1.5, 1.77],
                               [-0.3, 1.19, -0.55]]).astype(dtype)
        covar_matrix = np.matmul(vol_matrix, vol_matrix.transpose())
        vol_fn = lambda time: bm_utils.outer_multiply(time, vol_matrix)

        def tc_fn(t1, t2):
            return bm_utils.outer_multiply((t2**2 - t1**2) / 2, covar_matrix)

        times = np.array([[0.12, 0.44], [0.48, 1.698]]).astype(dtype)
        actual_vol_fn, actual_tc_fn = bm_utils.construct_vol_data(
            vol_fn, tc_fn, 3, dtype)
        actual_vols = self.evaluate(actual_vol_fn(times))
        np.testing.assert_array_equal(actual_vols.shape, [2, 2, 3, 3])
        np.testing.assert_allclose(actual_vols, self.evaluate(vol_fn(times)))
        times2 = times + np.array([[0.12, 0.34], [0.56, 0.78]]).astype(dtype)
        actual_tc = self.evaluate(actual_tc_fn(times, times2))
        np.testing.assert_array_equal(actual_tc.shape, [2, 2, 3, 3])
        np.testing.assert_allclose(actual_tc,
                                   self.evaluate(actual_tc_fn(times, times2)))
Esempio n. 3
0
 def tc_fn(t1, t2):
     return bm_utils.outer_multiply((t2 - t1), covar_matrix)
Esempio n. 4
0
 def covar_fn(t1, t2):
     return bm_utils.outer_multiply(t2 - t1, covar_matrix)
Esempio n. 5
0
 def fn(t1, t2):
     return bm_utils.outer_multiply(t2 - t1,
                                    v * tf.ones([2], dtype=dtype))