/*
 * Copyright 2025-2026 NVIDIA CORPORATION & AFFILIATES.  All rights reserved.
 *
 * NOTICE TO LICENSEE:
 *
 * This source code and/or documentation ("Licensed Deliverables") are
 * subject to NVIDIA intellectual property rights under U.S. and
 * international Copyright laws.
 *
 * These Licensed Deliverables contained herein is PROPRIETARY and
 * CONFIDENTIAL to NVIDIA and is being provided under the terms and
 * conditions of a form of NVIDIA software license agreement by and
 * between NVIDIA and Licensee ("License Agreement") or electronically
 * accepted by Licensee.  Notwithstanding any terms or conditions to
 * the contrary in the License Agreement, reproduction or disclosure
 * of the Licensed Deliverables to any third party without the express
 * written consent of NVIDIA is prohibited.
 *
 * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
 * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
 * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
 * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
 * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
 * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
 * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
 * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
 * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
 * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 * OF THESE LICENSED DELIVERABLES.
 *
 * U.S. Government End Users.  These Licensed Deliverables are a
 * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
 * 1995), consisting of "commercial computer software" and "commercial
 * computer software documentation" as such terms are used in 48
 * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
 * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
 * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
 * U.S. Government End Users acquire the Licensed Deliverables with
 * only those rights set forth herein.
 *
 * Any use of the Licensed Deliverables in individual and commercial
 * software must include, in the user documentation and internal
 * comments to the code, the above Disclaimer and U.S. Government End
 * Users Notice.
 */

#ifndef CUEST_PARAMETERS_TYPES_H
#define CUEST_PARAMETERS_TYPES_H

#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Opaque handle representing the parameters needed for cuEST library context creation.
 *        See \c cuestHandleParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestHandleParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for atomic orbital (AO) Gaussian shell creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestAOShellParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for atomic orbital (AO) basis set (group of AO shells) creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestAOBasisParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for pair list creation.
 * @ingroup TypeDefs
 */
typedef void* cuestAOPairListParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for effective core potential (ECP) shell creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestECPShellParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for effective core potential (ECP) atom set (group of ECP shells) creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestECPAtomParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for a one-electron integral computation plan (e.g., overlap integrals, kinetic integrals) creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestOEIntPlanParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for an effective core potential (ECP) integral computation plan creation.
 *        See \c cuestECPIntPlanParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestECPIntPlanParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for an effective core potential (ECP) integral compute.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestECPComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for an effective core potential (ECP) integral derivative compute.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestECPDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for a density-fitted integral computation plan (for DF/RI approaches) creation.
 *        See \c cuestDFIntPlanParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestDFIntPlanParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for atomic grid plan creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestAtomGridParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for molecular grid plan creation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestMolecularGridParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for an exchange-correlation integral computation plan creation.
 *        See \c cuestXCIntPlanParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestXCIntPlanParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for overlap matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestOverlapComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for overlap gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestOverlapDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for kinetic matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestKineticComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for kinetic gradient computation.
 * @ingroup TypeDefs
 */
typedef void* cuestKineticDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for potential matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestPotentialComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for potential gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestPotentialDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for density-fitted Coulomb matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestDFCoulombComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for density-fitted symmetric exchange matrix computation.
 *        See \c cuestDFSymmetricExchangeComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestDFSymmetricExchangeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for density-fitted non-symmetric exchange matrix computation.
 *        See \c cuestDFNonsymmetricExchangeComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestDFNonsymmetricExchangeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for density-fitted gradient computation.
 *        See \c cuestDFSymmetricDerivativeComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestDFSymmetricDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC RKS potential computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCPotentialRKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC UKS potential computation.
 * @ingroup TypeDefs
 */
typedef void* cuestXCPotentialUKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC RKS gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCDerivativeRKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC UKS gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCDerivativeUKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nonlocal XC RKS potential computation.
 *        See \c cuestNonlocalXCPotentialRKSComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestNonlocalXCPotentialRKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nonlocal XC UKS potential computation.
 *        See \c cuestNonlocalXCPotentialUKSComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestNonlocalXCPotentialUKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nonlocal XC RKS gradient computation.
 *        See \c cuestNonlocalXCDerivativeRKSComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestNonlocalXCDerivativeRKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nonlocal XC UKS gradient computation.
 *        See \c cuestNonlocalXCDerivativeUKSComputeParametersAttributes_t for configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestNonlocalXCDerivativeUKSComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC density computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCDensityComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC nonsymmetric density computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCNonsymmetricDensityComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC potential computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCPotentialComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC derivative computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC nonsymmetric derivative computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCNonsymmetricDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC grid derivative computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCGridDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC integration grid computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCIntegrationGridComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for XC integration weight computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestXCIntegrationWeightComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM potential and gradient computation.
 *        See \c cuestPCMIntPlanParametersAttributes_t configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMIntPlanParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM potential computation.
 *        See \c cuestPCMPotentialComputeParametersAttributes_t configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMPotentialComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM derivative computation.
 *        See \c cuestPCMDerivativeComputeParametersAttributes_t configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM radii derivative computation.
 *        See \c cuestPCMRadiiDerivativeComputeParametersAttributes_t configurable parameters and their default values.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMRadiiDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for multipole matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestMultipoleComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for multipole gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestMultipoleDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for angular momentum integral matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestAngularMomentumComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for angular momentum gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestAngularMomentumDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nabla integral matrix computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestNablaComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for nabla gradient computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestNablaDerivativeComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM integration grid computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMIntegrationGridComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for PCM integration weight computation.
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestPCMIntegrationWeightComputeParameters_t;

