Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Symmetric/Hermitian matrix function rules (#193)
* Add symmetric/hermitian eigendecomposition rules * Add utility functions * Add frules and rrules for sym/herm power series * Add int pow rules * Add sincos rules * Remove unused function argument * Fix and comment _nonzero * Make methods and signatures less ambiguous * Handle Zero() better * Standardize notation * Remove parens * Update src/rulesets/LinearAlgebra/structured.jl Co-authored-by: Nick Robinson <[email protected]> * Fix for Julia 1.0 * Use correct variable and method name * Accumulate in the triangle in the pullback * Remove comment * Add eigen and eigvals tests * Remove outdated comment * Clean up and make constraint functions faster * Make outputs of int pow of Hermitian are Hermitian * Fix typo in comment * Test most power series functions * Don't thunk tangents * Make type-stable and use optimal threshold * Split out symmetric/hermitian methods/tests * Use correct pullback of hermitrization * Stabilize eigenvector computation * Test composed pullback * Remove all eigendecomposition rules Moved to #323 * Move to utilities section * Move to utilities section * Separate shared code into its own function * Don't thunk * Use correct function name * Correctly broadcast * Remove power rules * Rename to matrix functions * Remove pow tests * Expand test suite * Remove sincos rules for now * Add references and comments * Add _isindomain * Refactor _matfun Return cache and handle type-unstable case * Add _matfun_frechet * Broadcast instead of indexing * Add comments and use indexing from paper * Handle Zeros * Contrain differentials according to primals * Support all matrix functions * Remove unused methods * Support Symmetric{Complex} * Add rules for sincos * Make atanh rule type-stable * Correctly test type-unstable functions * Use correct denominator * Add tests for almost-singular and low-rank matrices * Remove out-dated comments * Test alternate differentials * Don't use only * Remove _hermitrizeback! * Don't use hasproperty, not in old Julia versions * Reduce allocations * simplify section name * Simplify line * Handle mixture of non-Zero and Zero * Don't loop over unused functions * Test against component frules instead of fd * Test that rules produce same uplo as primal * Apply suggestions from code review Co-authored-by: Lyndon White <[email protected]> * Reuse variable name In this case it is type-stable * Use bang bang convention for maybe-in-place * Don't assume the wrapped matrix is mutable * Replace hermitrize! * Use diagind * Remove handling of Zero differential * Unify symbols * Use hasproperty * Load hasproperty from Compat * Replace refs with one to Higham * Add docstrings * Update src/rulesets/LinearAlgebra/symmetric.jl Co-authored-by: Lyndon White <[email protected]> * Increment version number * Use utility function * Stabilize jvp Jacobian dimensions * Don't use non-exported function * Bump required ChainRulesCore Co-authored-by: Nick Robinson <[email protected]> Co-authored-by: Lyndon White <[email protected]>
- Loading branch information
c59e6f8
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JuliaRegistrator register
c59e6f8
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Registration pull request created: JuliaRegistries/General/27987
After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.
This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via: