Source code for fluidsim.magic

"""IPython / Jupyter magic commands
===================================

.. autoclass:: FluidsimMagics
   :members:
   :private-members:

"""

from fluiddyn.io.query import query_yes_no
from fluidsim_core.magic import MagicsCore
from IPython.core.magic import line_magic, magics_class
from IPython.core.magic_arguments import (
    argument,
    magic_arguments,
    parse_argstring,
)

from fluidsim import load_sim_for_plot, load_state_phys_file


[docs] @magics_class class FluidsimMagics(MagicsCore): """Magic commands can be loaded in IPython or Jupyter as >>> %load_ext fluidsim.magic Examples -------- - Magic command %fluidsim %fluidsim creates the variables `params` and `Simul` for a particular solver. Create default parameters for a solver: >>> %fluidsim ns2d If a variable `params` already exists, you will be ask if you really want to overwrite it. To skip this question: >>> %fluidsim ns2d -f List all available solvers and initialized simulation: >>> %fluidsim - Magic command %fluidsim_load %fluidsim_load creates the variables `sim`, `params` and `Simul` from an existing simulation. Load existing simulation excluding state_phys files: >>> %fluidsim_load Load existing simulation all options: force overwrite, with state_phys files, merging parameters: >>> %fluidsim_load -f -s -t -m - Other fluidsim magic commands Quick reference (print this help message): >>> %fluidsim_help Delete the objects `sim` and `params`: >>> %fluidsim_reset """ entrypoint_grp = "fluidsim.solvers"
[docs] @magic_arguments() @argument("-f", "--force-overwrite", action="store_true") @argument("-s", "--state-phys", action="store_true") @argument("-t", "--t-approx", type=float, default=None) @argument("-m", "--merge-missing-params", action="store_true") @argument( "directory", nargs="?", help="Optional: absolute path/relative path/name of directory", default=None, ) @line_magic def fluidsim_load(self, line): args = parse_argstring(self.fluidsim_load, line) if not args.force_overwrite and (self.is_defined("sim")): if not query_yes_no( "The variables `sim` is defined in your user namespace. " "Do you really want to overwrite it?" ): return if args.state_phys: sim = load_state_phys_file( name_dir=args.directory, t_approx=args.t_approx, merge_missing_params=args.merge_missing_params, ) else: sim = load_sim_for_plot( name_dir=args.directory, merge_missing_params=args.merge_missing_params, ) user_ns = self.shell.user_ns user_ns["Simul"] = type(sim) user_ns["params"] = sim.params user_ns["sim"] = sim
def load_ipython_extension(ipython): """Load the extension in IPython.""" fluidsim_magics = FluidsimMagics(ipython) ipython.register_magics(fluidsim_magics)