Compositional Methods in GeometricIntegrators.jl

How can I use a compositional method, based on the implicit midpoint rule, in GeometricIntegrators.jl?

My idea of a compositional method is based on Chapter V.3 Symmetric Composition Methods of Hairer et al.'s Geometric Numerical Integration (Equations (3.1) and (3.2)). In the case of a symmetric compositional method, a high-order method is created using a lower-order method by replacing one timestep of the lower-order method in several stages, where intermediate timesteps are taken forward and backward in time.

Here is what the documentation for Geometric Integrators has to say about programming compositional methods:

Composition has one main constructor:

Composition(methods, splitting)

The first argument is tuple of methods that are used to solve each substep, and the second argument is a splitting method. A second convenience constructor uses the ExactSolution for all steps:

Composition(splitting) = Composition(ExactSolution(), splitting)

This constructs a composition method that is equivalent to a plain Splitting.

I’m confused here because I don’t see how compositional methods are related to splitting methods.

If “the first argument is a tuple of methods that are used to solve each substep”, does that mean that to use the implicit midpoint rule with the triple jump, I would have to supply methods=(ImplicitMidpoint(), ImplicitMidpoint(), ImplicitMidpoint())? That seems strange to me, since I am not aware of a use case for using different methods at each substep.

And if methods gives the methods used at each substep, then is splitting supposed to give the length/duration of each substep? I don’t have prior experience with splitting methods, but the documentation’s description of them says they are used for solving ODEs of the form dx/dt = v1(t,x) + … + vr(t,x). Although a composition method could be seen as “splitting” the time integration into substeps, that doesn’t seem to be what is meant by “splitting method” here. And if that is the case, then between method and splitting, which one is supposed to contain the information about the size of the substeps?

There are no examples in the documentation, so I would be grateful if someone could give a simple example of code that solves an ODE dx/dt = f(t,x) using a composition of the implicit midpoint rule.