pyFSPS#

Showcase how to get an SSP template using pyFSPS#

This notebook will show you how you get an SSP template using the python binding (pyFSPS) to Charly Conroy’s FSPS package. For more information about pyFSPS see https://dfm.io/python-fsps/current/ for more information about FSPS see https://github.com/cconroy20/fsps

NOTE: In order to make this notebook work please first install pyFSPS following the installation guide here: https://dfm.io/python-fsps/current/installation/

In particular, you will need to set the SPS_HOME environment variable.

Since switching between different supported stellar isochrone and spectral libraries in pyFSPS requires (re-) installing pyFSPS with specific compiler flags we do not add a dependence onto pyFSPS and leave the installation of it to the user. See here https://dfm.io/python-fsps/current/installation/ for information on the install process.

Currently Rubix supports to run pyFSPS to create an SSP template from scratch – use the config option source=rerun_from_scratch. But note, this is mainly a wrapper around the pyFSPS StellarPopulation() and get_spectrum() functions. If you use the get_ssp_template() function from Rubix to create the ssp template via pyFSPS it will only pass default parameters (add_neb_emission=True, imf_type=2, zmet=None, tage=0.0, peraa=True) over to pyFSPS.

While its possible to pass all relevant function parameters to pyFSPS through rubix.spectra.ssp.fsps_grid.retrieve_ssp_data_from_fsps() or .write_fsps_data_to_disk() we recommend to run pyFSPS separate from Rubix if you want full control over the process.

Since pyFSPS runs can take quite some time, this will silently save the ssp template to a hdf5 file with filename specified under the config entry filename. Additionally we support to load pre-existing templates created via FSPS using the config option source=load_from_file via our standard HDF5SSPGrid class.

# NBVAL_SKIP
from rubix.spectra.ssp.factory import get_ssp_template
ssp = get_ssp_template("FSPS")
ssp
2025-11-10 17:14:09,206 - rubix - INFO - 
   ___  __  _____  _____  __
  / _ \/ / / / _ )/  _/ |/_/
 / , _/ /_/ / _  |/ /_>  <
/_/|_|\____/____/___/_/|_|


2025-11-10 17:14:09,206 - rubix - INFO - Rubix version: 0.0.post626+g42b4b7505.d20251110
2025-11-10 17:14:09,206 - rubix - INFO - JAX version: 0.7.2
2025-11-10 17:14:09,275 - rubix - INFO - Running on [CpuDevice(id=0)] devices
2025-11-10 17:14:09,276 - rubix - WARNING - python-fsps is not installed. Please install it to use this function. Install using pip install fsps and check the installation page: https://dfm.io/python-fsps/current/installation/ for more details. Especially, make sure to set all necessary environment variables.
HDF5SSPGrid(age=Array([9.9999997e-05, 1.1220184e-04, 1.2589252e-04, 1.4125378e-04,
       1.5848933e-04, 1.7782794e-04, 1.9952621e-04, 2.2387206e-04,
       2.5118870e-04, 2.8183832e-04, 3.1622776e-04, 3.5481335e-04,
       3.9810708e-04, 4.4668370e-04, 5.0118729e-04, 5.6234130e-04,
       6.3095725e-04, 7.0794561e-04, 7.9432840e-04, 8.9125102e-04,
       1.0000000e-03, 1.1220183e-03, 1.2589252e-03, 1.4125379e-03,
       1.5848933e-03, 1.7782794e-03, 1.9952620e-03, 2.2387207e-03,
       2.5118869e-03, 2.8183833e-03, 3.1622776e-03, 3.5481334e-03,
       3.9810711e-03, 4.4668368e-03, 5.0118729e-03, 5.6234132e-03,
       6.3095726e-03, 7.0794565e-03, 7.9432838e-03, 8.9125102e-03,
       9.9999998e-03, 1.1220183e-02, 1.2589254e-02, 1.4125375e-02,
       1.5848933e-02, 1.7782794e-02, 1.9952621e-02, 2.2387212e-02,
       2.5118863e-02, 2.8183833e-02, 3.1622775e-02, 3.5481334e-02,
       3.9810721e-02, 4.4668358e-02, 5.0118729e-02, 5.6234132e-02,
       6.3095726e-02, 7.0794582e-02, 7.9432823e-02, 8.9125104e-02,
       1.0000000e-01, 1.1220185e-01, 1.2589255e-01, 1.4125374e-01,
       1.5848932e-01, 1.7782794e-01, 1.9952624e-01, 2.2387213e-01,
       2.5118864e-01, 2.8183830e-01, 3.1622776e-01, 3.5481340e-01,
       3.9810717e-01, 4.4668359e-01, 5.0118721e-01, 5.6234133e-01,
       6.3095737e-01, 7.0794576e-01, 7.9432821e-01, 8.9125091e-01,
       1.0000000e+00, 1.1220185e+00, 1.2589254e+00, 1.4125376e+00,
       1.5848932e+00, 1.7782794e+00, 1.9952624e+00, 2.2387211e+00,
       2.5118864e+00, 2.8183827e+00, 3.1622777e+00, 3.5481341e+00,
       3.9810719e+00, 4.4668355e+00, 5.0118723e+00, 5.6234131e+00,
       6.3095737e+00, 7.0794582e+00, 7.9432821e+00, 8.9125090e+00,
       1.0000000e+01, 1.1220183e+01, 1.2589254e+01, 1.4125375e+01,
       1.5848933e+01, 1.7782795e+01, 1.9952621e+01], dtype=float32), metallicity=Array([4.4904351e-05, 1.4200003e-04, 2.5251572e-04, 4.4904352e-04,
       7.9852482e-04, 1.4200003e-03, 2.5251573e-03, 4.4904351e-03,
       7.9852482e-03, 1.4199999e-02, 2.5251566e-02, 4.4904340e-02],      dtype=float32), wavelength=Array([8.950e+01, 9.250e+01, 9.450e+01, ..., 9.817e+07, 9.908e+07,
       1.000e+08], dtype=float32), flux=Array([[[3.69801944e-25, 1.71711785e-25, 1.01008924e-25, ...,
         4.20808249e-11, 4.13591869e-11, 4.06485991e-11],
        [2.95627621e-25, 1.37270093e-25, 8.07487082e-26, ...,
         3.36403162e-11, 3.30634235e-11, 3.24953640e-11],
        [3.62052076e-25, 1.68113235e-25, 9.88920961e-26, ...,
         4.11989401e-11, 4.04924289e-11, 3.97967319e-11],
        ...,
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.87085782e-21, 6.62186151e-21, 6.38153848e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.64786358e-21, 6.40694763e-21, 6.17442546e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.16116230e-21, 5.93788412e-21, 5.72238539e-21]],

       [[2.47674418e-25, 1.15003767e-25, 6.76506097e-26, ...,
         2.81835822e-11, 2.77002657e-11, 2.72243512e-11],
        [2.70331983e-25, 1.25524459e-25, 7.38393714e-26, ...,
         3.07618514e-11, 3.02343220e-11, 2.97148695e-11],
        [3.59155428e-25, 1.66768228e-25, 9.81008994e-26, ...,
         4.08693253e-11, 4.01684623e-11, 3.94783338e-11],
        ...,
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         8.89014787e-21, 8.56769041e-21, 8.25660749e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         8.48373481e-21, 8.17602604e-21, 7.87917160e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.92724666e-21, 6.67610364e-21, 6.43376153e-21]],

       [[2.81423712e-25, 1.30674723e-25, 7.68690040e-26, ...,
         3.20240119e-11, 3.14748366e-11, 3.09340713e-11],
        [2.62237481e-25, 1.21765895e-25, 7.16284100e-26, ...,
         2.98407549e-11, 2.93290184e-11, 2.88251211e-11],
        [2.73612140e-25, 1.27047540e-25, 7.47353201e-26, ...,
         3.11351084e-11, 3.06011778e-11, 3.00754213e-11],
        ...,
        [1.32808084e-10, 1.46964954e-10, 1.78483950e-10, ...,
         8.73207478e-21, 8.41537447e-21, 8.10981686e-21],
        [5.43437206e-09, 5.32875122e-09, 5.96376948e-09, ...,
         8.36363771e-21, 8.06031204e-21, 7.76765247e-21],
        [9.67010383e-09, 9.52066159e-09, 1.06839435e-08, ...,
         7.63764698e-21, 7.36066264e-21, 7.09341060e-21]],

       ...,

       [[3.35264627e-25, 1.55674908e-25, 9.15752880e-26, ...,
         3.81507222e-11, 3.74964816e-11, 3.68522574e-11],
        [3.28182234e-25, 1.52386307e-25, 8.96407792e-26, ...,
         3.73447974e-11, 3.67043756e-11, 3.60737620e-11],
        [3.33899035e-25, 1.55040824e-25, 9.12022862e-26, ...,
         3.79953291e-11, 3.73437531e-11, 3.67021517e-11],
        ...,
        [8.59993882e-11, 1.15849191e-10, 1.53091637e-10, ...,
         1.75658879e-20, 1.69284419e-20, 1.63133959e-20],
        [4.22778722e-11, 5.95679478e-11, 7.97761926e-11, ...,
         1.53844511e-20, 1.48262221e-20, 1.42875434e-20],
        [2.23467148e-11, 3.41603967e-11, 4.68701189e-11, ...,
         1.51603821e-20, 1.46103038e-20, 1.40795349e-20]],

       [[3.28365965e-25, 1.52471627e-25, 8.96909643e-26, ...,
         3.73657043e-11, 3.67249252e-11, 3.60939577e-11],
        [3.06845691e-25, 1.42479015e-25, 8.38128412e-26, ...,
         3.49168507e-11, 3.43180658e-11, 3.37284506e-11],
        [3.15609887e-25, 1.46548539e-25, 8.62067320e-26, ...,
         3.59141536e-11, 3.52982678e-11, 3.46918119e-11],
        ...,
        [4.62700885e-11, 7.34858702e-11, 1.02663184e-10, ...,
         1.95786429e-20, 1.88677474e-20, 1.81815365e-20],
        [5.22229378e-11, 7.36018815e-11, 9.85654544e-11, ...,
         1.83188566e-20, 1.76538179e-20, 1.70122553e-20],
        [3.85684748e-11, 5.60884464e-11, 7.57659144e-11, ...,
         1.75572090e-20, 1.69198550e-20, 1.63050046e-20]],

       [[3.02441580e-25, 1.40434041e-25, 8.26098899e-26, ...,
         3.44156960e-11, 3.38255049e-11, 3.32443517e-11],
        [3.15393394e-25, 1.46448021e-25, 8.61475921e-26, ...,
         3.58895171e-11, 3.52740545e-11, 3.46680150e-11],
        [3.26780774e-25, 1.51735571e-25, 8.92579844e-26, ...,
         3.71853208e-11, 3.65476364e-11, 3.59197151e-11],
        ...,
        [3.19179711e-22, 1.78760657e-21, 5.73130869e-21, ...,
         1.93975841e-20, 1.86948069e-20, 1.80162264e-20],
        [6.14501020e-11, 8.57527313e-11, 1.14455764e-10, ...,
         2.07055004e-20, 1.99535222e-20, 1.92279652e-20],
        [1.24949378e-12, 2.30248633e-12, 3.44144765e-12, ...,
         2.00280460e-20, 1.93006602e-20, 1.85987619e-20]]], dtype=float32))
