How to calculate Animation frames without render?
You can set the current frame to the start of the simulation, then press alt+A to let Blender play through the simulation. That should also cache the animation, without having to render everything.

In Python, you can use bpy.ops.screen.animation_play() to start playback. Append a function to bpy.app.handlers.frame_change_post that checks the current frame number, and calls bpy.ops.screen.animation_play() again to stop playback and remove itself from frame_change_post.