// Copyright (C) 2026 Kiyotsugu Arai
// SPDX-License-Identifier: LGPL-3.0-or-later

// traits.hpp
//
// Type traits and operation traits
//
// This file defines the type traits and operation traits used by the MKL
// algebra library. These traits are used for template specialization and
// operation optimization.
//
// Main features:
// - Numeric type traits (floating point, integer, etc.)
// - Type traits for MKL interoperability
// - Algebraic operation traits
// - Vector/matrix traits
// - Trait extension mechanism for custom types
// - Type traits for numeric state management

#ifndef SANGI_TRAITS_HPP
#define SANGI_TRAITS_HPP

// The complete definition of NumericState is required first, so include it before others
#include <math/core/numeric_state.hpp>
#include <math/core/common.hpp>
#include <math/core/traits_part1.hpp>
#include <math/core/traits_part2.hpp>
#include <math/core/mp/Int/IntTraits.hpp> // Int specialization
#include <type_traits>
#include <complex>

#endif // SANGI_TRAITS_HPP