Skip to main content

High-performance C++ framework with Python interface for modeling Gamma-Ray Burst (GRB) afterglows.

Project description

VegasAfterglow

VegasAfterglow Logo

C++ Version PyPI version Build Status License Platform Python Version Documentation Validation Report

VegasAfterglow is a high-performance C++ framework with a user-friendly Python interface designed for the comprehensive modeling of Gamma-Ray Burst (GRB) afterglows. It achieves exceptional computational efficiency, enabling the generation of multi-wavelength light curves in milliseconds and facilitating robust Markov Chain Monte Carlo (MCMC) parameter inference. The framework incorporates advanced models for shock dynamics (both forward and reverse shocks), diverse radiation mechanisms (synchrotron with self-absorption, and inverse Compton scattering with Klein-Nishina corrections), and complex structured jet configurations.

Ecosystem & Integration

  • Advanced Inference: While VegasAfterglow includes a standalone fitter, its models are also integrated into Redback for more advanced Bayesian inference, model comparison, and multi-messenger analysis.
  • Community Tools: We also recommend checking out PyFRS, Jetsimpy, ASGARD as tool for afterglow modeling.


Table of Contents


Features

Shock Dynamics

  • Forward and Reverse Shock Modeling: Simulates both shocks via shock crossing dynamics with arbitrary magnetization levels and shell thicknesses.
  • Relativistic and Non-Relativistic Regimes: Accurately models shock evolution across all velocity regimes.
  • Adiabatic and Radiative Blast Waves: Supports smooth transition between adiabatic and radiative blast waves.
  • Ambient Medium: Supports uniform Interstellar Medium (ISM), stellar wind environments, and user-defined density profiles.
  • Energy and Mass Injection: Supports user-defined profiles for continuous energy and/or mass injection into the blast wave.

Jet Structure & Geometry

  • Structured Jet Profiles: Allows user-defined angular profiles for energy distribution, initial Lorentz factor, and magnetization.
  • Arbitrary Viewing Angles: Supports off-axis observers at any viewing angle relative to the jet axis.
  • Jet Spreading: Includes lateral expansion dynamics for realistic jet evolution (experimental).
  • Non-Axisymmetric Jets: Capable of modeling complex, non-axisymmetric jet structures.

Radiation Mechanisms

  • Synchrotron Radiation: Calculates synchrotron emission from shocked electrons.
  • Synchrotron Self-Absorption (SSA): Includes SSA effects, crucial at low frequencies.
  • Inverse Compton (IC) Scattering: Models IC processes, including:
    • Synchrotron Self-Compton (SSC) from both forward and reverse shocks.
    • Pairwise IC between forward and reverse shock electron and photon populations (experimental).
    • Includes Klein-Nishina corrections for accurate synchrotron and IC emission.

VegasAfterglow Architecture

Performance Highlights

VegasAfterglow delivers exceptional computational performance through deep optimization of its core algorithms. A 100-point single-frequency light curve (forward shock and synchrotron emission only) for a structured jet viewed off-axis can be generated in approximately 1 millisecond on a single core of an Apple M2 chip. This performance enables comprehensive Bayesian inference on standard laptop hardware in seconds to minutes:

  • Tophat jet: On-axis forward synchrotron only, 10,000 MCMC steps (320,000 likelihood evaluations) with 8 parameters and 15 data points completes in ~15 seconds on an Apple M2 laptop (8 cores).
  • Structured jet: The same MCMC run completes in ~1 minute.

This acceleration allows rapid iteration over different physical models and makes VegasAfterglow well suited for both detailed analyses of individual GRB events and large-scale population studies.



Installation

VegasAfterglow is available as a Python package with C++ source code also provided for direct use.

Python Installation

To install VegasAfterglow using pip:

pip install VegasAfterglow

This installs the core physics engine. To also install MCMC fitting support:

pip install VegasAfterglow[mcmc]

VegasAfterglow requires Python 3.8 or higher.

Alternative: Install from Source (click to expand/collapse)

For cases where pip installation is not viable or when the development version is required:

  1. Clone this repository:
git clone https://github.com/YihanWangAstro/VegasAfterglow.git
  1. Navigate to the directory and install the Python package:
cd VegasAfterglow
pip install .

Standard development environments typically include the necessary prerequisites (C++20 compatible compiler). For build-related issues, refer to the prerequisites section in C++ Installation.

C++ Installation

For advanced users who need to compile and use the C++ library directly:

Instructions for C++ Installation (click to expand/collapse)
  1. Clone the repository (if not previously done):
git clone https://github.com/YihanWangAstro/VegasAfterglow.git
cd VegasAfterglow
  1. Compile and run tests:
make tests

Upon successful compilation, you can create custom C++ problem generators using the VegasAfterglow interfaces. For implementation details, refer to the Creating Custom Problem Generators with C++ section or examine the example problem generators in tests/demo/.

Build Prerequisites (click to expand for dependency information)

The following development tools are required:

  • C++20 compatible compiler:

    • Linux: GCC 10+ or Clang 13+
    • macOS: Apple Clang 13+ (with Xcode 13+) or GCC 10+ (via Homebrew)
    • Windows: MSVC 19.29+ (Visual Studio 2019 16.10+) or MinGW-w64 with GCC 10+
  • Build tools:

    • Make (GNU Make 4.0+ recommended)

Usage

Quick Start

VegasAfterglow can be used in two ways:

  • Command line — generate light curves instantly with the vegasgen command, no code needed.
  • Python API — full programmatic control for custom analysis, MCMC fitting, and access to internal quantities.

Command-Line Tool (vegasgen)

# Default tophat jet, ISM, on-axis — just run it
vegasgen

# Gaussian jet at z=0.5 with plot output
vegasgen --jet gaussian --z 0.5 --plot

# Use filter names for frequencies, save to file
vegasgen --nu R J 1e18 -o lightcurve.csv

# Wind medium with SSC, save plot as PNG
vegasgen --medium wind --ssc --plot -o lightcurve.png

All parameters have sensible defaults. Run vegasgen --help for the full option list, or see the CLI documentation for detailed usage.

Python API

from VegasAfterglow import ISM, TophatJet, Observer, Radiation, Model
import numpy as np

model = Model(TophatJet(0.1, 1e52, 300), ISM(1), Observer(1e26, 0.1, 0), Radiation(0.1, 1e-3, 2.3))
result = model.flux_density_grid(np.logspace(2, 8, 100), [1e9, 1e14, 1e17])

See the detailed sections below and the example notebooks (script/quick.ipynb, script/details.ipynb, script/vegas-mcmc.ipynb) for Python usage including light curves, spectra, internal quantities, and MCMC fitting.

Light Curve & Spectrum Calculation

The example below walks through the main components needed to model a GRB afterglow, from setting up the physical parameters to producing light curves and spectra via script/quick.ipynb.

Model Setup (click to expand/collapse)

First, let's set up the physical components of our afterglow model, including the environment, jet, observer, and radiation parameters:

import numpy as np
import matplotlib.pyplot as plt
from VegasAfterglow import ISM, TophatJet, Observer, Radiation, Model

# 1. Define the circumburst environment (constant density ISM)
medium = ISM(n_ism=1) #in cgs unit

# 2. Configure the jet structure (top-hat with opening angle, energy, and Lorentz factor)
jet = TophatJet(theta_c=0.1, E_iso=1e52, Gamma0=300) #in cgs unit

# 3. Set observer parameters (distance, redshift, viewing angle)
obs = Observer(lumi_dist=1e26, z=0.1, theta_obs=0) #in cgs unit

# 4. Define radiation microphysics parameters
rad = Radiation(eps_e=1e-1, eps_B=1e-3, p=2.3)

# 5. Combine all components into a complete afterglow model
model = Model(jet=jet, medium=medium, observer=obs, fwd_rad=rad)
Light Curve Calculation (click to expand/collapse)

Now, let's compute and plot multi-wavelength light curves to see how the afterglow evolves over time:

# 1. Create logarithmic time array from 10² to 10⁸ seconds (100s to ~3yrs)
times = np.logspace(2, 8, 100)

# 2. Define observing frequencies (radio, optical, X-ray bands in Hz)
bands = np.array([1e9, 1e14, 1e17])

# 3. Calculate the afterglow emission at each time and frequency
# NOTE: times array must be in ascending order, frequencies can be in random order
results = model.flux_density_grid(times, bands)

# 4. Visualize the multi-wavelength light curves
plt.figure(figsize=(4.8, 3.6),dpi=200)

# 5. Plot each frequency band
for i, nu in enumerate(bands):
    exp = int(np.floor(np.log10(nu)))
    base = nu / 10**exp
    plt.loglog(times, results.total[i,:], label=fr'${base:.1f} \times 10^{{{exp}}}$ Hz')

def add_note(plt):
    plt.annotate('jet break',xy=(3e4, 1e-26), xytext=(3e3, 5e-28), arrowprops=dict(arrowstyle='->'))
    plt.annotate(r'$\nu_m=\nu_a$',xy=(8e5, 2e-25), xytext=(7.5e4, 5e-24), arrowprops=dict(arrowstyle='->'))
    plt.annotate(r'$\nu=\nu_a$',xy=(4e6, 4e-25), xytext=(7.5e5, 5e-24), arrowprops=dict(arrowstyle='->'))

add_note(plt)
plt.xlabel('Time (s)')
plt.ylabel('Flux Density (erg/cm²/s/Hz)')
plt.legend()
plt.title('Light Curves')
plt.savefig('quick-lc.png',dpi=300,bbox_inches='tight')
Afterglow Light Curves

Running the light curve script will produce this figure showing the afterglow evolution across different frequencies.

Spectrum Analysis (click to expand/collapse)

We can also examine how the broadband spectrum evolves at different times after the burst:

# 1. Define broad frequency range (10⁵ to 10²² Hz)
frequencies = np.logspace(5, 22, 100)

# 2. Select specific time epochs for spectral snapshots
epochs = np.array([1e2, 1e3, 1e4, 1e5 ,1e6, 1e7, 1e8])

# 3. Calculate spectra at each epoch
# NOTE: epochs array must be in ascending order, frequencies can be in random order
results = model.flux_density_grid(epochs, frequencies)

# 4. Plot broadband spectra at each epoch
plt.figure(figsize=(4.8, 3.6),dpi=200)
colors = plt.cm.viridis(np.linspace(0,1,len(epochs)))

for i, t in enumerate(epochs):
    exp = int(np.floor(np.log10(t)))
    base = t / 10**exp
    plt.loglog(frequencies, results.total[:,i], color=colors[i], label=fr'${base:.1f} \times 10^{{{exp}}}$ s')

# 5. Add vertical lines marking the bands from the light curve plot
for i, band in enumerate(bands):
    exp = int(np.floor(np.log10(band)))
    base = band / 10**exp
    plt.axvline(band,ls='--',color='C'+str(i))

plt.xlabel('frequency (Hz)')
plt.ylabel('flux density (erg/cm²/s/Hz)')
plt.legend(ncol=2)
plt.title('Synchrotron Spectra')
plt.savefig('quick-spec.png',dpi=300,bbox_inches='tight')
Broadband Spectra

The spectral analysis code will generate this visualization showing spectra at different times, with vertical lines indicating the frequencies calculated in the light curve example.

Time-Frequency Pairs Calculation (click to expand/collapse)

If you want to calculate flux at specific time-frequency pairs (t_i, nu_i) instead of a grid (t_i, nu_j), you can use the alternative series interfaces:

# Define time and frequency arrays (must be the same length)
times = np.logspace(2, 8, 200)
frequencies = np.logspace(9, 17, 200)

# For time-frequency pairs (times array must be in ascending order)
results = model.flux_density(times, frequencies)

# The returned results is a FluxDict object with different flux components
print("Result attributes:", dir(results))  # Shows .fwd, .rvs, .total attributes
print("Total flux shape:", results.total.shape)  # Same shape as input arrays
print("Forward shock shape:", results.fwd.sync.shape)  # Forward shock synchrotron component

Key differences:

  • flux_density_grid(): Calculates flux on a time-frequency grid (NxM output from N times and M frequencies)
  • flux_density(): Calculates flux at paired time-frequency points (N output from N time-frequency pairs), requires ascending order time arrays
  • flux_density_exposures(): Same as above but with exposure time averaging for realistic observational scenarios

Return value structure: All flux calculation methods return a FluxDict object with:

  • .total: Combined flux from all components
  • .fwd: Forward shock flux (has .sync and .ssc attributes)
  • .rvs: Reverse shock flux (has .sync and .ssc attributes)

Internal Quantities Evolution

The example below walks through how you can check the evolution of internal quantities under various reference frames via script/details.ipynb.

Model Setup (click to expand/collapse)

Same as for light curve generation, let's set up the physical components of our afterglow model, including the environment, jet, observer, and radiation parameters:

import numpy as np
import matplotlib.pyplot as plt
from VegasAfterglow import ISM, TophatJet, Observer, Radiation, Model

medium = ISM(n_ism=1)

jet = TophatJet(theta_c=0.3, E_iso=1e52, Gamma0=100)

z = 0.1
obs = Observer(lumi_dist=1e26, z=z, theta_obs=0.)

rad = Radiation(eps_e=1e-1, eps_B=1e-3, p=2.3)

model = Model(jet=jet, medium=medium, observer=obs, fwd_rad=rad, resolutions=(0.15,1.0,10))
Get the simulation quantities (click to expand/collapse)

Now, let's get the internal simulation quantities:

# Get the simulation details over a time range
details = model.details(t_min=1e0, t_max=1e8)

# Print the available attributes
print("Simulation details attributes:", dir(details))
print("Forward shock attributes:", dir(details.fwd))

You will get a SimulationDetails object with the following structure:

