Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 78b85ce208db
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 311c757da1fd
Choose a head ref
  • 7 commits
  • 10 files changed
  • 1 contributor

Commits on Jan 17, 2020

  1. Tensor contraction

    eggrobin committed Jan 17, 2020
    Copy the full SHA
    0f3c96f View commit details
  2. eggrobin committed Jan 17, 2020
    Copy the full SHA
    7b1f251 View commit details
  3. unclang-format

    eggrobin committed Jan 17, 2020
    Copy the full SHA
    cd3e3da View commit details

Commits on Jan 18, 2020

  1. Copy the full SHA
    ecec042 View commit details
  2. Omit SF

    eggrobin committed Jan 18, 2020
    Copy the full SHA
    a6027ef View commit details
  3. AnticommutatorInverse

    eggrobin committed Jan 18, 2020
    Copy the full SHA
    5388576 View commit details
  4. Merge pull request #2451 from eggrobin/antianticommutator

    An inverse for `Anticommutator`
    eggrobin authored Jan 18, 2020
    Copy the full SHA
    311c757 View commit details
4 changes: 2 additions & 2 deletions geometry/identity.hpp
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ FORWARD_DECLARE_FROM(
symmetric_bilinear_form,
TEMPLATE(typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector) class,
template<typename, typename> typename Multivector) class,
SymmetricBilinearForm);

namespace internal_identity {
@@ -51,7 +51,7 @@ class Identity : public LinearMap<FromFrame, ToFrame> {
Trivector<Scalar, FromFrame> const& trivector) const;

template<typename Scalar,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector> operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const;

2 changes: 1 addition & 1 deletion geometry/identity_body.hpp
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@ Trivector<Scalar, ToFrame> Identity<FromFrame, ToFrame>::operator()(
}

template<typename FromFrame, typename ToFrame>
template<typename Scalar, template<typename S, typename F> typename Multivector>
template<typename Scalar, template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector>
Identity<FromFrame, ToFrame>::operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const {
4 changes: 2 additions & 2 deletions geometry/orthogonal_map.hpp
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@ FORWARD_DECLARE_FROM(
symmetric_bilinear_form,
TEMPLATE(typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector) class,
template<typename, typename> typename Multivector) class,
SymmetricBilinearForm);

namespace internal_orthogonal_map {
@@ -71,7 +71,7 @@ class OrthogonalMap : public LinearMap<FromFrame, ToFrame> {
Trivector<Scalar, FromFrame> const& trivector) const;

template<typename Scalar,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector> operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const;

2 changes: 1 addition & 1 deletion geometry/orthogonal_map_body.hpp
Original file line number Diff line number Diff line change
@@ -54,7 +54,7 @@ Trivector<Scalar, ToFrame> OrthogonalMap<FromFrame, ToFrame>::operator()(
}

template<typename FromFrame, typename ToFrame>
template<typename Scalar, template<typename S, typename F> typename Multivector>
template<typename Scalar, template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector>
OrthogonalMap<FromFrame, ToFrame>::operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const {
2 changes: 1 addition & 1 deletion geometry/rotation_body.hpp
Original file line number Diff line number Diff line change
@@ -212,7 +212,7 @@ Trivector<Scalar, ToFrame> Rotation<FromFrame, ToFrame>::operator()(

template<typename FromFrame, typename ToFrame>
template<typename Scalar,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector>
Rotation<FromFrame, ToFrame>::operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const {
2 changes: 1 addition & 1 deletion geometry/signature.hpp
Original file line number Diff line number Diff line change
@@ -56,7 +56,7 @@ class Signature : public LinearMap<FromFrame, ToFrame> {
Trivector<Scalar, FromFrame> const& trivector) const;

template<typename Scalar,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector> operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const;

2 changes: 1 addition & 1 deletion geometry/signature_body.hpp
Original file line number Diff line number Diff line change
@@ -82,7 +82,7 @@ Trivector<Scalar, ToFrame> Signature<FromFrame, ToFrame>::operator()(
}

template<typename FromFrame, typename ToFrame>
template<typename Scalar, template<typename S, typename F> typename Multivector>
template<typename Scalar, template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, ToFrame, Multivector>
Signature<FromFrame, ToFrame>::operator()(
SymmetricBilinearForm<Scalar, FromFrame, Multivector> const& form) const {
30 changes: 18 additions & 12 deletions geometry/symmetric_bilinear_form.hpp
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ using quantities::Quotient;
// |Multivector|, expressed in the coordinates of |Frame|.
template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
class SymmetricBilinearForm {
public:
explicit SymmetricBilinearForm(R3x3Matrix<Scalar> const& matrix);
@@ -57,6 +57,12 @@ class SymmetricBilinearForm {
typename = std::enable_if_t<base::is_same_template_v<M, Vector>>>
SymmetricBilinearForm<Scalar, Frame, Bivector> Anticommutator() const;

// This function is the inverse of |Anticommutator()|. It is well-defined
// only in dimension 3, where dim ⋀²V = dim V.
template<template<typename, typename> typename M = Multivector,
typename = std::enable_if_t<base::is_same_template_v<M, Bivector>>>
SymmetricBilinearForm<Scalar, Frame, Vector> AnticommutatorInverse() const;

// The eigensystem for a form is described by (1) the form in its eigenbasis,
// which gives the eigenvalues; and (2) a rotation from the current basis to
// the eigenbasis, which gives the eigenvectors.
@@ -187,46 +193,46 @@ SymmetricBilinearForm<double, Frame, Multivector> const& InnerProductForm();

template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, Frame, Multivector> operator+(
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);
template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, Frame, Multivector> operator-(
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);

template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, Frame, Multivector> operator+(
SymmetricBilinearForm<Scalar, Frame, Multivector> const& left,
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);
template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Scalar, Frame, Multivector> operator-(
SymmetricBilinearForm<Scalar, Frame, Multivector> const& left,
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);

template<typename LScalar,
typename RScalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Product<LScalar, RScalar>, Frame, Multivector> operator*(
LScalar left,
SymmetricBilinearForm<RScalar, Frame, Multivector> const& right);
template<typename LScalar,
typename RScalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Product<LScalar, RScalar>, Frame, Multivector> operator*(
SymmetricBilinearForm<LScalar, Frame, Multivector> const& left,
RScalar right);
template<typename LScalar,
typename RScalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
SymmetricBilinearForm<Quotient<LScalar, RScalar>, Frame, Multivector> operator/(
SymmetricBilinearForm<LScalar, Frame, Multivector> const& left,
RScalar right);
@@ -277,24 +283,24 @@ Bivector<Product<LScalar, RScalar>, Frame> Anticommutator(

template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
bool operator==(SymmetricBilinearForm<Scalar, Frame, Multivector> const& left,
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);
template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
bool operator!=(SymmetricBilinearForm<Scalar, Frame, Multivector> const& left,
SymmetricBilinearForm<Scalar, Frame, Multivector> const& right);

template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
std::string DebugString(
SymmetricBilinearForm<Scalar, Frame, Multivector> const& form);

template<typename Scalar,
typename Frame,
template<typename S, typename F> typename Multivector>
template<typename, typename> typename Multivector>
std::ostream& operator<<(
std::ostream& out,
SymmetricBilinearForm<Scalar, Frame, Multivector> const& form);
Loading