The longer Levin mowed, the oftener he felt the moments of unconsciousness in which it seemed not his hands that swung the scythe, but the scythe mowing of itself, a body full of life and consciousness of its own, and as though by magic, without thinking of it, the work turned out regular and well-finished of itself.
-- Tolstoy, Anna Karenina (trans. Constance Garnett)

The Scythe Statistical Library is an open source C++ library for statistical computation, written by Daniel Pemstein (University of Mississippi and University of Illinois), Kevin M. Quinn (UC Berkeley), and Andrew D. Martin (University of Michigan). It includes a suite of matrix manipulation functions, a suite of pseudo-random number generators, and a suite of numerical optimization routines. Programs written using Scythe are generally much faster than those written in commonly used interpreted languages, such as R and MATLAB, and can be compiled on any system with the GNU GCC compiler (and perhaps with other C++ compilers). One of the primary design goals of the Scythe developers has been ease of use for non-expert C++ programmers. We provide ease of use through three primary mechanisms: (1) operator and function over-loading, (2) numerous pre-fabricated utility functions, and (3) clear documentation and example programs. Additionally, Scythe is quite flexible and entirely extensible because the source code is available to all users under the GNU General Public License.

Current Public Release -- Scythe 1.0.3

We released Scythe 1.0 on January 15, 2007. This release represents a major overhaul of the library since the last public release (0.3) and the library's new interface is not backwards compatible with previous releases. Scythe now provides both column- and row-major matrices, multiple views of the same matrix, submatrix assignment, and a variety of other new functionality. In addition, Scythe now optionally uses highly optimized LAPACK and BLAS routines to perform certain matrix and linear algebra operations on machines that provide these libraries. Scythe 1.0.3, released on June 13, 2012, is more standards-compliant than previous releases, fixes a number of bugs, improves library efficiency, provides for thread safety, and enhances compatibility with the R Project for Statistical Computing. See the ChangeLog for details. We have tested Scythe 1.0.3 on Linux and OS X and the library should work with the GNU GCC compiler version 4.4.7 or greater.

Documentation

We currently provide an article that introduces the library and walks through some examples of how to use it, and a set of documents that exhaustively describe Scythe's application programmers' interface (API).

Projects and Papers That Use Scythe

Scythe has been used in the following software projects and published papers:

Please let us know of other projects or papers to add to this list.

If you have any questions about Scythe, or would like to contribute to the project, please do not hesitate to email one of the authors: Daniel Pemstein, Kevin M. Quinn, or Andrew D. Martin.

Acknowledgements

We gratefully acknowledge support from the United States National Science Foundation (Grants SES-0350646 and SES-0350613), the Department of Political Science, the Weidenbaum Center, and the Center for Empirical Research in the Law at Washington University, and the Department of Government and The Institute for Quantitative Social Science at Harvard University. Neither the foundation, Washington University, the University of Michigan, nor Harvard University bear any responsibility for this software.

We'd also like to thank the research assistants who have helped us with Scythe: Matthew Fasman, Steve Haptonstahl, Kate Jensen, Laura Keys, Kevin Rompala, Joe Sheehan, and Jean Yang.