# Utilities¶

## Householder reflectors¶

TODO: Describe major difference from LAPACK’s conventions (i.e., we do not treat the identity matrix as a Householder transform since it requires the $$u$$ in $$H=I-2uu'$$ to have norm zero rather than one).

F LeftReflector(F &chi, Matrix<F> &x)
F LeftReflector(Matrix<F> &chi, Matrix<F> &x)
F LeftReflector(F &chi, DistMatrix<F> &x)
F LeftReflector(DistMatrix<F> &chi, DistMatrix<F> &x)
F reflector::Col(F &chi, DistMatrix<F> &x)
F reflector::Col(DistMatrix<F> &chi, DistMatrix<F> &x)
F RightReflector(F &chi, Matrix<F> &x)
F RightReflector(Matrix<F> &chi, Matrix<F> &x)
F RightReflector(F &chi, DistMatrix<F> &x)
F RightReflector(DistMatrix<F> &chi, DistMatrix<F> &x)
F reflector::Row(F &chi, DistMatrix<F> &x)
F reflector::Row(DistMatrix<F> &chi, DistMatrix<F> &x)
F LeftHyperbolicReflector(F &chi, Matrix<F> &x)
F LeftHyperbolicReflector(Matrix<F> &chi, Matrix<F> &x)
F LeftHyperbolicReflector(F &chi, DistMatrix<F> &x)
F LeftHyperbolicReflector(DistMatrix<F> &chi, DistMatrix<F> &x)
F hyp_reflector::Col(F &chi, DistMatrix<F> &x)
F hyp_reflector::Col(DistMatrix<F> &chi, DistMatrix<F> &x)
F RightHyperbolicReflector(F &chi, Matrix<F> &x)
F RightHyperbolicReflector(Matrix<F> &chi, Matrix<F> &x)
F RightHyperbolicReflector(F &chi, DistMatrix<F> &x)
F RightHyperbolicReflector(DistMatrix<F> &chi, DistMatrix<F> &x)
F hyp_reflector::Row(F &chi, DistMatrix<F> &x)
F hyp_reflector::Row(DistMatrix<F> &chi, DistMatrix<F> &x)
void ApplyPackedReflectors(LeftOrRight side, UpperOrLower uplo, VerticalOrHorizontal dir, ForwardOrBackward order, Conjugation conjugation, int offset, const Matrix<F> &H, const Matrix<F> &t, Matrix<F> &A)
void ApplyPackedReflectors(LeftOrRight side, UpperOrLower uplo, VerticalOrHorizontal dir, ForwardOrBackward order, Conjugation conjugation, int offset, const DistMatrix<F> &H, const DistMatrix<F, MD, STAR> &t, DistMatrix<F> &A)
void ApplyPackedReflectors(LeftOrRight side, UpperOrLower uplo, VerticalOrHorizontal dir, ForwardOrBackward order, Conjugation conjugation, int offset, const DistMatrix<F> &H, const DistMatrix<F, STAR, STAR> &t, DistMatrix<F> &A)
void ExpandPackedReflectors(UpperOrLower uplo, VerticalOrHorizontal dir, Conjugation conjugation, int offset, Matrix<F> &H, const Matrix<F> &t)
void ExpandPackedReflectors(UpperOrLower uplo, VerticalOrHorizontal dir, Conjugation conjugation, int offset, DistMatrix<F> &H, const DistMatrix<F, MD, STAR> &t)
void ExpandPackedReflectors(UpperOrLower uplo, VerticalOrHorizontal dir, Conjugation conjugation, int offset, DistMatrix<F> &H, const DistMatrix<F, STAR, STAR> &t)

## Sorting¶

void Sort(Matrix<Real> &X, SortType sort = ASCENDING)
void Sort(DistMatrix<Real, U, V> &X, SortType sort = ASCENDING)
std::vector<ValueInt<Real>> TaggedSort(const Matrix<Real> &X, SortType sort = ASCENDING)
std::vector<ValueInt<Real>> TaggedSort(const DistMatrix<Real, U, V> &X, SortType sort = ASCENDING)
ValueInt<Real> Median(const Matrix<Real> &x)
ValueInt<Real> Median(const DistMatrix<Real, U, V> &x)