Installation ============ From PyPI: .. code-block:: bash pip install phenomxpy From source: .. code-block:: bash git clone https://gitlab.com/imrphenom-dev/phenomxpy.git cd phenomxpy pip install . For GPU support, user needs to install `cupy` according to the CUDA version of their installation (e.g. 12 or 13): .. code-block:: bash pip install cupy-cuda12x pip install cupy-cuda13x The CUDA installation might need `cuda-toolkit`. Constants backend ================= Physical constants can be read from different backends: `lisaconstants`, `astropy` or `hardcoded`. To choose the backend: .. code-block:: python from phenomxpy import load_constants load_constants("astropy") or with an evironment variable at kernel initialization: .. code-block:: python import os os.environ["PHENOMXPY_CONSTANTS"] = "astropy" import phenomxpy or .. code-block:: bash PHENOMXPY_CONSTANTS=astropy python myscript.py If no backend is provided, the priority is: `lisaconstants`, `astropy`, `hardcoded`. If the packages is not installed, it will try the next one. Simple usage ============ .. code-block:: python import phenomxpy # Initialize approximant class # Available approximants are: IMRPhenomT, IMRPhenomTHM, IMRPhenomTP, IMRPhenomTPHM phen = IMRPhenomTHM(eta=..., total_mass=..., s1=...., s2=..., f_lower=..., option1=...) # Compute time domain polarizations hp, hc = phen.compute_polarizations(times) # Compute Fourier domain polarizations hpf, hcf, frequencies = phen.compute_fd_polarizations(times) # Compute individual modes (in time domain) hlms = phen.compute_hlms(times) # In the case of precessing approximants, we can compute modes in different frames hlms = phen.compute_CPmodes(times) hlms = phen.compute_Jmodes(times) hlms = phen.compute_L0modes(times) The time array ``times`` can be a custom array. If ``None``, then it computes an equispaced array with ``delta_t`` given in the class initialization. If ``total_mass`` is not provided it assumes input arguments in NR units (i.e. ``f_lower``, ``delta_t`` in mass units) and returns the waveform in NR units. If ``total_mass`` and ``distance`` are provided, it returns the waveform in SI units. .. note:: Fourier domain function only supports SI units.