Main grid coordinates:

  • details.phi: 1D numpy array of azimuthal angles in radians
  • details.theta: 1D numpy array of polar angles in radians
  • details.t_src: 3D numpy array of source frame times on coordinate (phi_i, theta_j, t_k) grid in seconds

Forward shock details (accessed via details.fwd):

  • details.fwd.t_comv: 3D numpy array of comoving times for the forward shock in seconds
  • details.fwd.t_obs: 3D numpy array of observer times for the forward shock in seconds
  • details.fwd.Gamma: 3D numpy array of downstream Lorentz factors for the forward shock
  • details.fwd.Gamma_th: 3D numpy array of thermal Lorentz factors for the forward shock
  • details.fwd.r: 3D numpy array of lab frame radii in cm
  • details.fwd.B_comv: 3D numpy array of downstream comoving magnetic field strengths for the forward shock in Gauss
  • details.fwd.theta: 3D numpy array of polar angles for the forward shock in radians
  • details.fwd.N_p: 3D numpy array of downstream shocked proton number per solid angle for the forward shock
  • details.fwd.N_e: 3D numpy array of downstream synchrotron electron number per solid angle for the forward shock
  • details.fwd.gamma_a: 3D numpy array of comoving frame self-absorption Lorentz factors for the forward shock
  • details.fwd.gamma_m: 3D numpy array of comoving frame injection Lorentz factors for the forward shock
  • details.fwd.gamma_c: 3D numpy array of comoving frame cooling Lorentz factors for the forward shock
  • details.fwd.gamma_M: 3D numpy array of comoving frame maximum Lorentz factors for the forward shock
  • details.fwd.nu_a: 3D numpy array of comoving frame self-absorption frequencies for the forward shock in Hz
  • details.fwd.nu_m: 3D numpy array of comoving frame injection frequencies for the forward shock in Hz
  • details.fwd.nu_c: 3D numpy array of comoving frame cooling frequencies for the forward shock in Hz
  • details.fwd.nu_M: 3D numpy array of comoving frame maximum frequencies for the forward shock in Hz
  • details.fwd.I_nu_max: 3D numpy array of comoving frame synchrotron maximum specific intensities for the forward shock in erg/cm²/s/Hz
  • details.fwd.Doppler: 3D numpy array of Doppler factors for the forward shock
  • details.fwd.sync_spectrum: Per-cell callable synchrotron spectrum (see Per-Cell Spectrum Evaluation below)
  • details.fwd.ssc_spectrum: Per-cell callable SSC spectrum (None if ssc=False)
  • details.fwd.Y_spectrum: Per-cell callable Compton-Y parameter

Reverse shock details (accessed via details.rvs, if reverse shock is enabled):

  • Similar attributes as forward shock but for the reverse shock component
Checking the evolution of various parameters (click to expand/collapse)

To analyze the temporal evolution of physical parameters across different reference frames, we can visualize how key quantities evolve in the source, comoving, and observer frames. The following analysis demonstrates the comprehensive tracking of shock dynamics and microphysical parameters throughout the afterglow evolution:

Multi-parameter evolution visualization: This code creates a comprehensive multi-panel figure displaying the temporal evolution of fundamental shock parameters (Lorentz factor, magnetic field, particle numbers, radius, and peak synchrotron power) across all three reference frames:

attrs =['Gamma', 'B_comv', 'N_p','r','N_e','I_nu_max']
ylabels = [r'$\Gamma$', r'$B^\prime$ [G]', r'$N_p$', r'$r$ [cm]', r'$N_e$', r'$I_{\nu, \rm max}^\prime$ [erg/s/Hz]']

frames = ['t_src', 't_comv', 't_obs']
titles = ['source frame', 'comoving frame', 'observer frame']
colors = ['C0', 'C1', 'C2']
xlabels = [r'$t_{\rm src}$ [s]', r'$t^\prime$ [s]', r'$t_{\rm obs}$ [s]']
plt.figure(figsize= (4.2*len(frames), 3*len(attrs)))

#plot the evolution of various parameters for phi = 0 and theta = 0 (so the first two indexes are 0)
for i, frame in enumerate(frames):
    for j, attr in enumerate(attrs):
        plt.subplot(len(attrs), len(frames) , j * len(frames) + i + 1)
        if j == 0:
            plt.title(titles[i])
        value = getattr(details.fwd, attr)
        if frame == 't_src':
            t = getattr(details, frame)
        else:
            t = getattr(details.fwd, frame)
        plt.loglog(t[0, 0, :], value[0, 0, :], color='k',lw=2.5)
        plt.loglog(t[0, 0, :], value[0, 0, :], color=colors[i])

        plt.xlabel(xlabels[i])
        plt.ylabel(ylabels[j])

plt.tight_layout()
plt.savefig('shock_quantities.png', dpi=300,bbox_inches='tight')
Shock evolution

Electron energy distribution analysis: This visualization focuses specifically on the characteristic electron energies (self-absorption, injection, and cooling) across all three reference frames:

frames = ['t_src', 't_comv', 't_obs']
xlabels = [r'$t_{\rm src}$ [s]', r'$t^\prime$ [s]', r'$t_{\rm obs}$ [s]']
plt.figure(figsize= (4.2*len(frames), 3.6))

