Git Product home page Git Product logo

auto-differentiation / xad Goto Github PK

View Code? Open in Web Editor NEW
216.0 9.0 17.0 1.24 MB

Comprehensive automatic differentiation in C++

Home Page: https://auto-differentiation.github.io

License: GNU Affero General Public License v3.0

CMake 4.20% C++ 95.80%
automatic-differentiation risk-management derivatives biotechnology computer-graphics machine-learning meteorology numerical-analysis optimisation quant-finance

xad's Introduction

XAD

XAD is a comprehensive library for automatic differentiation, available for both Python and C++. It targets production-quality code at any scale, striving for both ease of use and high performance.

Download License DOI PRs Welcome
GitHub Workflow Status Tests Badge Coverage GitHub CodeQL Status Tests Badge

Automatic differentiation (also called algorithmic differentiation) is a set of techniques for calculating partial derivatives of functions specified as computer programs. Since every program execution is always composed of a sequence of simple operations with known derivatives (arithmetics and mathematical functions like sin, exp, log, etc.), the chain rule can be applied repeatedly to calculate partial derivatives automatically. XAD implements this using operator-overloading in C++ and exposes bindings for Python, allowing to compute derivatives with minimal changes to the program. See automatic differentiation mathematical background for more details.

Application areas:

  • Machine Learning and Deep Learning: Training neural networks or other machine learning models.
  • Optimisation: Solving optimisation problems in engineering and finance.
  • Numerical Analysis: Enhancing numerical solution methods for differential equations.
  • Scientific Computing: Simulating physical systems and processes.
  • Risk Management and Quantitative Finance: Assessing and hedging risk in financial models.
  • Computer Graphics: Optimising rendering algorithms.
  • Robotics: Improving control and simulation of robotic systems.
  • Meteorology: Enhancing weather prediction models.
  • Biotechnology: Modeling biological processes and systems.

Key features:

  • Forward and adjoint mode for any order, using operator-overloading
  • Checkpointing support (for tape memory management)
  • External functions interface (to integrate external libraries)
  • Thread-safe tape
  • Formal exception-safety guarantees
  • High performance
  • Battle-tested in large production code bases

Getting Started

XAD in C++ builds with modern CMake and has no external dependencies. For instructions how to build and integrate it into your projects, please refer to the Installation Guide.

The documentation site also contains tutorials, examples, and information about integrating XAD into QuantLib.

The sources for the reference section of the site are located in the docs directory in this repository.

Getting Help

If you have found an issue, want to report a bug, or have a feature request, please raise a GitHub issue.

For general questions about XAD, sharing ideas, engaging with community members, etc, please use GitHub Discussions.

Related Projects

  • XAD Comprehensive automatic differentiation in Python and C++
  • QuantLib-Risks: Fast risk evaluations in Python and C++

Planned Features

Please see the issues list for planned/open features. You are very welcome to contribute towards these (or other) features - please contact the project maintainers before to discuss you proposal. If you have new feature requests, please submit a new issue with a detailed description.

Contributing

Please read CONTRIBUTING for the process of contributing to this project. Please also obey our Code of Conduct in all communication.

Versioning

We use SemVer for versioning, making a new release available as soon as sufficient new features have been merged into main. The final decision about a release and which features are included is with the project maintainers. For the versions available, see the releases in GitHub.

Every new version is also added to the Changelog, which needs to be maintained throughout the development. That is, every pull request should also update the Changelog accordingly.

Authors

  • Various contributors from Xcelerit
  • See also the list of contributors who participated in the project.

License

This project is licensed under the GNU Affero General Public License - see the LICENSE.md file for details.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.