Astronomy and astrophysics core library providing comprehensive tools for astronomical computations and data handling
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Framework for propagating uncertainties through calculations with support for correlated and uncorrelated errors.
from astropy.uncertainty import Distribution
from astropy.uncertainty import normal, uniform, poissonClasses for representing probability distributions and performing Monte Carlo uncertainty propagation.
class Distribution:
"""
Base class for probability distributions.
Parameters:
- samples: array of samples from the distribution
"""
def __init__(self, samples): ...
@property
def samples(self):
"""Array of samples from the distribution."""
@property
def n_samples(self):
"""Number of samples."""
def pdf_mean(self):
"""Mean of the probability distribution."""
def pdf_std(self):
"""Standard deviation of the distribution."""
def pdf_var(self):
"""Variance of the distribution."""
def pdf_median(self):
"""Median of the distribution."""
def pdf_mad(self):
"""Median absolute deviation."""
def pdf_percentiles(self, percentile):
"""Compute percentiles of the distribution."""
def __add__(self, other): ...
def __sub__(self, other): ...
def __mul__(self, other): ...
def __truediv__(self, other): ...
def __pow__(self, power): ...Functions for creating common probability distributions with specified parameters.
def normal(center, std=None, n_samples=None):
"""
Create normal (Gaussian) distribution.
Parameters:
- center: mean of the distribution
- std: standard deviation
- n_samples: number of samples to generate
Returns:
Distribution: normal distribution
"""
def uniform(lower=None, upper=None, center=None, width=None, n_samples=None):
"""
Create uniform distribution.
Parameters:
- lower: lower bound (alternative to center/width)
- upper: upper bound (alternative to center/width)
- center: center value (alternative to lower/upper)
- width: width of distribution (alternative to lower/upper)
- n_samples: number of samples to generate
Returns:
Distribution: uniform distribution
"""
def poisson(center, n_samples=None):
"""
Create Poisson distribution.
Parameters:
- center: mean/rate parameter of Poisson distribution
- n_samples: number of samples to generate
Returns:
Distribution: Poisson distribution
"""import numpy as np
from astropy.uncertainty import normal
# Create distributions for input variables
a = normal(center=5.0, std=0.2, n_samples=10000)
b = normal(center=3.0, std=0.1, n_samples=10000)
# Propagate uncertainties through calculations
result = a + b
product = a * b
ratio = a / b
print(f"Sum: {result.pdf_mean():.3f} ± {result.pdf_std():.3f}")
print(f"Product: {product.pdf_mean():.3f} ± {product.pdf_std():.3f}")
print(f"Ratio: {ratio.pdf_mean():.3f} ± {ratio.pdf_std():.3f}")from astropy.uncertainty import uniform
import astropy.units as u
# Physical measurement with uniform uncertainty
length = uniform(center=10.0, width=0.5, n_samples=10000) * u.m
width = normal(center=2.0, std=0.1, n_samples=10000) * u.m
# Calculate area with uncertainty
area = length * width
print(f"Area: {area.pdf_mean():.2f} ± {area.pdf_std():.2f}")
# Non-linear function
volume = length * width * normal(1.5, 0.05, 10000) * u.m
print(f"Volume: {volume.pdf_mean():.2f} ± {volume.pdf_std():.2f}")# Get confidence intervals
lower_5 = result.pdf_percentiles(5)
upper_95 = result.pdf_percentiles(95)
print(f"90% confidence interval: [{lower_5:.3f}, {upper_95:.3f}]")
# Multiple percentiles
percentiles = result.pdf_percentiles([16, 50, 84])
print(f"16th, 50th, 84th percentiles: {percentiles}")# Distribution types
Distribution = astropy.uncertainty.Distribution