Source code for rubix.galaxy.input_handler.factory
from typing import Union
from unittest.mock import MagicMock
from beartype import beartype as typechecker
from jaxtyping import Array, Float, jaxtyped
from .base import BaseHandler
from .illustris import IllustrisHandler
from .pynbody import PynbodyHandler
__all__ = ["IllustrisHandler", "BaseHandler"]
[docs]
@jaxtyped(typechecker=typechecker)
def get_input_handler(config: dict, logger=None) -> Union[BaseHandler, MagicMock]:
"""
Creates a handler based on the config
Args:
config (dict): Configuration for the handler
logger (Logger): Logger object
Returns:
BaseHandler based on the config
"""
if config["simulation"]["name"] == "IllustrisTNG":
return IllustrisHandler(**config["simulation"]["args"], logger=logger)
elif config["simulation"]["name"] == "NIHAO":
logger.info("Using PynbodyHandler to load a NIHAO galaxy")
simulation_args = config["simulation"]["args"]
if "galaxy" in config and "dist_z" in config["galaxy"]:
simulation_args["dist_z"] = config["galaxy"]["dist_z"]
return PynbodyHandler(**simulation_args, logger=logger)
else:
raise ValueError(f"Simulation {config['simulation']} is not supported")