Generally, functions that throw XAD exceptions give mostly the strong guarantee, i.e. the state of the objects involved is unchanged and operations can continue as if the throwing function was not called.
Some functions can only give the weak guarantee, i.e., the object is in an undefined state but the application can recover be re-initializing the object. This is notably the case if the user-defined
CheckpointCallback::computeAdjoint function throws an exception.
XAD defines the following exception types.
class Exception : public std::runtime_error
Base class of all XAD exceptions, including the standard method
const char* what() const to return the message of the exception (inherited).
class TapeAlreadyActive : public Exception
Exception that is thrown when a tape is attempted to be activated while another one is already active for the current thread.
class OutOfRange : public Exception
Exception thrown when an argument is out of the acceptable range.
DerivativesNotInitialized : public Exception
Exception thrown if adjoints are attempted to be computed without setting at least one derivative first.
NoTapeException : public Exception
Exception thrown if a derivative of an
AReal object is created without an active tape for the current thread.