[4/4] libipa: Drop Vector class
diff mbox series

Message ID 20250206141018.236272-5-stefan.klug@ideasonboard.com
State Accepted
Commit fa93d40035dbb90540a4fada404344eb3183410e
Headers show
Series
  • Move Vector class from libipa to libcamera
Related show

Commit Message

Stefan Klug Feb. 6, 2025, 2:10 p.m. UTC
The Vector class from libipa is not used anymore. Drop it.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
---
 src/ipa/libipa/meson.build  |   2 -
 src/ipa/libipa/vector.cpp   | 351 ----------------------------------
 src/ipa/libipa/vector.h     | 370 ------------------------------------
 test/ipa/libipa/meson.build |   1 -
 test/ipa/libipa/vector.cpp  | 100 ----------
 5 files changed, 824 deletions(-)
 delete mode 100644 src/ipa/libipa/vector.cpp
 delete mode 100644 src/ipa/libipa/vector.h
 delete mode 100644 test/ipa/libipa/vector.cpp

Comments

Kieran Bingham Feb. 11, 2025, 9:46 a.m. UTC | #1
Quoting Stefan Klug (2025-02-06 14:10:11)
> The Vector class from libipa is not used anymore. Drop it.
> 
> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>


Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/ipa/libipa/meson.build  |   2 -
>  src/ipa/libipa/vector.cpp   | 351 ----------------------------------
>  src/ipa/libipa/vector.h     | 370 ------------------------------------
>  test/ipa/libipa/meson.build |   1 -
>  test/ipa/libipa/vector.cpp  | 100 ----------
>  5 files changed, 824 deletions(-)
>  delete mode 100644 src/ipa/libipa/vector.cpp
>  delete mode 100644 src/ipa/libipa/vector.h
>  delete mode 100644 test/ipa/libipa/vector.cpp
> 
> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
> index f2b2f4be50db..12d8d15bf52a 100644
> --- a/src/ipa/libipa/meson.build
> +++ b/src/ipa/libipa/meson.build
> @@ -14,7 +14,6 @@ libipa_headers = files([
>      'lux.h',
>      'module.h',
>      'pwl.h',
> -    'vector.h',
>  ])
>  
>  libipa_sources = files([
> @@ -31,7 +30,6 @@ libipa_sources = files([
>      'lux.cpp',
>      'module.cpp',
>      'pwl.cpp',
> -    'vector.cpp',
>  ])
>  
>  libipa_includes = include_directories('..')
> diff --git a/src/ipa/libipa/vector.cpp b/src/ipa/libipa/vector.cpp
> deleted file mode 100644
> index 8019f8cfdc85..000000000000
> --- a/src/ipa/libipa/vector.cpp
> +++ /dev/null
> @@ -1,351 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Vector and related operations
> - */
> -
> -#include "vector.h"
> -
> -#include <libcamera/base/log.h>
> -
> -/**
> - * \file vector.h
> - * \brief Vector class
> - */
> -
> -namespace libcamera {
> -
> -LOG_DEFINE_CATEGORY(Vector)
> -
> -namespace ipa {
> -
> -/**
> - * \class Vector
> - * \brief Vector class
> - * \tparam T Type of numerical values to be stored in the vector
> - * \tparam Rows Number of dimension of the vector (= number of elements)
> - */
> -
> -/**
> - * \fn Vector::Vector()
> - * \brief Construct an uninitialized vector
> - */
> -
> -/**
> - * \fn Vector::Vector(T scalar)
> - * \brief Construct a vector filled with a \a scalar value
> - * \param[in] scalar The scalar value
> - */
> -
> -/**
> - * \fn Vector::Vector(const std::array<T, Rows> &data)
> - * \brief Construct vector from supplied data
> - * \param data Data from which to construct a vector
> - *
> - * The size of \a data must be equal to the dimension size Rows of the vector.
> - */
> -
> -/**
> - * \fn T Vector::operator[](size_t i) const
> - * \brief Index to an element in the vector
> - * \param i Index of element to retrieve
> - * \return Element at index \a i from the vector
> - */
> -
> -/**
> - * \fn T &Vector::operator[](size_t i)
> - * \copydoc Vector::operator[](size_t i) const
> - */
> -
> -/**
> - * \fn Vector::operator-() const
> - * \brief Negate a Vector by negating both all of its coordinates
> - * \return The negated vector
> - */
> -
> -/**
> - * \fn Vector::operator+(Vector const &other) const
> - * \brief Calculate the sum of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise sum of this vector and \a other
> - */
> -
> -/**
> - * \fn Vector::operator+(T scalar) const
> - * \brief Calculate the sum of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise sum of this vector and \a other
> - */
> -
> -/**
> - * \fn Vector::operator-(Vector const &other) const
> - * \brief Calculate the difference of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise subtraction of \a other from this vector
> - */
> -
> -/**
> - * \fn Vector::operator-(T scalar) const
> - * \brief Calculate the difference of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise subtraction of \a scalar from this vector
> - */
> -
> -/**
> - * \fn Vector::operator*(const Vector &other) const
> - * \brief Calculate the product of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise product of this vector and \a other
> - */
> -
> -/**
> - * \fn Vector::operator*(T scalar) const
> - * \brief Calculate the product of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise product of this vector and \a scalar
> - */
> -
> -/**
> - * \fn Vector::operator/(const Vector &other) const
> - * \brief Calculate the quotient of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise division of this vector by \a other
> - */
> -
> -/**
> - * \fn Vector::operator/(T scalar) const
> - * \brief Calculate the quotient of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise division of this vector by \a scalar
> - */
> -
> -/**
> - * \fn Vector::operator+=(Vector const &other)
> - * \brief Add \a other element-wise to this vector
> - * \param[in] other The other vector
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator+=(T scalar)
> - * \brief Add \a scalar element-wise to this vector
> - * \param[in] scalar The scalar
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator-=(Vector const &other)
> - * \brief Subtract \a other element-wise from this vector
> - * \param[in] other The other vector
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator-=(T scalar)
> - * \brief Subtract \a scalar element-wise from this vector
> - * \param[in] scalar The scalar
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator*=(const Vector &other)
> - * \brief Multiply this vector by \a other element-wise
> - * \param[in] other The other vector
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator*=(T scalar)
> - * \brief Multiply this vector by \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator/=(const Vector &other)
> - * \brief Divide this vector by \a other element-wise
> - * \param[in] other The other vector
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::operator/=(T scalar)
> - * \brief Divide this vector by \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return This vector
> - */
> -
> -/**
> - * \fn Vector::min(const Vector &other) const
> - * \brief Calculate the minimum of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise minimum of this vector and \a other
> - */
> -
> -/**
> - * \fn Vector::min(T scalar) const
> - * \brief Calculate the minimum of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise minimum of this vector and \a scalar
> - */
> -
> -/**
> - * \fn Vector::max(const Vector &other) const
> - * \brief Calculate the maximum of this vector and \a other element-wise
> - * \param[in] other The other vector
> - * \return The element-wise maximum of this vector and \a other
> - */
> -
> -/**
> - * \fn Vector::max(T scalar) const
> - * \brief Calculate the maximum of this vector and \a scalar element-wise
> - * \param[in] scalar The scalar
> - * \return The element-wise maximum of this vector and \a scalar
> - */
> -
> -/**
> - * \fn Vector::dot(const Vector<T, Rows> &other) const
> - * \brief Compute the dot product
> - * \param[in] other The other vector
> - * \return The dot product of the two vectors
> - */
> -
> -/**
> - * \fn constexpr T &Vector::x()
> - * \brief Convenience function to access the first element of the vector
> - * \return The first element of the vector
> - */
> -
> -/**
> - * \fn constexpr T &Vector::y()
> - * \brief Convenience function to access the second element of the vector
> - * \return The second element of the vector
> - */
> -
> -/**
> - * \fn constexpr T &Vector::z()
> - * \brief Convenience function to access the third element of the vector
> - * \return The third element of the vector
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::x() const
> - * \copydoc Vector::x()
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::y() const
> - * \copydoc Vector::y()
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::z() const
> - * \copydoc Vector::z()
> - */
> -
> -/**
> - * \fn constexpr T &Vector::r()
> - * \brief Convenience function to access the first element of the vector
> - * \return The first element of the vector
> - */
> -
> -/**
> - * \fn constexpr T &Vector::g()
> - * \brief Convenience function to access the second element of the vector
> - * \return The second element of the vector
> - */
> -
> -/**
> - * \fn constexpr T &Vector::b()
> - * \brief Convenience function to access the third element of the vector
> - * \return The third element of the vector
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::r() const
> - * \copydoc Vector::r()
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::g() const
> - * \copydoc Vector::g()
> - */
> -
> -/**
> - * \fn constexpr const T &Vector::b() const
> - * \copydoc Vector::b()
> - */
> -
> -/**
> - * \fn Vector::length2()
> - * \brief Get the squared length of the vector
> - * \return The squared length of the vector
> - */
> -
> -/**
> - * \fn Vector::length()
> - * \brief Get the length of the vector
> - * \return The length of the vector
> - */
> -
> -/**
> - * \fn Vector::sum() const
> - * \brief Calculate the sum of all the vector elements
> - * \tparam R The type of the sum
> - *
> - * The type R of the sum defaults to the type T of the elements, but can be set
> - * explicitly to use a different type in case the type T would risk
> - * overflowing.
> - *
> - * \return The sum of all the vector elements
> - */
> -
> -/**
> - * \fn Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
> - * \brief Multiply a matrix by a vector
> - * \tparam T Numerical type of the contents of the matrix and vector
> - * \tparam Rows The number of rows in the matrix
> - * \tparam Cols The number of columns in the matrix (= rows in the vector)
> - * \param m The matrix
> - * \param v The vector
> - * \return Product of matrix \a m and vector \a v
> - */
> -
> -/**
> - * \typedef RGB
> - * \brief A Vector of 3 elements representing an RGB pixel value
> - */
> -
> -/**
> - * \fn bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
> - * \brief Compare vectors for equality
> - * \return True if the two vectors are equal, false otherwise
> - */
> -
> -/**
> - * \fn bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
> - * \brief Compare vectors for inequality
> - * \return True if the two vectors are not equal, false otherwise
> - */
> -
> -#ifndef __DOXYGEN__
> -bool vectorValidateYaml(const YamlObject &obj, unsigned int size)
> -{
> -       if (!obj.isList())
> -               return false;
> -
> -       if (obj.size() != size) {
> -               LOG(Vector, Error)
> -                       << "Wrong number of values in YAML vector: expected "
> -                       << size << ", got " << obj.size();
> -               return false;
> -       }
> -
> -       return true;
> -}
> -#endif /* __DOXYGEN__ */
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> diff --git a/src/ipa/libipa/vector.h b/src/ipa/libipa/vector.h
> deleted file mode 100644
> index fe33c9d6fbd1..000000000000
> --- a/src/ipa/libipa/vector.h
> +++ /dev/null
> @@ -1,370 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Vector and related operations
> - */
> -#pragma once
> -
> -#include <algorithm>
> -#include <array>
> -#include <cmath>
> -#include <functional>
> -#include <numeric>
> -#include <optional>
> -#include <ostream>
> -
> -#include <libcamera/base/log.h>
> -#include <libcamera/base/span.h>
> -
> -#include "libcamera/internal/matrix.h"
> -#include "libcamera/internal/yaml_parser.h"
> -
> -namespace libcamera {
> -
> -LOG_DECLARE_CATEGORY(Vector)
> -
> -namespace ipa {
> -
> -#ifndef __DOXYGEN__
> -template<typename T, unsigned int Rows,
> -        std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
> -#else
> -template<typename T, unsigned int Rows>
> -#endif /* __DOXYGEN__ */
> -class Vector
> -{
> -public:
> -       constexpr Vector() = default;
> -
> -       constexpr explicit Vector(T scalar)
> -       {
> -               data_.fill(scalar);
> -       }
> -
> -       constexpr Vector(const std::array<T, Rows> &data)
> -       {
> -               for (unsigned int i = 0; i < Rows; i++)
> -                       data_[i] = data[i];
> -       }
> -
> -       const T &operator[](size_t i) const
> -       {
> -               ASSERT(i < data_.size());
> -               return data_[i];
> -       }
> -
> -       T &operator[](size_t i)
> -       {
> -               ASSERT(i < data_.size());
> -               return data_[i];
> -       }
> -
> -       constexpr Vector<T, Rows> operator-() const
> -       {
> -               Vector<T, Rows> ret;
> -               for (unsigned int i = 0; i < Rows; i++)
> -                       ret[i] = -data_[i];
> -               return ret;
> -       }
> -
> -       constexpr Vector operator+(const Vector &other) const
> -       {
> -               return apply(*this, other, std::plus<>{});
> -       }
> -
> -       constexpr Vector operator+(T scalar) const
> -       {
> -               return apply(*this, scalar, std::plus<>{});
> -       }
> -
> -       constexpr Vector operator-(const Vector &other) const
> -       {
> -               return apply(*this, other, std::minus<>{});
> -       }
> -
> -       constexpr Vector operator-(T scalar) const
> -       {
> -               return apply(*this, scalar, std::minus<>{});
> -       }
> -
> -       constexpr Vector operator*(const Vector &other) const
> -       {
> -               return apply(*this, other, std::multiplies<>{});
> -       }
> -
> -       constexpr Vector operator*(T scalar) const
> -       {
> -               return apply(*this, scalar, std::multiplies<>{});
> -       }
> -
> -       constexpr Vector operator/(const Vector &other) const
> -       {
> -               return apply(*this, other, std::divides<>{});
> -       }
> -
> -       constexpr Vector operator/(T scalar) const
> -       {
> -               return apply(*this, scalar, std::divides<>{});
> -       }
> -
> -       Vector &operator+=(const Vector &other)
> -       {
> -               return apply(other, [](T a, T b) { return a + b; });
> -       }
> -
> -       Vector &operator+=(T scalar)
> -       {
> -               return apply(scalar, [](T a, T b) { return a + b; });
> -       }
> -
> -       Vector &operator-=(const Vector &other)
> -       {
> -               return apply(other, [](T a, T b) { return a - b; });
> -       }
> -
> -       Vector &operator-=(T scalar)
> -       {
> -               return apply(scalar, [](T a, T b) { return a - b; });
> -       }
> -
> -       Vector &operator*=(const Vector &other)
> -       {
> -               return apply(other, [](T a, T b) { return a * b; });
> -       }
> -
> -       Vector &operator*=(T scalar)
> -       {
> -               return apply(scalar, [](T a, T b) { return a * b; });
> -       }
> -
> -       Vector &operator/=(const Vector &other)
> -       {
> -               return apply(other, [](T a, T b) { return a / b; });
> -       }
> -
> -       Vector &operator/=(T scalar)
> -       {
> -               return apply(scalar, [](T a, T b) { return a / b; });
> -       }
> -
> -       constexpr Vector min(const Vector &other) const
> -       {
> -               return apply(*this, other, [](T a, T b) { return std::min(a, b); });
> -       }
> -
> -       constexpr Vector min(T scalar) const
> -       {
> -               return apply(*this, scalar, [](T a, T b) { return std::min(a, b); });
> -       }
> -
> -       constexpr Vector max(const Vector &other) const
> -       {
> -               return apply(*this, other, [](T a, T b) { return std::max(a, b); });
> -       }
> -
> -       constexpr Vector max(T scalar) const
> -       {
> -               return apply(*this, scalar, [](T a, T b) -> T { return std::max(a, b); });
> -       }
> -
> -       constexpr T dot(const Vector<T, Rows> &other) const
> -       {
> -               T ret = 0;
> -               for (unsigned int i = 0; i < Rows; i++)
> -                       ret += data_[i] * other[i];
> -               return ret;
> -       }
> -
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &x() const { return data_[0]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &y() const { return data_[1]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &z() const { return data_[2]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &x() { return data_[0]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &y() { return data_[1]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &z() { return data_[2]; }
> -
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &r() const { return data_[0]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &g() const { return data_[1]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> -#endif /* __DOXYGEN__ */
> -       constexpr const T &b() const { return data_[2]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &r() { return data_[0]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &g() { return data_[1]; }
> -#ifndef __DOXYGEN__
> -       template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
> -#endif /* __DOXYGEN__ */
> -       constexpr T &b() { return data_[2]; }
> -
> -       constexpr double length2() const
> -       {
> -               double ret = 0;
> -               for (unsigned int i = 0; i < Rows; i++)
> -                       ret += data_[i] * data_[i];
> -               return ret;
> -       }
> -
> -       constexpr double length() const
> -       {
> -               return std::sqrt(length2());
> -       }
> -
> -       template<typename R = T>
> -       constexpr R sum() const
> -       {
> -               return std::accumulate(data_.begin(), data_.end(), R{});
> -       }
> -
> -private:
> -       template<class BinaryOp>
> -       static constexpr Vector apply(const Vector &lhs, const Vector &rhs, BinaryOp op)
> -       {
> -               Vector result;
> -               std::transform(lhs.data_.begin(), lhs.data_.end(),
> -                              rhs.data_.begin(), result.data_.begin(),
> -                              op);
> -
> -               return result;
> -       }
> -
> -       template<class BinaryOp>
> -       static constexpr Vector apply(const Vector &lhs, T rhs, BinaryOp op)
> -       {
> -               Vector result;
> -               std::transform(lhs.data_.begin(), lhs.data_.end(),
> -                              result.data_.begin(),
> -                              [&op, rhs](T v) { return op(v, rhs); });
> -
> -               return result;
> -       }
> -
> -       template<class BinaryOp>
> -       Vector &apply(const Vector &other, BinaryOp op)
> -       {
> -               auto itOther = other.data_.begin();
> -               std::for_each(data_.begin(), data_.end(),
> -                             [&op, &itOther](T &v) { v = op(v, *itOther++); });
> -
> -               return *this;
> -       }
> -
> -       template<class BinaryOp>
> -       Vector &apply(T scalar, BinaryOp op)
> -       {
> -               std::for_each(data_.begin(), data_.end(),
> -                             [&op, scalar](T &v) { v = op(v, scalar); });
> -
> -               return *this;
> -       }
> -
> -       std::array<T, Rows> data_;
> -};
> -
> -template<typename T>
> -using RGB = Vector<T, 3>;
> -
> -template<typename T, unsigned int Rows, unsigned int Cols>
> -Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
> -{
> -       Vector<T, Rows> result;
> -
> -       for (unsigned int i = 0; i < Rows; i++) {
> -               T sum = 0;
> -               for (unsigned int j = 0; j < Cols; j++)
> -                       sum += m[i][j] * v[j];
> -               result[i] = sum;
> -       }
> -
> -       return result;
> -}
> -
> -template<typename T, unsigned int Rows>
> -bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
> -{
> -       for (unsigned int i = 0; i < Rows; i++) {
> -               if (lhs[i] != rhs[i])
> -                       return false;
> -       }
> -
> -       return true;
> -}
> -
> -template<typename T, unsigned int Rows>
> -bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
> -{
> -       return !(lhs == rhs);
> -}
> -
> -#ifndef __DOXYGEN__
> -bool vectorValidateYaml(const YamlObject &obj, unsigned int size);
> -#endif /* __DOXYGEN__ */
> -
> -} /* namespace ipa */
> -
> -#ifndef __DOXYGEN__
> -template<typename T, unsigned int Rows>
> -std::ostream &operator<<(std::ostream &out, const ipa::Vector<T, Rows> &v)
> -{
> -       out << "Vector { ";
> -       for (unsigned int i = 0; i < Rows; i++) {
> -               out << v[i];
> -               out << ((i + 1 < Rows) ? ", " : " ");
> -       }
> -       out << " }";
> -
> -       return out;
> -}
> -
> -template<typename T, unsigned int Rows>
> -struct YamlObject::Getter<ipa::Vector<T, Rows>> {
> -       std::optional<ipa::Vector<T, Rows>> get(const YamlObject &obj) const
> -       {
> -               if (!ipa::vectorValidateYaml(obj, Rows))
> -                       return std::nullopt;
> -
> -               ipa::Vector<T, Rows> vector;
> -
> -               unsigned int i = 0;
> -               for (const YamlObject &entry : obj.asList()) {
> -                       const auto value = entry.get<T>();
> -                       if (!value)
> -                               return std::nullopt;
> -                       vector[i++] = *value;
> -               }
> -
> -               return vector;
> -       }
> -};
> -#endif /* __DOXYGEN__ */
> -
> -} /* namespace libcamera */
> diff --git a/test/ipa/libipa/meson.build b/test/ipa/libipa/meson.build
> index 0f4155d25b0c..eaf4b49a187c 100644
> --- a/test/ipa/libipa/meson.build
> +++ b/test/ipa/libipa/meson.build
> @@ -3,7 +3,6 @@
>  libipa_test = [
>      {'name': 'fixedpoint', 'sources': ['fixedpoint.cpp']},
>      {'name': 'interpolator', 'sources': ['interpolator.cpp']},
> -    {'name': 'vector', 'sources': ['vector.cpp']},
>  ]
>  
>  foreach test : libipa_test
> diff --git a/test/ipa/libipa/vector.cpp b/test/ipa/libipa/vector.cpp
> deleted file mode 100644
> index 8e4ec77d7820..000000000000
> --- a/test/ipa/libipa/vector.cpp
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-or-later */
> -/*
> - * Copyright (C) 2024, Ideas on Board Oy
> - *
> - * Vector tests
> - */
> -
> -#include "../src/ipa/libipa/vector.h"
> -
> -#include <cmath>
> -#include <iostream>
> -
> -#include "test.h"
> -
> -using namespace libcamera::ipa;
> -
> -#define ASSERT_EQ(a, b)                                                        \
> -if ((a) != (b)) {                                                      \
> -       std::cout << #a " != " #b << " (line " << __LINE__ << ")"       \
> -                 << std::endl;                                         \
> -       return TestFail;                                                \
> -}
> -
> -class VectorTest : public Test
> -{
> -protected:
> -       int run()
> -       {
> -               Vector<double, 3> v1{ 0.0 };
> -
> -               ASSERT_EQ(v1[0], 0.0);
> -               ASSERT_EQ(v1[1], 0.0);
> -               ASSERT_EQ(v1[2], 0.0);
> -
> -               ASSERT_EQ(v1.length(), 0.0);
> -               ASSERT_EQ(v1.length2(), 0.0);
> -
> -               Vector<double, 3> v2{{ 1.0, 4.0, 8.0 }};
> -
> -               ASSERT_EQ(v2[0], 1.0);
> -               ASSERT_EQ(v2[1], 4.0);
> -               ASSERT_EQ(v2[2], 8.0);
> -
> -               ASSERT_EQ(v2.x(), 1.0);
> -               ASSERT_EQ(v2.y(), 4.0);
> -               ASSERT_EQ(v2.z(), 8.0);
> -
> -               ASSERT_EQ(v2.r(), 1.0);
> -               ASSERT_EQ(v2.g(), 4.0);
> -               ASSERT_EQ(v2.b(), 8.0);
> -
> -               ASSERT_EQ(v2.length2(), 81.0);
> -               ASSERT_EQ(v2.length(), 9.0);
> -               ASSERT_EQ(v2.sum(), 13.0);
> -
> -               Vector<double, 3> v3{ v2 };
> -
> -               ASSERT_EQ(v2, v3);
> -
> -               v3 = Vector<double, 3>{{ 4.0, 4.0, 4.0 }};
> -
> -               ASSERT_EQ(v2 + v3, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
> -               ASSERT_EQ(v2 + 4.0, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
> -               ASSERT_EQ(v2 - v3, (Vector<double, 3>{{ -3.0, 0.0, 4.0 }}));
> -               ASSERT_EQ(v2 - 4.0, (Vector<double, 3>{{ -3.0, 0.0, 4.0 }}));
> -               ASSERT_EQ(v2 * v3, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
> -               ASSERT_EQ(v2 * 4.0, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
> -               ASSERT_EQ(v2 / v3, (Vector<double, 3>{{ 0.25, 1.0, 2.0 }}));
> -               ASSERT_EQ(v2 / 4.0, (Vector<double, 3>{{ 0.25, 1.0, 2.0 }}));
> -
> -               ASSERT_EQ(v2.min(v3), (Vector<double, 3>{{ 1.0, 4.0, 4.0 }}));
> -               ASSERT_EQ(v2.min(4.0), (Vector<double, 3>{{ 1.0, 4.0, 4.0 }}));
> -               ASSERT_EQ(v2.max(v3), (Vector<double, 3>{{ 4.0, 4.0, 8.0 }}));
> -               ASSERT_EQ(v2.max(4.0), (Vector<double, 3>{{ 4.0, 4.0, 8.0 }}));
> -
> -               ASSERT_EQ(v2.dot(v3), 52.0);
> -
> -               v2 += v3;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
> -               v2 -= v3;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
> -               v2 *= v3;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
> -               v2 /= v3;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
> -
> -               v2 += 4.0;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
> -               v2 -= 4.0;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
> -               v2 *= 4.0;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
> -               v2 /= 4.0;
> -               ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
> -
> -               return TestPass;
> -       }
> -};
> -
> -TEST_REGISTER(VectorTest)
> -- 
> 2.43.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index f2b2f4be50db..12d8d15bf52a 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -14,7 +14,6 @@  libipa_headers = files([
     'lux.h',
     'module.h',
     'pwl.h',
-    'vector.h',
 ])
 
 libipa_sources = files([
@@ -31,7 +30,6 @@  libipa_sources = files([
     'lux.cpp',
     'module.cpp',
     'pwl.cpp',
-    'vector.cpp',
 ])
 
 libipa_includes = include_directories('..')
diff --git a/src/ipa/libipa/vector.cpp b/src/ipa/libipa/vector.cpp
deleted file mode 100644
index 8019f8cfdc85..000000000000
--- a/src/ipa/libipa/vector.cpp
+++ /dev/null
@@ -1,351 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Vector and related operations
- */
-
-#include "vector.h"
-
-#include <libcamera/base/log.h>
-
-/**
- * \file vector.h
- * \brief Vector class
- */
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(Vector)
-
-namespace ipa {
-
-/**
- * \class Vector
- * \brief Vector class
- * \tparam T Type of numerical values to be stored in the vector
- * \tparam Rows Number of dimension of the vector (= number of elements)
- */
-
-/**
- * \fn Vector::Vector()
- * \brief Construct an uninitialized vector
- */
-
-/**
- * \fn Vector::Vector(T scalar)
- * \brief Construct a vector filled with a \a scalar value
- * \param[in] scalar The scalar value
- */
-
-/**
- * \fn Vector::Vector(const std::array<T, Rows> &data)
- * \brief Construct vector from supplied data
- * \param data Data from which to construct a vector
- *
- * The size of \a data must be equal to the dimension size Rows of the vector.
- */
-
-/**
- * \fn T Vector::operator[](size_t i) const
- * \brief Index to an element in the vector
- * \param i Index of element to retrieve
- * \return Element at index \a i from the vector
- */
-
-/**
- * \fn T &Vector::operator[](size_t i)
- * \copydoc Vector::operator[](size_t i) const
- */
-
-/**
- * \fn Vector::operator-() const
- * \brief Negate a Vector by negating both all of its coordinates
- * \return The negated vector
- */
-
-/**
- * \fn Vector::operator+(Vector const &other) const
- * \brief Calculate the sum of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise sum of this vector and \a other
- */
-
-/**
- * \fn Vector::operator+(T scalar) const
- * \brief Calculate the sum of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise sum of this vector and \a other
- */
-
-/**
- * \fn Vector::operator-(Vector const &other) const
- * \brief Calculate the difference of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise subtraction of \a other from this vector
- */
-
-/**
- * \fn Vector::operator-(T scalar) const
- * \brief Calculate the difference of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise subtraction of \a scalar from this vector
- */
-
-/**
- * \fn Vector::operator*(const Vector &other) const
- * \brief Calculate the product of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise product of this vector and \a other
- */
-
-/**
- * \fn Vector::operator*(T scalar) const
- * \brief Calculate the product of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise product of this vector and \a scalar
- */
-
-/**
- * \fn Vector::operator/(const Vector &other) const
- * \brief Calculate the quotient of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise division of this vector by \a other
- */
-
-/**
- * \fn Vector::operator/(T scalar) const
- * \brief Calculate the quotient of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise division of this vector by \a scalar
- */
-
-/**
- * \fn Vector::operator+=(Vector const &other)
- * \brief Add \a other element-wise to this vector
- * \param[in] other The other vector
- * \return This vector
- */
-
-/**
- * \fn Vector::operator+=(T scalar)
- * \brief Add \a scalar element-wise to this vector
- * \param[in] scalar The scalar
- * \return This vector
- */
-
-/**
- * \fn Vector::operator-=(Vector const &other)
- * \brief Subtract \a other element-wise from this vector
- * \param[in] other The other vector
- * \return This vector
- */
-
-/**
- * \fn Vector::operator-=(T scalar)
- * \brief Subtract \a scalar element-wise from this vector
- * \param[in] scalar The scalar
- * \return This vector
- */
-
-/**
- * \fn Vector::operator*=(const Vector &other)
- * \brief Multiply this vector by \a other element-wise
- * \param[in] other The other vector
- * \return This vector
- */
-
-/**
- * \fn Vector::operator*=(T scalar)
- * \brief Multiply this vector by \a scalar element-wise
- * \param[in] scalar The scalar
- * \return This vector
- */
-
-/**
- * \fn Vector::operator/=(const Vector &other)
- * \brief Divide this vector by \a other element-wise
- * \param[in] other The other vector
- * \return This vector
- */
-
-/**
- * \fn Vector::operator/=(T scalar)
- * \brief Divide this vector by \a scalar element-wise
- * \param[in] scalar The scalar
- * \return This vector
- */
-
-/**
- * \fn Vector::min(const Vector &other) const
- * \brief Calculate the minimum of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise minimum of this vector and \a other
- */
-
-/**
- * \fn Vector::min(T scalar) const
- * \brief Calculate the minimum of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise minimum of this vector and \a scalar
- */
-
-/**
- * \fn Vector::max(const Vector &other) const
- * \brief Calculate the maximum of this vector and \a other element-wise
- * \param[in] other The other vector
- * \return The element-wise maximum of this vector and \a other
- */
-
-/**
- * \fn Vector::max(T scalar) const
- * \brief Calculate the maximum of this vector and \a scalar element-wise
- * \param[in] scalar The scalar
- * \return The element-wise maximum of this vector and \a scalar
- */
-
-/**
- * \fn Vector::dot(const Vector<T, Rows> &other) const
- * \brief Compute the dot product
- * \param[in] other The other vector
- * \return The dot product of the two vectors
- */
-
-/**
- * \fn constexpr T &Vector::x()
- * \brief Convenience function to access the first element of the vector
- * \return The first element of the vector
- */
-
-/**
- * \fn constexpr T &Vector::y()
- * \brief Convenience function to access the second element of the vector
- * \return The second element of the vector
- */
-
-/**
- * \fn constexpr T &Vector::z()
- * \brief Convenience function to access the third element of the vector
- * \return The third element of the vector
- */
-
-/**
- * \fn constexpr const T &Vector::x() const
- * \copydoc Vector::x()
- */
-
-/**
- * \fn constexpr const T &Vector::y() const
- * \copydoc Vector::y()
- */
-
-/**
- * \fn constexpr const T &Vector::z() const
- * \copydoc Vector::z()
- */
-
-/**
- * \fn constexpr T &Vector::r()
- * \brief Convenience function to access the first element of the vector
- * \return The first element of the vector
- */
-
-/**
- * \fn constexpr T &Vector::g()
- * \brief Convenience function to access the second element of the vector
- * \return The second element of the vector
- */
-
-/**
- * \fn constexpr T &Vector::b()
- * \brief Convenience function to access the third element of the vector
- * \return The third element of the vector
- */
-
-/**
- * \fn constexpr const T &Vector::r() const
- * \copydoc Vector::r()
- */
-
-/**
- * \fn constexpr const T &Vector::g() const
- * \copydoc Vector::g()
- */
-
-/**
- * \fn constexpr const T &Vector::b() const
- * \copydoc Vector::b()
- */
-
-/**
- * \fn Vector::length2()
- * \brief Get the squared length of the vector
- * \return The squared length of the vector
- */
-
-/**
- * \fn Vector::length()
- * \brief Get the length of the vector
- * \return The length of the vector
- */
-
-/**
- * \fn Vector::sum() const
- * \brief Calculate the sum of all the vector elements
- * \tparam R The type of the sum
- *
- * The type R of the sum defaults to the type T of the elements, but can be set
- * explicitly to use a different type in case the type T would risk
- * overflowing.
- *
- * \return The sum of all the vector elements
- */
-
-/**
- * \fn Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
- * \brief Multiply a matrix by a vector
- * \tparam T Numerical type of the contents of the matrix and vector
- * \tparam Rows The number of rows in the matrix
- * \tparam Cols The number of columns in the matrix (= rows in the vector)
- * \param m The matrix
- * \param v The vector
- * \return Product of matrix \a m and vector \a v
- */
-
-/**
- * \typedef RGB
- * \brief A Vector of 3 elements representing an RGB pixel value
- */
-
-/**
- * \fn bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
- * \brief Compare vectors for equality
- * \return True if the two vectors are equal, false otherwise
- */
-
-/**
- * \fn bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
- * \brief Compare vectors for inequality
- * \return True if the two vectors are not equal, false otherwise
- */
-
-#ifndef __DOXYGEN__
-bool vectorValidateYaml(const YamlObject &obj, unsigned int size)
-{
-	if (!obj.isList())
-		return false;
-
-	if (obj.size() != size) {
-		LOG(Vector, Error)
-			<< "Wrong number of values in YAML vector: expected "
-			<< size << ", got " << obj.size();
-		return false;
-	}
-
-	return true;
-}
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/vector.h b/src/ipa/libipa/vector.h
deleted file mode 100644
index fe33c9d6fbd1..000000000000
--- a/src/ipa/libipa/vector.h
+++ /dev/null
@@ -1,370 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Vector and related operations
- */
-#pragma once
-
-#include <algorithm>
-#include <array>
-#include <cmath>
-#include <functional>
-#include <numeric>
-#include <optional>
-#include <ostream>
-
-#include <libcamera/base/log.h>
-#include <libcamera/base/span.h>
-
-#include "libcamera/internal/matrix.h"
-#include "libcamera/internal/yaml_parser.h"
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(Vector)
-
-namespace ipa {
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows,
-	 std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, unsigned int Rows>
-#endif /* __DOXYGEN__ */
-class Vector
-{
-public:
-	constexpr Vector() = default;
-
-	constexpr explicit Vector(T scalar)
-	{
-		data_.fill(scalar);
-	}
-
-	constexpr Vector(const std::array<T, Rows> &data)
-	{
-		for (unsigned int i = 0; i < Rows; i++)
-			data_[i] = data[i];
-	}
-
-	const T &operator[](size_t i) const
-	{
-		ASSERT(i < data_.size());
-		return data_[i];
-	}
-
-	T &operator[](size_t i)
-	{
-		ASSERT(i < data_.size());
-		return data_[i];
-	}
-
-	constexpr Vector<T, Rows> operator-() const
-	{
-		Vector<T, Rows> ret;
-		for (unsigned int i = 0; i < Rows; i++)
-			ret[i] = -data_[i];
-		return ret;
-	}
-
-	constexpr Vector operator+(const Vector &other) const
-	{
-		return apply(*this, other, std::plus<>{});
-	}
-
-	constexpr Vector operator+(T scalar) const
-	{
-		return apply(*this, scalar, std::plus<>{});
-	}
-
-	constexpr Vector operator-(const Vector &other) const
-	{
-		return apply(*this, other, std::minus<>{});
-	}
-
-	constexpr Vector operator-(T scalar) const
-	{
-		return apply(*this, scalar, std::minus<>{});
-	}
-
-	constexpr Vector operator*(const Vector &other) const
-	{
-		return apply(*this, other, std::multiplies<>{});
-	}
-
-	constexpr Vector operator*(T scalar) const
-	{
-		return apply(*this, scalar, std::multiplies<>{});
-	}
-
-	constexpr Vector operator/(const Vector &other) const
-	{
-		return apply(*this, other, std::divides<>{});
-	}
-
-	constexpr Vector operator/(T scalar) const
-	{
-		return apply(*this, scalar, std::divides<>{});
-	}
-
-	Vector &operator+=(const Vector &other)
-	{
-		return apply(other, [](T a, T b) { return a + b; });
-	}
-
-	Vector &operator+=(T scalar)
-	{
-		return apply(scalar, [](T a, T b) { return a + b; });
-	}
-
-	Vector &operator-=(const Vector &other)
-	{
-		return apply(other, [](T a, T b) { return a - b; });
-	}
-
-	Vector &operator-=(T scalar)
-	{
-		return apply(scalar, [](T a, T b) { return a - b; });
-	}
-
-	Vector &operator*=(const Vector &other)
-	{
-		return apply(other, [](T a, T b) { return a * b; });
-	}
-
-	Vector &operator*=(T scalar)
-	{
-		return apply(scalar, [](T a, T b) { return a * b; });
-	}
-
-	Vector &operator/=(const Vector &other)
-	{
-		return apply(other, [](T a, T b) { return a / b; });
-	}
-
-	Vector &operator/=(T scalar)
-	{
-		return apply(scalar, [](T a, T b) { return a / b; });
-	}
-
-	constexpr Vector min(const Vector &other) const
-	{
-		return apply(*this, other, [](T a, T b) { return std::min(a, b); });
-	}
-
-	constexpr Vector min(T scalar) const
-	{
-		return apply(*this, scalar, [](T a, T b) { return std::min(a, b); });
-	}
-
-	constexpr Vector max(const Vector &other) const
-	{
-		return apply(*this, other, [](T a, T b) { return std::max(a, b); });
-	}
-
-	constexpr Vector max(T scalar) const
-	{
-		return apply(*this, scalar, [](T a, T b) -> T { return std::max(a, b); });
-	}
-
-	constexpr T dot(const Vector<T, Rows> &other) const
-	{
-		T ret = 0;
-		for (unsigned int i = 0; i < Rows; i++)
-			ret += data_[i] * other[i];
-		return ret;
-	}
-
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &x() const { return data_[0]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &y() const { return data_[1]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &z() const { return data_[2]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
-#endif /* __DOXYGEN__ */
-	constexpr T &x() { return data_[0]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
-#endif /* __DOXYGEN__ */
-	constexpr T &y() { return data_[1]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
-#endif /* __DOXYGEN__ */
-	constexpr T &z() { return data_[2]; }
-
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &r() const { return data_[0]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &g() const { return data_[1]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
-#endif /* __DOXYGEN__ */
-	constexpr const T &b() const { return data_[2]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 1>>
-#endif /* __DOXYGEN__ */
-	constexpr T &r() { return data_[0]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 2>>
-#endif /* __DOXYGEN__ */
-	constexpr T &g() { return data_[1]; }
-#ifndef __DOXYGEN__
-	template<bool Dependent = false, typename = std::enable_if_t<Dependent || Rows >= 3>>
-#endif /* __DOXYGEN__ */
-	constexpr T &b() { return data_[2]; }
-
-	constexpr double length2() const
-	{
-		double ret = 0;
-		for (unsigned int i = 0; i < Rows; i++)
-			ret += data_[i] * data_[i];
-		return ret;
-	}
-
-	constexpr double length() const
-	{
-		return std::sqrt(length2());
-	}
-
-	template<typename R = T>
-	constexpr R sum() const
-	{
-		return std::accumulate(data_.begin(), data_.end(), R{});
-	}
-
-private:
-	template<class BinaryOp>
-	static constexpr Vector apply(const Vector &lhs, const Vector &rhs, BinaryOp op)
-	{
-		Vector result;
-		std::transform(lhs.data_.begin(), lhs.data_.end(),
-			       rhs.data_.begin(), result.data_.begin(),
-			       op);
-
-		return result;
-	}
-
-	template<class BinaryOp>
-	static constexpr Vector apply(const Vector &lhs, T rhs, BinaryOp op)
-	{
-		Vector result;
-		std::transform(lhs.data_.begin(), lhs.data_.end(),
-			       result.data_.begin(),
-			       [&op, rhs](T v) { return op(v, rhs); });
-
-		return result;
-	}
-
-	template<class BinaryOp>
-	Vector &apply(const Vector &other, BinaryOp op)
-	{
-		auto itOther = other.data_.begin();
-		std::for_each(data_.begin(), data_.end(),
-			      [&op, &itOther](T &v) { v = op(v, *itOther++); });
-
-		return *this;
-	}
-
-	template<class BinaryOp>
-	Vector &apply(T scalar, BinaryOp op)
-	{
-		std::for_each(data_.begin(), data_.end(),
-			      [&op, scalar](T &v) { v = op(v, scalar); });
-
-		return *this;
-	}
-
-	std::array<T, Rows> data_;
-};
-
-template<typename T>
-using RGB = Vector<T, 3>;
-
-template<typename T, unsigned int Rows, unsigned int Cols>
-Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v)
-{
-	Vector<T, Rows> result;
-
-	for (unsigned int i = 0; i < Rows; i++) {
-		T sum = 0;
-		for (unsigned int j = 0; j < Cols; j++)
-			sum += m[i][j] * v[j];
-		result[i] = sum;
-	}
-
-	return result;
-}
-
-template<typename T, unsigned int Rows>
-bool operator==(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
-{
-	for (unsigned int i = 0; i < Rows; i++) {
-		if (lhs[i] != rhs[i])
-			return false;
-	}
-
-	return true;
-}
-
-template<typename T, unsigned int Rows>
-bool operator!=(const Vector<T, Rows> &lhs, const Vector<T, Rows> &rhs)
-{
-	return !(lhs == rhs);
-}
-
-#ifndef __DOXYGEN__
-bool vectorValidateYaml(const YamlObject &obj, unsigned int size);
-#endif /* __DOXYGEN__ */
-
-} /* namespace ipa */
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int Rows>
-std::ostream &operator<<(std::ostream &out, const ipa::Vector<T, Rows> &v)
-{
-	out << "Vector { ";
-	for (unsigned int i = 0; i < Rows; i++) {
-		out << v[i];
-		out << ((i + 1 < Rows) ? ", " : " ");
-	}
-	out << " }";
-
-	return out;
-}
-
-template<typename T, unsigned int Rows>
-struct YamlObject::Getter<ipa::Vector<T, Rows>> {
-	std::optional<ipa::Vector<T, Rows>> get(const YamlObject &obj) const
-	{
-		if (!ipa::vectorValidateYaml(obj, Rows))
-			return std::nullopt;
-
-		ipa::Vector<T, Rows> vector;
-
-		unsigned int i = 0;
-		for (const YamlObject &entry : obj.asList()) {
-			const auto value = entry.get<T>();
-			if (!value)
-				return std::nullopt;
-			vector[i++] = *value;
-		}
-
-		return vector;
-	}
-};
-#endif /* __DOXYGEN__ */
-
-} /* namespace libcamera */
diff --git a/test/ipa/libipa/meson.build b/test/ipa/libipa/meson.build
index 0f4155d25b0c..eaf4b49a187c 100644
--- a/test/ipa/libipa/meson.build
+++ b/test/ipa/libipa/meson.build
@@ -3,7 +3,6 @@ 
 libipa_test = [
     {'name': 'fixedpoint', 'sources': ['fixedpoint.cpp']},
     {'name': 'interpolator', 'sources': ['interpolator.cpp']},
-    {'name': 'vector', 'sources': ['vector.cpp']},
 ]
 
 foreach test : libipa_test
diff --git a/test/ipa/libipa/vector.cpp b/test/ipa/libipa/vector.cpp
deleted file mode 100644
index 8e4ec77d7820..000000000000
--- a/test/ipa/libipa/vector.cpp
+++ /dev/null
@@ -1,100 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Copyright (C) 2024, Ideas on Board Oy
- *
- * Vector tests
- */
-
-#include "../src/ipa/libipa/vector.h"
-
-#include <cmath>
-#include <iostream>
-
-#include "test.h"
-
-using namespace libcamera::ipa;
-
-#define ASSERT_EQ(a, b)							\
-if ((a) != (b)) {							\
-	std::cout << #a " != " #b << " (line " << __LINE__ << ")"	\
-		  << std::endl;						\
-	return TestFail;						\
-}
-
-class VectorTest : public Test
-{
-protected:
-	int run()
-	{
-		Vector<double, 3> v1{ 0.0 };
-
-		ASSERT_EQ(v1[0], 0.0);
-		ASSERT_EQ(v1[1], 0.0);
-		ASSERT_EQ(v1[2], 0.0);
-
-		ASSERT_EQ(v1.length(), 0.0);
-		ASSERT_EQ(v1.length2(), 0.0);
-
-		Vector<double, 3> v2{{ 1.0, 4.0, 8.0 }};
-
-		ASSERT_EQ(v2[0], 1.0);
-		ASSERT_EQ(v2[1], 4.0);
-		ASSERT_EQ(v2[2], 8.0);
-
-		ASSERT_EQ(v2.x(), 1.0);
-		ASSERT_EQ(v2.y(), 4.0);
-		ASSERT_EQ(v2.z(), 8.0);
-
-		ASSERT_EQ(v2.r(), 1.0);
-		ASSERT_EQ(v2.g(), 4.0);
-		ASSERT_EQ(v2.b(), 8.0);
-
-		ASSERT_EQ(v2.length2(), 81.0);
-		ASSERT_EQ(v2.length(), 9.0);
-		ASSERT_EQ(v2.sum(), 13.0);
-
-		Vector<double, 3> v3{ v2 };
-
-		ASSERT_EQ(v2, v3);
-
-		v3 = Vector<double, 3>{{ 4.0, 4.0, 4.0 }};
-
-		ASSERT_EQ(v2 + v3, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
-		ASSERT_EQ(v2 + 4.0, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
-		ASSERT_EQ(v2 - v3, (Vector<double, 3>{{ -3.0, 0.0, 4.0 }}));
-		ASSERT_EQ(v2 - 4.0, (Vector<double, 3>{{ -3.0, 0.0, 4.0 }}));
-		ASSERT_EQ(v2 * v3, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
-		ASSERT_EQ(v2 * 4.0, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
-		ASSERT_EQ(v2 / v3, (Vector<double, 3>{{ 0.25, 1.0, 2.0 }}));
-		ASSERT_EQ(v2 / 4.0, (Vector<double, 3>{{ 0.25, 1.0, 2.0 }}));
-
-		ASSERT_EQ(v2.min(v3), (Vector<double, 3>{{ 1.0, 4.0, 4.0 }}));
-		ASSERT_EQ(v2.min(4.0), (Vector<double, 3>{{ 1.0, 4.0, 4.0 }}));
-		ASSERT_EQ(v2.max(v3), (Vector<double, 3>{{ 4.0, 4.0, 8.0 }}));
-		ASSERT_EQ(v2.max(4.0), (Vector<double, 3>{{ 4.0, 4.0, 8.0 }}));
-
-		ASSERT_EQ(v2.dot(v3), 52.0);
-
-		v2 += v3;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
-		v2 -= v3;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
-		v2 *= v3;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
-		v2 /= v3;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
-
-		v2 += 4.0;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 5.0, 8.0, 12.0 }}));
-		v2 -= 4.0;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
-		v2 *= 4.0;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 4.0, 16.0, 32.0 }}));
-		v2 /= 4.0;
-		ASSERT_EQ(v2, (Vector<double, 3>{{ 1.0, 4.0, 8.0 }}));
-
-		return TestPass;
-	}
-};
-
-TEST_REGISTER(VectorTest)