Numerics
Numerical Analysis toolkit centred around PDEs, for demonstration and understanding purposes not production
Use procedure:

Initialise a new instance of the PDE class, all calculations and variables will be managed by this object
Inputs:

dt  timestep

tlim  time to solve up to

dx  x spacing, by default a uniform grid is used

xlims  np.array([lower, upper]) bounds of x domain

instance.setSystem: Set the governing equation of the PDE in the form dU/dt = lambda U,x,t: some function

instance.setInitConds: Set the initial conditions of U in the form lambda x: some function

instance.solve: Integrate the system to time tlim using the input integrator (ie RK4, an explicit 4th order Runge Kutta method)
Note on Chebyshev pseudospectral differentiator:
 To use this differentiator, the local x coords must be set to the GaussLobattoChebyshev collocation points using instance.chebyx(N) where N is the number of points
Known issues:
 6th order error finite difference matrices can behave badly near domain edges
 fft derivative can cause steady state errors as it implicitly assumes periodic behaviour outside of domain
 Chebyshev differentiator is unstable in current iteration, particularly for higher orders and at the domain boundary, most likely due to Gibb’s phenomenon
 More of a use detail, but fft and Chebyshev differentiators rely on compact support. If in doubt, use the finite differencing differentiator
Future implementations:
 Support for boundary conditions
 More integration schemes
 Potentially support for multiple spatial dimensions