// Auto-generated, do not edit.

extern "C" {

cusolverStatus_t CUSOLVERAPI cusolverGetProperty(libraryPropertyType type,
                                                 int *value) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(libraryPropertyType, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverGetProperty");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(type, value);
}

cusolverStatus_t CUSOLVERAPI cusolverGetVersion(int *version) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverGetVersion");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(version);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreate(cusolverDnHandle_t *handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreate");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroy(cusolverDnHandle_t handle) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroy");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSetStream(cusolverDnHandle_t handle,
                                                 cudaStream_t streamId) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cudaStream_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, streamId);
}

cusolverStatus_t CUSOLVERAPI cusolverDnGetStream(cusolverDnHandle_t handle,
                                                 cudaStream_t *streamId) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cudaStream_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnGetStream");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, streamId);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotrf_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              float *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              double *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const float *A, int lda,
                                              float *B, int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const double *A,
                                              int lda, double *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const cuComplex *A,
                                              int lda, cuComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs,
                                              const cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, float *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, double *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotrfBatched(cusolverDnHandle_t handle,
                                                     cublasFillMode_t uplo,
                                                     int n, cuComplex *Aarray[],
                                                     int lda, int *infoArray,
                                                     int batchSize) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotrfBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    cuDoubleComplex *Aarray[], int lda, int *infoArray, int batchSize) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuDoubleComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrfBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, Aarray, lda, infoArray, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotrsBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    int nrhs, /* only support rhs = 1*/
    float *A[], int lda, float *B[], int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, float *[], int, float *[],
      int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotrsBatched(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    int nrhs, /* only support rhs = 1*/
    double *A[], int lda, double *B[], int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, double *[], int,
      double *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotrsBatched(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                        int nrhs, /* only support rhs = 1*/
                        cuComplex *A[], int lda, cuComplex *B[], int ldb,
                        int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, cuComplex *[], int,
      cuComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotrsBatched(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                        int nrhs, /* only support rhs = 1*/
                        cuDoubleComplex *A[], int lda, cuDoubleComplex *B[],
                        int ldb, int *d_info, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, cuDoubleComplex *[], int,
      cuDoubleComplex *[], int, int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotrsBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, B, ldb, d_info, batchSize);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZpotri_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZpotri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZpotri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnStrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, float *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnStrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZtrtri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZtrtri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnStrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, float *, int,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnStrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDtrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, double *,
      int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCtrtri(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, cublasDiagType_t diag,
    int n, cuComplex *A, int lda, cuComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int, cuComplex *,
      int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZtrtri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo,
                                              cublasDiagType_t diag, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, cublasDiagType_t, int,
      cuDoubleComplex *, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZtrtri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, diag, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnSlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnDlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnClauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZlauum_bufferSize(cusolverDnHandle_t handle, cublasFillMode_t uplo,
                            int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlauum_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *work,
                                              int lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnClauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              cuComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZlauum(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              cuDoubleComplex *work, int lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlauum");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, work, lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, float *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, double *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgetrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgetrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuDoubleComplex *A, int lda, int *Lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrf(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *Workspace, int *devIpiv,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrf(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *Workspace, int *devIpiv,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, double *, int, double *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgetrf(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              cuComplex *Workspace,
                                              int *devIpiv, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, cuComplex *,
                                      int, cuComplex *, int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgetrf(cusolverDnHandle_t handle, int m,
                                              int n, cuDoubleComplex *A,
                                              int lda,
                                              cuDoubleComplex *Workspace,
                                              int *devIpiv, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, cuDoubleComplex *,
      int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, Workspace, devIpiv, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSlaswp(cusolverDnHandle_t handle, int n,
                                              float *A, int lda, int k1, int k2,
                                              const int *devIpiv, int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, float *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDlaswp(cusolverDnHandle_t handle, int n,
                                              double *A, int lda, int k1,
                                              int k2, const int *devIpiv,
                                              int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, double *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnClaswp(cusolverDnHandle_t handle, int n,
                                              cuComplex *A, int lda, int k1,
                                              int k2, const int *devIpiv,
                                              int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, cuComplex *, int, int, int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnClaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZlaswp(cusolverDnHandle_t handle, int n,
                                              cuDoubleComplex *A, int lda,
                                              int k1, int k2,
                                              const int *devIpiv, int incx) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  cuDoubleComplex *, int, int,
                                                  int, const int *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZlaswp");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, k1, k2, devIpiv, incx);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const float *A, int lda,
                                              const int *devIpiv, float *B,
                                              int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const float *, int,
      const int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const double *A,
                                              int lda, const int *devIpiv,
                                              double *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const double *, int,
      const int *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgetrs(cusolverDnHandle_t handle,
                                              cublasOperation_t trans, int n,
                                              int nrhs, const cuComplex *A,
                                              int lda, const int *devIpiv,
                                              cuComplex *B, int ldb,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgetrs(
    cusolverDnHandle_t handle, cublasOperation_t trans, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *devIpiv, cuDoubleComplex *B,
    int ldb, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasOperation_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgetrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, trans, n, nrhs, A, lda, devIpiv, B, ldb, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgeqrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgeqrf_bufferSize(
    cusolverDnHandle_t handle, int m, int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgeqrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgeqrf_bufferSize(cusolverDnHandle_t handle, int m, int n,
                            cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgeqrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *TAU, float *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *TAU, double *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, double *,
                                      int, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              cuComplex *TAU,
                                              cuComplex *Workspace, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  cuComplex *, int, cuComplex *,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgeqrf(cusolverDnHandle_t handle, int m,
                                              int n, cuDoubleComplex *A,
                                              int lda, cuDoubleComplex *TAU,
                                              cuDoubleComplex *Workspace,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, cuDoubleComplex *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgeqrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, TAU, Workspace, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const float *A, int lda,
    const float *tau, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int,
                                      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const double *A, int lda,
    const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  int, const double *, int,
                                                  const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const cuComplex *A, int lda,
    const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int,
                                                  int, const cuComplex *, int,
                                                  const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungqr_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int k, const cuDoubleComplex *A,
    int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, float *, int, const float *, float *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, double *, int, const double *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungqr(cusolverDnHandle_t handle, int m,
                                              int n, int k, cuComplex *A,
                                              int lda, const cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, cuComplex *, int, const cuComplex *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungqr(
    cusolverDnHandle_t handle, int m, int n, int k, cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, int, cuDoubleComplex *, int,
      const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const float *A, int lda, const float *tau,
    const float *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const float *, int, const float *, const float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const double *A, int lda, const double *tau,
    const double *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const double *, int, const double *, const double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuComplex *A, int lda, const cuComplex *tau,
    const cuComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuComplex *, int, const cuComplex *, const cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmqr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, const cuDoubleComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *,
      const cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmqr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const float *A, int lda, const float *tau, float *C,
    int ldc, float *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const float *, int, const float *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const double *A, int lda, const double *tau, double *C,
    int ldc, double *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const double *, int, const double *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuComplex *A, int lda, const cuComplex *tau,
    cuComplex *C, int ldc, cuComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuComplex *, int, const cuComplex *, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmqr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasOperation_t trans,
    int m, int n, int k, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, cuDoubleComplex *C, int ldc,
    cuDoubleComplex *work, int lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasOperation_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *, cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmqr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, trans, m, n, k, A, lda, tau, C, ldc, work,
                  lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, float *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, double *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, cuComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int,
                                                  cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf_bufferSize(
    cusolverDnHandle_t handle, int n, cuDoubleComplex *A, int lda, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrf_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, n, A, lda, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, int *ipiv,
                                              float *work, int lwork,
                                              int *info) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, int *ipiv,
                                              double *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, int *, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, int *ipiv,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, int *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              int *ipiv, cuDoubleComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int, int *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrf");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const float *A, int lda, const int *ipiv, float *B, int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      const int *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const double *A, int lda, const int *ipiv, double *B, int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      const int *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuComplex *A, int lda, const int *ipiv, cuComplex *B, int ldb,
    int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrs_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *ipiv, cuDoubleComplex *B,
    int ldb, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrs_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const float *A, int lda,
                                              const int *ipiv, float *B,
                                              int ldb, float *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const float *, int,
      const int *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrs(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              int nrhs, const double *A,
                                              int lda, const int *ipiv,
                                              double *B, int ldb, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const double *, int,
      const int *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCsytrs(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
                 int nrhs, const cuComplex *A, int lda, const int *ipiv,
                 cuComplex *B, int ldb, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuComplex *, int,
      const int *, cuComplex *, int, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytrs(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, int nrhs,
    const cuDoubleComplex *A, int lda, const int *ipiv, cuDoubleComplex *B,
    int ldb, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, int, const cuDoubleComplex *,
      int, const int *, cuDoubleComplex *, int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytrs");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, nrhs, A, lda, ipiv, B, ldb, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, float *A, int lda,
    const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      float *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, double *A, int lda,
    const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      double *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, const int *ipiv, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      cuComplex *, int, const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytri_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, const int *ipiv, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const int *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytri_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              const int *ipiv, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, const int *,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              const int *ipiv, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, const int *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCsytri(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda,
                                              const int *ipiv, cuComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, const int *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZsytri(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, const int *ipiv, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const int *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZsytri");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, ipiv, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgebrd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *Lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgebrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, Lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgebrd(cusolverDnHandle_t handle, int m,
                                              int n, float *A, int lda,
                                              float *D, float *E, float *TAUQ,
                                              float *TAUP, float *Work,
                                              int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, float *, int, float *, float *, float *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgebrd(cusolverDnHandle_t handle, int m,
                                              int n, double *A, int lda,
                                              double *D, double *E,
                                              double *TAUQ, double *TAUP,
                                              double *Work, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, double *, int, double *, double *, double *,
      double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgebrd(cusolverDnHandle_t handle, int m,
                                              int n, cuComplex *A, int lda,
                                              float *D, float *E,
                                              cuComplex *TAUQ, cuComplex *TAUP,
                                              cuComplex *Work, int Lwork,
                                              int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuComplex *, int, float *, float *,
      cuComplex *, cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgebrd(
    cusolverDnHandle_t handle, int m, int n, cuDoubleComplex *A, int lda,
    double *D, double *E, cuDoubleComplex *TAUQ, cuDoubleComplex *TAUP,
    cuDoubleComplex *Work, int Lwork, int *devInfo) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, int, int, cuDoubleComplex *, int, double *, double *,
      cuDoubleComplex *, cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgebrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, A, lda, D, E, TAUQ, TAUP, Work, Lwork, devInfo);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const float *A, int lda, const float *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const float *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const double *A, int lda, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const cuComplex *A, int lda, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, const cuComplex *,
      int, const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungbr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n, int k,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int,
      const cuDoubleComplex *, int, const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungbr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, float *, int,
      const float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, double *, int,
      const double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungbr(cusolverDnHandle_t handle,
                                              cublasSideMode_t side, int m,
                                              int n, int k, cuComplex *A,
                                              int lda, const cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, cuComplex *, int,
      const cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZungbr(cusolverDnHandle_t handle, cublasSideMode_t side, int m, int n,
                 int k, cuDoubleComplex *A, int lda, const cuDoubleComplex *tau,
                 cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, int, int, int, cuDoubleComplex *,
      int, const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungbr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, m, n, k, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *d, const float *e, const float *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const float *, int,
      const float *, const float *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *d, const double *e, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const double *, int,
      const double *, const double *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChetrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const float *d, const float *e, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuComplex *, int,
      const float *, const float *, const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChetrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhetrd_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const double *d, const double *e,
    const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const double *, const double *, const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhetrd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsytrd(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *d,
                                              float *e, float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, float *, float *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsytrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsytrd(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, double *A, int lda,
    double *d, double *e, double *tau, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, double *,
      double *, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsytrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChetrd(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *d,
                                              float *e, cuComplex *tau,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int, float *,
      float *, cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChetrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhetrd(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, double *d, double *e, cuDoubleComplex *tau, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      double *, double *, cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhetrd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, d, e, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *tau, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, cublasFillMode_t, int,
                                      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const cuComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuComplex *, int,
      const cuComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungtr_bufferSize(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *tau, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSorgtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda,
                                              const float *tau, float *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, float *, int, const float *,
      float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSorgtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDorgtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda,
                                              const double *tau, double *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, double *, int, const double *,
      double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDorgtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCungtr(
    cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, const cuComplex *tau, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuComplex *, int,
      const cuComplex *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCungtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZungtr(cusolverDnHandle_t handle,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              const cuDoubleComplex *tau,
                                              cuDoubleComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      const cuDoubleComplex *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZungtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, uplo, n, A, lda, tau, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const float *A, int lda,
    const float *tau, const float *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const float *, int, const float *, const float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const double *A, int lda,
    const double *tau, const double *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const double *, int, const double *, const double *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCunmtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const cuComplex *A, int lda,
    const cuComplex *tau, const cuComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const cuComplex *, int, const cuComplex *, const cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmtr_bufferSize(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *tau, const cuDoubleComplex *C, int ldc, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, const cuDoubleComplex *, int, const cuDoubleComplex *,
      const cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmtr_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSormtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, float *A, int lda, float *tau,
    float *C, int ldc, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, float *, int, float *, float *, int, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSormtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDormtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, double *A, int lda, double *tau,
    double *C, int ldc, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, double *, int, double *, double *, int, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDormtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCunmtr(cusolverDnHandle_t handle, cublasSideMode_t side,
                 cublasFillMode_t uplo, cublasOperation_t trans, int m, int n,
                 cuComplex *A, int lda, cuComplex *tau, cuComplex *C, int ldc,
                 cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, cuComplex *, int, cuComplex *, cuComplex *, int, cuComplex *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCunmtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZunmtr(
    cusolverDnHandle_t handle, cublasSideMode_t side, cublasFillMode_t uplo,
    cublasOperation_t trans, int m, int n, cuDoubleComplex *A, int lda,
    cuDoubleComplex *tau, cuDoubleComplex *C, int ldc, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cublasSideMode_t, cublasFillMode_t, cublasOperation_t,
      int, int, cuDoubleComplex *, int, cuDoubleComplex *, cuDoubleComplex *,
      int, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZunmtr");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, side, uplo, trans, m, n, A, lda, tau, C, ldc, work,
                  lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvd_bufferSize(
    cusolverDnHandle_t handle, int m, int n, int *lwork) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, int, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, m, n, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvd(
    cusolverDnHandle_t handle, signed char jobu, signed char jobvt, int m,
    int n, float *A, int lda, float *S, float *U, int ldu, float *VT, int ldvt,
    float *work, int lwork, float *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, float *, int,
      float *, float *, int, float *, int, float *, int, float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvd(
    cusolverDnHandle_t handle, signed char jobu, signed char jobvt, int m,
    int n, double *A, int lda, double *S, double *U, int ldu, double *VT,
    int ldvt, double *work, int lwork, double *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, double *, int,
      double *, double *, int, double *, int, double *, int, double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCgesvd(cusolverDnHandle_t handle, signed char jobu, signed char jobvt,
                 int m, int n, cuComplex *A, int lda, float *S, cuComplex *U,
                 int ldu, cuComplex *VT, int ldvt, cuComplex *work, int lwork,
                 float *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, float *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZgesvd(cusolverDnHandle_t handle, signed char jobu, signed char jobvt,
                 int m, int n, cuDoubleComplex *A, int lda, double *S,
                 cuDoubleComplex *U, int ldu, cuDoubleComplex *VT, int ldvt,
                 cuDoubleComplex *work, int lwork, double *rwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, signed char, signed char, int, int, cuDoubleComplex *,
      int, double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobu, jobvt, m, n, A, lda, S, U, ldu, VT, ldvt, work,
                  lwork, rwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevd(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, float *A, int lda, float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevd(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, double *A, int lda, double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevd(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *W,
                                              cuComplex *work, int lwork,
                                              int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevd(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuDoubleComplex *A, int lda,
                                              double *W, cuDoubleComplex *work,
                                              int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const float *A, int lda, float vl, float vu,
    int il, int iu, int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const float *, int, float, float, int, int, int *,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const double *A, int lda, double vl,
    double vu, int il, int iu, int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const double *, int, double, double, int, int,
      int *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda, float vl,
    float vu, int il, int iu, int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const cuComplex *, int, float, float, int, int,
      int *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda, double vl,
    double vu, int il, int iu, int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int, double, double, int,
      int, int *, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, float *A, int lda, float vl, float vu, int il,
    int iu, int *meig, float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, float *, int, float, float, int, int, int *,
      float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, double *A, int lda, double vl, double vu,
    int il, int iu, int *meig, double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, double *, int, double, double, int, int, int *,
      double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnCheevdx(cusolverDnHandle_t handle, cusolverEigMode_t jobz,
                  cusolverEigRange_t range, cublasFillMode_t uplo, int n,
                  cuComplex *A, int lda, float vl, float vu, int il, int iu,
                  int *meig, float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, cuComplex *, int, float, float, int, int, int *,
      float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevdx(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cusolverEigRange_t range,
    cublasFillMode_t uplo, int n, cuDoubleComplex *A, int lda, double vl,
    double vu, int il, int iu, int *meig, double *W, cuDoubleComplex *work,
    int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cusolverEigRange_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, double, double, int, int,
      int *, double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, range, uplo, n, A, lda, vl, vu, il, iu, meig, W,
                  work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const float *A,
    int lda, const float *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const float *, int,
      const float *, int, float, float, int, int, int *, const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const double *A,
    int lda, const double *B, int ldb, double vl, double vu, int il, int iu,
    int *meig, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const double *, int,
      const double *, int, double, double, int, int, int *, const double *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, const cuComplex *A,
    int lda, const cuComplex *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const cuComplex *, int,
      const cuComplex *, int, float, float, int, int, int *, const float *,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvdx_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n,
    const cuDoubleComplex *A, int lda, const cuDoubleComplex *B, int ldb,
    double vl, double vu, int il, int iu, int *meig, const double *W,
    int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, double, double, int, int, int *,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvdx_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, float *A, int lda,
    float *B, int ldb, float vl, float vu, int il, int iu, int *meig, float *W,
    float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, float *, int, float *, int,
      float, float, int, int, int *, float *, float *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, double *A, int lda,
    double *B, int ldb, double vl, double vu, int il, int iu, int *meig,
    double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, double *, int, double *, int,
      double, double, int, int, int *, double *, double *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, cuComplex *A,
    int lda, cuComplex *B, int ldb, float vl, float vu, int il, int iu,
    int *meig, float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, cuComplex *, int, cuComplex *,
      int, float, float, int, int, int *, float *, cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvdx(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cusolverEigRange_t range, cublasFillMode_t uplo, int n, cuDoubleComplex *A,
    int lda, cuDoubleComplex *B, int ldb, double vl, double vu, int il, int iu,
    int *meig, double *W, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cusolverEigRange_t, cublasFillMode_t, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, double, double, int, int, int *, double *,
      cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvdx");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, range, uplo, n, A, lda, B, ldb, vl, vu,
                  il, iu, meig, W, work, lwork, info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const float *A, int lda, const float *B,
    int ldb, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const float *, int, const float *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const double *A, int lda, const double *B,
    int ldb, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const double *, int, const double *, int,
      const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda,
    const cuComplex *B, int ldb, const float *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuComplex *, int, const cuComplex *, int,
      const float *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvd_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *B, int ldb, const double *W, int *lwork) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, const double *, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvd_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, float *A, int lda, float *B, int ldb,
    float *W, float *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, float *, int, float *, int, float *, float *, int,
      int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, double *A, int lda, double *B, int ldb,
    double *W, double *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, double *, int, double *, int, double *, double *,
      int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvd(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuComplex *A, int lda, cuComplex *B, int ldb,
    float *W, cuComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuComplex *, int, cuComplex *, int, float *,
      cuComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI
cusolverDnZhegvd(cusolverDnHandle_t handle, cusolverEigType_t itype,
                 cusolverEigMode_t jobz, cublasFillMode_t uplo, int n,
                 cuDoubleComplex *A, int lda, cuDoubleComplex *B, int ldb,
                 double *W, cuDoubleComplex *work, int lwork, int *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvd");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreateSyevjInfo(syevjInfo_t *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreateSyevjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroySyevjInfo(syevjInfo_t info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroySyevjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetTolerance(syevjInfo_t info,
                                                          double tolerance) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetTolerance");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, tolerance);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetMaxSweeps(syevjInfo_t info,
                                                          int max_sweeps) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetMaxSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, max_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjSetSortEig(syevjInfo_t info,
                                                        int sort_eig) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjSetSortEig");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, sort_eig);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjGetResidual(
    cusolverDnHandle_t handle, syevjInfo_t info, double *residual) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t,
                                                  syevjInfo_t, double *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjGetResidual");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, residual);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXsyevjGetSweeps(
    cusolverDnHandle_t handle, syevjInfo_t info, int *executed_sweeps) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, syevjInfo_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXsyevjGetSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, executed_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSsyevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDsyevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCheevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZheevjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, float *A, int lda, float *W, float *work, int lwork, int *info,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, double *A, int lda, double *W, double *work, int lwork, int *info,
    syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuComplex *A, int lda, float *W, cuComplex *work, int lwork,
    int *info, syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *, syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuDoubleComplex *A, int lda, double *W, cuDoubleComplex *work,
    int lwork, int *info, syevjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *,
      syevjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const float *A, int lda, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const float *, int, const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const double *A, int lda, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const double *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuComplex *A, int lda, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuComplex *, int, const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, const cuDoubleComplex *A, int lda, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, lwork, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsyevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              float *A, int lda, float *W,
                                              float *work, int lwork, int *info,
                                              syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, float *,
      int, float *, float *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsyevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsyevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              double *A, int lda, double *W,
                                              double *work, int lwork,
                                              int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, double *,
      int, double *, double *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsyevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCheevj(cusolverDnHandle_t handle,
                                              cusolverEigMode_t jobz,
                                              cublasFillMode_t uplo, int n,
                                              cuComplex *A, int lda, float *W,
                                              cuComplex *work, int lwork,
                                              int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int, cuComplex *,
      int, float *, cuComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCheevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZheevj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, cublasFillMode_t uplo,
    int n, cuDoubleComplex *A, int lda, double *W, cuDoubleComplex *work,
    int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, cublasFillMode_t, int,
      cuDoubleComplex *, int, double *, cuDoubleComplex *, int, int *,
      syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZheevj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, uplo, n, A, lda, W, work, lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const float *A, int lda, const float *B,
    int ldb, const float *W, int *lwork, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const float *, int, const float *, int,
      const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const double *A, int lda, const double *B,
    int ldb, const double *W, int *lwork, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const double *, int, const double *, int,
      const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuComplex *A, int lda,
    const cuComplex *B, int ldb, const float *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuComplex *, int, const cuComplex *, int,
      const float *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, const cuDoubleComplex *A, int lda,
    const cuDoubleComplex *B, int ldb, const double *W, int *lwork,
    syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, const double *, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSsygvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, float *A, int lda, float *B, int ldb,
    float *W, float *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, float *, int, float *, int, float *, float *, int,
      int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSsygvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDsygvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, double *A, int lda, double *B, int ldb,
    double *W, double *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, double *, int, double *, int, double *, double *,
      int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDsygvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnChegvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuComplex *A, int lda, cuComplex *B, int ldb,
    float *W, cuComplex *work, int lwork, int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuComplex *, int, cuComplex *, int, float *,
      cuComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnChegvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZhegvj(
    cusolverDnHandle_t handle, cusolverEigType_t itype, cusolverEigMode_t jobz,
    cublasFillMode_t uplo, int n, cuDoubleComplex *A, int lda,
    cuDoubleComplex *B, int ldb, double *W, cuDoubleComplex *work, int lwork,
    int *info, syevjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigType_t, cusolverEigMode_t,
      cublasFillMode_t, int, cuDoubleComplex *, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, int *, syevjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZhegvj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, itype, jobz, uplo, n, A, lda, B, ldb, W, work, lwork,
                  info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCreateGesvdjInfo(gesvdjInfo_t *info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCreateGesvdjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDestroyGesvdjInfo(gesvdjInfo_t info) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDestroyGesvdjInfo");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetTolerance(gesvdjInfo_t info,
                                                           double tolerance) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, double);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetTolerance");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, tolerance);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetMaxSweeps(gesvdjInfo_t info,
                                                           int max_sweeps) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetMaxSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, max_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjSetSortEig(gesvdjInfo_t info,
                                                         int sort_svd) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjSetSortEig");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(info, sort_svd);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjGetResidual(
    cusolverDnHandle_t handle, gesvdjInfo_t info, double *residual) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t,
                                                  gesvdjInfo_t, double *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjGetResidual");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, residual);
}

cusolverStatus_t CUSOLVERAPI cusolverDnXgesvdjGetSweeps(
    cusolverDnHandle_t handle, gesvdjInfo_t info, int *executed_sweeps) {
  using FuncPtr =
      cusolverStatus_t(CUSOLVERAPI *)(cusolverDnHandle_t, gesvdjInfo_t, int *);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnXgesvdjGetSweeps");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, info, executed_sweeps);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const float *A, int lda, const float *S, const float *U, int ldu,
    const float *V, int ldv, int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const float *, int,
      const float *, const float *, int, const float *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const double *A, int lda, const double *S, const double *U, int ldu,
    const double *V, int ldv, int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const double *, int,
      const double *, const double *, int, const double *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const cuComplex *A, int lda, const float *S, const cuComplex *U, int ldu,
    const cuComplex *V, int ldv, int *lwork, gesvdjInfo_t params,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const cuComplex *, int,
      const float *, const cuComplex *, int, const cuComplex *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdjBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    const cuDoubleComplex *A, int lda, const double *S,
    const cuDoubleComplex *U, int ldu, const cuDoubleComplex *V, int ldv,
    int *lwork, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, const cuDoubleComplex *,
      int, const double *, const cuDoubleComplex *, int,
      const cuDoubleComplex *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZgesvdjBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, lwork, params,
                  batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n, float *A,
    int lda, float *S, float *U, int ldu, float *V, int ldv, float *work,
    int lwork, int *info, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, float *, int, float *,
      float *, int, float *, int, float *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n, double *A,
    int lda, double *S, double *U, int ldu, double *V, int ldv, double *work,
    int lwork, int *info, gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, double *, int, double *,
      double *, int, double *, int, double *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    cuComplex *A, int lda, float *S, cuComplex *U, int ldu, cuComplex *V,
    int ldv, cuComplex *work, int lwork, int *info, gesvdjInfo_t params,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, int *,
      gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdjBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int m, int n,
    cuDoubleComplex *A, int lda, double *S, cuDoubleComplex *U, int ldu,
    cuDoubleComplex *V, int ldv, cuDoubleComplex *work, int lwork, int *info,
    gesvdjInfo_t params, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, cuDoubleComplex *, int,
      double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *, gesvdjInfo_t, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdjBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, m, n, A, lda, S, U, ldu, V, ldv, work, lwork,
                  info, params, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const float *A, int lda, const float *S, const float *U, int ldu,
    const float *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      const float *, const float *, int, const float *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const double *A, int lda, const double *S, const double *U, int ldu,
    const double *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      const double *, const double *, int, const double *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const cuComplex *A, int lda, const float *S, const cuComplex *U, int ldu,
    const cuComplex *V, int ldv, int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, const float *, const cuComplex *, int, const cuComplex *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdj_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    const cuDoubleComplex *A, int lda, const double *S,
    const cuDoubleComplex *U, int ldu, const cuDoubleComplex *V, int ldv,
    int *lwork, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, const double *, const cuDoubleComplex *,
      int, const cuDoubleComplex *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdj_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, lwork,
                  params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    float *A, int lda, float *S, float *U, int ldu, float *V, int ldv,
    float *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, float *, int,
      float *, float *, int, float *, int, float *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    double *A, int lda, double *S, double *U, int ldu, double *V, int ldv,
    double *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, double *, int,
      double *, double *, int, double *, int, double *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    cuComplex *A, int lda, float *S, cuComplex *U, int ldu, cuComplex *V,
    int ldv, cuComplex *work, int lwork, int *info, gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, cuComplex *, int,
      float *, cuComplex *, int, cuComplex *, int, cuComplex *, int, int *,
      gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdj(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int econ, int m, int n,
    cuDoubleComplex *A, int lda, double *S, cuDoubleComplex *U, int ldu,
    cuDoubleComplex *V, int ldv, cuDoubleComplex *work, int lwork, int *info,
    gesvdjInfo_t params) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, cuDoubleComplex *,
      int, double *, cuDoubleComplex *, int, cuDoubleComplex *, int,
      cuDoubleComplex *, int, int *, gesvdjInfo_t);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdj");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, econ, m, n, A, lda, S, U, ldu, V, ldv, work,
                  lwork, info, params);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const float *d_A, int lda, long long int strideA, const float *d_S,
    long long int strideS, const float *d_U, int ldu, long long int strideU,
    const float *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      long long, const float *, long long, const float *, int, long long,
      const float *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnSgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const double *d_A, int lda, long long int strideA, const double *d_S,
    long long int strideS, const double *d_U, int ldu, long long int strideU,
    const double *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      long long, const double *, long long, const double *, int, long long,
      const double *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnDgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuComplex *d_A, int lda, long long int strideA, const float *d_S,
    long long int strideS, const cuComplex *d_U, int ldu, long long int strideU,
    const cuComplex *d_V, int ldv, long long int strideV, int *lwork,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, long long, const float *, long long, const cuComplex *, int,
      long long, const cuComplex *, int, long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnCgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdaStridedBatched_bufferSize(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuDoubleComplex *d_A, int lda, long long int strideA,
    const double *d_S, long long int strideS, const cuDoubleComplex *d_U,
    int ldu, long long int strideU, const cuDoubleComplex *d_V, int ldv,
    long long int strideV, int *lwork, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, long long, const double *, long long,
      const cuDoubleComplex *, int, long long, const cuDoubleComplex *, int,
      long long, int *, int);
  static auto func_ptr =
      LoadSymbol<FuncPtr>("cusolverDnZgesvdaStridedBatched_bufferSize");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, lwork, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnSgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const float *d_A, int lda, long long int strideA, float *d_S,
    long long int strideS, float *d_U, int ldu, long long int strideU,
    float *d_V, int ldv, long long int strideV, float *d_work, int lwork,
    int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const float *, int,
      long long, float *, long long, float *, int, long long, float *, int,
      long long, float *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnSgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnDgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const double *d_A, int lda, long long int strideA, double *d_S,
    long long int strideS, double *d_U, int ldu, long long int strideU,
    double *d_V, int ldv, long long int strideV, double *d_work, int lwork,
    int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const double *, int,
      long long, double *, long long, double *, int, long long, double *, int,
      long long, double *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnDgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnCgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuComplex *d_A, int lda, long long int strideA, float *d_S,
    long long int strideS, cuComplex *d_U, int ldu, long long int strideU,
    cuComplex *d_V, int ldv, long long int strideV, cuComplex *d_work,
    int lwork, int *d_info, double *h_R_nrmF, int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int, const cuComplex *,
      int, long long, float *, long long, cuComplex *, int, long long,
      cuComplex *, int, long long, cuComplex *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnCgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

cusolverStatus_t CUSOLVERAPI cusolverDnZgesvdaStridedBatched(
    cusolverDnHandle_t handle, cusolverEigMode_t jobz, int rank, int m, int n,
    const cuDoubleComplex *d_A, int lda, long long int strideA, double *d_S,
    long long int strideS, cuDoubleComplex *d_U, int ldu, long long int strideU,
    cuDoubleComplex *d_V, int ldv, long long int strideV,
    cuDoubleComplex *d_work, int lwork, int *d_info, double *h_R_nrmF,
    int batchSize) {
  using FuncPtr = cusolverStatus_t(CUSOLVERAPI *)(
      cusolverDnHandle_t, cusolverEigMode_t, int, int, int,
      const cuDoubleComplex *, int, long long, double *, long long,
      cuDoubleComplex *, int, long long, cuDoubleComplex *, int, long long,
      cuDoubleComplex *, int, int *, double *, int);
  static auto func_ptr = LoadSymbol<FuncPtr>("cusolverDnZgesvdaStridedBatched");
  if (!func_ptr) return GetSymbolNotFoundError();
  return func_ptr(handle, jobz, rank, m, n, d_A, lda, strideA, d_S, strideS,
                  d_U, ldu, strideU, d_V, ldv, strideV, d_work, lwork, d_info,
                  h_R_nrmF, batchSize);
}

}  // extern "C"