# NBVAL_SKIP
config = {
      "name": "FSPS (Conroy et al. 2009)",
      # more information on how those models are synthesized: https://github.com/cconroy20/fsps
      # and https://dfm.io/python-fsps/current/
      "format": "fsps", # Format of the template
      "source": "load_from_file", # the source can be "load_from_file" or "rerun_from_scratch"
      # "load_from_file" is the default and loads the template from a pre-existing file in h5 format specified by "file_name"
      # if that file is not found, it will automatically run fsps and save the output to disk in h5 format under the "file_name" given.
      # "rerun_from_scratch" # note: this is just meant for the case in which you really want to rerun your template library.
      # You should be aware that fsps templates will silently be overwritten by this. Use with caution.
      "file_name": "fsps.h5", # File name of the template, stored in templates directory
      # Define the Fields in the template and their units
      # This is used to convert them to the required units
      "fields":{ # Fields in the template and their units
        # Name defines the name of the key stored in the hdf5 file
        "age":{
          "name": "age",
          "units": "Gyr", # Age of the template
          "in_log": True # If the field is stored in log scale
          },
        "metallicity":{
          "name": "metallicity",
          "units": "", # Metallicity of the template
          "in_log": True # If the field is stored in log scale
          },
        "wavelength":{
          "name": "wavelength",
          "units": "Angstrom", # Wavelength of the template
          "in_log": False # If the field is stored in log scale
          },
        "flux":{
          "name": "flux",
          "units": "Lsun/Angstrom", # Luminosity of the template as per pyFSPS documentation
          "in_log": False # If the field is stored in log scale
          }
        }
}
# NBVAL_SKIP
ssp.age.shape
(107,)
# NBVAL_SKIP
ssp.metallicity.shape
(12,)
# NBVAL_SKIP
ssp.wavelength.shape
(5994,)
# NBVAL_SKIP
ssp.flux.shape
(12, 107, 5994)
# NBVAL_SKIP
import os
from rubix.paths import TEMPLATE_PATH
os.path.exists(os.path.join(TEMPLATE_PATH, config['file_name']))
True

