Skip to main content

MCMC tools for astrophysics

Project description

VegasAfterglow

VegasAfterglow Logo

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

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


Table of Contents


Features

Shock Dynamics

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

Jet Structure & Geometry

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

Radiation Mechanisms

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


Performance Highlights

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

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

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

    • ~50 seconds for on-axis structured jet scenarios

This level of performance is achieved through optimized algorithm implementation and efficient memory access patterns, facilitating comprehensive Bayesian inference on standard laptop hardware in seconds to minutes rather than hours or days. The accelerated convergence speed enables rapid iteration through different physical models and makes VegasAfterglow suitable for both detailed analysis of individual GRB events and large-scale population studies.



Installation

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

Python Installation

To install VegasAfterglow using pip:

pip install VegasAfterglow

This is the recommended method for most users. VegasAfterglow requires Python 3.8 or higher.

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

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

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

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

C++ Installation

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

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

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

Build Prerequisites (click to expand for dependency information)

The following development tools are required:

  • C++20 compatible compiler:

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

    • Make (GNU Make 4.0+ recommended)

Usage

Quick Start

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

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

Light Curve & Spectrum Calculation

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

Model Setup (click to expand/collapse)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spectrum Analysis (click to expand/collapse)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Key differences:

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

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

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

Internal Quantities Evolution

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

Model Setup (click to expand/collapse)

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

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

medium = ISM(n_ism=1)

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

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

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

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

Now, let's get the internal simulation quantities:

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

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

You will get a SimulationDetails object with the following structure:

Main grid coordinates:

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

Forward shock details (accessed via details.fwd):

  • details.fwd.t_comv: 3D numpy array of comoving times for the forward shock in seconds
  • details.fwd.t_obs: 3D numpy array of observer times for the forward shock in seconds
  • details.fwd.Gamma: 3D numpy array of downstream Lorentz factors for the forward shock
  • details.fwd.Gamma_th: 3D numpy array of thermal Lorentz factors for the forward shock
  • details.fwd.r: 3D numpy array of lab frame radii in cm
  • details.fwd.B_comv: 3D numpy array of downstream comoving magnetic field strengths for the forward shock in Gauss
  • details.fwd.theta: 3D numpy array of polar angles for the forward shock in radians
  • details.fwd.N_p: 3D numpy array of downstream shocked proton number per solid angle for the forward shock
  • details.fwd.N_e: 3D numpy array of downstream synchrotron electron number per solid angle for the forward shock
  • details.fwd.gamma_a: 3D numpy array of comoving frame self-absorption Lorentz factors for the forward shock
  • details.fwd.gamma_m: 3D numpy array of comoving frame injection Lorentz factors for the forward shock
  • details.fwd.gamma_c: 3D numpy array of comoving frame cooling Lorentz factors for the forward shock
  • details.fwd.gamma_M: 3D numpy array of comoving frame maximum Lorentz factors for the forward shock
  • details.fwd.nu_a: 3D numpy array of comoving frame self-absorption frequencies for the forward shock in Hz
  • details.fwd.nu_m: 3D numpy array of comoving frame injection frequencies for the forward shock in Hz
  • details.fwd.nu_c: 3D numpy array of comoving frame cooling frequencies for the forward shock in Hz
  • details.fwd.nu_M: 3D numpy array of comoving frame maximum frequencies for the forward shock in Hz
  • details.fwd.I_nu_max: 3D numpy array of comoving frame synchrotron maximum specific intensities for the forward shock in erg/cm²/s/Hz
  • details.fwd.Doppler: 3D numpy array of Doppler factors for the forward shock

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MCMC Parameter Fitting

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

1. Preparing Data and Configuring the Model (click to expand/collapse)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import corner
from VegasAfterglow import ObsData, Setups, Fitter, ParamDef, Scale

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

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

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

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

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

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

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

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

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

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

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

cfg = Setups()

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

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

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

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

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

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

Scale Types:

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

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

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

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

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

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

The result object contains:

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

Check the best-fit parameters and their uncertainties:

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

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

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

Use the best-fit parameters to generate model predictions

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

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

best_params = result.top_k_params[0]

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

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

Now you can plot the best-fit model:

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

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

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

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

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

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

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