/**
 * @brief Opaque handle representing the parameters needed for MO transformation
 *        There are no configurable parameters for this handle at this time.
 * @ingroup TypeDefs
 */
typedef void* cuestDFMOIntegralsComputeParameters_t;

/**
 * @brief Provides unique identifiers for each of the opaque handles to parameter structures.
 * @ingroup Enums
 *
 */
typedef enum {
    CUEST_HANDLE_PARAMETERS = 0,                             ///< Alias for cuestHandleParameters_t
    CUEST_AOSHELL_PARAMETERS = 1,                            ///< Alias for cuestAOShellParameters_t
    CUEST_AOBASIS_PARAMETERS = 2,                            ///< Alias for cuestAOBasisParameters_t
    CUEST_AOPAIRLIST_PARAMETERS = 3,                         ///< Alias for cuestAOPairListParameters_t
    CUEST_OEINTPLAN_PARAMETERS = 4,                          ///< Alias for cuestOEIntPlanParameters_t
    CUEST_DFINTPLAN_PARAMETERS = 5,                          ///< Alias for cuestDFIntPlanParameters_t
    CUEST_ATOMGRID_PARAMETERS = 6,                           ///< Alias for cuestAtomGridParameters_t
    CUEST_MOLECULARGRID_PARAMETERS = 7,                      ///< Alias for cuestMolecularGridParameters_t
    CUEST_XCINTPLAN_PARAMETERS = 8,                          ///< Alias for cuestXCIntPlanParameters_t
    CUEST_OVERLAPCOMPUTE_PARAMETERS = 9,                     ///< Alias for cuestOverlapComputeParameters_t
    CUEST_OVERLAPDERIVATIVECOMPUTE_PARAMETERS = 10,          ///< Alias for cuestOverlapDerivativeComputeParameters_t
    CUEST_KINETICCOMPUTE_PARAMETERS = 11,                    ///< Alias for cuestKineticComputeParameters_t
    CUEST_KINETICDERIVATIVECOMPUTE_PARAMETERS = 12,          ///< Alias for cuestKineticDerivativeComputeParameters_t
    CUEST_POTENTIALCOMPUTE_PARAMETERS = 13,                  ///< Alias for cuestPotentialComputeParameters_t
    CUEST_POTENTIALDERIVATIVECOMPUTE_PARAMETERS = 14,        ///< Alias for cuestPotentialDerivativeComputeParameters_t
    CUEST_DFCOULOMBCOMPUTE_PARAMETERS = 15,                  ///< Alias for cuestDFCoulombComputeParameters_t
    CUEST_DFSYMMETRICEXCHANGECOMPUTE_PARAMETERS = 16,        ///< Alias for cuestDFSymmetricExchangeComputeParameters_t
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS = 17,      ///< Alias for cuestDFSymmetricDerivativeComputeParameters_t
    CUEST_XCPOTENTIALRKSCOMPUTE_PARAMETERS = 18,             ///< Alias for cuestXCPotentialRKSComputeParameters_t
    CUEST_XCPOTENTIALUKSCOMPUTE_PARAMETERS = 19,             ///< Alias for cuestXCPotentialUKSComputeParameters_t
    CUEST_XCDERIVATIVERKSCOMPUTE_PARAMETERS = 20,            ///< Alias for cuestXCDerivativeRKSComputeParameters_t
    CUEST_XCDERIVATIVEUKSCOMPUTE_PARAMETERS = 21,            ///< Alias for cuestXCDerivativeUKSComputeParameters_t
    CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS = 22,     ///< Alias for cuestNonlocalXCPotentialRKSComputeParameters_t
    CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS = 23,     ///< Alias for cuestNonlocalXCPotentialUKSComputeParameters_t
    CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS = 24,    ///< Alias for cuestNonlocalXCDerivativeRKSComputeParameters_t
    CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS = 25,    ///< Alias for cuestNonlocalXCDerivativeUKSComputeParameters_t
    CUEST_XCDENSITYCOMPUTE_PARAMETERS = 26,                  ///< Alias for cuestXCDensityComputeParameters_t
    CUEST_XCPOTENTIALCOMPUTE_PARAMETERS = 27,                ///< Alias for cuestXCPotentialComputeParameters_t
    CUEST_XCDERIVATIVECOMPUTE_PARAMETERS = 28,               ///< Alias for cuestXCDerivativeComputeParameters_t
    CUEST_XCGRIDDERIVATIVECOMPUTE_PARAMETERS = 29,           ///< Alias for cuestXCGridDerivativeComputeParameters_t
    CUEST_XCINTEGRATIONGRIDCOMPUTE_PARAMETERS = 30,          ///< Alias for cuestXCIntegrationGridComputeParameters_t
    CUEST_XCINTEGRATIONWEIGHTCOMPUTE_PARAMETERS = 31,        ///< Alias for cuestXCIntegrationWeightComputeParameters_t
    CUEST_PCMINTPLAN_PARAMETERS = 32,                        ///< Alias for cuestPCMIntPlanParameters_t
    CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS = 33,               ///< Alias for cuestPCMPotentialComputeParameters_t
    CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS = 34,              ///< Alias for cuestPCMDerivativeComputeParameters_t
    CUEST_ECPSHELL_PARAMETERS = 35,                          ///< Alias for cuestECPShellParameters_t
    CUEST_ECPATOM_PARAMETERS = 36,                           ///< Alias for cuestECPAtomParameters_t
    CUEST_ECPINTPLAN_PARAMETERS = 37,                        ///< Alias for cuestECPIntPlanParameters_t
    CUEST_ECPCOMPUTE_PARAMETERS = 38,                        ///< Alias for cuestECPComputeParameters_t
    CUEST_ECPDERIVATIVECOMPUTE_PARAMETERS = 39,              ///< Alias for cuestECPDerivativeComputeParameters_t
    CUEST_DFNONSYMMETRICEXCHANGECOMPUTE_PARAMETERS = 40,     ///< Alias for cuestDFNonsymmetricExchangeComputeParameters_t
    CUEST_MULTIPOLECOMPUTE_PARAMETERS = 41,                  ///< Alias for cuestMultipoleComputeParameters_t
    CUEST_MULTIPOLEDERIVATIVECOMPUTE_PARAMETERS = 42,        ///< Alias for cuestMultipoleDerivativeComputeParameters_t
    CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS = 43,            ///< Alias for cuestAngularMomentumComputeParameters_t
    CUEST_ANGULARMOMENTUMDERIVATIVECOMPUTE_PARAMETERS = 44,  ///< Alias for cuestAngularMomentumDerivativeComputeParameters_t
    CUEST_NABLACOMPUTE_PARAMETERS = 45,                      ///< Alias for cuestNablaComputeParameters_t
    CUEST_NABLADERIVATIVECOMPUTE_PARAMETERS = 46,            ///< Alias for cuestNablaDerivativeComputeParameters_t
    CUEST_PCMINTEGRATIONGRIDCOMPUTE_PARAMETERS = 47,         ///< Alias for cuestPCMIntegrationGridComputeParameters_t
    CUEST_PCMINTEGRATIONWEIGHTCOMPUTE_PARAMETERS = 48,       ///< Alias for cuestPCMIntegrationWeightComputeParameters_t
    CUEST_DFMOINTEGRALSCOMPUTE_PARAMETERS = 49,              ///< Alias for cuestDFMOIntegralsComputeParameters_t
    CUEST_XCNONSYMMETRICDENSITYCOMPUTE_PARAMETERS = 50,      ///< Alias for cuestXCNonsymmetricDensityComputeParameters_t
    CUEST_XCNONSYMMETRICDERIVATIVECOMPUTE_PARAMETERS = 51,   ///< Alias for cuestXCNonsymmetricDerivativeComputeParameters_t
    CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS = 52          ///< Alias for cuestPCMRadiiDerivativeComputeParameters_t
} cuestParametersType_t;

