'''
Module for transforming model equations into "abstract code" that can be then be
further translated into executable code by the `codegen` module.
'''  
from .base import *
from .exact import *
from .explicit import *
from .exponential_euler import *
from .GSL import *

StateUpdateMethod.register('linear', linear)
StateUpdateMethod.register('exact', exact)
StateUpdateMethod.register('independent', independent)
StateUpdateMethod.register('exponential_euler', exponential_euler)
StateUpdateMethod.register('euler', euler)
StateUpdateMethod.register('rk2', rk2)
StateUpdateMethod.register('rk4', rk4)
StateUpdateMethod.register('milstein', milstein)
StateUpdateMethod.register('heun', heun)
StateUpdateMethod.register('gsl_rk2', gsl_rk2)
StateUpdateMethod.register('gsl_rk4', gsl_rk4)
StateUpdateMethod.register('gsl_rkf45', gsl_rkf45)
StateUpdateMethod.register('gsl_rkck', gsl_rkck)
StateUpdateMethod.register('gsl_rk8pd', gsl_rk8pd)
# as we consider rkf45 the default we also register it under 'gsl'
StateUpdateMethod.register('gsl', gsl_rkf45)