for i, frame in enumerate(frames):
    plt.subplot(1, len(frames), i + 1)
    if frame == 't_src':
        t = getattr(details, frame)
    else:
        t = getattr(details.fwd, frame)
    plt.loglog(t[0, 0, :], details.fwd.gamma_a[0, 0, :],label=r'$\gamma_a^\prime$',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.gamma_m[0, 0, :],label=r'$\gamma_m^\prime$',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.gamma_c[0, 0, :],label=r'$\gamma_c^\prime$',c='royalblue')
    plt.loglog(t[0, 0, :], details.fwd.gamma_a[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\gamma_a$',ls='--',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.gamma_m[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\gamma_m$',ls='--',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.gamma_c[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\gamma_c$',ls='--',c='royalblue')
    plt.xlabel(xlabels[i])
    plt.ylabel(r'$\gamma_e^\prime$')
    plt.legend(ncol=2)
plt.tight_layout()
plt.savefig('electron_quantities.png', dpi=300,bbox_inches='tight')
Shock evolution

Synchrotron frequency evolution: This analysis tracks the evolution of characteristic synchrotron frequencies:

frames = ['t_src', 't_comv', 't_obs']
xlabels = [r'$t_{\rm src}$ [s]', r'$t^\prime$ [s]', r'$t_{\rm obs}$ [s]']
plt.figure(figsize= (4.2*len(frames), 3.6))

for i, frame in enumerate(frames):
    plt.subplot(1, len(frames), i + 1)
    if frame == 't_src':
        t = getattr(details, frame)
    else:
        t = getattr(details.fwd, frame)
    plt.loglog(t[0, 0, :], details.fwd.nu_a[0, 0, :],label=r'$\nu_a^\prime$',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.nu_m[0, 0, :],label=r'$\nu_m^\prime$',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.nu_c[0, 0, :],label=r'$\nu_c^\prime$',c='royalblue')
    plt.loglog(t[0, 0, :], details.fwd.nu_a[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\nu_a$',ls='--',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.nu_m[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\nu_m$',ls='--',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.nu_c[0, 0, :]*details.fwd.Doppler[0,0,:]/(1+z),label=r'$\nu_c$',ls='--',c='royalblue')
    plt.xlabel(xlabels[i])
    plt.ylabel(r'$\nu$ [Hz]')
    plt.legend(ncol=2)
plt.tight_layout()
plt.savefig('photon_quantities.png', dpi=300,bbox_inches='tight')
Shock evolution

Doppler factor spatial distribution: This polar plot visualizes the spatial distribution of the Doppler factor across the jet structure, showing how relativistic beaming varies with angular position and radial distance:

plt.figure(figsize=(6,6))
ax = plt.subplot(111, polar=True)

theta = details.fwd.theta[0,:,:]
r     = details.fwd.r[0,:,:]
D     = details.fwd.Doppler[0,:,:]

# Polar contour plot
scale = 3.0
c = ax.contourf(theta*scale, r, np.log10(D), levels=30, cmap='viridis')

ax.set_rscale('log')
true_ticks = np.linspace(0, 0.3, 6)
ax.set_xticks(true_ticks * scale)
ax.set_xticklabels([f"{t:.2f}" for t in true_ticks])
ax.set_xlim(0,0.3*scale)
ax.set_ylabel(r'$\theta$ [rad]')
ax.set_xlabel(r'$r$ [cm]')

plt.colorbar(c, ax=ax, label=r'$\log_{10} D$')

plt.tight_layout()
plt.savefig('doppler.png', dpi=300,bbox_inches='tight')
Shock evolution

Equal arrival time (EAT) surface visualization: This final visualization maps the equal arrival time surfaces in polar coordinates, illustrating how light from different parts of the jet reaches the observer at the same time:

plt.figure(figsize=(6,6))
ax = plt.subplot(111, polar=True)

theta = details.fwd.theta[0,:,:]
r     = details.fwd.r[0,:,:]
t_obs = details.fwd.t_obs[0,:,:]

scale = 3.0
c = ax.contourf(theta*scale, r, np.log10(t_obs), levels=30, cmap='viridis')

ax.set_rscale('log')
true_ticks = np.linspace(0, 0.3, 6)
ax.set_xticks(true_ticks * scale)
ax.set_xticklabels([f"{t:.2f}" for t in true_ticks])
ax.set_xlim(0,0.3*scale)
ax.set_ylabel(r'$\theta$ [rad]')
ax.set_xlabel(r'$r$ [cm]')

plt.colorbar(c, ax=ax, label=r'$\log_{10} (t_{\rm obs}/s)$')

plt.tight_layout()
plt.savefig('EAT.png', dpi=300,bbox_inches='tight')
Shock evolution
Per-Cell Spectrum Evaluation (click to expand/collapse)

In addition to scalar quantities, details() provides callable spectrum accessors that let you evaluate the comoving-frame synchrotron, SSC, and Compton-Y spectra at arbitrary frequencies for each grid cell. To use SSC and Y spectrum, enable SSC in the radiation model:

rad = Radiation(eps_e=1e-1, eps_B=1e-3, p=2.3, ssc=True)
model = Model(jet=jet, medium=medium, observer=obs, fwd_rad=rad, resolutions=(0.15,1.0,10))
details = model.details(t_min=1e0, t_max=1e8)

nu_comv = np.logspace(8, 20, 200)  # comoving frame frequency [Hz]

# Synchrotron spectrum at cell (phi=0, theta=0, t=5)
I_syn = details.fwd.sync_spectrum[0, 0, 5](nu_comv)   # erg/s/Hz/cm²/sr

# SSC spectrum at the same cell (requires ssc=True)
I_ssc = details.fwd.ssc_spectrum[0, 0, 5](nu_comv)    # erg/s/Hz/cm²/sr

# Compton-Y parameter as a function of electron Lorentz factor
gamma = np.logspace(1, 8, 200)
Y = details.fwd.Y_spectrum[0, 0, 5](gamma)            # dimensionless

These callable accessors are also available on details.rvs when a reverse shock is configured. The sync_spectrum and Y_spectrum are always available; ssc_spectrum is None unless ssc=True.

MCMC Parameter Fitting

We provide some example data files in the data folder. Remember to keep your copy in the same directory as the original to ensure all data paths work correctly.

1. Configuring the Model (click to expand/collapse)
# Requires: pip install VegasAfterglow[mcmc]
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import corner
from VegasAfterglow import Fitter, ParamDef, Scale

# Create the fitter with model configuration and add data
fitter = Fitter(
    z=1.58,
    lumi_dist=3.364e28,
    jet="powerlaw",
    medium="wind",
)

All model configuration is passed directly to the Fitter constructor as keyword arguments. Check the documentation for all available options.

2. Defining Parameters and Running MCMC (click to expand/collapse)

The ParamDef class is used to define the parameters for MCMC exploration. Each parameter requires a name, prior range, and sampling scale:

mc_params = [
    ParamDef("E_iso",      1e50,  1e54,  Scale.log),       # Isotropic energy [erg]
    ParamDef("Gamma0",        5,  1000,  Scale.log),       # Lorentz factor at the core
    ParamDef("theta_c",     0.0,   0.5,  Scale.linear),    # Core half-opening angle [rad]
    ParamDef("k_e",           2,     2,  Scale.fixed),     # Energy power law index
    ParamDef("k_g",           2,     2,  Scale.fixed),     # Lorentz factor power law index
    ParamDef("theta_v",     0.0,   0.0,  Scale.fixed),     # Viewing angle [rad]
    ParamDef("p",             2,     3,  Scale.linear),    # Shocked electron power law index
    ParamDef("eps_e",      1e-2,   0.5,  Scale.log),       # Electron energy fraction
    ParamDef("eps_B",      1e-4,   0.5,  Scale.log),       # Magnetic field energy fraction
    ParamDef("A_star",     1e-3,     1,  Scale.log),       # Wind parameter
    ParamDef("xi_e",       1e-3,     1,  Scale.log),       # Electron acceleration fraction
]

Scale Types:

  • Scale.log: Sample in logarithmic space (log10) - ideal for parameters spanning multiple orders of magnitude
  • Scale.linear: Sample in linear space - appropriate for parameters with narrower ranges
  • Scale.fixed: Keep parameter fixed at the initial value - use for parameters you don't want to vary

Parameter Choices: The parameters you include depend on your model configuration (See documentation for all options):

  • For "wind" medium: use A_star parameter
  • For "ISM" medium: use n_ism parameter instead
  • Different jet structures may require different parameters

Initialize the Fitter class with your configuration and add data directly:

# Add light curves at specific frequencies (all quantities in CGS units)
t_data = [1e3, 2e3, 5e3, 1e4, 2e4]  # Time in seconds
flux_data = [1e-26, 8e-27, 5e-27, 3e-27, 2e-27]  # erg/cm²/s/Hz
flux_err = [1e-28, 8e-28, 5e-28, 3e-28, 2e-28]    # erg/cm²/s/Hz
fitter.add_flux_density(nu=4.84e14, t=t_data, f_nu=flux_data, err=flux_err)

# Load from CSV files
import pandas as pd
bands = [2.4e17, 4.84e14, 1.4e14]
lc_files = ["data/ep.csv", "data/r.csv", "data/vt-r.csv"]
for nu, fname in zip(bands, lc_files):
    df = pd.read_csv(fname)
    fitter.add_flux_density(nu=nu, t=df["t"], f_nu=df["Fv_obs"], err=df["Fv_err"])

# Add spectra at specific times
fitter.add_spectrum(t=3000, nu=nu_data, f_nu=spectrum_data, err=spectrum_err)

# Option 1: Nested sampling with dynesty (computes evidence, robust for multimodal posteriors)
result = fitter.fit(
    mc_params,
    resolution=(0.15, 1.0, 10),    # Grid resolution (phi, theta, t)
    sampler="dynesty",             # Nested sampling algorithm
    nlive=1000,                    # Number of live points
    walks=100,                     # Number of random walks per live point
    dlogz=0.5,                     # Stopping criterion (evidence tolerance)
    npool=8,                       # Number of parallel threads
    top_k=10,                      # Number of best-fit parameters to return
)

# Option 2: MCMC with emcee (faster, good for unimodal posteriors, not optimal for multimodal posteriors)
result = fitter.fit(
    mc_params,
    resolution=(0.15, 1.0, 10),    # Grid resolution (phi, theta, t)
    sampler="emcee",               # MCMC sampler
    nsteps=50000,                  # Number of steps per walker
    nburn=10000,                   # Burn-in steps to discard
    thin=1,                        # Save every nth sample
    npool=8,                       # Number of parallel threads
    top_k=10,                      # Number of best-fit parameters to return
)

Important Notes:

  • Parameters with Scale.log are sampled as log10_<name> (e.g., log10_E_iso)
  • The sampler works in log10 space for LOG-scale parameters, then transforms back
  • Use npool to parallelize likelihood evaluations across multiple CPU cores

The result object contains:

  • samples: The posterior samples (shape: [n_samples, 1, n_params])
  • labels: Parameter names (with log10_ prefix for LOG-scale params)
  • latex_labels: LaTeX-formatted labels for plotting (e.g., $\log_{10}(E_{\rm iso})$)
  • top_k_params: Top-k maximum likelihood parameter values
  • top_k_log_probs: Log probabilities for top-k samples
  • bilby_result: Full bilby Result object (for advanced diagnostics)
3. Analyzing Results and Generating Predictions (click to expand/collapse)

Check the top-k parameters and their uncertainties:

# Print top-k parameters (maximum likelihood)
print("Top-k parameters:")
header = f"{'Rank':>4s}  {'chi^2':>10s}  " + "  ".join(f"{name:>10s}" for name in result.labels)
print(header)
print("-" * len(header))
for i in range(result.top_k_params.shape[0]):
    chi2 = -2 * result.top_k_log_probs[i]
    vals = "  ".join(f"{val:10.4f}" for val in result.top_k_params[i])
    print(f"{i+1:4d}  {chi2:10.2f}  {vals}")

Use the best-fit parameters to generate model predictions

# Define time and frequency ranges for predictions
t_out = np.logspace(2, 9, 150)

nu_out = np.logspace(16,20,150)

best_params = result.top_k_params[0]

# Generate model light curves at the specified bands using the best-fit parameters
lc = fitter.flux_density_grid(best_params, t_out, bands)

# Generate model spectra at the specified times using the best-fit parameters
spec = fitter.flux_density_grid(best_params, times, nu_out)

Now you can plot the best-fit model:

# Function to plot model light curves along with observed data
def draw_bestfit(t,lc_fit, nu, spec_fit):
    fig =plt.figure(figsize=(4.5, 7.5))

    ax1 = fig.add_subplot(211)
    ax2 = fig.add_subplot(212)

    shift = [1,1,200]
    colors = ['blue', 'orange', 'green']
    for i, file, sft, c in zip(range(len(lc_files)), lc_files, shift, colors ):
        df = pd.read_csv(file)
        ax1.errorbar(df["t"], df["Fv_obs"]*sft, df["Fv_err"]*sft, fmt='o',markersize=4,label=file, color=c,markeredgecolor='k', markeredgewidth=.4)
        ax1.plot(t, np.array(lc_fit[i,:])*sft, color=c,lw=1)

    ax1.set_xscale('log')
    ax1.set_yscale('log')
    ax1.set_xlabel('t [s]')
    ax1.set_ylabel(r'$F_\nu$ [erg/cm$^2$/s/Hz]')
    ax1.legend()

    for i, file, sft, c in zip(range(len(spec_files)), spec_files, shift, colors ):
        df = pd.read_csv(file)
        ax2.errorbar(df["nu"], df["Fv_obs"]*sft, df["Fv_err"]*sft, fmt='o',markersize=4,label=file, color=c,markeredgecolor='k', markeredgewidth=.4)
        ax2.plot(nu, np.array(spec_fit[:,i])*sft, color=c,lw=1)

    ax2.set_xscale('log')
    ax2.set_yscale('log')
    ax2.set_xlabel(r'$\nu$ [Hz]')
    ax2.set_ylabel(r'$F_\nu$ [erg/cm$^2$/s/Hz]')
    ax2.legend()
    plt.tight_layout()

draw_bestfit(t_out, lc, nu_out, spec)

Corner plots are essential for visualizing parameter correlations and posterior distributions:

def plot_corner(flat_chain, labels, filename="corner_plot.png"):
    fig = corner.corner(
        flat_chain,
        labels=labels,
        quantiles=[0.16, 0.5, 0.84],  # For median and ±1σ
        show_titles=True,
        title_kwargs={"fontsize": 14},
        label_kwargs={"fontsize": 14},
        truths=np.median(flat_chain, axis=0),  # Show median values
        truth_color='red',
        bins=30,
        smooth=1,
        fill_contours=True,
        levels=[0.16, 0.5, 0.68],  # 1σ and 2σ contours
        color='k'
    )
    fig.savefig(filename, dpi=300, bbox_inches='tight')

# Create the corner plot
flat_chain = result.samples.reshape(-1, result.samples.shape[-1])
plot_corner(flat_chain, result.latex_labels)

Parameter Fitting with Redback

For parameter estimation and Bayesian inference, VegasAfterglow models are integrated into redback, which provides a unified interface for fitting all transient types.

Loading Data & Fitting: (click to expand/collapse)
import redback

# Multiple ways to load data:
GRB = 'GRB070809'

# Method 1: From Swift BAT+XRT (recommended for Swift GRBs)
redback.get_data.get_bat_xrt_afterglow_data_from_swift(grb=GRB, data_mode="flux")
afterglow = redback.afterglow.SGRB.from_swift_grb(name=GRB, data_mode='flux')

# Method 2: From open access catalogs
afterglow = redback.afterglow.Afterglow.from_open_access_catalogue(
    GRB, data_mode='flux_density'
)

# Method 3: From your own data files
import pandas as pd
data = pd.read_csv('my_grb_data.csv')
afterglow = redback.transient.Afterglow(
    name=GRB,
    data_mode='flux_density',
    time=data['time'].values,
    flux_density=data['flux'].values,
    flux_density_err=data['flux_err'].values,
    frequency=data['frequency'].values
)

# Fit with VegasAfterglow tophat model
result = redback.fit_model(
    transient=afterglow,
    model='vegas_tophat',  # VegasAfterglow tophat jet model
    sampler='dynesty',
    nlive=1000
)

result.plot_corner()
result.plot_lightcurve()
result.plot_residuals()

Available VegasAfterglow models in redback:

  • vegas_tophat - Tophat jet + ISM
  • vegas_gaussian - Gaussian jet + ISM
  • vegas_powerlaw - Power-law jet + ISM
  • vegas_two_component - Two-component jet + ISM
  • vegas_tophat_wind - Tophat jet + Wind medium
  • ... and more

Why use the Redback interface?

  • Data Management: Seamlessly load data from Swift, Fermi, BATSE, or custom files. Supports flux, flux_density, magnitude, and luminosity.
  • Advanced Statistics: Access multiple samplers (dynesty, emcee, ultranest), parallel sampling, and Bayesian model comparison.
  • Visualization: Generate publication-ready corner plots and multi-band light curves automatically.

For complete documentation on the API, visit the redback documentation.


Validation & Testing

VegasAfterglow includes a comprehensive validation framework to ensure numerical accuracy and physical correctness. The validation suite consists of two main components:

Benchmark Tests (click to expand/collapse)

Benchmark tests measure computational performance and verify numerical convergence across resolution parameters:

  • Performance Timing: Measures execution time for various jet/medium/radiation configurations
  • Resolution Convergence: Tests convergence in phi (azimuthal), theta (polar), and time dimensions
  • Pass Criteria: Mean error < 5% and max error < 10% at fiducial resolution

The default fiducial resolution (0.15, 1.0, 10) has been tested to converge for most configurations. For details, see the Validation Report (PDF).

Regression Tests (click to expand/collapse)

Regression tests verify that simulation outputs match theoretical predictions from GRB afterglow theory:

  • Shock Dynamics: Validates power-law scaling of Lorentz factor, radius, magnetic field, and particle number
  • Characteristic Frequencies: Verifies evolution of injection (nu_m) and cooling (nu_c) frequencies
  • Spectral Shapes: Checks power-law indices across different frequency regimes (I-V)
  • Evolutionary Phases: Tests coasting, Blandford-McKee, and Sedov-Taylor phases for ISM and wind media
Running Validation (click to expand/collapse)

Prerequisite: Install with validation support, which includes per-stage CPU profiling and PDF report dependencies:

pip install -e ".[test]" --config-settings=cmake.define.AFTERGLOW_PROFILE=ON
# Run full validation suite (benchmark + regression + PDF report)
python validation/run_validation.py --all

# Run only benchmark tests
python validation/run_validation.py --benchmark

# Run only regression tests
python validation/run_validation.py --regression

# Check existing results without re-running tests
python validation/run_validation.py --check-only

The validation runner generates a comprehensive PDF report with convergence plots, summary grids, and detailed diagnostics. The overview page includes a stacked bar chart breaking down CPU time by internal C++ computation stage. The latest report is available online as the Validation Report (PDF). If you modify the code, you can regenerate the report locally by running the validation suite above — the report will be saved at validation/comprehensive_report.pdf.

To return to the normal (zero-overhead) build:

pip install -e .

Powered by Claude Code


Documentation

Comprehensive documentation is available at Documentation including:

  • Installation Guide: Detailed instructions for setting up VegasAfterglow
  • Quick Start: Get up and running with basic examples
  • Examples: Practical examples showing common use cases
  • MCMC Fitting: Complete guide to Bayesian parameter estimation with bilby integration
  • Parameter Reference: Comprehensive reference for all physical and numerical parameters
  • Validation & Testing: Benchmark and regression test framework for verifying numerical accuracy
  • Python API Reference: Complete documentation of the Python interface
  • C++ API Reference: Detailed documentation of C++ classes and functions
  • Troubleshooting: Common issues and solutions
  • Contributing Guide: Information for developers who wish to contribute

For a complete history of changes and new features, see our Changelog.


Contributing

If you encounter any issues, have questions about the code, or want to request new features:

  1. GitHub Issues - The most straightforward and fastest way to get help:

    • Open an issue at Issues
    • You can report bugs, suggest features, or ask questions
    • This allows other users to see the problem/solution as well
    • Can be done anonymously if preferred
  2. Pull Requests - If you've implemented a fix or feature:

    • Fork the repository
    • Create a branch for your changes
    • Submit a pull request with your changes
  3. Email - For private questions or discussions:

We value all contributions and aim to respond to issues promptly. All communications are extremely welcome!


License

VegasAfterglow is released under the BSD-3-Clause License.

The BSD 3-Clause License is a permissive open source license that allows you to:

  • Freely use, modify, and distribute the software in source and binary forms
  • Use the software for commercial purposes
  • Integrate the software into proprietary applications

Requirements:

  • You must include the original copyright notice and the license text
  • You cannot use the names of the authors or contributors to endorse derived products
  • The license provides no warranty or liability protection

For the full license text, see the LICENSE file in the repository.


Acknowledgments & Citation

We would like to thank the contributors who helped improve VegasAfterglow. Special thanks to Weihua Lei, Shaoyu Fu, Liang-Jun Chen, Iris Yin, Cuiyuan Dai, Binbin Zhang and Nikhil Sarin for their invaluable work as beta testers, providing feedback and helping with bug fixes during development. We also thank the broader community for their suggestions and support.

If you find VegasAfterglow useful in your research, we would be grateful if you could cite:

Wang, Y., Chen, C., & Zhang, B. (2026). VegasAfterglow: A high-performance framework for gamma-ray burst afterglows. Journal of High Energy Astrophysics, 50, 100490. ADS

@ARTICLE{2026JHEAp..5000490W,
       author = {{Wang}, Yihan and {Chen}, Connery and {Zhang}, Bing},
        title = "{VegasAfterglow: A high-performance framework for gamma-ray burst afterglows}",
      journal = {Journal of High Energy Astrophysics},
     keywords = {Gamma-ray bursts, Shocks, Relativistic jets, Computational methods, Open source software, High Energy Astrophysical Phenomena},
         year = 2026,
        month = feb,
       volume = {50},
          eid = {100490},
        pages = {100490},
          doi = {10.1016/j.jheap.2025.100490},
archivePrefix = {arXiv},
       eprint = {2507.10829},
 primaryClass = {astro-ph.HE},
       adsurl = {https://ui.adsabs.harvard.edu/abs/2026JHEAp..5000490W},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

Zhang, B. (2018). The Physics of Gamma-Ray Bursts. Cambridge University Press. ADS

@book{Zhang2018,
  author    = {Zhang, Bing},
  title     = {{The Physics of Gamma-Ray Bursts}},
  publisher = {Cambridge University Press},
  year      = {2018},
  doi       = {10.1017/9781139226530}
}

Parts of the documentation and code comments were generated with the assistance of Claude Code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vegasafterglow-2.0.0rc3.tar.gz (33.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vegasafterglow-2.0.0rc3-cp314-cp314-win_arm64.whl (373.7 kB view details)

Uploaded CPython 3.14Windows ARM64

vegasafterglow-2.0.0rc3-cp314-cp314-win_amd64.whl (390.8 kB view details)

Uploaded CPython 3.14Windows x86-64

vegasafterglow-2.0.0rc3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (682.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_x86_64.whl (533.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_arm64.whl (439.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp313-cp313-win_arm64.whl (362.2 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-2.0.0rc3-cp313-cp313-win_amd64.whl (379.9 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-2.0.0rc3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (682.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_x86_64.whl (532.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_arm64.whl (439.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp312-cp312-win_arm64.whl (362.2 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-2.0.0rc3-cp312-cp312-win_amd64.whl (380.0 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-2.0.0rc3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (682.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_x86_64.whl (532.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_arm64.whl (439.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp311-cp311-win_arm64.whl (360.8 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-2.0.0rc3-cp311-cp311-win_amd64.whl (378.5 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-2.0.0rc3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (681.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_x86_64.whl (530.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_arm64.whl (438.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp310-cp310-win_arm64.whl (359.6 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-2.0.0rc3-cp310-cp310-win_amd64.whl (376.8 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-2.0.0rc3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (680.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_x86_64.whl (529.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_arm64.whl (437.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp39-cp39-win_arm64.whl (359.7 kB view details)

Uploaded CPython 3.9Windows ARM64

vegasafterglow-2.0.0rc3-cp39-cp39-win_amd64.whl (376.7 kB view details)

Uploaded CPython 3.9Windows x86-64

vegasafterglow-2.0.0rc3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (681.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_x86_64.whl (529.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_arm64.whl (437.4 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-2.0.0rc3-cp38-cp38-win_amd64.whl (376.7 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-2.0.0rc3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (680.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_x86_64.whl (529.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_arm64.whl (437.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file vegasafterglow-2.0.0rc3.tar.gz.

File metadata

  • Download URL: vegasafterglow-2.0.0rc3.tar.gz
  • Upload date:
  • Size: 33.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vegasafterglow-2.0.0rc3.tar.gz
Algorithm Hash digest
SHA256 27328d41582b114f4a2bcfa230ea198875847b8b601ef0b4966656a396555894
MD5 549fbaed4080792e4ad8f0c2ac1fae0f
BLAKE2b-256 660cfd67eebfd0df845326601841d2c6663f9eccadb01b052f751e0bb04d3c3b

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp314-cp314-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 ec0f350ca1404f89495f837a423976175b15e7aed9b87451753a21e6eea7f339
MD5 24942fe4908009100c957fc44e4f8ead
BLAKE2b-256 12049a1056521887021964870eed5f69b1c162ea5c8c4b9f591950e09d171dcb

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 966f2d266e7a02777c6b5de8cf45441bf425ad07cbf37f2f4ce0ff9e0478d304
MD5 3933b413331b14503f5d58b82ff3b6ea
BLAKE2b-256 5f8980bd3a5b83eaa31bbb78568ac0bd0a537ce3e13008fa524ede9dc2a88728

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ee9b6d85b39d96071d6def8ddd866122a65fb0c05ee2fbe85d51da4d49413dc
MD5 7c49143118abf24cb1c0bbcc912e48b4
BLAKE2b-256 2ee582dde745ccbb3e3b5e6c8911e2fce075a054e59f3c32b5bd2c326f1b6cc1

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 46e10de8acf20adee50415bf141c45bb29a2ca0b667102fc1e7d6663b40dbd41
MD5 dc8dc99a6bfee21bc96185f123dae048
BLAKE2b-256 184683e0bd8e9e8b40c4aad4c8eebf41418078463e54d0b6716bfd87b8982ad0

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89b5f8209fc3a16ddd6088f6616e488b261294c0cd4b3a8937720bf174d6a1d7
MD5 f66d91ef9d4555fee63a414aa537ee7e
BLAKE2b-256 9be4ff4175fec111d7f7c1f5731e857995312af5ef630c4eb9c4a8576f4eaed6

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 97c8c78d3aab1335e66d83c5c98befae7ea2e2421c63630b5174a5422a1755cb
MD5 9537de23d70d30d3b62b3d9ee69469ee
BLAKE2b-256 97a62ba0693e49786cb4e378f9309817820c89c0863575badd5ae7bf2669145b

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 07b5249970d7b6d2d6bff5adf2a0d04717d22aeec9ed1535f384effd89e06eee
MD5 2eb44284406c5798589123ef2405b173
BLAKE2b-256 a84f93279d29e9ca72fa8956f426fb212ecf4015adf5315111f84e933c4b60f8

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c85459f7806cf8b82e4ead0a566c1e74d4b95a3a69487d7898e165bdd48982d5
MD5 af297cd7acda622f6c72fcc004fb28c6
BLAKE2b-256 a7aefb68ad7c4a0042ab9b9d6420ea52d1836b9296cb166850457a8e893a4277

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 781df6605dac11d324d09d3f90933af18cc7eea857f25bd43cb0c7215766fd08
MD5 fd12548ec5687f51eaf38b67569bc715
BLAKE2b-256 3f286b53acd4ac87099fa3d6f7e93e0a55269fbbe461bc95371f271b46a77852

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fd7a955396251c8bbaf5504aefd7b0956dd4457d2b77743b3145fb7d5ce8612c
MD5 9333a4d9c33fa1bfb0371c79bc184f06
BLAKE2b-256 93e37df148c975d448f6122080968f97ca0db33979dbc77ad5046bd0d6ebe94d

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 4ae91a76f1566110eb224dfbb79f63ee21caa84efcba0f821e59bfb4f6054b78
MD5 8b827cedc2a3f54e5d152f9404f1f34f
BLAKE2b-256 691580ad8fd5c0da00eaa882cd8af4451cd12cfb73667911554149a8eaba0307

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d16405f045e18defe9cef4a0a35ab1452548f182a15a5bb96b3be264c28dad2a
MD5 a9bbdcae55d281663b76854a4366afc3
BLAKE2b-256 301a5575f7bdc4c25851669581dcd9dd6c21288f0ee58ff7979c8d2fa59275a9

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2b3cf93cf995cf0a068a98c7d289d8e65be2009f5bb416b6d155147d74ae0127
MD5 dcc412ff1262a750a60d47478a29df19
BLAKE2b-256 699e52998d7fcbb32eb86b8f291c54ff4aa60298578dacf19a9a93d10a02b5a5

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a4600ed607506c749373f8c8a5e5741a51622b5db536a37251bba36ec3a839a8
MD5 98de95eb83c225308d7d013b740c1dcf
BLAKE2b-256 90c7787763d150cf4c46b47a1cfeffb783a4a959ec179d121cc676de72ee4450

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be9e5dd47aa30c4c19d3d7360454382caf0897f319507739ad70facc4eeb1e0c
MD5 d7377dbdc82c85a2a04352f7d6acf4d6
BLAKE2b-256 141664724f4c4f1ecfa8c340fde7c2b1c8abc92972626b2ec6cccbf67dfd4e42

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 4b136d277eeb66bad63b5a257b89ffa536f918b93e20318920b88fe20c103631
MD5 321ff0dcb7aa5ca4a5b19cc00c8575e0
BLAKE2b-256 e74448009eab5fd2abef8bc8ca39d57c76aa3e12e2199977dc562606ab067f50

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e66aa7641c4c84832d73a75ba72cf125bdd18ed653b3bba5eb9b5c5575585ed5
MD5 4059967d97ae83e1bb49a7b41649b93a
BLAKE2b-256 af4fd7de9b8e30ebb58e8b39075ee733f6dd85e606ae88d55c769973ad1f5919

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62dcd82ef7928a5d8fda54bd3349521a8a326eb61cc5e7484fb296759bcac1ba
MD5 f857bc55e53d8cf30737e196676e197d
BLAKE2b-256 7cf1fa0d6e1d46c75a0967cc1819a75cb2ac55273e4dd44bd4c560fe3e78940d

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 69378dfdf0add7308eb1e9106264670b0641197933ddad37bd73d76a3f12df2b
MD5 145c1a93d15d02d8c9fd34bf0e703060
BLAKE2b-256 7666727864cdef99d0c863ec954baccfd94e44951639579d78e6127ef2933b11

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d133f7caea9d85cd7d6b3d6c1caa6b12b78a9d2a71be418c92acafbfb7f72bcd
MD5 2ee4c9ffe7a78e6238bcd1dfb714a7f0
BLAKE2b-256 c5b53939373c13c877f1f47bc2d0f0e5276d6038e65ccb299491acb16f15f4f7

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 520e1e6ea4caee9aaabb1cb151213756b063b2c05aa8cec7cc72bab21d996284
MD5 89d95678ca14f14c2f9b956ae6a0bbf5
BLAKE2b-256 aa68cc464f4854d0e0be1fa55e2f20753bde9942fa478ff3a253db839e65b1b6

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3abf1099b4e36fce66a9656dc4731e73e46d05e22f5730fd87898cfda4596884
MD5 38a80bff51d6f174c38278ce48df7b3f
BLAKE2b-256 13b677dbde34804713da0ad73f37dfbb4ccfadeb01268a8f79a7a8ec3dfcb948

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d2ea6f62a157c524413d7701a03883fd8f33c9bc19ea277dd9df1bdc12e7e64
MD5 d430f36c5f0cfb7415177e414f185e7e
BLAKE2b-256 b0116fb8f9c9b8bacefcd40cd909cb3f482d37d3b5321bdcf21528841e88f95c

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 647cb87948aeef4d84b7ccfb0a3e7786766dde30e96b5ead9066b565a3f7acc2
MD5 0acd66ca88a3ebddd52f4c1f7a465915
BLAKE2b-256 7070fa306a0d7d8271e85fda25ab5b22be5b36494cf844158092ec65f58ff98b

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d7449f8fc9d78e005ed9c0aff5933317ee913fbdfcc512942085f913970dbf9
MD5 b0d53d1e19680977c50c68d158b8051d
BLAKE2b-256 8ea5c0c2e890770e4c1f7f265134d0835a42cd114990d6557918a464de886b62

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp39-cp39-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 8c1d1fd616fc3d634e7b38998003ae4ac49bbd7ce3b76b578843867a5e9e85d7
MD5 b56d3729f8e5d47cddb93864e2408954
BLAKE2b-256 30fbb00f9a17e5ad2435ca9f8d739e8526cc24285ee7dfbb3ea4a9fe7caef28b

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 60b9ac23c18e1b8c8b9b511fc07b0be6b0b9623f780a5873ac3a1d68ab1fddc8
MD5 17e0ea8118e2e92d301c380ee2a33392
BLAKE2b-256 15c808016c467684851e8975017272f33f2cadd98c66f8d5513e377fa6dfdae7

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 85c8538bc9bad465bbbe54d68dc267926b7f4647295e816adc13a7114312f1d5
MD5 8085e52851eee87b0aac444e4f5d0007
BLAKE2b-256 fb1630e8736bf962651b115f399ffc4a62ca0d431e7c8efa99a11bcdd1e37a5e

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 63fe94673c21221673e59dc96311f6300f020afd76daeacb7b9245dc7889464f
MD5 1d508122f2a949bba28bbf07efa97816
BLAKE2b-256 c1625c3b8d259a1593d0e7b72b3966a6a2f4ba8824a6b9dc0b8225af52d39163

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 300931fe22795b83fcbb095fd3ebc66d5c2f3be1761c5a7b97be6215b3192693
MD5 0bae96a8721260d589a126baab61bbfc
BLAKE2b-256 efaa37d80ecb2b15008a7f6bd151d44f3db917ff656731e4afd46eee5ff75a08

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2e832b4e01c5928ce2faa9494014586a825c5df3bf3f91efb97ee3fdbe767edf
MD5 0821b23c1f37a071bbc7c3afe7c12dec
BLAKE2b-256 350c8f31bb46f9670b9059398bf72d9f52fc8d92d30ae5f8bd1ac272c4028137

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cc248604f9ceff4eea002163e393f06d0d54bbd2ba6e9a28edc68b0dd2c0dc2e
MD5 fdedd8b64553a40822d80b8f54b9b753
BLAKE2b-256 d9c6d41d78929fdd96882bb06b39049bc99261507d8dd171d50a5df2a4402243

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d176d482099dbfe3c435b7f75203ef27c8233935874a6be6944e64e217207774
MD5 338f276528a764cedeaa6c22d750e685
BLAKE2b-256 01d57cf244f3f2732a5aac37b23074234c9040706bf42eaa1bd5b133b0e6185c

See more details on using hashes here.

File details

Details for the file vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-2.0.0rc3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13defe194ad930aa4c730982a9d981a194bc775682968ed24580f3fa9950d3e7
MD5 f66429bebb635434abb2dc9ed3ddc4dd
BLAKE2b-256 ef7f3309374f5783d080752f16416d4e0b106fcbf1283719cce3a5e8d240a8d3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page