Let’s plot some of the spectra#

# NBVAL_SKIP
import matplotlib.pyplot as plt
import numpy as np
# NBVAL_SKIP
plt.plot(ssp.wavelength,ssp.flux[0][0])
plt.xlabel(r'$\lambda$ [%s]'%config["fields"]["wavelength"]["units"])
plt.ylabel(r'Flux [%s]'%config["fields"]["flux"]["units"])
#plt.yscale("log")
plt.xlim(0,10000)
(0.0, 10000.0)
../_images/425954669f7a7992a9b1135b3fb532e304026dc8821702f71c14252c979dfa52.png
# NBVAL_SKIP
plt.plot(ssp.wavelength,ssp.flux[-1][-1])
plt.xlabel(r'$\lambda$ [%s]'%config["fields"]["wavelength"]["units"])
plt.ylabel(r'Flux [%s]'%config["fields"]["flux"]["units"])
#plt.yscale("log")
plt.xlim(0,10000)
(0.0, 10000.0)
../_images/35e6ba889b6d94595ea946ebbce66c38b8ed4c00cdca2cef9e0c29a5317c145f.png
# NBVAL_SKIP
for i in range(len(ssp.metallicity)):
    plt.plot(ssp.wavelength,ssp.flux[i][0], label=r'Z=%0.3f'%ssp.metallicity[i])
plt.xlabel(r'$\lambda$ [%s]'%config["fields"]["wavelength"]["units"])
plt.ylabel(r'Flux [%s]'%config["fields"]["flux"]["units"])
#plt.yscale("log")
plt.xlim(0,10000)
plt.legend()
<matplotlib.legend.Legend at 0x71980819b290>
../_images/05ab1603e3ed32944407b0694a2f1284498dd6193e4fad5119ed1c3a96e8147a.png
# NBVAL_SKIP
ages = np.linspace(0,len(ssp.age),10)
for age in ages:
    plt.plot(ssp.wavelength,ssp.flux[0][int(age)], label='%.2f %s'%(ssp.age[int(age)], config["fields"]["age"]["units"]))
plt.xlabel(r'$\lambda$ [%s]'%config["fields"]["wavelength"]["units"])
plt.ylabel(r'Flux [%s]'%config["fields"]["flux"]["units"])
#plt.yscale("log")
plt.xlim(0,5000)
plt.legend()
<matplotlib.legend.Legend at 0x7197ec34f290>
../_images/b0e0f565cff5ce8e8e0ba7e03289b35c9b8a66d67e37fcefd08167d0403fc63d.png

Reload the created FSPS template#

This is only for tutorial purposes as you would need to run fsps like above first to have a pre-existing template…

