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



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:

    • ~20 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 the static library:
make lib
  1. (Optional) 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, forward_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
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['syn'][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
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['syn'][:,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.

These examples demonstrate the core functionality of VegasAfterglow for modeling GRB afterglows. The code is designed to be highly efficient, allowing for rapid exploration of parameter space and comparison with observational data.

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, forward_rad=rad, resolutions=(0.1,5,10))
Get the simulation quantities (click to expand/collapse)

Now, let's get the internal simulation quantities:

times = np.logspace(-2, 8, 100)  

# Get the simulation details
details = model.details(times)

# Print the keys of the internal quantities
print("Simulation details:", details.keys())

You will get a list of keys representing the internal quantities, such as t_src, t_comv_fwd, EAT_fwd, etc.

  • phi: 1D numpy array of azimuthal angles in radians.
  • theta: 1D numpy array of polar angles in radians.
  • t_src: 3D numpy array of source frame times on coordinate (phi_i, theta_j, t_k) grid in seconds.
  • t_comv_fwd: 3D numpy array of comoving times for the forward shock in seconds.
  • EAT_fwd: 3D numpy array of observer times for the forward shock in seconds.
  • Gamma_downstr_fwd: 3D numpy array of downstream Lorentz factors for the forward shock.
  • Gamma_rel_fwd: 3D numpy array of relative Lorentz factors between upstream and downstream for the forward shock.
  • r_fwd: 3D numpy array of lab frame radii in cm.
  • B_fwd: 3D numpy array of downstream comoving magnetic field strengths for the forward shock in Gauss.
  • theta_fwd: 3D numpy array of polar angles for the forward shock in radians.
  • N_p_fwd: 3D numpy array of downstream shocked proton number per solid angle for the forward shock.
  • N_e_fwd: 3D numpy array of downstream synchrotron electron number per solid angle for the forward shock.
  • gamma_a_fwd: 3D numpy array of comoving frame self-absorption Lorentz factors for the forward shock.
  • gamma_m_fwd: 3D numpy array of comoving frame injection Lorentz factors for the forward shock.
  • gamma_c_fwd: 3D numpy array of comoving frame cooling Lorentz factors for the forward shock.
  • gamma_M_fwd: 3D numpy array of comoving frame maximum Lorentz factors for the forward shock.
  • nu_a_fwd: 3D numpy array of comoving frame self-absorption frequencies for the forward shock in Hz.
  • nu_m_fwd: 3D numpy array of comoving frame injection frequencies for the forward shock in Hz.
  • nu_c_fwd: 3D numpy array of comoving frame cooling frequencies for the forward shock in Hz.
  • nu_M_fwd: 3D numpy array of comoving frame maximum frequencies for the forward shock in Hz.
  • I_nu_max_fwd: 3D numpy array of comoving frame synchrotron maximum specific intensities for the forward shock in erg/cm²/s/Hz.
  • Doppler_fwd: 3D numpy array of Doppler factors for the forward shock.
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:

keys =['Gamma_rel_fwd', 'B_fwd', 'N_p_fwd','r_fwd','N_e_fwd','P_nu_max_fwd']
ylabels = [r'$\Gamma$', r'$B^\prime$ [G]', r'$N_p$', r'$r$ [cm]', r'$N_e$', r'$P_{\nu, \rm max}^\prime$ [erg/s/Hz]']

frames = ['t_src', 't_comv_fwd', 'EAT_fwd']
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(keys)))

