<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Mpmath
Mpmath is a Python library for arbitrary-precision floating-point arithmetic. For general information about mpmath, see the project website http
Step1:  Arbitrary-precision floating-point arithmetic
TODO
Plotting
See http
Step2:  Complex function plots
By default, the complex argument (phase) is shown as color (hue) and the magnitude is show as brightness.
You can also supply a custom color function (color). This function should take a complex number as input and return an RGB 3-tuple containing floats in the range 0.0-1.0.
Step3:  Use the points argument to increase the resolution.
Step4:  3D surface plots
<ASSISTANT_TASK:>
Python Code:
# import python packages here...
import mpmath
Explanation: Mpmath
Mpmath is a Python library for arbitrary-precision floating-point arithmetic. For general information about mpmath, see the project website http://mpmath.org
TODO
* http://mpmath.org/
* http://mpmath.org/doc/current/
End of explanation
mpmath.plot([mpmath.cos, mpmath.sin], [-4, 4])
mpmath.plot(lambda x: mpmath.exp(x) * mpmath.li(x), [1, 4])
Explanation: Arbitrary-precision floating-point arithmetic
TODO
Plotting
See http://mpmath.org/doc/current/plotting.html
Function curve plots
End of explanation
mpmath.cplot(lambda z: z, [-10, 10], [-10, 10])
Explanation: Complex function plots
By default, the complex argument (phase) is shown as color (hue) and the magnitude is show as brightness.
You can also supply a custom color function (color). This function should take a complex number as input and return an RGB 3-tuple containing floats in the range 0.0-1.0.
End of explanation
mpmath.cplot(lambda z: z, [-10, 10], [-10, 10], points=100000)
mpmath.cplot(mpmath.gamma, [-10, 10], [-10, 10], points=100000)
f = lambda z: (z * 2 - 1)*(z + 2 - mpmath.j)**2 / (z * 2 + 2 - 2 * mpmath.j)
mpmath.cplot(f, [-5, 5], [-3, 3], points=100000)
Explanation: Use the points argument to increase the resolution.
End of explanation
f = lambda x, y: mpmath.sin(x+y) * mpmath.cos(y)
mpmath.splot(f) #, [-mpmath.pi, mpmath.pi], [-mpmath.pi, mpmath.pi])  
r, R = 1, 2.5
f = lambda u, v: [r*mpmath.cos(u), (R+r*mpmath.sin(u))*mpmath.cos(v), (R+r*mpmath.sin(u))*mpmath.sin(v)]
mpmath.splot(f) #, [0, 2*mpmath.pi], [0, 2*mpmath.pi])
Explanation: 3D surface plots
End of explanation
<END_TASK>