/**
 * @brief Enumerates configurable/queryable attributes in the parameter structure.
 * @ingroup Enums
 *
 *
 * Types expected for each attribute:
 *   - \c CUEST_HANDLE_PARAMETERS_CUDASTREAM :           cudaStream_t (may be NULL)
 *   - \c CUEST_HANDLE_PARAMETERS_CUBLAS :               cublasHandle_t (may be NULL)
 *   - \c CUEST_HANDLE_PARAMETERS_CUSOLVER :             cusolverDnHandle_t (may be NULL)
 *   - \c CUEST_HANDLE_PARAMETERS_MAX_GAUSS_HERMITE :    uint64_t
 *   - \c CUEST_HANDLE_PARAMETERS_MAX_L_SOLID_HARMONIC : uint64_t
 *   - \c CUEST_HANDLE_PARAMETERS_MAX_RYS :              uint64_t
 *   - \c CUEST_HANDLE_PARAMETERS_RYS_SCHEME :           cuestHandleParametersRysScheme_t (enum)
 *   - \c CUEST_HANDLE_PARAMETERS_JIT_CACHE_DIR :        const char* (NUL-terminated; the value
 *                                                       returned by a query is allocated with
 *                                                       malloc and must be freed by the caller
 *                                                       with C's native free(). The allocation
 *                                                       only occurs when the query completes
 *                                                       successfully (CUEST_STATUS_SUCCESS); on
 *                                                       error nothing is allocated to free.)
 *   - \c CUEST_HANDLE_PARAMETERS_JIT_COMPILE_THREADS :  int32_t
 */