draw_bestfit(t_out, lc, nu_out, spec)

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

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

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

Documentation

Comprehensive documentation is available at Documentation including:

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

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

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


Contributing

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

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

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

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

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.0.0.tar.gz (9.9 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.0.0-cp313-cp313-win_arm64.whl (234.3 kB view details)

Uploaded CPython 3.13Windows ARM64

vegasafterglow-0.0.0-cp313-cp313-win_amd64.whl (251.8 kB view details)

Uploaded CPython 3.13Windows x86-64

vegasafterglow-0.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (312.7 kB view details)

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

vegasafterglow-0.0.0-cp313-cp313-macosx_11_0_arm64.whl (250.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp313-cp313-macosx_10_13_x86_64.whl (272.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

vegasafterglow-0.0.0-cp312-cp312-win_arm64.whl (234.2 kB view details)

Uploaded CPython 3.12Windows ARM64

vegasafterglow-0.0.0-cp312-cp312-win_amd64.whl (251.8 kB view details)

Uploaded CPython 3.12Windows x86-64

vegasafterglow-0.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (312.8 kB view details)

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

vegasafterglow-0.0.0-cp312-cp312-macosx_11_0_arm64.whl (250.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp312-cp312-macosx_10_13_x86_64.whl (272.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

vegasafterglow-0.0.0-cp311-cp311-win_arm64.whl (234.1 kB view details)

Uploaded CPython 3.11Windows ARM64

vegasafterglow-0.0.0-cp311-cp311-win_amd64.whl (250.4 kB view details)

Uploaded CPython 3.11Windows x86-64

vegasafterglow-0.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (310.2 kB view details)

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

vegasafterglow-0.0.0-cp311-cp311-macosx_11_0_arm64.whl (249.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp311-cp311-macosx_10_9_x86_64.whl (270.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

vegasafterglow-0.0.0-cp310-cp310-win_arm64.whl (234.4 kB view details)

Uploaded CPython 3.10Windows ARM64

vegasafterglow-0.0.0-cp310-cp310-win_amd64.whl (249.9 kB view details)

Uploaded CPython 3.10Windows x86-64

vegasafterglow-0.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (309.6 kB view details)

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

vegasafterglow-0.0.0-cp310-cp310-macosx_11_0_arm64.whl (247.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp310-cp310-macosx_10_9_x86_64.whl (268.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

vegasafterglow-0.0.0-cp39-cp39-win_arm64.whl (233.3 kB view details)

Uploaded CPython 3.9Windows ARM64

vegasafterglow-0.0.0-cp39-cp39-win_amd64.whl (257.2 kB view details)

Uploaded CPython 3.9Windows x86-64

vegasafterglow-0.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (309.8 kB view details)

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

vegasafterglow-0.0.0-cp39-cp39-macosx_11_0_arm64.whl (247.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp39-cp39-macosx_10_9_x86_64.whl (268.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

vegasafterglow-0.0.0-cp38-cp38-win_amd64.whl (249.4 kB view details)

Uploaded CPython 3.8Windows x86-64

vegasafterglow-0.0.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (309.5 kB view details)

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

vegasafterglow-0.0.0-cp38-cp38-macosx_11_0_arm64.whl (247.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

vegasafterglow-0.0.0-cp38-cp38-macosx_10_9_x86_64.whl (268.5 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vegasafterglow-0.0.0.tar.gz
Algorithm Hash digest
SHA256 e620c31ed01b92c7a313c7c90045be7ef1373ee344d18622e5d0870538a3f275
MD5 80ae9a58f28bb0199eecddd61ca7c15b
BLAKE2b-256 ae05b5cbbaf2f972570beb53111f5636b72a63233fa3cf1acfde6f8ab4c63459

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 99860593e67ff7fea48aad7aa4a2760ef504e2650ec0faf936106045ed3a0bcb
MD5 246128c99a59b9d86643cde6c4676930
BLAKE2b-256 24534a61143cd584c4cd74f2d125c56f5c790fc8cb3da5be9c22564b9a82a741

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ef7448861f4ab09a5de820537d772bb9ee17d90da5c86eec11b2c9b0afe6b004
MD5 a0b066929d8078ae6ce3c1cefe580654
BLAKE2b-256 a17df17fd8784062ce7fee68035ef20cd510a0d7034a86da74cb9b4bb45c76df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f665c1683637148b5747d017124bcb99816213beedece63543bf8b7aac528b60
MD5 66f2f30ea356af6ae815ec5a95fc7e2b
BLAKE2b-256 bf3059513c1fe8aa40f60b2d9a1d9a2c7f507facb72325d6902290dc346e2478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2bc2f3c2cd198682029dd43b790353cfe1de380690cf3b0a6879ef47f860780a
MD5 8b28e9cebb16609ddda9d52e33738352
BLAKE2b-256 203be27480997c4e82f6db7a42bc9596ec80b4fc510cee387c67453e3b017602

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e1a836d12c7b67e37313d166f3e9fc680647b073ee8d686ab3edf67554eb4847
MD5 7df1a722d2daaeedc2d1c1610c4729eb
BLAKE2b-256 3787f9fa3ff0f396bc8955375cd0d52f712df5270690f5c2bb055772c4a8432c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 128eea81a95804e79be3edfee378f656d445750a80a5d798d07b39b54a39998e
MD5 7d9b6557dd17e9a7bac31ffd2b6af6a4
BLAKE2b-256 47cba0c387414f0c184b11f9d3c54746aa7b661828ec20b313dd813141bb9e47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 82d4c79506b70718d25cc8a858000c8921f6fbbe24a6595a910346b093fedc1f
MD5 3e46dd291ace3482979d32bb64681bdf
BLAKE2b-256 b6929c2dce8dad12baa92d5eb977e4deb85394875c008dfb92a115489fd96973

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9694edcc53cc42962bc023b8f9107fd9cc8424505636bb243e397e940d7d150c
MD5 b40704db2bef1b95b4d3af22fc4eecfa
BLAKE2b-256 bc4f7356b15cd2c44127ced05049faa96ee7445c3bcdaaa1734fceb9577cac78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c3c433bcf8b9f9a6ee2f388e64717106febab57750de27a2fe2a90596b4e7138
MD5 16670ca93b98db10a7578c582bb6dfc7
BLAKE2b-256 cf723ea7b24550aa442da1c6c27700c654d77659a4b094077f3e0a7530530d8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c50ed3730b1fe85a4d9e0d2051901fb9aeb3e1e83c0d30afcc2f254850eeb5a2
MD5 461fa15550073c1d7b35c2be5b2a18e7
BLAKE2b-256 c55e3f74a1108ef11ee517b258121e5d7fc11920b86982eec7e31cf9c9761f9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 33da3f1d3f4b6d1eb967c8d6baa70eb03311560737b2db9faae17d787b44ca58
MD5 278e32f0f4dd6f79f231085385f82c13
BLAKE2b-256 7ad4f0e3d823e1f9eb684beddb24c88856be67d5e2464b9d48e3d2a989da13cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 314818036522225dd950168e8467fe82382f1ae5c64e4ae873d09b1c3f2ea99f
MD5 8a54bfcea0f1367a14f56579601fee15
BLAKE2b-256 2a75c395d9b851d480e70aba1a4ec96aa9860fb6fc1d868875277c8939981567

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c2c923706228618e06fdc26c1b035ed292416483c04df5ec3fdb9ffee262d181
MD5 e1019095086abf745de78e7dc69c0bb8
BLAKE2b-256 0908a61041d9eec58153f2e4b1fe056432d8b7dce5aeda343a12376996377ad0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2222a21c0038c529ae90f065899006c763f1d1100a81528460313e99058948d
MD5 b33d616d11d9c48e21b9621c3047394a
BLAKE2b-256 2bf79e41a7ca6b43d17faabd5dd4d15756d61ef15b55861ae3d2e9a53224b32e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 abbdb67fae5a6e64919e6f9a737215ce0014acade92290c557adac7e5a1235ab
MD5 d5cccd0841a7bc9d21b37d4f0fdc6643
BLAKE2b-256 1749ba55b0a5791e8b150c6a15ec1e9028e246dff86e5d420afd7ea863b4d8dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 e055df0908a21199c243d11516c7227996bd68262d32b27357fdff51210dff67
MD5 8108cde21ac18d7cd8548b852313d8e5
BLAKE2b-256 6c8cc544b3bc00b3acca42307696b9cffc784d5a560f5825dd90da159cb0886c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 fec63b7e00fc9b7065c3b163f7eac6c86ef78c7b1bb6e21f33782568fb4b61a5
MD5 d8752de8f8887e98a1592700f1342fd9
BLAKE2b-256 dc453193c141b75677bc0d21cea4540f8538e9695b764ece2c7038e3b7c48369

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d18bfd1fa9a1e3e821239c365c3722d640a54485f7b6590ea6cc0e6dcb618887
MD5 38e4498647bc0129461420002ab9feee
BLAKE2b-256 e25654c086da8cb7e3f1fd4a56b946535cf94014878cdfe71b980fdceb969abb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84279843a6ca5c4d7a7984d1af4a573c5655289b77139d2d4471996d70f76bab
MD5 f296ceea10e722dd4151b8d8fc347a0f
BLAKE2b-256 e09c7f344f5daf81db2bb717604a3a3b98123ca3e6fcf53d62981716c6cb7e70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8db6abea63e918605fb5f04d02543863feb456b2dd9e8402e0b72f9f21d9c7e2
MD5 e2b1bca101de923d68eac0e0cd118fcf
BLAKE2b-256 5c7469aceebc6f678d5ec6f937db814152592d1bb79c1306482251565702cb56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 13102f167aa5a334e345ea8b900a6e71e0cbeda39a50cd94aabaa4d56e951f71
MD5 385b162f8c9f54b72c2424c941506698
BLAKE2b-256 553845cef9644f71231a20ffb8811423fa0e2b3cca1302c2560ccdc0025606d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b829f6a1a4ef3ee87f18703772b5ab1b2b1464a8f51b2de4dfdc3d1fe5332316
MD5 66266103a70b193278ecfcc2ac09bec3
BLAKE2b-256 c14e22b24e0098f821999324fe2b534bdfbf00345e990524f0ecac06d58cf802

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0827edca75f9d140edfd90edbb15a4147f70b7f1942c9bc0f9a33bf70caf81aa
MD5 9383643a572b238a560ada03f2eea101
BLAKE2b-256 67ecccba52e7d7b577d57efbbafa665cd5e61cd539459b22e28c04613e8ab8da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1b52daef4ab5c64c5577c1bb63c489e451dd8222a97b8be227d27314ba45456
MD5 f7cc25d2237d1d75249593d7310af61c
BLAKE2b-256 7fcd9377eb57c4cf7697155a468fe57c393cdde8fdcb3f3cc37038212cd21bd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ed88dbc1e4ff197da31ba7ff2c94e9da238a6bc1c9883820530b985974759ec5
MD5 306cc0d6f50f9c9ae8f6046d72deba36
BLAKE2b-256 d074d02b08f1053f4c894e746dfab12a739fc6bd4fa68c92ba5869a96bdf9204

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e1ebe7f6a3f285ef250252ec8afe050f396fb5e2d287b9c1876257fa6f79855f
MD5 79d02dc17c83e849d609b7ea56b16321
BLAKE2b-256 e095cfcf175f5c19e6aeb1acb1f09555295679a2f68d9088a1aa2ef43729548b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7909400eb7b4b8833f7fd801114e4161e9099017a379759287186c62cca3719
MD5 723ef61b6919a39cace236a50613b8c9
BLAKE2b-256 2ac22fad262b1d5de00110a311f318c249cdce6cfc5636f11ba0bd4b0707207f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0efef39e805093c43b595dd5fcbc703f98218c084f7f196fe3d45f1f366bb403
MD5 950eb415c74dd63622ee3ea0a010c584
BLAKE2b-256 caebb117d3c09e8e19ea200f34c2493a2cfea76bd0530c801870aca9da989d18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vegasafterglow-0.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 feba5d401e7344b321e062cbe23c10673301b6670cac531b28980e0172b64ac9
MD5 f65479a5bec60342faf96d29ef8ddd21
BLAKE2b-256 59d0c398f29916ad670b856027a46d5a7b5e8ee010c98e20ac81a79649626292

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