def test_composition_log_with_base5_and_base2_scalar(self): var = Variable(4, 6) equation = var.log(5).log(2) expected_value = np.log(np.log(4) / np.log(5)) / np.log(2) expected_derivative = (6 / (4 * np.log(5))) * (1 / ( (np.log(4) / np.log(5)) * np.log(2))) self.assertAlmostEqual(expected_value, equation.value) self.assertAlmostEqual(expected_derivative, equation.derivative)
def test_composition_log_with_base5_and_base2_vector(self): var = Variable(4, np.array([1, 5])) equation = var.log(5).log(2) expected_value = np.log(np.log(4) / np.log(5)) / np.log(2) expected_derivative = np.array([ (1 / (4 * np.log(5))) * (1 / ((np.log(4) / np.log(5)) * np.log(2))), (5 / (4 * np.log(5))) * (1 / ((np.log(4) / np.log(5)) * np.log(2))) ]) self.assertAlmostEqual(expected_value, equation.value) self.assertAlmostEqual(expected_derivative[0], equation.derivative[0]) self.assertAlmostEqual(expected_derivative[1], equation.derivative[1])
def test_log_with_base2_and_base5_multivariate(self): x = Variable(2, np.array([1, 0])) y = Variable(3, np.array([0, 1])) f = (x * y).log(2) + y.log(5) x = 2 y = 3 self.assertAlmostEqual( f.value, np.log(x * y) / np.log(2) + np.log(y) / np.log(5)) expected_derx = y / (x * y * np.log(2)) expected_dery = x / (x * y * np.log(2)) + 1 / (y * np.log(5)) self.assertAlmostEqual(f.derivative[0], expected_derx) self.assertAlmostEqual(f.derivative[1], expected_dery)
def test_log_with_base_5_scalar(self): var = Variable(2, 5) result = var.log(5) self.assertAlmostEqual(np.log(2) / np.log(5), result.value) self.assertAlmostEqual((1 / (2 * np.log(5))) * 5, result.derivative)
def test_log_scalar(self): var = Variable(5, 1.5) result = var.log() self.assertAlmostEqual(np.log(5), result.value) self.assertAlmostEqual((1 / 5) * 1.5, result.derivative)