typedef enum {
    CUEST_HANDLE_PARAMETERS_CUDASTREAM = 0,           ///< CUDA stream handle. NULL value allocates a CUDA stream internally.  \b Default: NULL.
    CUEST_HANDLE_PARAMETERS_CUBLAS = 1,               ///< cuBLAS handle. NULL value allocates a cuBLAS handle internally.  \b Default: NULL.
    CUEST_HANDLE_PARAMETERS_CUSOLVER = 2,             ///< cuSolver handle. NULL value allocates a cuSolver handle internally.  \b Default: NULL.
    CUEST_HANDLE_PARAMETERS_MAX_GAUSS_HERMITE = 3,    ///< Maximum number of quadrature points.  \b Default: 20.
    CUEST_HANDLE_PARAMETERS_MAX_L_SOLID_HARMONIC = 4, ///< Highest angular momentum for solid harmonics.  \b Default: 10.
    CUEST_HANDLE_PARAMETERS_MAX_RYS = 5,              ///< Maximum number of Rys points. (0 specifies the largest available).  \b Default: 0.
    CUEST_HANDLE_PARAMETERS_RYS_SCHEME = 6,           ///< Specifies which scheme should be used to build the Rys quadrature table.  \b Default: CUEST_HANDLE_PARAMETERS_RYS_SCHEME_06_21_2025.
    CUEST_HANDLE_PARAMETERS_JIT_CACHE_DIR = 7,        ///< JIT kernel cache directory. Empty string uses the derived default (~/.cuest_cache/cuest-cuda<N>-v<version>/). Must be a trusted, per-user, non-world-writable path (see security notes); an unsafe or unwritable directory is rejected at cuestCreate with CUEST_STATUS_INVALID_ARGUMENT.  \b Default: "" (derived default).
    CUEST_HANDLE_PARAMETERS_JIT_COMPILE_THREADS = 8   ///< Parallel JIT precompile worker threads. Must be >= 1 (a smaller value is rejected at cuestCreate with CUEST_STATUS_INVALID_ARGUMENT); clamped to an internal upper bound of 256.  \b Default: 16.
} cuestHandleParametersAttributes_t;

/**
 * @brief Specifies which Rys quadrature scheme to use for table construction.
 * @ingroup Enums
 */
typedef enum {
    CUEST_HANDLE_PARAMETERS_RYS_SCHEME_06_21_2025 = 0      
} cuestHandleParametersRysScheme_t;

/**
 * @brief Specifies what math mode should be used.
 * @ingroup Enums
 */
typedef enum {
    CUEST_DEFAULT_MATH_MODE     = 0, ///< Default math mode. Math mode is heuristically chosen on a per-function basis for maximum efficiency. 
    CUEST_NATIVE_FP64_MATH_MODE = 1  ///< Native FP64 compute is used everywhere.
} cuestMathMode_t;


/**
 * @brief Specifies whether or not to use JIT-compiled kernels.
 * @ingroup Enums
 *
 * Note: JIT requires CUDA 13.x or higher.
 */
typedef enum {
    CUEST_JIT_USAGE_MODE_ON = 0,      ///< Specifies that JIT-compiled kernels should be used.
    CUEST_JIT_USAGE_MODE_OFF = 1      ///< Specifies the use of a code path with AOT-compiled kernels.
} cuestJITUsageMode_t;

/**
 * @brief Specifies whether or not to use ffloat compute.
 * @ingroup Enums
 */
typedef enum {
    CUEST_FFLOAT_USAGE_MODE_DEFAULT = 0, ///< Requests ffloat compute when it is available and expected to provide a performance advantage on the present GPU architecture. Availability may be impacted by disabling JIT or using the cuEST CUDA 12 package.
    CUEST_FFLOAT_USAGE_MODE_ON = 1,      ///< Requests ffloat compute.
    CUEST_FFLOAT_USAGE_MODE_OFF = 2      ///< Requests fp64 compute.
} cuestFfloatUsageMode_t;

/**
 * @brief Properties supported for AO shell parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_AOSHELL_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_AOSHELL_PARAMETERS_NONE = 0     ///< Reserved for future use.
} cuestAOShellParametersAttributes_t;

/**
 * @brief Properties supported for AO basis parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_AOBASIS_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_AOBASIS_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestAOBasisParametersAttributes_t;

/**
 * @brief Properties supported for AO pair list parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_AOPAIRLIST_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_AOPAIRLIST_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestAOPairListParametersAttributes_t;

/**
 * @brief Properties supported for ECP shell parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ECPSHELL_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ECPSHELL_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestECPShellParametersAttributes_t;

/**
 * @brief Properties supported for ECP Atom parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ECPATOM_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ECPATOM_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestECPAtomParametersAttributes_t;

/**
 * @brief Properties supported for one-electron integral plan parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_OEINTPLAN_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_OEINTPLAN_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestOEIntPlanParametersAttributes_t;

/**
 * @brief Properties supported for effective core potential (ECP) integral plan parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ECPINTPLAN_PARAMETERS_THRESHOLD_COLLOCATION : double
 * - \c CUEST_ECPINTPLAN_PARAMETERS_ECP_CUTOFF            : double
 * - \c CUEST_ECPINTPLAN_PARAMETERS_R0                    : double
 * - \c CUEST_ECPINTPLAN_PARAMETERS_MULTIPLIER            : double
 * - \c CUEST_ECPINTPLAN_PARAMETERS_RADIAL_NUM_POINT      : uint64_t
 * - \c CUEST_ECPINTPLAN_PARAMETERS_SPHERICAL_NUM_POINT   : uint64_t
 */
typedef enum {
    CUEST_ECPINTPLAN_PARAMETERS_THRESHOLD_COLLOCATION = 0,   ///< Grid collocation threshold.  \b Default: 1.0e-18.
    CUEST_ECPINTPLAN_PARAMETERS_ECP_CUTOFF = 1,              ///< Grid cutoff.  \b Default: 1.0e-14.
    CUEST_ECPINTPLAN_PARAMETERS_R0 = 2,                      ///< Grid R0.  \b Default: 6.0.
    CUEST_ECPINTPLAN_PARAMETERS_MULTIPLIER = 3,              ///< Grid multiplier.  \b Default: 1.1.
    CUEST_ECPINTPLAN_PARAMETERS_RADIAL_NUM_POINT = 4,        ///< Number radial grid points.  \b Default: 80.
    CUEST_ECPINTPLAN_PARAMETERS_SPHERICAL_NUM_POINT = 5      ///< Number spherical grid points.  \b Default: 302.
} cuestECPIntPlanParametersAttributes_t;

