Hi Jona,
So the reason why you see different time values printed than what the elements of your time vector are, is that the ODE solvers (scipy.integrate.odeint in this case) have a variable stepsize. They adapt dynamically to how the state variable in your ODE system change and take smaller steps if there’s a lot of curvature, or larger steps when things are boring. In the end you get an interpolation back.
The TensorVariable is because we’re passing a symbolic t to get analytical gradients from your ODE function: pymc/utils.py at 906fcdc7a944972c5df1021a705503f7bf42b036 · pymc-devs/pymc · GitHub
With time-varying external input, do you mean a parameter (elements of theta) that changes its value over time? How hard that’s going to be depends on the nature of this change: Is it a step function, or smooth? Does it depend on the state variables or just the time?