#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, key in enumerate(keys):
        plt.subplot(len(keys), len(frames) , j * len(frames) + i + 1)
        if j == 0:
            plt.title(titles[i])
        plt.loglog(details[frame][0, 0, :], details[key][0, 0, :], color='k',lw=2.5)
        plt.loglog(details[frame][0, 0, :], details[key][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_fwd', 'EAT_fwd']
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)
    plt.loglog(details[frame][0, 0, :], details['gamma_a_fwd'][0, 0, :],label=r'$\gamma_a^\prime$',c='firebrick')
    plt.loglog(details[frame][0, 0, :], details['gamma_m_fwd'][0, 0, :],label=r'$\gamma_m^\prime$',c='yellowgreen')
    plt.loglog(details[frame][0, 0, :], details['gamma_c_fwd'][0, 0, :],label=r'$\gamma_c^\prime$',c='royalblue')
    plt.loglog(details[frame][0, 0, :], details['gamma_a_fwd'][0, 0, :]*details['Doppler_fwd'][0,0,:],label=r'$\gamma_a$',ls='--',c='firebrick')
    plt.loglog(details[frame][0, 0, :], details['gamma_m_fwd'][0, 0, :]*details['Doppler_fwd'][0,0,:],label=r'$\gamma_m$',ls='--',c='yellowgreen')
    plt.loglog(details[frame][0, 0, :], details['gamma_c_fwd'][0, 0, :]*details['Doppler_fwd'][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_fwd', 'EAT_fwd']
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)
    plt.loglog(details[frame][0, 0, :], details['nu_a_fwd'][0, 0, :],label=r'$\nu_a^\prime$',c='firebrick')
    plt.loglog(details[frame][0, 0, :], details['nu_m_fwd'][0, 0, :],label=r'$\nu_m^\prime$',c='yellowgreen')
    plt.loglog(details[frame][0, 0, :], details['nu_c_fwd'][0, 0, :],label=r'$\nu_c^\prime$',c='royalblue')
    plt.loglog(details[frame][0, 0, :], details['nu_a_fwd'][0, 0, :]*details['Doppler_fwd'][0,0,:],label=r'$\nu_a$',ls='--',c='firebrick')
    plt.loglog(details[frame][0, 0, :], details['nu_m_fwd'][0, 0, :]*details['Doppler_fwd'][0,0,:],label=r'$\nu_m$',ls='--',c='yellowgreen')
    plt.loglog(details[frame][0, 0, :], details['nu_c_fwd'][0, 0, :]*details['Doppler_fwd'][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['theta_fwd'][0,:,:]
r     = details['r_fwd'][0,:,:]
D     = details['Doppler_fwd'][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['theta_fwd'][0,:,:]
r     = details['r_fwd'][0,:,:]
t_obs = details['EAT_fwd'][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)

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

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" (Interstellar Medium) or "user" (user-defined)
cfg.jet = "powerlaw"       # Jet structure: "powerlaw", "gaussian", "tophat" or "user" (user-defined)

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:

  • 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)
bands = [2.4e17, 4.84e14, 1.4e14] 

# Generate light curves with the best-fit model
lc_best = fitter.light_curves(result.best_params, t_out, bands)

nu_out = np.logspace(6, 20, 150)
times = [3000]
# Generate model spectra at the specified times using the best-fit parameters
spec_best = fitter.spectra(result.best_params, nu_out, times)

Now you can plot the best-fit model:

def draw_bestfit(t, lc_fit, nu, spec_fit):
    # Create figure with two subplots
    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(4.5, 7.5))
    
    # Plot light curves
    shifts = [1, 1, 200]
    colors = ['blue', 'orange', 'green']
    
    for i in range(len(lc_files)):
        df = pd.read_csv(lc_files[i])
        ax1.errorbar(df["t"], df["Fv_obs"] * shifts[i], df["Fv_err"] * shifts[i], 
                    fmt='o', color=colors[i], label=lc_files[i])
        ax1.plot(t, np.array(lc_fit[i]) * shifts[i], color=colors[i], lw=1)

    # Plot spectra
    for i in range(len(spec_files)):
        df = pd.read_csv(spec_files[i])
        ax2.errorbar(df["nu"], df["Fv_obs"] * shifts[i], df["Fv_err"] * shifts[i], 
                    fmt='o', color=colors[i], label=spec_files[i])
        ax2.plot(nu, np.array(spec_fit[0]) * shifts[i], color=colors[i], lw=1)

    # Configure axes
    for ax, xlabel, ylabel in [(ax1, 't [s]', r'$F_\nu$ [erg/cm$^2$/s/Hz]'),
                              (ax2, r'$\nu$ [Hz]', r'$F_\nu$ [erg/cm$^2$/s/Hz]')]:
        ax.set_xscale('log'); ax.set_yscale('log')
        ax.set_xlabel(xlabel); ax.set_ylabel(ylabel)
        ax.legend()

    plt.tight_layout()

draw_bestfit(t_out, lc_best, nu_out, spec_best)

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

We value all contributions and aim to respond to issues promptly.


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

Uploaded Source

Built Distributions

vegasafterglow-0.2.8-cp313-cp313-win_arm64.whl (204.5 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-0.2.8-cp313-cp313-win_amd64.whl (229.1 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (262.2 kB view details)

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

vegasafterglow-0.2.8-cp313-cp313-macosx_11_0_arm64.whl (216.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl (241.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vegasafterglow-0.2.8-cp312-cp312-win_arm64.whl (204.5 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-0.2.8-cp312-cp312-win_amd64.whl (229.1 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (262.0 kB view details)

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

vegasafterglow-0.2.8-cp312-cp312-macosx_11_0_arm64.whl (215.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl (241.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vegasafterglow-0.2.8-cp311-cp311-win_arm64.whl (206.1 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-0.2.8-cp311-cp311-win_amd64.whl (227.6 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (261.5 kB view details)

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

vegasafterglow-0.2.8-cp311-cp311-macosx_11_0_arm64.whl (214.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl (239.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vegasafterglow-0.2.8-cp310-cp310-win_arm64.whl (206.4 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-0.2.8-cp310-cp310-win_amd64.whl (226.9 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.9 kB view details)

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

vegasafterglow-0.2.8-cp310-cp310-macosx_11_0_arm64.whl (213.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl (237.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

vegasafterglow-0.2.8-cp39-cp39-win_arm64.whl (203.0 kB view details)

Uploaded CPython 3.9Windows ARM64

vegasafterglow-0.2.8-cp39-cp39-win_amd64.whl (230.5 kB view details)

Uploaded CPython 3.9Windows x86-64

vegasafterglow-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.9 kB view details)

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

vegasafterglow-0.2.8-cp39-cp39-macosx_11_0_arm64.whl (213.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl (238.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

vegasafterglow-0.2.8-cp38-cp38-win_amd64.whl (226.7 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-0.2.8-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.5 kB view details)

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

vegasafterglow-0.2.8-cp38-cp38-macosx_11_0_arm64.whl (213.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

vegasafterglow-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl (237.7 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vegasafterglow-0.2.8.tar.gz
Algorithm Hash digest
SHA256 eed87702c952a9c5e470550f4f9e24363001cf5096701eff831d582b07d34465
MD5 aecac7da34b32141d21a97a99622d8c0
BLAKE2b-256 3b147c928560ed3653ca6ee710ab3329b8773547790c42dc1f631bcd8750fd91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 f3287f3ebe36828e091ed965fc29eac4c51c9e583adae566ffd02e01ea210d6d
MD5 aa2f1fca984f5a1faa31635021f40900
BLAKE2b-256 1d2a4e8d33ca4f1e936e7b38c775d525a2767a9e6eb561605d9f3129547ef66d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 945245a8c2d3726cfe23c9f7e6d22580ceb753bdbac837560ba1fe8815e45d3a
MD5 551497c6154a96bc5a08bf294a74c927
BLAKE2b-256 c2adf29785190aed697c4501deb758241ec155a1bd36d550029cb6f6874f2c62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 32ae3e9861651d530dba2289ae8fc4dd6dd79da97b980cd161d83c11831d0591
MD5 13a0a58a98858cf0de79beaf54d01dfe
BLAKE2b-256 299ae8eba381de142cba90460709509cbed96ef68f4292c3bcfaba727e05049f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41049947843eabbf30ca749bc6cff13b706594f59b59be3d7424a17c02ffb60a
MD5 5a392c6745a0b8ecdd5ece4ecc8748fb
BLAKE2b-256 fa7fa1abbcb57b4c2a7cc2078496c7b72185dd94cc70c3d2edec890a1525aa76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ad46aafe5973d2fb1617c537c6bb67947b450d4005d7a49e1c14b7e5491a33cd
MD5 65f19670e3230540131301fcd021e7b2
BLAKE2b-256 915129eef3c02222c63012965f48cb718ea4512b4edd0c93cda8c7f0f501982b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 8ea81df52936b999feef3572f6bda363fa14a42938228c29d21303e3148224b7
MD5 b2dccea3b05999d6debb4a8e710d0442
BLAKE2b-256 4485e4aaa0c936db16b3116c2eccdc995f254ed6a723f3a20fba27ce5e9eb94f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1893f256e5285b3f03df97b34cbdb2fad9c2f3753468af7a3f3335ee5ed0f461
MD5 eefdc1ea3db0646abd60e8c476bfac32
BLAKE2b-256 89c818cb9efc10345e4655fa2721ec63eb3ddcfb1b4015d8b866f446345690eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a600ceeefcf813dba5ada757e1548a0755f7c8ee8e39a562227df2f45cabf066
MD5 1e107245adb8297b4236a928ef1caeb5
BLAKE2b-256 323cf85dee8137d5bf4ce3f29cabeb8a79166f13c03265ab4e8e8e8aa207ff83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cb3caf3658c4b70517b9b672ddce3f44fb342b9be9d1e56e8d9382659d77c4a
MD5 b97859fb4b32659956fa063e4c11ad9a
BLAKE2b-256 bc7d13ffbb990ee8f632193c74fea92b97538ba80d0b0ff885a88e966decd7fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8dfb1026c2a84e31602119065098752d677ed7c70b82a29772a5843fddd95a76
MD5 f9be22f2d297ad8ffb2f6fe558f24c3d
BLAKE2b-256 21864e6cba60f7eb2e55f16087135011bd4ccc0ffe07ed1a3884130399d88945

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 516dc937ddfe03e6c1a938fbe59a71e9dd8387b28c54f5a9e3ae1c5a373e398e
MD5 41729f12dadcd3579b76968d6f78ad2f
BLAKE2b-256 d330d856a6f9b79de34cecaa83a00943cd3a0ae4f6398188d43f1fc6af5f779d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ec11832a18ec0edfe84fbe29fc5094a0808b7ce9a7c75cd9f95d206eac24c884
MD5 557732dd2e859a1e69e73a67a48fc85c
BLAKE2b-256 c15399b1a7c27401438496a25129a31228c22e1d1855f2d92ec4085853ce7cd2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1f3cc2f106bc5c336e790ac5f15af25b522fd56bfd8d73bb213652f662a142c0
MD5 c72d6b850bd559172c321100899320fc
BLAKE2b-256 730581ebc912f755e71f842a60364078e79aa094da347bee91dea4604ef83b87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8dcb59e9abe9b53ef4b4382f749879f35f915cccd4865dac89af3dbb093e8730
MD5 123071ea1bf6dbe63f36652dc1d85e39
BLAKE2b-256 b2555faad3ea72d2c88599fac511636773d7f5a77c41bb01620f692b6f8ef121

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4bd338c8e907c3a8dd28c7e183b5680bae163cccc5173282b9c3cabd750ec516
MD5 cc2092b46ceebc8b88eee3c8a8e95b4b
BLAKE2b-256 75913b9651ad18fb7651250ad02e27db40e3834d1ba17b9a8af7eadaa0456b1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 5f36cf6146ab16a078f4e4c8b96e1ae608f7ae086b49c96fba2a9248b8490366
MD5 b5b37d8b97f4ef45be4ad169c91d07d9
BLAKE2b-256 de3704e7a4b5405012c7064dfbd56b5c6075d32f947c12153ba8413dad10b095

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c4d422fd9f7e5884fee61aac7f928deae53f452c9e83f970daef7e650e8ba57f
MD5 dab4380f25d62db1057a7a360a49275e
BLAKE2b-256 c4fe66663e3e7488740b5c815ddb6db6c12ddb801695c7fe5db1b98b81f750d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a91d66fac9155e8640af2bd0ec54e699507548c5de0471f80c8fd9561e273e79
MD5 81440555514fc76633fcb61b91e835fa
BLAKE2b-256 a87660e2fb23bbdc17c5f5cd63453ef62b44a14849ac9603f0d268a5dc579c1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2128424bf7672ad937df527afcec0efe78b62f6a1f899040b0ac2fed909e0b25
MD5 3846258ae3a7e563e06343cce0d91e00
BLAKE2b-256 ac82921f6676a64da6a8fdf0eb563e4a57270fc3eb02cdee5b5ad7651a41d42e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 425076cdc09365c32266e760a5da9130298bd2042787e1e96ac3bd61e411c0db
MD5 bb4ca4715c9a9e984e4881c90d03b88f
BLAKE2b-256 0d585f4652bc23ddaa802dda9e9a0fe7c8f937e8712313e694fe195532d473d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 d5a88773ce27420b5b8ffb021574e37589fcdf1ea21f6d522c1392370bc839c4
MD5 9a39dfffc4390c94e81d9c537d599d9f
BLAKE2b-256 aa1a30cc5aac23e502715944a5bb1e3ea74871fc270f847cad0dff368d8fe14f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 574a51134a52973b59817ef3e367605cf2c87d73951a54fa5b9da2d41b975c67
MD5 03ab1018b848f2a2231a8c04eeb41196
BLAKE2b-256 271e174794fb1bda4fba105d6db7bed7a6f1d810dbbec71f8276abd2e9c7979a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 807380d401549419d855a07c19507cbc7585177502cdc7c226a7e38e86f4357b
MD5 d271014811806b04d48b925a0d277c13
BLAKE2b-256 8c171f2fc365802a7907779bd99f4cbb8e4139d86f6843da9c8a05aa9628f901

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90d1bfec07e7c3e34807a437dcaa00dc4a547da5646442a5b189b36b08f6aa91
MD5 d94e07638191330604aa1cf5d1045963
BLAKE2b-256 15affe1996526501b0e262568b58c1fbfe4c1b06b13282092f6c8ed3175c2a59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 14f5038b1c8083be611e94cabb403f2634a35a24f74359bcc57b043c70ae6453
MD5 77ab9bc5c5c6245d97595ddba6903575
BLAKE2b-256 ae403dff03552aad2a2cfcf93804e0128055cbcbd246a484ba126965245bb0bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 62040b51190ce1df909edd7c8e9153724e5e20417bf441b894feea1a11565ed3
MD5 398e5b524b2b0a1d1f1596a1cc3c4565
BLAKE2b-256 4f83350a1a93e55bf7d691db5eea7ae96106676d73edf4d42b7df30ab2e80eb5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb51ea0bb116439e5af19e912f70e06f7ad92164e9c1469634f102c6e63ef622
MD5 d71cccbb1dc5912d9e51575722eea6a4
BLAKE2b-256 8e203d1b77ac34f58bf500c5bdb5305b4bac716f18d9fe4e6a91d15cd29ce25d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfc4243044099890d3e0805702498c76c469f55708da02f2f7d54aef50c76c31
MD5 70bbd01c58ad432840cef38668de4e91
BLAKE2b-256 df3dff5d5740f55df033cc39e69bfe866cfa347736eafee8e1a8209afb842e48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f8a2374450817a769d39f334fb8c12ca9707432716e167eae2eda4dc18fed060
MD5 af3dd8105d28a665f619fa37f57efcc1
BLAKE2b-256 a0027fcc741128d9fa115aa63e2ff765f7004f45e8f2ccf237b17c7c05657d48

See more details on using hashes here.

Supported by

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