/**
 * @brief Properties supported for effective core potential (ECP) integral compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ECPCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ECPCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestECPComputeParametersAttributes_t;

/**
 * @brief Properties supported for effective core potential (ECP) integral derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ECPDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ECPDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use.
} cuestECPDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for DF integral plan parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_DFINTPLAN_PARAMETERS_FITTING_CUTOFF : double
 * - \c CUEST_DFINTPLAN_PARAMETERS_FITTING_RELATIVE_CONDITIONING : int32_t
 * - \c CUEST_DFINTPLAN_PARAMETERS_EXCHANGE_FRACTION : double
 * - \c CUEST_DFINTPLAN_PARAMETERS_FITTING_ALGORITHM : cuestDFIntPlanParametersFittingAlgorithm_t
 * - \c CUEST_DFINTPLAN_PARAMETERS_LRC_EXCHANGE_FRACTION : double
 * - \c CUEST_DFINTPLAN_PARAMETERS_LRC_EXCHANGE_OMEGA : double
 * - \c CUEST_DFINTPLAN_PARAMETERS_THREE_INDEX_INTEGRAL_DIRECT: int32_t
 */
typedef enum {
    CUEST_DFINTPLAN_PARAMETERS_FITTING_CUTOFF = 0,                   ///< Value below which metric eigenvalues are discarded during fitting.  \b Default: 1.0e-12.
    CUEST_DFINTPLAN_PARAMETERS_FITTING_RELATIVE_CONDITIONING = 1,    ///< Should the fitting cutoff be determined in a relative or absolute sense? 0 is absolute. non-zero is relative.  \b Default: 1.
    CUEST_DFINTPLAN_PARAMETERS_EXCHANGE_FRACTION = 2,                ///< Fraction of HF exchange: respected in DF exchange and DF derivative compute routines. \b Default: 1.0.
    CUEST_DFINTPLAN_PARAMETERS_FITTING_ALGORITHM = 3,                ///< Algorithm to use when inverting the DF metric.  \b Default: CUEST_DFINTPLAN_PARAMETERS_FITTING_ALGORITHM_QR.
    CUEST_DFINTPLAN_PARAMETERS_LRC_EXCHANGE_FRACTION = 4,            ///< Fraction of long-range exchange: respected in DF exchange and DF derivative compute routines. \b Default: 0.0.
    CUEST_DFINTPLAN_PARAMETERS_LRC_EXCHANGE_OMEGA = 5,               ///< Omega range-separation parameter (in inverse bohr): respected in DF exchange and DF derivative compute routines. Must be greater than or equal to 0.0. \b Default: 0.0.
    CUEST_DFINTPLAN_PARAMETERS_THREE_INDEX_INTEGRAL_DIRECT = 6       ///< Skips the formation of 3-index integrals in the plan creation and uses integral direct algorithms in subsequent compute calls (where possible). \b Default: 0.
} cuestDFIntPlanParametersAttributes_t;

/**
 * @brief Specifies how the DF metric should be inverted
 * @ingroup Enums
 */
typedef enum {
    CUEST_DFINTPLAN_PARAMETERS_FITTING_ALGORITHM_QR = 0,          ///< Use a QR-based metric inverse
    CUEST_DFINTPLAN_PARAMETERS_FITTING_ALGORITHM_MATRIXPOWER = 1  ///< Use a conditioned matrix power 
} cuestDFIntPlanParametersFittingAlgorithm_t;

/**
 * @brief Properties supported for atom grid parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ATOMGRID_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ATOMGRID_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestAtomGridParametersAttributes_t;

/**
 * @brief Properties supported for molecular grid parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_MOLECULARGRID_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_MOLECULARGRID_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestMolecularGridParametersAttributes_t;

/**
 * @brief Properties supported for exchange-correlation integral plan parameters.
 * @ingroup Enums
 *
 * - \c CUEST_XCINTPLAN_PARAMETERS_THRESHOLD_COLLOCATION : double
 * - \c CUEST_XCINTPLAN_PARAMETERS_DERIVATIVE_LEVEL : int32_t
 * - \c CUEST_XCINTPLAN_PARAMETERS_NUM_THREADS : int32_t
 */
typedef enum {
    CUEST_XCINTPLAN_PARAMETERS_THRESHOLD_COLLOCATION = 0,   ///< XC collocation threshold.  \b Default: 1.0e-18.
    CUEST_XCINTPLAN_PARAMETERS_DERIVATIVE_LEVEL = 1,        ///< Maximum derivative level supported.  \b Default: 1.
    CUEST_XCINTPLAN_PARAMETERS_NUM_THREADS = 2              ///< How many CPU threads to use when computing Vxc.  \b Default: 12.
} cuestXCIntPlanParametersAttributes_t;

/**
 * @brief Specifies which XC functional should be used.
 * @ingroup Enums
 */
