Skip to main content

MCMC tools for astrophysics

Project description

VegasAfterglow

VegasAfterglow Logo

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

VegasAfterglow is a high-performance C++ framework with a user-friendly Python interface designed for the comprehensive modeling of 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 in seconds to minutes. 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. For lightweight afterglow modeling, one can also consider the PyFRS package.


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.


Performance Highlights

VegasAfterglow delivers exceptional computational performance through deep optimization of its core algorithms:

  • Ultra-fast Light Curve Computation: Generates a 100-point single-frequency light curve (forward shock & synchrotron only) from a structured jet viewed off-axis in approximately 1 millisecond on an Apple M2 chip with a single core.

  • Rapid MCMC Exploration: Enables parameter estimation with 10,000 MCMC steps for 8 parameters on 20 data points across multi-wavelength light curves and spectra on an 8-core Apple M2 chip in:

    • ~50 seconds for on-axis structured jet scenarios

This level of performance is achieved through optimized algorithm implementation and efficient memory access patterns, facilitating comprehensive Bayesian inference on standard laptop hardware in seconds to minutes rather than hours or days. The accelerated convergence speed enables rapid iteration through different physical models and makes VegasAfterglow suitable for both detailed analysis 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 is the recommended method for most users. 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

We provide basic example scripts (script/quick.ipynb, script/details.ipynb and script/mcmc.ipynb) that demonstrate how to set up and run afterglow simulations. This section shows how to calculate light curves and spectra for a simple GRB afterglow model without the need for observational data and perform MCMC parameter fitting with observational data. The notebook can be run using either Jupyter Notebook or VSCode with the Jupyter extension.

