#math #arrays #monte #orthogonal #carlo


A library providing construction methods and utility functions for orthogonal arrays and strong orthogonal arrays

22 releases (stable)

3.0.1 Dec 27, 2020
2.1.2 Dec 26, 2020
2.1.1 Jul 30, 2020
2.0.4 Sep 29, 2019
0.4.1 Jun 18, 2019

#1503 in Algorithms

Download history 1/week @ 2023-06-07 3/week @ 2023-06-14 23/week @ 2023-06-21 42/week @ 2023-06-28 1/week @ 2023-07-19 1/week @ 2023-08-02 22/week @ 2023-08-16 22/week @ 2023-08-23 1/week @ 2023-08-30 47/week @ 2023-09-06 21/week @ 2023-09-13 23/week @ 2023-09-20

92 downloads per month

MIT license

864 lines


Build Status crates badge Documentation License


oars is a library for constructing orthogonal arrays (OAs) with various parameters, with the ability to construct OAs using multiple construction methods. It also provides utilities for constructing strong orthogonal arrays that work with the facilities for existing OAs or constructing SOAs from scratch. On top of being able to generated orthogonal arrays, this crate provides utilities to verify orthogonal arrays given a set of parameters.

These orthogonal arrays are not predefined and are constructed on the fly. If you want to create orthogonal arrays using predefined lookup tables, there are many resources online that provide the numbers for you to use.

For more information about orthogonal arrays and their use in Monte Carlo sampling, check out Chapter 10 of Art Owen's Monte Carlo book.

This library only guarantees stability against stable Rust, unless there is significant interest in supporting older versions. In such case, please let me know by either filing an issue on Github or contacting me.


This project only relies on the ndarray crate. There are several optimizations that can be applied to the crate for compilation, such as BLAS acceleration. You can optionally enable serde support for the orthogonal array structs with features = ["serialize"].

This crate was made for the stable compiler, so building is as simple as

cargo build
# or
cargo build --release

You can also run benchmarks using cargo bench. This uses criterion to run benchmarks, which offers robust statistics for benchmarks as well as pretty output for benchmark results.


You can use this library with your Rust project via cargo. It targets the stable Rust compiler, so as long as you keep Rust updated, you'll probably be good.

I test this library on Mac/Linux with Travis, and also on my personal Mac and Linux machines.

Of course, if you find any issues, please file an issue or send a PR. Feature requests are also welcome.

If you want to enable serialization support for this library, include your dependency as such:

version = "2.1"
features = ["serialize", "parallel"] # optional features


~79K SLoC