typedef enum {
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_HF     = 0,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_B3LYP1 = 1,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_B3LYP5 = 2,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_B97    = 3,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_BLYP   = 4,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_M06L   = 5,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_PBE    = 6,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_PBE0   = 7,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_R2SCAN = 8,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_SVWN5  = 9,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_B97MV  = 10,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_LCWPBE = 11,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_WB97X  = 12,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_WB97XV = 13,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_WB97MV = 14,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_LCWPBEH = 15,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_CAMB3LYP = 16,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_HSE06 = 17,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_M06 = 18,
    CUEST_XCINTPLAN_PARAMETERS_FUNCTIONAL_M062X = 19
} cuestXCIntPlanParametersFunctional_t;

/**
 * @brief Properties supported for overlap compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_OVERLAPCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_OVERLAPCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestOverlapComputeParametersAttributes_t;

/**
 * @brief Properties supported for overlap derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_OVERLAPDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_OVERLAPDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestOverlapDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for kinetic compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_KINETICCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_KINETICCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestKineticComputeParametersAttributes_t;

/**
 * @brief Properties supported for kinetic derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_KINETICDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_KINETICDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestKineticDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for potential compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_POTENTIALCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_POTENTIALCOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_POTENTIALCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 0,    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_POTENTIALCOMPUTE_PARAMETERS_JIT_USAGE_MODE = 1        ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestPotentialComputeParametersAttributes_t;

/**
 * @brief Properties supported for potential derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_POTENTIALDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_POTENTIALDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_POTENTIALDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 0,    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_OFF.
    CUEST_POTENTIALDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE = 1        ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestPotentialDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for DF Coulomb compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_DFCOULOMBCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_DFCOULOMBCOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_DFCOULOMBCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 0,    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_DFCOULOMBCOMPUTE_PARAMETERS_JIT_USAGE_MODE = 1        ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestDFCoulombComputeParametersAttributes_t;

/**
 * @brief Properties supported for DF symmetric exchange compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_DFSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_SLICE_COUNT : uint64_t 
 * - \c CUEST_DFSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_MODULUS_COUNT : uint64_t
 */
typedef enum {
    CUEST_DFSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_SLICE_COUNT = 0,   ///< Number of slices used in cuBLAS emulated GEMMs. Mantissa bit count = 8 * slices - 1.  \b Default: 5.
    CUEST_DFSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_MODULUS_COUNT = 1  ///< Number of moduli used in custom Ozaki-II emulated GEMMs.  \b Default: 8.
} cuestDFSymmetricExchangeComputeParametersAttributes_t;

/**
 * @brief Properties supported for DF non-symmetric exchange compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_DFNONSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_SLICE_COUNT : uint64_t 
 * - \c CUEST_DFNONSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_MODULUS_COUNT : uint64_t
 */
typedef enum {
    CUEST_DFNONSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_SLICE_COUNT = 0,   ///< Number of slices used in cuBLAS emulated GEMMs. Mantissa bit count = 8 * slices - 1.  \b Default: 5.
    CUEST_DFNONSYMMETRICEXCHANGECOMPUTE_PARAMETERS_INT8_MODULUS_COUNT = 1  ///< Number of moduli used in custom Ozaki-II emulated GEMMs.  \b Default: 8.
} cuestDFNonsymmetricExchangeComputeParametersAttributes_t;

/**
 * @brief Properties supported for DF symmetric derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_MEMORY_POLICY : cuestDFSymmetricDerivativeComputeMemoryPolicy_t
 * - \c CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_MEMORY_POLICY = 0,      ///< Specifies how memory should be used during the derivative evaluation.  \b Default: CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_DEVICECACHE.
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 1,  ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE = 2      ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestDFSymmetricDerivativeComputeParametersAttributes_t;

/**
 * @brief Specifies what memory policy should be used.
 * @ingroup Enums
 */
typedef enum {
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_DEVICECACHE = 0, ///< Cache certain intermediates on the GPU. This leaves the DFIntPlan unchanged.
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_HOSTCACHE = 1,   ///< Cache certain intermediates on the CPU. This leaves the DFIntPlan unchanged.
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_OVERWRITE = 2,   ///< Overwrite DFIntPlan intermediates. This leaves the DFIntPlan in an unusable state.
    CUEST_DFSYMMETRICDERIVATIVECOMPUTE_MEMORY_POLICY_RECOMPUTE = 3    ///< Recompute DFIntPlan intermediates. This leaves the DFIntPlan in a usable state, but may not be bitwise identical.
} cuestDFSymmetricDerivativeComputeMemoryPolicy_t;

/**
 * @brief Properties supported for XC potential RKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCPOTENTIALRKSCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCPOTENTIALRKSCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCPotentialRKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC potential UKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCPOTENTIALUKSCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCPOTENTIALUKSCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCPotentialUKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC derivative RKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCDERIVATIVERKSCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCDERIVATIVERKSCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCDerivativeRKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC derivative UKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCDERIVATIVEUKSCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCDERIVATIVEUKSCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCDerivativeUKSComputeParametersAttributes_t;


/**
 * @brief Properties supported for nonlocal XC potential RKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_SCALE : double
 * - \c CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_C : double
 * - \c CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_B : double
 * - \c CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 */
typedef enum {
    CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_SCALE = 0,   ///< Global scaling for VV10 nonlocal correlation.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_C     = 1,   ///< VV10 C parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_VV10_B     = 2,   ///< VV10 b parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALRKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE     = 3    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
} cuestNonlocalXCPotentialRKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for nonlocal XC potential UKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_SCALE : double
 * - \c CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_C : double
 * - \c CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_B : double
 * - \c CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 */
