Skip to main content

MCMC tools for astrophysics

Project description

VegasAfterglow

VegasAfterglow Logo

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

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



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
# NOTE: times array must be in ascending order, frequencies can be in random order
results = model.specific_flux(times, bands)

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

# 5. Plot each frequency band 
for i, nu in enumerate(bands):
    exp = int(np.floor(np.log10(nu)))
    base = nu / 10**exp
    plt.loglog(times, results['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
# NOTE: epochs array must be in ascending order, frequencies can be in random order
results = model.specific_flux(epochs, frequencies)

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

for i, t in enumerate(epochs):
    exp = int(np.floor(np.log10(t)))
    base = t / 10**exp
    plt.loglog(frequencies, results['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.

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

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

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

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

# The returned results is a dictionary containing arrays of the same shape as the input
print("Result keys:", results.keys())  # e.g., ['syn', 'IC'] depending on your model
print("Shape:", results['syn'].shape)  # Same shape as input arrays

Key differences:

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

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:

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

# 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, t_obs_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.
  • t_obs_fwd: 3D numpy array of observer times for the forward shock in seconds.
  • Gamma_fwd: 3D numpy array of downstream Lorentz factors for the forward shock.
  • Gamma_th_fwd: 3D numpy array of thermal Lorentz factors 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_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', 't_obs_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', 't_obs_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', 't_obs_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['t_obs_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)
# You can also assign weights to each data point to account for systematic uncertainties or correlations. You don't need to worry about the weights' normalization, the code will normalize them automatically.
#data.add_light_curve(nu_cgs=4.84e14, t_cgs=t_data, Fnu_cgs=flux_data, Fnu_err=flux_err, weights=np.ones(len(t_data)))

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

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

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

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

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

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

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

cfg = Setups()

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

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

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

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

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

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

Scale Types:

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

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

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

Initialize the Fitter class with your data and configuration, then run the MCMC process:

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

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

The result object contains:

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

Check the best-fit parameters and their uncertainties:

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

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

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

Use the best-fit parameters to generate model predictions

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

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

best_params = result.top_k_params[0]

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

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

Now you can plot the best-fit model:

# Function to plot model light curves along with observed data
def draw_bestfit(t,lc_fit, nu, spec_fit):
    lc_files = ["data/ep.csv", "data/r.csv", "data/vt-r.csv"]
    spec_files = ["data/ep-spec.csv"]
    nus = [2.4e17, 4.84e14, 1.4e14]
    ts = [3000]

    fig =plt.figure(figsize=(4.5, 7.5))

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

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

    ax1.set_xscale('log')
    ax1.set_yscale('log')
    ax1.set_xlabel('t [s]')
    ax1.set_ylabel(r'$F_\nu$ [erg/cm$^2$/s/Hz]')
    ax1.legend()
  
    for i, file, sft, c in zip(range(len(spec_files)), spec_files, shift, colors ):
        df = pd.read_csv(file)
        ax2.errorbar(df["nu"], df["Fv_obs"]*sft, df["Fv_err"]*sft, fmt='o',markersize=4,label=file, color=c,markeredgecolor='k', markeredgewidth=.4)
        ax2.plot(nu, np.array(spec_fit[:,i])*sft, color=c,lw=1)

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

draw_bestfit(t_out, lc, nu_out, spec)

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

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

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

Documentation

Comprehensive documentation is available at Documentation including:

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

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

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


Contributing

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

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

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

    • Fork the repository
    • Create a branch for your changes
    • Submit a pull request with your changes

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

Uploaded Source

Built Distributions

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

vegasafterglow-1.0.0-cp313-cp313-win_arm64.whl (214.5 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-1.0.0-cp313-cp313-win_amd64.whl (231.8 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (276.3 kB view details)

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

vegasafterglow-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (224.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl (245.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vegasafterglow-1.0.0-cp312-cp312-win_arm64.whl (214.4 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-1.0.0-cp312-cp312-win_amd64.whl (231.8 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (276.3 kB view details)

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

vegasafterglow-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (224.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl (245.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vegasafterglow-1.0.0-cp311-cp311-win_arm64.whl (213.8 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-1.0.0-cp311-cp311-win_amd64.whl (230.5 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (275.8 kB view details)

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

vegasafterglow-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (223.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (243.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vegasafterglow-1.0.0-cp310-cp310-win_arm64.whl (214.0 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-1.0.0-cp310-cp310-win_amd64.whl (230.1 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-1.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (274.4 kB view details)

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

vegasafterglow-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (222.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl (241.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

vegasafterglow-1.0.0-cp39-cp39-win_arm64.whl (213.0 kB view details)

Uploaded CPython 3.9Windows ARM64

vegasafterglow-1.0.0-cp39-cp39-win_amd64.whl (234.3 kB view details)

Uploaded CPython 3.9Windows x86-64

vegasafterglow-1.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (274.5 kB view details)

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

vegasafterglow-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (222.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl (241.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

vegasafterglow-1.0.0-cp38-cp38-win_amd64.whl (229.6 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-1.0.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (273.9 kB view details)

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

vegasafterglow-1.0.0-cp38-cp38-macosx_11_0_arm64.whl (222.5 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

vegasafterglow-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl (241.5 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vegasafterglow-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f216234f5c9ace44ae5cfbbc33c6ceafdb08fde41b31fcf4c245703146278336
MD5 e9dc8a490823305873e7ec48982675eb
BLAKE2b-256 81d6e34b497e21588bf3e269445d72780443bfa20433882c897f8cec2098ab58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 7ecb04b956cd3aa52b5ee560d992042c3a51819d4f59bf473ced3f20ee3a430a
MD5 db28cf97c581a9bda30493b3bcc32b55
BLAKE2b-256 74e6b285e29b8afb6b3d5981890a47de4776e4dafea871ce0b050e39bcbf361a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ffa3e766ee5f620d8771fd1b311430a52a94f401243d37d2e6cc7df83d851eab
MD5 54cab07473c2e6e7c412d1b9bce647c2
BLAKE2b-256 ad0ebce2cc8ad51352cfbc899e2c70617a17b6daf99dfc0de685f5c6be975821

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fdfa2ca9e92eaa6e61504ee3dd6e00a5117e6f96bb75c39e893e14f6819e20d7
MD5 49a8fd9e2b5493e6fd45f93b64835735
BLAKE2b-256 53608a2834e5e46ca2daa88f9c2ddaefee59ee8457337be9cf2ad747a518ca71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1f29e9f6717ecc8d92760ab8ff1b846c0b62e2d2b4ca73a3ee2f75c5a204d1c
MD5 30cd2c60d05cea8daea329f6baa80b71
BLAKE2b-256 0e1d9c7f5ad80004d4c3975f4ac0611cb43fd9d616d81d6d81f8a7998040b003

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3d2c530f9620670e6a6cc34821b5a7eb494681dda109e19de55e1d3262498cee
MD5 009b15916013684b164375dc57c15d75
BLAKE2b-256 9e962ec15b19f2155fc769b163f0310dc80c1f2a5f1d85cd87282f18521056c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 2d9429cde40d0c5174f9c6efa7ce5ed76dcce9571adda3e1417d6a1ee164919a
MD5 ea682da2dffeb5f7d16c2b7503b8596e
BLAKE2b-256 5fcb9816a057640e21f136f8906961ef1b97433df357ce044e8c3a0fa97f76d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 13192c361aa3749b183a6745161b64c12574277c990fff1ba5c5e2541d9eaedd
MD5 b0e232322a2db30a70e064b8ab5ba69a
BLAKE2b-256 01b3ef699726a0c411175f888b66570934e2d8b866b1c8b539bd48b8dff30387

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ede0e35543b5e4b05b03aa5967635d1778fea2e98a5a10980cda642c9eb86615
MD5 8584414c84d5bfe909f93e86fb41f4cd
BLAKE2b-256 2150df9e82e4c505278c6a32062d2f0e68954f7926cdf47c4a9a714374230595

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f84a81ba5a0b1bbfee0f935e47ca1abfe02757eab2ddc887c9aef2283c78290
MD5 3bb51e1cd79a4bcb86ff0449c66179be
BLAKE2b-256 a301057ad0993be497ab87b0631913eb42f3160831c2653f61c2784b7cad5015

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f55187d20916023d6f65a55086709da6e6c1f29fec0ef5cbb3e729b980696bf8
MD5 a1ec5a1a1715a8451e06c35355e02841
BLAKE2b-256 e1c144ae293ce49030038e2f07510bc2cc99c507e2ce93f715b225f147fedd2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 35dc4005a4b452d4fc1a6653946ffc11aa71ca88172abc99a039d0c75484a023
MD5 a7140cb960b368111ddcefe9bff751f6
BLAKE2b-256 6e6856da9f4eb1285968529577add9ef7f32fbec7f604dba6bd8a6c449a57085

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d385c7efc77aabc6998c1bb5216ecafe6c0005f17471289219efb2ed716b5f7a
MD5 c698192a0d5598475df71381673996a2
BLAKE2b-256 4c69384148a9511a65b19bbfbd02531edd41834b6f767bdea071c252d2fda85c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 878c0c526f7a083d0768354d63231c865bd474a25b73694920a1cd1301fa2737
MD5 5588c896f0130a9685c44651c00735d0
BLAKE2b-256 d3e4117a9239f59a9a7dc193f3bbf2c408edba52143458cce4c4555e0da832ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c12e1d46d247163ea1d5640fc12fdc5f1af8858d755b89aefa720af9df7c8bde
MD5 53f5706fc2e7fb868c652c0c6e253514
BLAKE2b-256 c0da842479856fc0d0f6cdf3431d84d8f97a42031a99816421d1e9715babb33f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 de3c35870758283780b61ea02a276837366a9bde353dbad64a337978b0b89c87
MD5 ec253529acb8605166e34e4b7e1eb8c1
BLAKE2b-256 4daff3458dded3c0ff8439ebfc0407f1b5012c57fb029a1c26dbcfc70365730d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 fd3bd5a825b527da5773987b5d5209c65248badbe9f09397970854cda73e399f
MD5 9b46a26aefa97b286f4b09e9b8e05d52
BLAKE2b-256 e2caad11730e76803c65416b853e2b79abb071ca9b9a32ff0508c9c63f5883ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1471ead609d023f57d32f2ad05a531c81c80de0d34346a41e5c8980207685a22
MD5 ea7190b5754a509246a65f11becd9141
BLAKE2b-256 6f756c79e0252d66fe65cf7d94f6513ed4a90fea45466a100866dced030218e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 43e1ff1c26d2d847827bfaf768debb624975028ca053c0c217ce8b5b1949faf0
MD5 a128acf2895a56887fb5208e46379bc4
BLAKE2b-256 aab4045724e653a69fc00ebd218b6b296aebd35c1b7fef27548bfc14fac6eda1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47cceda1b39467bdf90c2bcf57289157b0a39d9bf3c146ccf591b0524515fe09
MD5 0721354e53f4af26c0a01186ea9c643b
BLAKE2b-256 5a347dac448d84f560a6212bf38cbe5cf7cb8f26bdf73fbcdb9045b7f565a1cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 70155e8aefa5852505f274c85c8469837bb5ebd15cb700ce53ab42feb184fb99
MD5 00f9990e8d6ddab7e644e3c27676bd90
BLAKE2b-256 57d800fbaf06879e8081b22623066d9964516365159f6af4196fbba438dcec97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 a8dfcdb21d335d4170443912d71444ebd0a67563a19c6eaaa7b3f9c7dbb0fb29
MD5 384bb461d849afa7c25686a158e434ee
BLAKE2b-256 420d3d73512934433f41437c592e52d2742a5e0a841b99097a42917079bc14ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c83345d8aa1abc7fe8521d35fa31367c70720cdf5591b07bd47aa3d2a66c4555
MD5 b53dcf15488b9d452a1be431811bc622
BLAKE2b-256 64058cda8a87683f7f478d669a06691f4ac65f5d7e77e21296f8f95e551ca935

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 60fe81a085489ba25eb04cb2fe457f0a96806c823f272da40a903784e848c580
MD5 e4e920e651b95bd6416650f22c59fb34
BLAKE2b-256 95e6058c93add512cbbc8bc35fa2af27c0d29b55ce34a708d21f070818e43f16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a2c30e5c3c451c69018e9654d1f14ed2bd1a781296f2ac949b4f1da963a1ab5
MD5 ecd913f47866583a196dfa11507acc0f
BLAKE2b-256 4d59fee85a12d20a7cba8acec530e1c63c3e4621a489f2e3cf210bbea947273a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4dce45744aa0dfbd1162e2477f780c4f5d00d71dff2fd1af6d0f3b82b1e48ff3
MD5 32658db0e77ba980bb7e411176c4a2df
BLAKE2b-256 e866dd87556b05822545027bda7ef8ee0b0119306ec6e95dd8453c1fc4f05355

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7cb10b0f272538d470118adbb69cd5d1f2e6c88f033aaa87a1b58095e3fc18c1
MD5 677c1e63368dfed7e6e7e2834a3e44b8
BLAKE2b-256 1d2e7b3a5753f7c48dca66ffdcdf28f58b8fd69b4d1ab191649b6b4a16c01e8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3ed24cd313c183f4eb27e0b54566413f5990d3ab6f88149f4c7808c33386102
MD5 c9a304140ef7722669fad3fed21c3889
BLAKE2b-256 5b91f7d2e6927415d4fbc3d838768ab7ed7786bc9efe2bf056ab8424c70ede8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39b98a3b4d973450a46c017b51468fe78d89a6c9437b3da381705ae7a6af3dc1
MD5 8fb1891616bee59b3f38dad3c38bbd6b
BLAKE2b-256 a62f5099fb43f7b71b8bd5df06e66c5f13f61cd8f2051f7ea1d360ce7ccc2858

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9d01b18acac8070824753b3a7323ceee03015a70874743b9a4efc08c75e8fb3e
MD5 e3867af0cfdb1947492309716ca97ef3
BLAKE2b-256 a65c3deb4b41ee2f674546d6f6ace7fcb97c8aa00efcbde867595c98a1fd79c7

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