"""
file: 
    ftest.py
description:
    code to test whether all numbers (f(x), df_dx, df_dy) are correct
url:
    https://kyscg.github.io/2025/05/18/autodiffpython
author:
    kyscg
"""

import math

def f(x, y):
    return math.sin(x * y) * (x + 2 * y) ** 2

def df_dx(x, y):
    a = 2 * (x + 2 * y) * math.sin(x * y)
    b = y * math.cos(x * y) * (x + 2 * y) ** 2
    return a + b

def df_dy(x, y):
    a = 4 * (x + 2 * y) * math.sin(x * y)
    b = x * math.cos(x * y) * (x + 2 * y) ** 2
    return a + b

x_val = 2.0
y_val = 3.0
print(f'f({x_val}, {y_val}) = {f(x_val, y_val)}')
print(f'df/dx({x_val}, {y_val}) = {df_dx(x_val, y_val)}')
print(f'df/dy({x_val}, {y_val}) = {df_dy(x_val, y_val)}')