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 Wave: Supports smooth transition between adiabatic and radiative blast wave.
  • 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 milliseconds 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.7 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 the 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 centimeters.
  • 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.
  • P_nu_max_fwd: 3D numpy array of comoving frame synchrotron maximum flux densities 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 frame, comoving frame, and observer frame. 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 officially released).


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

Uploaded Source

Built Distributions

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

vegasafterglow-0.2.7-cp313-cp313-win_arm64.whl (206.7 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-0.2.7-cp313-cp313-win_amd64.whl (228.5 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.8 kB view details)

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

vegasafterglow-0.2.7-cp313-cp313-macosx_11_0_arm64.whl (216.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp313-cp313-macosx_10_13_x86_64.whl (242.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vegasafterglow-0.2.7-cp312-cp312-win_arm64.whl (206.7 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-0.2.7-cp312-cp312-win_amd64.whl (228.5 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.4 kB view details)

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

vegasafterglow-0.2.7-cp312-cp312-macosx_11_0_arm64.whl (216.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp312-cp312-macosx_10_13_x86_64.whl (242.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vegasafterglow-0.2.7-cp311-cp311-win_arm64.whl (206.3 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-0.2.7-cp311-cp311-win_amd64.whl (227.1 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (260.0 kB view details)

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

vegasafterglow-0.2.7-cp311-cp311-macosx_11_0_arm64.whl (216.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl (241.2 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vegasafterglow-0.2.7-cp310-cp310-win_arm64.whl (206.6 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-0.2.7-cp310-cp310-win_amd64.whl (226.8 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (259.4 kB view details)

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

vegasafterglow-0.2.7-cp310-cp310-macosx_11_0_arm64.whl (214.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl (239.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

vegasafterglow-0.2.7-cp39-cp39-win_arm64.whl (205.4 kB view details)

Uploaded CPython 3.9Windows ARM64

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

Uploaded CPython 3.9Windows x86-64

vegasafterglow-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (259.5 kB view details)

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

vegasafterglow-0.2.7-cp39-cp39-macosx_11_0_arm64.whl (214.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl (239.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

vegasafterglow-0.2.7-cp38-cp38-win_amd64.whl (226.2 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-0.2.7-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (259.1 kB view details)

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

vegasafterglow-0.2.7-cp38-cp38-macosx_11_0_arm64.whl (214.2 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

vegasafterglow-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl (239.3 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: vegasafterglow-0.2.7.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.7.tar.gz
Algorithm Hash digest
SHA256 20f8f518a5ccd1153474eaa311140a232130d8755892927eb6a4f79e75812c38
MD5 9896d85967a9232cee63d4cafffaf85e
BLAKE2b-256 9441efb11179178bffd0da5626d3d9078520efdf86995657fbf8ff6008138bd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 76c69dc96f3278a8efbe5e1524cba18590003cc101ad6b0f1fc30624e8eed468
MD5 ed101a8a1e314efe8f6aadd0938823c3
BLAKE2b-256 ebcf6699edbfff7cda72883d8ab37a787be0de8abdd20dc7ad133f5fe65f3bc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6d815fe40af8e5c567e266d6b2412e203fa4977674fa954b06fcab8dc1b9bf3f
MD5 740afcd12d9fd9ec91333412f1fb7fb3
BLAKE2b-256 2b0898f5ec3bceddc3902dfaeae5cc50899e2b82575f0bccaaca4ac6e6048fcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9fee5b378114c8af28df437a71b2a0315102d7e7dd8e02d62b4c77c4a689907b
MD5 ad909cc15c7dcf0c8917da8272a0cb60
BLAKE2b-256 35ba063da15ea6eaaf2df4bed4016621ee8a85b30ef2e092a5889d95b0ffe5c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c5eaa74ba892d4b4fcfbdb8108501b8329437caa41780098aa0a70239c651c0
MD5 cf84fbfe51f978e66d5bb19ad9b528ce
BLAKE2b-256 ca9f12629c0429dc672b194f7ffa3f55e572866b786b5786d0cd003854c36a36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ca78837f5fb663f1f8b0662569cc7d482d9e71bac90c8706d6cac476d42f18ad
MD5 273d9101358a68ec9083d2749e57fde9
BLAKE2b-256 1c10ffdb008e59b1624ef137085b5ab3a01e6693af35aca3177e68679634bc6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 a2ef1d1cd01a84e4755849e88418c20f89f075cf068f9017543e2361bc85835f
MD5 790360d6846f03410f8442fac2e6cbce
BLAKE2b-256 14dc77e842293678136bdfa907d8ef614b40249d203b9231262f14bd859fb224

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7bfefecfbba0b0402a684ef09feb84ec41a4d7d6687fe49b6e8829f42f4a70f9
MD5 a0b5d962abf21e61b9c06f7adc7987a3
BLAKE2b-256 5697f823ea7e3b488bc1958faca355135c1442130da4d44fd0361d312cc72934

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af6ee46bc17b8f6c2e2f266e93d18c6c844fca84e34ec700b3897489f5f972f4
MD5 aeb18f3cd2c282d321b8a2b356004585
BLAKE2b-256 502bc6bb7d78c1e23e9532d29a9c37bd441efcf5507e6b2d1631a686a0d53a2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8dc954096e674f285d842fbdbb16478548e008cf285eb086dc18892be9c9483a
MD5 112cef57d3f4a2e2f9bf5ce1123ac1b2
BLAKE2b-256 484bd1829e5c6b02071d7c53094377c15161f862accf8d761ff4514fe5a9be00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4d2e9b02464634c1dd311054d6d37ae19624bcb0c3f2f6e318e47965d1ef1263
MD5 e6a8fbdff9cb8c2ae07f72c3b82f0a78
BLAKE2b-256 8d6d471c519d47be03a36ccaf0dc5e44be4f86f0c3ac68e683de5d67cc6a9553

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 935ee3e1f919bf0691e9b6abbd24b76c66c23696d13dfd67e3895a625abdee39
MD5 201b5238907cc90f9b970e3a3ed4a93f
BLAKE2b-256 956b7d670988e01c7c3936ca61f40dd3cc814adb9021dc10424a188c0f702170

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a32300fb0f93ef49505d93f83645fdd2a018b2befdc8b927798cbce171d11a20
MD5 762ef865bfa78cabf86b5dacaa90e6fb
BLAKE2b-256 51ac0928dc0da78bd65458d52c1f7a164111fe996c0700ff1cf56f0d413b9cd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa061217308de2d31644fd060739ff9e946c604044f0f9ed115275d00108783b
MD5 86fd97face0d44ed143862510f6544d1
BLAKE2b-256 978c05ddc8d36b1afb875d3b45ef02ef9d70dbecfdfdc507457ed2215b06f8f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb16f1ab895bcaeaf7d41364a3df9d46202e8bf4318d4c28cd8f15e97b0fa712
MD5 f798d3516b52e3d9b8f11ab0bc998a5c
BLAKE2b-256 a3e682a5f5326e0b9d96321870c00dd95c9472413e8c917f8ffe92a2f1517cd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 991df84f0795f8d3bbcfe6a65ac33bf7289f7c2cff9566862adba6d23f48c533
MD5 16f654478a5edd7aca1073f7774e90ca
BLAKE2b-256 fa920b2e831558f2438f73ef1f46ee99f543df8cb2556106b27890123e7235e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 555634105a7e7fa9f868a13e8dcd87fc810e26de26462c3f5a5efba5588ccd2f
MD5 131d7b3d82ae7bc9257be6a543d25cf8
BLAKE2b-256 1e0eb84afe77b03eedf747f1fc4ec52fc0f47f8316ddd7a1bef1d0e23e99fe91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 65cb5e6eaa97a91b017afb52771cf41d5216b317f9b046a6ca7a18e380c656ed
MD5 d1dd48bbe4d48f4fa868847a99539567
BLAKE2b-256 a8630d1ee671d5663cfafc634dfcdce8cba6c78f943f76bcb7c71e071fa29b1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e2585f9b3e082f6cae026516cb27ef830b08e1b2dbf7808fdd616acedc1ae34
MD5 4db089de541fdc9646bc4d39806a354c
BLAKE2b-256 6dc85418df7b638c506bd17e679964c3c9e23de199ea3b6ba424621a98272915

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 307373e23b0b7d18d111a6604398e184ca3e97738bc40a496058f49fe5f32648
MD5 cd64cf2a184b68fbbc6a5d3399e2536f
BLAKE2b-256 b4cc4a2b3016b5039f546f92c055b4ceba684d95d8ad0eb277718956ca77a19e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bf5baf7692054851b02a33296f97a392b317ec3694a49661cf16220a329a2eb0
MD5 8df43f5ca110a6adadf758d8f57ad497
BLAKE2b-256 ea2249b0207c7f3ae300429276f6a286b9fa19816431c19230a9fd0ffb8c119a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 0637f29165fd4c6769962e5dcf03e0c27eca503c5f9572355e29b4d9e37c5d65
MD5 a99b93acd6d23b754fba297428577878
BLAKE2b-256 f03ec1c423f424db830de49d424ac026d57ed8f9246efd2b47afb2ff57cd1847

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f9e5b4c8dc6316a2b7da014a282cc8327b947193bc9d1eada270df799d066525
MD5 5e942823cb2d4d48180c6b42d8f75c89
BLAKE2b-256 5504a1e8982eea439a5d67f6dd106caa71ecc9ceaa02233cb8c29cd79c439dbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d113d086c08e807d5b5c7f15c49c4c4329688cd9bf1764ad95cf4e1cdddeec6
MD5 fa91ea44ae99f13da1081d834aa4e457
BLAKE2b-256 c3ec2cb175a173bfd0216b306b8e75ec2c8d82e207200069c27c08077e5bb27c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8532f89f1e16b8ac5b80fa05c11276818d3fac92641785503c7e721ef67cd1a2
MD5 03781874e6503557b189fc1318881baa
BLAKE2b-256 aaa5e350f1af64bb57546b8a2b9398b2ba9f58ec78a27331ef923f48f04340c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1f550f277a5e1117a9f90dadea19d4a414b409a1bd2f57378fb2cbe70a5652b5
MD5 aa8b318d2d20da3f44fe98032baa5dfc
BLAKE2b-256 551cf3be5257ab73daf72c11aced1538e12a2da94b5b2856379dc992a346742b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d5e8732eb4abbcb8639fdfe629ba9ccfddc08883957dd78c32c33cd15f7afde1
MD5 c2d782f7a0fd45354183e290f1cb4a09
BLAKE2b-256 2db7632953e8bddf99592ae7454191bd835da4a545e409191dbc42b888391246

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 534121b871f11e3ad595396dead6079c08fbd9ffa8fb69f7cabf3d54abb5c2d1
MD5 f01ad447fd6d8554696b13f6bb9a5ec1
BLAKE2b-256 69d6698b9fdc1bca79d128b89640ba384009f2318e0c4506526586bff5ee6da4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13ca4642570fdca740c1f164423284695c7aa95f9d6baaa46a77d55fe7b066e8
MD5 bf69db930cac7082bb92587172605d62
BLAKE2b-256 4d9d04a2216e8a49591793234a99a576fa40cef5ff9c8c1bac9a629f065146b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 99a4ac55eed7c61efccd262d88cda13bf19db81098d952de6b9649bef9f00815
MD5 f70b5ab27f1f9fcaef9493c7346ef18b
BLAKE2b-256 da6816a23cf20386e2970871cfdf5497a5854c45e7cc9a82adf8186db7c4d665

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