/*
 * Copyright 2023 MusicScience37 (Kenta Kabashima)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*!
 * \file
 * \brief Define bindings of basic classes.
 */
#include "bind.h"

#include <num_collect/base/exception.h>

namespace num_collect {
inline namespace base {

void bind(const pybind11::module& module) {
    pybind11::register_exception<num_collect_exception>(
        module, "NumCollectCppException", PyExc_RuntimeError);

    const auto num_collect_exception_type =
        module.attr("NumCollectCppException");

    pybind11::register_exception<assertion_failure>(
        module, "AssertionFailure", num_collect_exception_type);
    pybind11::register_exception<precondition_not_satisfied>(
        module, "PreconditionNotSatisfied", num_collect_exception_type);
    pybind11::register_exception<invalid_argument>(
        module, "InvalidArgument", num_collect_exception_type);
    pybind11::register_exception<algorithm_failure>(
        module, "AlgorithmFailure", num_collect_exception_type);
    pybind11::register_exception<file_error>(
        module, "FileError", num_collect_exception_type);
}

}  // namespace base
}  // namespace num_collect
