#![warn(missing_docs)]
#![warn(rustdoc::missing_doc_code_examples)]
#![deny(clippy::all)]
#![warn(clippy::missing_safety_doc)]
#![warn(clippy::missing_errors_doc)]
#![warn(clippy::float_cmp)]
#![warn(clippy::if_not_else)]
#![warn(clippy::explicit_iter_loop)]
#![warn(clippy::wildcard_imports)]
#![warn(clippy::cloned_instead_of_copied)]
#![warn(clippy::cognitive_complexity)]
#![warn(clippy::type_repetition_in_bounds)]
#![warn(clippy::redundant_closure_for_method_calls)]
#![warn(clippy::manual_assert)]
#![warn(clippy::doc_markdown)]
#![warn(clippy::match_same_arms)]
#![warn(clippy::default_trait_access)]
#![warn(clippy::semicolon_if_nothing_returned)]
#![warn(clippy::explicit_into_iter_loop)]
#![warn(clippy::inefficient_to_string)]
#![warn(clippy::needless_pass_by_value)]
#![warn(clippy::used_underscore_binding)]
#![warn(clippy::use_self)]
#![warn(clippy::missing_const_for_fn)]
#![warn(clippy::option_if_let_else)]
#![warn(clippy::equatable_if_let)]
#![allow(clippy::suboptimal_flops)]
#![allow(clippy::redundant_pub_crate)]
#![allow(clippy::debug_assert_with_mut_call)]
use cfg_if::cfg_if;
use log::warn;
pub mod io;
pub use io::{mwaf::FlagFileSet, write_ms, write_uvfits};
pub mod corrections;
pub use corrections::{correct_cable_lengths, correct_geometry, ScrunchType};
pub mod calibration;
pub mod flags;
#[cfg(test)]
pub use approx;
pub use flags::{flag_to_weight_array, get_weight_factor, write_flags, FlagContext};
pub mod passband_gains;
pub use marlu;
pub use marlu::{
mwalib,
mwalib::{fitsio, fitsio_sys, CorrelatorContext},
ndarray,
ndarray::{parallel::prelude::*, Array3, Axis},
selection::VisSelection,
Complex, Jones,
};
mod error;
pub use error::BirliError;
pub mod preprocessing;
pub use preprocessing::PreprocessContext;
pub mod cli;
pub use cli::BirliContext;
cfg_if! {
if #[cfg(feature = "aoflagger")] {
pub use flags::{flag_jones_array, flag_jones_array_existing};
pub use aoflagger_sys::{cxx_aoflagger_new, CxxAOFlagger, CxxFlagMask, UniquePtr, CxxImageSet};
}
}
#[cfg(test)]
pub mod test_common;
lazy_static::lazy_static! {
static ref DURATIONS: std::sync::Mutex<std::collections::HashMap<String, std::time::Duration>> = {
std::sync::Mutex::new(std::collections::HashMap::new())
};
}
#[macro_export]
macro_rules! with_increment_duration {
($name:literal, $($s:stmt);+ $(;)?) => {
{
let _now = std::time::Instant::now();
let _res = {
$(
$s
)*
};
let mut durations = $crate::DURATIONS.lock().unwrap();
*durations.entry($name.into()).or_insert(Duration::default()) += _now.elapsed();
_res
}
};
}