Source code for rubix.galaxy.input_handler.factory
import logging
from typing import Optional, 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: Optional[logging.Logger] = None
) -> Union[BaseHandler, MagicMock]:
"""
Create a handler based on the config.
Args:
config (dict): Configuration for the handler.
logger (Optional[logging.Logger]): Optional logger object.
Returns:
BaseHandler: Handler based on the config, or a MagicMock for tests.
Raises:
ValueError: If the simulation type specified in the config is unsupported.
"""
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")