To avoid conflicts when updating the repository in the future, make a copy of the example notebook in the same directory and work with the copy instead of the original.

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.specific_flux(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.specific_flux(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.specific_flux_series(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:

  • specific_flux(): Calculates flux on a time-frequency grid (NxM output from N times and M frequencies)
  • specific_flux_series(): Calculates flux at paired time-frequency points (N output from N time-frequency pairs), requires ascending order time arrays
  • specific_flux_series_with_expo(): 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)

obs = Observer(lumi_dist=1e26, z=0.1, 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.1,5,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

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,:],label=r'$\gamma_a$',ls='--',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.gamma_m[0, 0, :]*details.fwd.Doppler[0,0,:],label=r'$\gamma_m$',ls='--',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.gamma_c[0, 0, :]*details.fwd.Doppler[0,0,:],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,:],label=r'$\nu_a$',ls='--',c='firebrick')
    plt.loglog(t[0, 0, :], details.fwd.nu_m[0, 0, :]*details.fwd.Doppler[0,0,:],label=r'$\nu_m$',ls='--',c='yellowgreen')
    plt.loglog(t[0, 0, :], details.fwd.nu_c[0, 0, :]*details.fwd.Doppler[0,0,:],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

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. Preparing Data and Configuring the Model (click to expand/collapse)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import corner
from VegasAfterglow import ObsData, Setups, Fitter, ParamDef, Scale

VegasAfterglow provides flexible options for loading observational data through the ObsData class. You can add light curves (specific flux vs. time) and spectra (specific flux vs. frequency) in multiple ways.

# Create an instance to store observational data
data = ObsData()

# Method 1: Add data directly from lists or numpy arrays

# For light curves
t_data = [1e3, 2e3, 5e3, 1e4, 2e4]  # Time in seconds
flux_data = [1e-26, 8e-27, 5e-27, 3e-27, 2e-27]  # Specific flux in erg/cm²/s/Hz
flux_err = [1e-28, 8e-28, 5e-28, 3e-28, 2e-28]  # Specific flux error in erg/cm²/s/Hz
data.add_light_curve(nu_cgs=4.84e14, t_cgs=t_data, Fnu_cgs=flux_data, Fnu_err=flux_err)
# You can also assign weights to each data point to account for systematic uncertainties or correlations. You don't need to worry about the weights' normalization, the code will normalize them automatically.
#data.add_light_curve(nu_cgs=4.84e14, t_cgs=t_data, Fnu_cgs=flux_data, Fnu_err=flux_err, weights=np.ones(len(t_data)))

# For spectra
nu_data = [...]  # Frequencies in Hz
spectrum_data = [...] # Specific flux values in erg/cm²/s/Hz
spectrum_err = [...]   # Specific flux errors in erg/cm²/s/Hz
data.add_spectrum(t_cgs=3000, nu_cgs=nu_data, Fnu_cgs=spectrum_data, Fnu_err=spectrum_err, weights=np.ones(len(nu_data)))
# Method 2: Load from CSV files

data = ObsData()
# Define your bands and files
bands = [2.4e17, 4.84e14, 1.4e14]  # Example: X-ray, optical R-band
lc_files = ["data/ep.csv", "data/r.csv", "data/vt-r.csv"]

# Load light curves from files
for nu, fname in zip(bands, lc_files):
    df = pd.read_csv(fname)
    data.add_light_curve(nu_cgs=nu, t_cgs=df["t"], Fnu_cgs=df["Fv_obs"], Fnu_err=df["Fv_err"])

times = [3000] # Example: time in seconds
spec_files = ["data/ep-spec.csv"]

# Load spectra from files
for t, fname in zip(times, spec_files):
    df = pd.read_csv(fname)
    data.add_spectrum(t_cgs=t, nu_cgs=df["nu"], Fnu_cgs=df["Fv_obs"], Fnu_err=df["Fv_err"])

Note: The ObsData interface is designed to be flexible. You can mix and match different data sources, and add multiple light curves at different frequencies as well as multiple spectra at different times.

The Setups class defines the global properties and environment for your model. These settings remain fixed during the MCMC process. Check the documentation for all available options.

cfg = Setups()

# Source properties
cfg.lumi_dist = 3.364e28    # Luminosity distance [cm]
cfg.z = 1.58               # Redshift

# Physical model configuration
cfg.medium = "wind"        # Ambient medium: "wind", "ism", etc. (see documentation)
cfg.jet = "powerlaw"       # Jet structure: "powerlaw", "gaussian", "tophat", etc. (see documentation)

These settings affect how the model is calculated but are not varied during the MCMC process.

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("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 data and configuration, then run the MCMC process:

# Create the fitter object
fitter = Fitter(data, cfg)

# Run the MCMC fitting
result = fitter.fit(
    param_defs=mc_params,          # Parameter definitions
    total_steps=10000,             # Total number of MCMC steps
    burn_frac=0.3,                 # Fraction of steps to discard as burn-in
    thin=1                         # Thinning factor
)

The result object contains:

  • samples: The MCMC chain samples (posterior distribution)
  • labels: Parameter names
  • best_params: Maximum likelihood parameter values
3. Analyzing Results and Generating Predictions (click to expand/collapse)

Check the best-fit parameters and their uncertainties:

# Print best-fit parameters (maximum likelihood)
print("Best-fit parameters:")
for name, val in zip(result.labels, result.best_params):
    print(f"  {name}: {val:.4f}")

# Compute median and credible intervals
flat_chain = result.samples.reshape(-1, result.samples.shape[-1])
medians = np.median(flat_chain, axis=0)
lower = np.percentile(flat_chain, 16, axis=0)
upper = np.percentile(flat_chain, 84, axis=0)

print("\nParameter constraints (median and 68% credible intervals):")
for i, name in enumerate(result.labels):
    print(f"  {name}: {medians[i]:.4f} (+{upper[i]-medians[i]:.4f}, -{medians[i]-lower[i]:.4f})")

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.specific_flux(best_params, t_out, band)

# Generate model spectra at the specified times using the best-fit parameters
spec = fitter.specific_flux(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):
    lc_files = ["data/ep.csv", "data/r.csv", "data/vt-r.csv"]
    spec_files = ["data/ep-spec.csv"]
    nus = [2.4e17, 4.84e14, 1.4e14]
    ts = [3000]

    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.labels)

Documentation

Comprehensive documentation is available at Documentation including:

  • Installation Guide: Detailed instructions for setting up VegasAfterglow
  • Examples: Practical examples showing common use cases
  • Python API Reference: Complete documentation of the Python interface
  • C++ API Reference: Detailed documentation of C++ classes and functions
  • Contributing Guide: Information for developers who wish to contribute

The documentation is regularly updated with the latest features and improvements (not yet officially released).

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 and Binbin Zhang 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 use VegasAfterglow in your research, please cite the relevant paper(s):

https://ui.adsabs.harvard.edu/abs/2025arXiv250710829W/abstract

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-1.0.1.tar.gz (15.5 MB view details)

Uploaded Source

Built Distributions

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

vegasafterglow-1.0.1-cp313-cp313-win_arm64.whl (234.9 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-1.0.1-cp313-cp313-win_amd64.whl (252.5 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-1.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (313.3 kB view details)

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

vegasafterglow-1.0.1-cp313-cp313-macosx_11_0_arm64.whl (250.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl (273.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vegasafterglow-1.0.1-cp312-cp312-win_arm64.whl (234.9 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-1.0.1-cp312-cp312-win_amd64.whl (252.4 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-1.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (313.4 kB view details)

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

vegasafterglow-1.0.1-cp312-cp312-macosx_11_0_arm64.whl (250.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl (272.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vegasafterglow-1.0.1-cp311-cp311-win_arm64.whl (234.7 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-1.0.1-cp311-cp311-win_amd64.whl (251.0 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-1.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (310.8 kB view details)

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

vegasafterglow-1.0.1-cp311-cp311-macosx_11_0_arm64.whl (249.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl (270.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vegasafterglow-1.0.1-cp310-cp310-win_arm64.whl (235.0 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-1.0.1-cp310-cp310-win_amd64.whl (250.5 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-1.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (310.2 kB view details)

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

vegasafterglow-1.0.1-cp310-cp310-macosx_11_0_arm64.whl (248.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl (269.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

vegasafterglow-1.0.1-cp39-cp39-win_arm64.whl (234.0 kB view details)

Uploaded CPython 3.9Windows ARM64

vegasafterglow-1.0.1-cp39-cp39-win_amd64.whl (257.9 kB view details)

Uploaded CPython 3.9Windows x86-64

vegasafterglow-1.0.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (310.4 kB view details)

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

vegasafterglow-1.0.1-cp39-cp39-macosx_11_0_arm64.whl (248.4 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl (269.5 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

vegasafterglow-1.0.1-cp38-cp38-win_amd64.whl (250.0 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-1.0.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (310.1 kB view details)

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

vegasafterglow-1.0.1-cp38-cp38-macosx_11_0_arm64.whl (248.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

vegasafterglow-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl (269.1 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file vegasafterglow-1.0.1.tar.gz.

File metadata

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

File hashes

Hashes for vegasafterglow-1.0.1.tar.gz
Algorithm Hash digest
SHA256 654dfe47c6d54287da6502fe317912a6a6fc075e6c929159049ab565eb882d76
MD5 73bf7209342acd93dd0b23734741ec48
BLAKE2b-256 de92ae6bac74064608564582661e8597ca4f97e7668301f0b38f85b054d5b54d

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 d79d0bebe4bbf7a0a8c7de226d3c4d098d2d032c910b09650a23cf4a3b57c74e
MD5 3dc1b9d68d64dbff6a89c5bb3dda1fda
BLAKE2b-256 c3c422bb2ca2e6ab72041df09120f17695e3381d4da3820f9ffa892f94c94616

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6dd123134069611edce28e90e5a1bd1752a27541e5822e1704f0b1dd7161c901
MD5 ae28183b20ae2fba5cca32ab18337ab6
BLAKE2b-256 6bab33756817c629fbb52e8e79d8e949151afae0ff087766579938f1c85b2f1b

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8758a37e2fe16b4c1507896c2e4f329d7389e7f5fe464d1168405e4c3994e6f8
MD5 790d46ca61586a6de1cbf02dd9c89e45
BLAKE2b-256 5b27dbd4b5b9f9fed7221bd892d643e08169edfacc378b52268904bfa316c3ce

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cdb0c3f995e87309262045ce654ef9114ab95552372be15d7d9f5c014060e7ad
MD5 b1665c9a6d6587a8303f6d4e7de8e929
BLAKE2b-256 ccb268548deac548f7c9016b71fb5572743cb4a96f2404dc2fab584d7994ee69

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b454dc2d07ba51ba79a06989b93882bc05db14dcc461fc135a1addde577528de
MD5 b9294aa644226821eebf1ac4a6473bf9
BLAKE2b-256 aa9964362d4bbaf8fad993da6386fcfa5338bf6a98b39c48977e6afe87feb213

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 e425d800f95521a7b3fb419d5289268cb4805bbe31af66456f33a87c4f34f25a
MD5 f3041591e6da29fe77d26e443ee40b48
BLAKE2b-256 485187aafcfa0e2bcc18581423600ae1b80ed86502c6f5d15d11b9225df382b5

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 424952462e32f551293d60ef3fae5cd39598803d759694be61c93a6c54834b24
MD5 273435fc63576c4687bffdca70446705
BLAKE2b-256 4f28b3d9ec0c990c781f0376d09f458d46db3560cb3893207450aefe6921cd5a

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 26cd93b6ccabf38c7f28979d032a73a3f9ae70a4bf6f70329b1abb01ac06a9b5
MD5 346b77d78244d2815b4c1af8bbd1c624
BLAKE2b-256 9df790b9656e53eb291bce020485133821d8a061e6cf5c2b5bff0fa3ce6dd759

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4483b05d1f01808c735e9b1c11f38ddac9893f9f7463481f6acf3ecff082b687
MD5 93e19853940ed2b9cec8c02840e2875d
BLAKE2b-256 52a2e8f7059eb4e8e0902be9d6c063a0344e8e170083ab3fa7b1091b4445aec8

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f1f0fc6b0b7839875f8dabf58b492141cb7e0a7be866fc2782def0645d9c5de3
MD5 91643c88104e90a12dccda2edd1ab842
BLAKE2b-256 7a1cb5c2684d1358aedefa9008d6c09c0b23e85b94d47e7a3459e5f9d02404dd

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 402b7ab2553a62ee3f79d612001d3763927da5b110f23e99f972b0355492b1ed
MD5 d6909439061f9cc90fa39fc4cf968551
BLAKE2b-256 a23655e5d9ce488f3908a88ad31542414c805cad47c3ffa4df35cf449890640e

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e168a69262838a8abdf4b0d40fb0c23fda9b958475a1420e5b8bf97b70da42ed
MD5 15eb35f6a5ccbf015ed9820bf383ab82
BLAKE2b-256 440e044b34cff55e8501c992a54c28ded0ddaf22945508f5e100088ef0595271

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bdfee8e6e4da6df882a7bc1847256e96f64dce8ae162b997eaf7658ccc312b30
MD5 3a6b5b432b78069b573b0105eb6a61b9
BLAKE2b-256 4235a40eee9532e18906394ba43802b8b12b4e7dd3b00edb99672765d5b281ce

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 deca8f5e3c131f59dac3ac4e808bdd7a0872d178dae6a7dda8b29fc6124fe207
MD5 e4e8b090a1a0ef8325b4b2869f036e39
BLAKE2b-256 cd4d1707651d5663905d9518872249a0d4d5c834c4f71352cdec2b866a04d0f1

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b6527aabb6d1659f51351259ab07e06f7b74d845b37b096454e1500bc5b7d3ba
MD5 8744eb6bb29ade5ca87b0b3300f29885
BLAKE2b-256 ce3043e5219fcb192a3357bcff098df03195603b955d60999614df9f9eee2aa0

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 296ad163f27f79daa7d2aa6f5ef8996c52e8a98b49c4cb3193e5416d3c2f861a
MD5 95d68a8f02271f3947e884ac6d0d4aa9
BLAKE2b-256 be9e804f802347d0e2c59e95e8981d3a409bfb45609d85cdd44489034c7af6dc

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e86fdb8d308a6947899dde08f674714516a6ae2a38f8c8379a770013c453b13a
MD5 00f8c62c233045c0e2cadc077c87b091
BLAKE2b-256 f938659a578f81e4f879f985105f9767dfe13c3292b84cf7fe39486c8270f49d

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ffa8db742797ccd91d02051daa4fc3e6ac7041c28d60873aed3ca9e3491b6911
MD5 03ff1e6db60bb16d5486a0482d60a8b6
BLAKE2b-256 e668cb1f387ca43b25dd2b99a8a867da46fd45b9cd3f6fc9d57736db5a6d7bc0

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b54d0644e877fd985864bcd1addc87b00fea2598d0249503a83f1af0f7f9d0a
MD5 aa1fb09fcd59fd33f84638102744b4d3
BLAKE2b-256 53e3e20179a140f9ee1b08d2c0fc2f5226424d6db20202733577c6760eb1934e

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 df0b6d5cf8214a49e96c4eaa4d10507bc49a42296f8cbb1112d79476a950b54f
MD5 27ce7548ca07728b172970876a539b55
BLAKE2b-256 007be542217016f53492a603d94acef3860ef3694d5ee3c7408e2cfa8a0b7758

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp39-cp39-win_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 424e941c8bc90252f1f1a9df70d535e968398c2a32ea21c99fa0e3371e68433c
MD5 33897a5d52e21db6589846ef86ce965a
BLAKE2b-256 dc5d926f9d2976994edf5682dad5e0e86c3ae8a8aa181c16fc3cc284e2a44307

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 289bdbd869f67ba4b7915033ae79e54ad293124f0477e74a67843af48a9dc3bb
MD5 7a5b0b221fbc2365b0cec46dbec7a4c7
BLAKE2b-256 874ef88a63679f01e50a0c802cd869490ad63f622430760a88b3a60042000b00

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f570d26140a510a2d4f73c51b5aaa98b3382589e30f9f877931f95098e5df04d
MD5 3303a796032656c2c85b4bc86697ff41
BLAKE2b-256 985d59e10fefa19d35ebad68b1017101eb56cfe601c29f1f13d7119eb6dac414

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0320df5c34d61b202c1189d1fb3290923d336bc5a9b3296d5e7dd600f06d8123
MD5 9418eb0c2d44b18921a6fa696aee6c46
BLAKE2b-256 d540ef5fd1ffb28263cbd0186b217d52fff7af7a2cc1e46049e4138cf6e8fb6b

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 618004457f02825b257738406de2ab2236686bb37c47669f7c715c3fdb0fbfaa
MD5 479915d66a3d0b846bff54c60c2940d9
BLAKE2b-256 44b5222969bc5b426135e61e138e5e5220841c895ec3c964516ce18e9cad2c6a

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 4e2e85b6d8d592ea66632f8d619d4acbb2a060d781ae01811066b735a57d1b81
MD5 08bdcd9a09f53433203d8960c3a8889f
BLAKE2b-256 63a9543e218c0c14da041a868554b222d0756efa36f05e54030181da611dba36

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0b65ab08b14ee9fedc18ace3433adca5f3098a31af354b7bae80a07cd04d0f5
MD5 5b3b8a51f755223cdb93a98fb10ed057
BLAKE2b-256 15772b7f96e7c1ce0cdfe3f34c7341fe0122b6d98d2cacc3b846d72baa8d23d5

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5fba3a59e66400bae3ec2a7cdd47f8fc3b50b1e729c200053b4946137ab33cf
MD5 5f3a75d8364a7c2942d274a9fb29927d
BLAKE2b-256 7ff6e6597ce7777c2e3ab0a601114adaa92ebcca34e8421b7342a41601bb7745

See more details on using hashes here.

File details

Details for the file vegasafterglow-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for vegasafterglow-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c28760492ea729fe8e427bafb380d00e0e59799c4f7fd4986a07b0d50175293c
MD5 6413eaedb4e37caa17a85d943e560306
BLAKE2b-256 b7a1aa87b779667245f4ebbcfc50238ee1aa6a02b9a1b578dc39cf200eea28de

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