typedef enum {
    CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_SCALE = 0,   ///< Global scaling for VV10 nonlocal correlation.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_C     = 1,   ///< VV10 C parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_VV10_B     = 2,   ///< VV10 b parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCPOTENTIALUKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE     = 3    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
} cuestNonlocalXCPotentialUKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for nonlocal XC derivative RKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_SCALE : double
 * - \c CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_C : double
 * - \c CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_B : double
 * - \c CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 */
typedef enum {
    CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_SCALE = 0,   ///< Global scaling for VV10 nonlocal correlation.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_C     = 1,   ///< VV10 C parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_VV10_B     = 2,   ///< VV10 b parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVERKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE     = 3    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
} cuestNonlocalXCDerivativeRKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for nonlocal XC derivative UKS compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_SCALE : double
 * - \c CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_C : double
 * - \c CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_B : double
 * - \c CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 */
typedef enum {
    CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_SCALE = 0,   ///< Global scaling for VV10 nonlocal correlation.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_C     = 1,   ///< VV10 C parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_VV10_B     = 2,   ///< VV10 b parameter.  \b Default: 0.0.
    CUEST_NONLOCALXCDERIVATIVEUKSCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE     = 3    ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
} cuestNonlocalXCDerivativeUKSComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC density compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCDENSITYCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCDENSITYCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCDensityComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC potential compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCPOTENTIALCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCPOTENTIALCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCPotentialComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_XCDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use.
} cuestXCDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC nonsymmetric density compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_XCNONSYMMETRICDENSITYCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCNONSYMMETRICDENSITYCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use.
} cuestXCNonsymmetricDensityComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC nonsymmetric derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_XCNONSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCNONSYMMETRICDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use.
} cuestXCNonsymmetricDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC grid derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_XCGRIDDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCGRIDDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCGridDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC integration grid compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCINTEGRATIONGRIDCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCINTEGRATIONGRIDCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCIntegrationGridComputeParametersAttributes_t;

/**
 * @brief Properties supported for XC integration weight compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_XCINTEGRATIONWEIGHTCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_XCINTEGRATIONWEIGHTCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestXCIntegrationWeightComputeParametersAttributes_t;

/**
 * @brief Specifies which XC integration weights to compute.
 * @ingroup Enums
 */
typedef enum {
    CUEST_XCINTEGRATIONWEIGHT_PARAMETERS_WEIGHTTYPE_TOTAL      = 0, ///< The total integration weight. Angular x radial x Becke
    CUEST_XCINTEGRATIONWEIGHT_PARAMETERS_WEIGHTTYPE_BECKE      = 1, ///< The Becke integration weight.
    CUEST_XCINTEGRATIONWEIGHT_PARAMETERS_WEIGHTTYPE_QUADRATURE = 2  ///< The integration weights from angular and radial quadratures.
} cuestXCIntegrationWeightComputeParametersWeightType_t;

/**
 * @brief Specifies what local approximation is desired.
 * @ingroup Enums
 *
 * This parameter changes the expected dimension of the density/potential arrays used for input/output:
 *
 * LDA dimension:      [ number of grid points, 1]
 * GGA dimension:      [ number of grid points, 4]
 * meta-GGA dimension: [ number of grid points, 5]
 *
 * For each row, LDA expects: \f$ [ \rho ] \f$
 * For each row, GGA expects: \f$ [ \rho, \nabla_{x}\rho, \nabla_{y}\rho, \nabla_{z}\rho ] \f$
 * For each row, meta-GGA expects: \f$ [ \rho, \nabla_{x}\rho, \nabla_{y}\rho, \nabla_{z}\rho, \tau ] \f$
 *
 */
typedef enum {
    CUEST_XCADVANCED_PARAMETERS_APPROXIMATION_LDA     = 0, ///< LDA approximation: depends only on the density.
    CUEST_XCADVANCED_PARAMETERS_APPROXIMATION_GGA     = 1, ///< GGA approximation: depends on the density and derivatives of the density.
    CUEST_XCADVANCED_PARAMETERS_APPROXIMATION_METAGGA = 2  ///< meta-GGA approximation: depends on the density, derivatives of the density, and tau.
} cuestXCAdvancedComputeParametersApproximation_t;

/**
 * @brief Properties supported for PCM integral plan parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_PCMINTPLAN_PARAMETERS_CUTOFF : double
 * - \c CUEST_PCMINTPLAN_PARAMETERS_X_PREFACTOR : double
 */
typedef enum {
    CUEST_PCMINTPLAN_PARAMETERS_CUTOFF = 0,        ///< Cutoff for surface points' iSWIG switching function, below which the point is considered inactive.  \b Default: 1e-12.
    CUEST_PCMINTPLAN_PARAMETERS_X_PREFACTOR = 1    ///< PCM prefactor \f$ f = (\epsilon - 1)/(\epsilon + x) \f$ , where \f$ x==0.0 \f$ gives CPCM and \f$ x==1/2\f$ corresponds to COSMO.  \b Default: 0.0.
} cuestPCMIntPlanParametersAttributes_t;