#NBVAL_SKIP
from rubix import config as rubix_config
rubix_config["ssp"]["templates"]["FSPS"]["source"] = "load_from_file"
# NBVAL_SKIP
ssp2 = get_ssp_template("FSPS")
ssp2
HDF5SSPGrid(age=Array([9.9999997e-05, 1.1220184e-04, 1.2589252e-04, 1.4125378e-04,
       1.5848933e-04, 1.7782794e-04, 1.9952621e-04, 2.2387206e-04,
       2.5118870e-04, 2.8183832e-04, 3.1622776e-04, 3.5481335e-04,
       3.9810708e-04, 4.4668370e-04, 5.0118729e-04, 5.6234130e-04,
       6.3095725e-04, 7.0794561e-04, 7.9432840e-04, 8.9125102e-04,
       1.0000000e-03, 1.1220183e-03, 1.2589252e-03, 1.4125379e-03,
       1.5848933e-03, 1.7782794e-03, 1.9952620e-03, 2.2387207e-03,
       2.5118869e-03, 2.8183833e-03, 3.1622776e-03, 3.5481334e-03,
       3.9810711e-03, 4.4668368e-03, 5.0118729e-03, 5.6234132e-03,
       6.3095726e-03, 7.0794565e-03, 7.9432838e-03, 8.9125102e-03,
       9.9999998e-03, 1.1220183e-02, 1.2589254e-02, 1.4125375e-02,
       1.5848933e-02, 1.7782794e-02, 1.9952621e-02, 2.2387212e-02,
       2.5118863e-02, 2.8183833e-02, 3.1622775e-02, 3.5481334e-02,
       3.9810721e-02, 4.4668358e-02, 5.0118729e-02, 5.6234132e-02,
       6.3095726e-02, 7.0794582e-02, 7.9432823e-02, 8.9125104e-02,
       1.0000000e-01, 1.1220185e-01, 1.2589255e-01, 1.4125374e-01,
       1.5848932e-01, 1.7782794e-01, 1.9952624e-01, 2.2387213e-01,
       2.5118864e-01, 2.8183830e-01, 3.1622776e-01, 3.5481340e-01,
       3.9810717e-01, 4.4668359e-01, 5.0118721e-01, 5.6234133e-01,
       6.3095737e-01, 7.0794576e-01, 7.9432821e-01, 8.9125091e-01,
       1.0000000e+00, 1.1220185e+00, 1.2589254e+00, 1.4125376e+00,
       1.5848932e+00, 1.7782794e+00, 1.9952624e+00, 2.2387211e+00,
       2.5118864e+00, 2.8183827e+00, 3.1622777e+00, 3.5481341e+00,
       3.9810719e+00, 4.4668355e+00, 5.0118723e+00, 5.6234131e+00,
       6.3095737e+00, 7.0794582e+00, 7.9432821e+00, 8.9125090e+00,
       1.0000000e+01, 1.1220183e+01, 1.2589254e+01, 1.4125375e+01,
       1.5848933e+01, 1.7782795e+01, 1.9952621e+01], dtype=float32), metallicity=Array([4.4904351e-05, 1.4200003e-04, 2.5251572e-04, 4.4904352e-04,
       7.9852482e-04, 1.4200003e-03, 2.5251573e-03, 4.4904351e-03,
       7.9852482e-03, 1.4199999e-02, 2.5251566e-02, 4.4904340e-02],      dtype=float32), wavelength=Array([8.950e+01, 9.250e+01, 9.450e+01, ..., 9.817e+07, 9.908e+07,
       1.000e+08], dtype=float32), flux=Array([[[3.69801944e-25, 1.71711785e-25, 1.01008924e-25, ...,
         4.20808249e-11, 4.13591869e-11, 4.06485991e-11],
        [2.95627621e-25, 1.37270093e-25, 8.07487082e-26, ...,
         3.36403162e-11, 3.30634235e-11, 3.24953640e-11],
        [3.62052076e-25, 1.68113235e-25, 9.88920961e-26, ...,
         4.11989401e-11, 4.04924289e-11, 3.97967319e-11],
        ...,
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.87085782e-21, 6.62186151e-21, 6.38153848e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.64786358e-21, 6.40694763e-21, 6.17442546e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.16116230e-21, 5.93788412e-21, 5.72238539e-21]],

       [[2.47674418e-25, 1.15003767e-25, 6.76506097e-26, ...,
         2.81835822e-11, 2.77002657e-11, 2.72243512e-11],
        [2.70331983e-25, 1.25524459e-25, 7.38393714e-26, ...,
         3.07618514e-11, 3.02343220e-11, 2.97148695e-11],
        [3.59155428e-25, 1.66768228e-25, 9.81008994e-26, ...,
         4.08693253e-11, 4.01684623e-11, 3.94783338e-11],
        ...,
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         8.89014787e-21, 8.56769041e-21, 8.25660749e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         8.48373481e-21, 8.17602604e-21, 7.87917160e-21],
        [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
         6.92724666e-21, 6.67610364e-21, 6.43376153e-21]],

       [[2.81423712e-25, 1.30674723e-25, 7.68690040e-26, ...,
         3.20240119e-11, 3.14748366e-11, 3.09340713e-11],
        [2.62237481e-25, 1.21765895e-25, 7.16284100e-26, ...,
         2.98407549e-11, 2.93290184e-11, 2.88251211e-11],
        [2.73612140e-25, 1.27047540e-25, 7.47353201e-26, ...,
         3.11351084e-11, 3.06011778e-11, 3.00754213e-11],
        ...,
        [1.32808084e-10, 1.46964954e-10, 1.78483950e-10, ...,
         8.73207478e-21, 8.41537447e-21, 8.10981686e-21],
        [5.43437206e-09, 5.32875122e-09, 5.96376948e-09, ...,
         8.36363771e-21, 8.06031204e-21, 7.76765247e-21],
        [9.67010383e-09, 9.52066159e-09, 1.06839435e-08, ...,
         7.63764698e-21, 7.36066264e-21, 7.09341060e-21]],

       ...,

       [[3.35264627e-25, 1.55674908e-25, 9.15752880e-26, ...,
         3.81507222e-11, 3.74964816e-11, 3.68522574e-11],
        [3.28182234e-25, 1.52386307e-25, 8.96407792e-26, ...,
         3.73447974e-11, 3.67043756e-11, 3.60737620e-11],
        [3.33899035e-25, 1.55040824e-25, 9.12022862e-26, ...,
         3.79953291e-11, 3.73437531e-11, 3.67021517e-11],
        ...,
        [8.59993882e-11, 1.15849191e-10, 1.53091637e-10, ...,
         1.75658879e-20, 1.69284419e-20, 1.63133959e-20],
        [4.22778722e-11, 5.95679478e-11, 7.97761926e-11, ...,
         1.53844511e-20, 1.48262221e-20, 1.42875434e-20],
        [2.23467148e-11, 3.41603967e-11, 4.68701189e-11, ...,
         1.51603821e-20, 1.46103038e-20, 1.40795349e-20]],

       [[3.28365965e-25, 1.52471627e-25, 8.96909643e-26, ...,
         3.73657043e-11, 3.67249252e-11, 3.60939577e-11],
        [3.06845691e-25, 1.42479015e-25, 8.38128412e-26, ...,
         3.49168507e-11, 3.43180658e-11, 3.37284506e-11],
        [3.15609887e-25, 1.46548539e-25, 8.62067320e-26, ...,
         3.59141536e-11, 3.52982678e-11, 3.46918119e-11],
        ...,
        [4.62700885e-11, 7.34858702e-11, 1.02663184e-10, ...,
         1.95786429e-20, 1.88677474e-20, 1.81815365e-20],
        [5.22229378e-11, 7.36018815e-11, 9.85654544e-11, ...,
         1.83188566e-20, 1.76538179e-20, 1.70122553e-20],
        [3.85684748e-11, 5.60884464e-11, 7.57659144e-11, ...,
         1.75572090e-20, 1.69198550e-20, 1.63050046e-20]],

       [[3.02441580e-25, 1.40434041e-25, 8.26098899e-26, ...,
         3.44156960e-11, 3.38255049e-11, 3.32443517e-11],
        [3.15393394e-25, 1.46448021e-25, 8.61475921e-26, ...,
         3.58895171e-11, 3.52740545e-11, 3.46680150e-11],
        [3.26780774e-25, 1.51735571e-25, 8.92579844e-26, ...,
         3.71853208e-11, 3.65476364e-11, 3.59197151e-11],
        ...,
        [3.19179711e-22, 1.78760657e-21, 5.73130869e-21, ...,
         1.93975841e-20, 1.86948069e-20, 1.80162264e-20],
        [6.14501020e-11, 8.57527313e-11, 1.14455764e-10, ...,
         2.07055004e-20, 1.99535222e-20, 1.92279652e-20],
        [1.24949378e-12, 2.30248633e-12, 3.44144765e-12, ...,
         2.00280460e-20, 1.93006602e-20, 1.85987619e-20]]], dtype=float32))
# NBVAL_SKIP
ssp.wavelength.shape == ssp2.wavelength.shape
True