From ee9439d5e788d204d56810f84531310113a173d9 Mon Sep 17 00:00:00 2001
From: Tyler Veness <calcmogul@gmail.com>
Date: Fri, 17 May 2024 19:20:12 -0700
Subject: [PATCH] Fix stubgen warnings (#541)

---
 cmake/fix_stubgen.py                              |  5 -----
 cmake/modules/Pybind11Stubgen.cmake               |  5 +++--
 jormungandr/cpp/autodiff/BindGradient.cpp         |  2 +-
 jormungandr/cpp/autodiff/BindHessian.cpp          |  2 +-
 jormungandr/cpp/autodiff/BindJacobian.cpp         |  2 +-
 jormungandr/cpp/autodiff/BindVariable.cpp         |  2 +-
 jormungandr/cpp/autodiff/BindVariableBlock.cpp    |  2 +-
 jormungandr/cpp/autodiff/BindVariableMatrix.cpp   |  2 +-
 .../cpp/optimization/BindOptimizationProblem.cpp  |  2 +-
 jormungandr/cpp/optimization/BindSolverStatus.cpp | 15 ++++++++++-----
 10 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/cmake/fix_stubgen.py b/cmake/fix_stubgen.py
index 1554b722..326af02d 100755
--- a/cmake/fix_stubgen.py
+++ b/cmake/fix_stubgen.py
@@ -21,11 +21,6 @@ def main():
         with open(filename) as f:
             content = f.read()
 
-        # Fix errors
-        content = content.replace(
-            "<ExpressionType.NONE: 0>", "ExpressionType.NONE"
-        ).replace("<SolverExitCondition.SUCCESS: 0>", "SolverExitCondition.SUCCESS")
-
         # Convert parameter names from camel case to snake case
         new_content = ""
         extract_location = 0
diff --git a/cmake/modules/Pybind11Stubgen.cmake b/cmake/modules/Pybind11Stubgen.cmake
index ca4cae5a..82a70ebf 100644
--- a/cmake/modules/Pybind11Stubgen.cmake
+++ b/cmake/modules/Pybind11Stubgen.cmake
@@ -4,8 +4,9 @@ function(pybind11_stubgen target)
         TARGET ${target}
         POST_BUILD
         COMMAND
-            ${Python3_EXECUTABLE} -m pybind11_stubgen --ignore-all-errors
-            --print-invalid-expressions-as-is --exit-code
+            ${Python3_EXECUTABLE} -m pybind11_stubgen --numpy-array-use-type-var
+            --ignore-unresolved-names
+            'numpy.float64|numpy.ndarray|scipy.sparse.csc_matrix' --exit-code
             $<TARGET_FILE_BASE_NAME:${target}> -o
             $<TARGET_FILE_DIR:${target}>-stubs
         COMMAND
diff --git a/jormungandr/cpp/autodiff/BindGradient.cpp b/jormungandr/cpp/autodiff/BindGradient.cpp
index 6a5af676..36eb1297 100644
--- a/jormungandr/cpp/autodiff/BindGradient.cpp
+++ b/jormungandr/cpp/autodiff/BindGradient.cpp
@@ -11,7 +11,7 @@ namespace py = pybind11;
 namespace sleipnir {
 
 void BindGradient(py::class_<Gradient>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<Variable, Variable>(), "variable"_a, "wrt"_a,
           DOC(sleipnir, Gradient, Gradient));
diff --git a/jormungandr/cpp/autodiff/BindHessian.cpp b/jormungandr/cpp/autodiff/BindHessian.cpp
index 7514cedb..b740711d 100644
--- a/jormungandr/cpp/autodiff/BindHessian.cpp
+++ b/jormungandr/cpp/autodiff/BindHessian.cpp
@@ -11,7 +11,7 @@ namespace py = pybind11;
 namespace sleipnir {
 
 void BindHessian(py::class_<Hessian>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<Variable, VariableMatrix>(), "variable"_a, "wrt"_a,
           DOC(sleipnir, Hessian, Hessian));
diff --git a/jormungandr/cpp/autodiff/BindJacobian.cpp b/jormungandr/cpp/autodiff/BindJacobian.cpp
index 6ce7f782..02c15f3f 100644
--- a/jormungandr/cpp/autodiff/BindJacobian.cpp
+++ b/jormungandr/cpp/autodiff/BindJacobian.cpp
@@ -11,7 +11,7 @@ namespace py = pybind11;
 namespace sleipnir {
 
 void BindJacobian(py::class_<Jacobian>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<VariableMatrix, VariableMatrix>(), "variables"_a, "wrt"_a,
           DOC(sleipnir, Jacobian, Jacobian));
diff --git a/jormungandr/cpp/autodiff/BindVariable.cpp b/jormungandr/cpp/autodiff/BindVariable.cpp
index 86707a8b..3fd677df 100644
--- a/jormungandr/cpp/autodiff/BindVariable.cpp
+++ b/jormungandr/cpp/autodiff/BindVariable.cpp
@@ -23,7 +23,7 @@ PYBIND11_WARNING_DISABLE_CLANG("-Wself-assign-overloaded")
 namespace sleipnir {
 
 void BindVariable(py::module_& autodiff, py::class_<Variable>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<>(), DOC(sleipnir, Variable, Variable));
   cls.def(py::init<double>(), "value"_a, DOC(sleipnir, Variable, Variable, 2));
diff --git a/jormungandr/cpp/autodiff/BindVariableBlock.cpp b/jormungandr/cpp/autodiff/BindVariableBlock.cpp
index bc4c33ab..eac8823a 100644
--- a/jormungandr/cpp/autodiff/BindVariableBlock.cpp
+++ b/jormungandr/cpp/autodiff/BindVariableBlock.cpp
@@ -19,7 +19,7 @@ namespace sleipnir {
 
 void BindVariableBlock(py::module_& autodiff,
                        py::class_<VariableBlock<VariableMatrix>>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   // VariableBlock-VariableMatrix overloads
   cls.def(py::self * VariableMatrix(), "rhs"_a);
diff --git a/jormungandr/cpp/autodiff/BindVariableMatrix.cpp b/jormungandr/cpp/autodiff/BindVariableMatrix.cpp
index 4791e7f6..810bc00c 100644
--- a/jormungandr/cpp/autodiff/BindVariableMatrix.cpp
+++ b/jormungandr/cpp/autodiff/BindVariableMatrix.cpp
@@ -19,7 +19,7 @@ namespace sleipnir {
 
 void BindVariableMatrix(py::module_& autodiff,
                         py::class_<VariableMatrix>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<>(), DOC(sleipnir, VariableMatrix, VariableMatrix));
   cls.def(py::init<int>(), "rows"_a,
diff --git a/jormungandr/cpp/optimization/BindOptimizationProblem.cpp b/jormungandr/cpp/optimization/BindOptimizationProblem.cpp
index a22207dd..29e4284a 100644
--- a/jormungandr/cpp/optimization/BindOptimizationProblem.cpp
+++ b/jormungandr/cpp/optimization/BindOptimizationProblem.cpp
@@ -15,7 +15,7 @@ namespace py = pybind11;
 namespace sleipnir {
 
 void BindOptimizationProblem(py::class_<OptimizationProblem>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<>(),
           DOC(sleipnir, OptimizationProblem, OptimizationProblem));
diff --git a/jormungandr/cpp/optimization/BindSolverStatus.cpp b/jormungandr/cpp/optimization/BindSolverStatus.cpp
index 1b09dfdb..292d6332 100644
--- a/jormungandr/cpp/optimization/BindSolverStatus.cpp
+++ b/jormungandr/cpp/optimization/BindSolverStatus.cpp
@@ -10,15 +10,20 @@ namespace py = pybind11;
 namespace sleipnir {
 
 void BindSolverStatus(py::class_<SolverStatus>& cls) {
-  using namespace pybind11::literals;
+  using namespace py::literals;
 
   cls.def(py::init<>());
   cls.def(py::init<ExpressionType, ExpressionType, ExpressionType,
                    SolverExitCondition, double>(),
-          "cost_function_type"_a = ExpressionType::kNone,
-          "equality_constraint_type"_a = ExpressionType::kNone,
-          "inequality_constraint_type"_a = ExpressionType::kNone,
-          "exit_condition"_a = SolverExitCondition::kSuccess, "cost"_a = 0.0);
+          py::arg_v("cost_function_type", ExpressionType::kNone,
+                    "ExpressionType.NONE"),
+          py::arg_v("equality_constraint_type", ExpressionType::kNone,
+                    "ExpressionType.NONE"),
+          py::arg_v("inequality_constraint_type", ExpressionType::kNone,
+                    "ExpressionType.NONE"),
+          py::arg_v("exit_condition", SolverExitCondition::kSuccess,
+                    "SolverExitCondition.SUCCESS"),
+          "cost"_a = 0.0);
   cls.def_readwrite("cost_function_type", &SolverStatus::costFunctionType,
                     DOC(sleipnir, SolverStatus, costFunctionType));
   cls.def_readwrite("equality_constraint_type",