======== #1 ========

math.sin(num):map:[deg] -> math.cos(num)
math.cos(num):map:[deg] -> -math.sin(num)
math.tan(num):map:[deg] -> 1 / math.cos(num) ** 2
math.exp(num):map -> math.exp(num)
math.log(num):map -> 1 / num
math.log10(num):map -> 1 / (num * math.log(10))
math.asin(num):map:[deg] -> 1 / math.sqrt(1 - num ** 2)
math.acos(num):map:[deg] -> (-1) / math.sqrt(1 - num ** 2)
math.atan(num):map:[deg] -> 1 / (1 + num ** 2)
math.sqrt(num):map -> 1 / (2 * math.sqrt(num))
{ x ** 2 } -> 2 * x
{ x ** 3 } -> 3 * x ** 2
{ x ** 4 } -> 4 * x ** 3
{ a ** x } -> math.log(a) * a ** x
{ math.sin(x) } -> math.cos(x)
{ math.cos(x) } -> -math.sin(x)
{ math.tan(x) } -> 1 / math.cos(x) ** 2
{ math.exp(x) } -> math.exp(x)
{ math.log(x) } -> 1 / x
{ math.log10(x) } -> 1 / (x * math.log(10))
{ math.asin(x) } -> 1 / math.sqrt(1 - x ** 2)
{ math.acos(x) } -> (-1) / math.sqrt(1 - x ** 2)
{ math.atan(x) } -> 1 / (1 + x ** 2)
{ math.sqrt(x) } -> 1 / (2 * math.sqrt(x))
{ math.sin(x) ** 2 } -> math.cos(x) * 2 * math.sin(x)
{ math.sin(x ** 2) } -> math.cos(x ** 2) * (2 * x)
{ math.log(math.sin(x)) } -> math.cos(x) / math.sin(x)
{ x ** 2 * math.sin(x) } -> 2 * x * math.sin(x) + x ** 2 * math.cos(x)
{ math.sin(x) / x ** 2 } -> (math.cos(x) * x ** 2 - math.sin(x) * (2 * x)) / x ** 4
{ 3 ** (2 * x) } -> 2 * math.log(3) * 3 ** (2 * x)
{ math.log(x ** 2 + 1) } -> 2 * x / (x ** 2 + 1)
{ (x - 1) ** 2 * (x - 2) ** 3 / (x - 5) ** 2 } -> ((2 * (x - 1) * (x - 2) ** 3 + (x - 1) ** 2 * (3 * (x - 2) ** 2)) * (x - 5) ** 2 - (x - 1) ** 2 * (x - 2) ** 3 * (2 * (x - 5))) / (x - 5) ** 4
{ math.sin(2 * x - 3) } -> math.cos(2 * x - 3) * 2
{ math.cos(x) ** 2 } -> -(math.sin(x) * 2 * math.cos(x))
{ (2 * x - 1) ** 3 } -> 6 * (2 * x - 1) ** 2
{ math.sqrt(x ** 2 + 2 * x + 3) } -> (2 * x + 2) / (2 * math.sqrt(x ** 2 + 2 * x + 3))
{ 1 / x } -> (-1) / x ** 2
{ math.exp(x) + math.exp(-x) } -> math.exp(x) - math.exp(-x)
{ math.exp(x) - math.exp(-x) } -> math.exp(x) + math.exp(-x)
{ (math.sin(x + 2) + x + 2) * (math.sin(x + 3) + x + 3) } -> (math.cos(x + 2) + 1) * (math.sin(x + 3) + x + 3) + (math.sin(x + 2) + x + 2) * (math.cos(x + 3) + 1)
{ math.sin(math.sin(x ** 2 / 3)) } -> math.cos(math.sin(x ** 2 / 3)) * (math.cos(x ** 2 / 3) * (2 * x * 3 / 9))
{ (2 * x - 1) / x ** 2 } -> (2 * x ** 2 - (2 * x - 1) * (2 * x)) / x ** 4

======== #2 ========

(3 * (x ** 2 + x * 3) ** 2 + 2 * (x ** 2 + x * 3) + 1) * (2 * x + 3)
