ldsc 0.1.2

LD Score Regression — fast Rust reimplementation of Bulik-Sullivan et al. LDSC
mod blas;
mod cli;
mod cts_annot;
mod irwls;
mod jackknife;
mod ldscore;
mod make_annot;
mod munge;
mod parse;
mod regressions;

use anyhow::Result;
use clap::Parser;
use rayon::ThreadPoolBuilder;

use cli::{Cli, Command};

fn main() -> Result<()> {
    let cli = Cli::parse();

    if let Some(n) = cli.rayon_threads
        && let Err(err) = ThreadPoolBuilder::new().num_threads(n).build_global()
    {
        eprintln!("warning: failed to set Rayon thread pool size: {}", err);
    }

    if let Some(n) = cli.polars_threads {
        // Setting environment variables is unsafe in Rust 2024 due to potential
        // data races if other threads read env concurrently.
        unsafe {
            std::env::set_var("POLARS_MAX_THREADS", n.to_string());
        }
    }

    blas::set_openblas_threads(cli.blas_threads);

    match cli.command {
        Command::MungeSumstats(args) => munge::run(args),
        Command::Ldscore(args) => ldscore::run(args),
        Command::H2(args) => regressions::run_h2(args),
        Command::Rg(args) => regressions::run_rg(args),
        Command::MakeAnnot(args) => make_annot::run(args),
        Command::CtsAnnot(args) => cts_annot::run(args),
    }
}