/**
 * @brief Properties supported for PCM potential compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD : double
 * - \c CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_MAX_ITERATIONS : uint64_t
 * - \c CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD = 0,  ///< Convergence threshold (max absolute residual value) for PCM charges computation.  \b Default: 1e-10.
    CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_MAX_ITERATIONS = 1,         ///< Maximum number of preconditioned conjugate gradient iterations for PCM charges computation.  \b Default: 200.
    CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 2,      ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_PCMPOTENTIALCOMPUTE_PARAMETERS_JIT_USAGE_MODE = 3          ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestPCMPotentialComputeParametersAttributes_t;

/**
 * @brief Properties supported for PCM derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD : double
 * - \c CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_MAX_ITERATIONS : uint64_t
 * - \c CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD = 0,  ///< Convergence threshold (max absolute residual value) for PCM charges computation.  \b Default: 1e-10.
    CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_MAX_ITERATIONS = 1,         ///< Maximum number of preconditioned conjugate gradient iterations for PCM charges computation.  \b Default: 200.
    CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 2,      ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_PCMDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE = 3          ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestPCMDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for PCM radii derivative compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD : double
 * - \c CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_MAX_ITERATIONS : uint64_t
 * - \c CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE : cuestFfloatUsageMode_t (enum)
 * - \c CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE : cuestJITUsageMode_t (enum)
 */
typedef enum {
    CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_CONVERGENCE_THRESHOLD = 0,  ///< Convergence threshold (max absolute residual value) for PCM charges computation.  \b Default: 1e-10.
    CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_MAX_ITERATIONS = 1,         ///< Maximum number of preconditioned conjugate gradient iterations for PCM charges computation.  \b Default: 200.
    CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_FFLOAT_USAGE_MODE = 2,      ///< Parameter to control the use of ffloat compute. \b Default: CUEST_FFLOAT_USAGE_MODE_DEFAULT.
    CUEST_PCMRADIIDERIVATIVECOMPUTE_PARAMETERS_JIT_USAGE_MODE = 3          ///< Parameter to control the use of JIT-compiled kernels. \b Default: CUEST_JIT_USAGE_MODE_ON on CUDA 13.x+, CUEST_JIT_USAGE_MODE_OFF otherwise.
} cuestPCMRadiiDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for multipole compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_MULTIPOLECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_MULTIPOLECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestMultipoleComputeParametersAttributes_t;

/**
 * @brief Properties supported for multipole derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_MULTIPOLEDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_MULTIPOLEDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestMultipoleDerivativeComputeParametersAttributes_t;

/**
 * @brief Properties supported for angular momentum compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestAngularMomentumComputeParametersAttributes_t;

/**
 * @brief Properties supported for angular momentum derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_ANGULARMOMENTUMDERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_ANGULARMOMENTUMDERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestAngularMomentumDerivativeComputeParametersAttributes_t;

/**
 * @brief Specifies what angular momentum operator to evaluate
 * @ingroup Enums
 *
 */
typedef enum {
    CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS_COMPONENT_LX = 0, ///< L_x = y d/dz - z d/dy
    CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS_COMPONENT_LY = 1, ///< L_y = z d/dx - x d/dz
    CUEST_ANGULARMOMENTUMCOMPUTE_PARAMETERS_COMPONENT_LZ = 2  ///< L_z = x d/dy - y d/dx
} cuestAngularMomentumComputeParametersComponent_t;

/**
 * @brief Properties supported for nabla compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NABLACOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_NABLACOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestNablaComputeParametersAttributes_t;

/**
 * @brief Properties supported for nabla derivative compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_NABLADERIVATIVECOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_NABLADERIVATIVECOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestNablaDerivativeComputeParametersAttributes_t;

/**
 * @brief Specifies what nabla operator to evaluate
 * @ingroup Enums
 *
 */
typedef enum {
    CUEST_NABLACOMPUTE_PARAMETERS_COMPONENT_X = 0, ///< \nabla_x
    CUEST_NABLACOMPUTE_PARAMETERS_COMPONENT_Y = 1, ///< \nabla_y
    CUEST_NABLACOMPUTE_PARAMETERS_COMPONENT_Z = 2  ///< \nabla_z
} cuestNablaComputeParametersComponent_t;

/**
 * @brief Properties supported for PCM integration grid compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_PCMINTEGRATIONGRIDCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_PCMINTEGRATIONGRIDCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestPCMIntegrationGridComputeParametersAttributes_t;

/**
 * @brief Properties supported for PCM integration weight compute parameters. 
 * @ingroup Enums
 *
 * - \c CUEST_PCMINTEGRATIONWEIGHTCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_PCMINTEGRATIONWEIGHTCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestPCMIntegrationWeightComputeParametersAttributes_t;

/**
 * @brief Specifies which PCM integration weights to compute.
 * @ingroup Enums
 */
typedef enum {
    CUEST_PCMINTEGRATIONWEIGHT_PARAMETERS_WEIGHTTYPE_SWITCHING  = 0, ///< The value of the iSWIG switching function.
    CUEST_PCMINTEGRATIONWEIGHT_PARAMETERS_WEIGHTTYPE_ZETA       = 1  ///< The value of zeta.
} cuestPCMIntegrationWeightComputeParametersWeightType_t;

/**
 * @brief Properties supported for DF MO integral compute parameters.
 * @ingroup Enums
 *
 * - \c CUEST_DFMOINTEGRALSCOMPUTE_PARAMETERS_NONE : uint64_t
 */
typedef enum {
    CUEST_DFMOINTEGRALSCOMPUTE_PARAMETERS_NONE = 0     ///< Reserved for future use. 
} cuestDFMOIntegralsComputeParametersAttributes_t;

#ifdef __cplusplus
}
#endif

#endif /* CUEST_PARAMETERS_TYPES_H */

