sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
pub fn background_extinction_rate(species_lost: f64, total_species: f64, time_my: f64) -> f64 {
    species_lost / (total_species * time_my).max(1e-30)
}

pub fn mass_extinction_magnitude(species_before: f64, species_after: f64) -> f64 {
    (species_before - species_after) / species_before.max(1e-30)
}

pub fn recovery_time_exponential(species_lost_fraction: f64, origination_rate: f64) -> f64 {
    -(1.0 - species_lost_fraction).max(1e-30).ln() / origination_rate.max(1e-30)
}

pub fn kill_curve_severity(
    environmental_perturbation: f64,
    vulnerability: f64,
    threshold: f64,
) -> f64 {
    if environmental_perturbation < threshold {
        return 0.0;
    }
    1.0 - (-vulnerability * (environmental_perturbation - threshold)).exp()
}

pub fn selectivity_index(extinction_rate_group: f64, extinction_rate_background: f64) -> f64 {
    extinction_rate_group / extinction_rate_background.max(1e-30)
}

pub fn origination_extinction_balance(origination_rate: f64, extinction_rate: f64) -> f64 {
    origination_rate - extinction_rate
}

pub fn survivorship_curve(initial_cohort: f64, extinction_rate: f64, t: f64) -> f64 {
    initial_cohort * (-extinction_rate * t).exp()
}

pub fn lazarus_taxon_probability(
    true_extinction: f64,
    sampling_probability: f64,
    gap_duration: f64,
) -> f64 {
    (1.0 - true_extinction) * (1.0 - sampling_probability).powf(gap_duration)
}

pub fn signor_lipps_effect(last_appearance: f64, sampling_interval: f64) -> f64 {
    last_appearance + sampling_interval / 2.0
}

pub fn biodiversity_through_time(
    origination_rate: f64,
    extinction_rate: f64,
    initial_diversity: f64,
    t: f64,
) -> f64 {
    let net = origination_rate - extinction_rate;
    initial_diversity * (net * t).exp()
}

pub fn waiting_time_to_extinction(population_size: f64, extinction_rate: f64) -> f64 {
    1.0 / (extinction_rate * population_size).max(1e-30)
}