def test_sin_val():
    x = AutoDiff(4, "x")
    y = AutoDiff(5, "y")
    f = ef.sin(x * y)
    assert np.isclose(f.val, 0.9129452507276277)
def test_sin_illegal_arg():
    with pytest.raises(AttributeError):
        assert ef.sin("thirty")
def test_numeric_value():
    assert np.isclose(ef.sin(4), np.sin(4))
def test_sin_no_sec_derivative_():
    x = AutoDiff(4, "x")
    with pytest.raises(AttributeError):
        assert ef.sin(x).der2['x']
def test_sin_numeric_input_no_deriv():
    with pytest.raises(AttributeError):
        assert ef.sin(4).der
def test_sin_deriv2_xy():
    x = AutoDiff(4, "x", H=True)
    y = AutoDiff(5, "y", H=True)
    f = ef.sin(x * y)
    assert np.isclose(f.der2['xy'], -17.85082295273916)
def test_sin_deriv2_y():
    x = AutoDiff(4, "x", H=True)
    y = AutoDiff(5, "y", H=True)
    f = ef.sin(x * y)
    assert np.isclose(f.der2['y'], -14.607124011642043)
def test_sin_deriv2_x():
    x = AutoDiff(4, "x", H=True)
    y = AutoDiff(5, "y", H=True)
    f = ef.sin(x * y)
    assert np.isclose(f.der2['x'], -22.82363126819069)
def test_sin_deriv_y():
    x = AutoDiff(4, "x")
    y = AutoDiff(5, "y")
    f = ef.sin(x * y)
    assert np.isclose(f.der['y'], 1.6323282472535678)
def test_sin_deriv_x():
    x = AutoDiff(4, "x")
    y = AutoDiff(5, "y")
    f = ef.sin(x * y)
    assert np.isclose(f.der['x'], 2.0404103090669596)