@@ -215,20 +215,22 @@ inline py::array geomspace(py::object start_o, py::object stop_o,
215215
216216// ── numpy.eye ────────────────────────────────────────────────────────────────
217217
218- // / numpy.eye(N, M=N , k=0, dtype=float64)
218+ // / numpy.eye(N, M=None , k=0, dtype=float64) — M=None 表示方阵,严格对齐 numpy API
219219template <typename T>
220- py::array_t <T> eye (py::ssize_t N, py::ssize_t M = - 1 , int k = 0 ) {
220+ py::array_t <T> eye (py::ssize_t N, py::object M_obj = py::none() , int k = 0) {
221221 if (N < 0 ) throw std::invalid_argument (" eye: N must be >= 0" );
222222 size_t Ns = static_cast <size_t >(N);
223- size_t Ms = (M < 0 ) ? Ns : static_cast <size_t >(M);
224- py::array_t <T> result ({N, (M < 0 ? N : M)});
223+ py::ssize_t M_val = M_obj.is_none () ? N : M_obj.cast <py::ssize_t >();
224+ if (M_val < 0 ) throw std::invalid_argument (" eye: M must be >= 0" );
225+ size_t Ms = static_cast <size_t >(M_val);
226+ py::array_t <T> result ({N, M_val});
225227 numpy::eye (static_cast <T*>(result.request ().ptr ), Ns, Ms, k);
226228 return result;
227229}
228230
229- inline py::array_t <double > eye (py::ssize_t N, py::ssize_t M = - 1 ,
231+ inline py::array_t <double > eye (py::ssize_t N, py::object M_obj = py::none() ,
230232 int k = 0) {
231- return eye<double >(N, M , k);
233+ return eye<double >(N, M_obj , k);
232234}
233235
234236// ── numpy.identity ───────────────────────────────────────────────────────────
0 commit comments