Skip to content

Commit 254322e

Browse files
Merge pull request #699 from Cytnx-dev/add_numpy_scalar_bindings
Add numpy scalar bindings and pybind for cytnx.Scalar
2 parents 2732110 + be1cfcf commit 254322e

File tree

5 files changed

+1914
-191
lines changed

5 files changed

+1914
-191
lines changed

pybind/linalg_py.cpp

Lines changed: 307 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,84 @@ void linalg_binding(py::module &m) {
270270
return cytnx::linalg::ExpH(Tin, a, b);
271271
},
272272
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_int16(0));
273+
m_linalg.def(
274+
"ExpH",
275+
[](const UniTensor &Tin, const py::numpy_scalar<std::complex<double>> &a,
276+
const py::numpy_scalar<std::complex<double>> &b) {
277+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_complex128>(a),
278+
static_cast<cytnx::cytnx_complex128>(b));
279+
},
280+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex128(0));
281+
m_linalg.def(
282+
"ExpH",
283+
[](const UniTensor &Tin, const py::numpy_scalar<std::complex<float>> &a,
284+
const py::numpy_scalar<std::complex<float>> &b) {
285+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_complex64>(a),
286+
static_cast<cytnx::cytnx_complex64>(b));
287+
},
288+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex64(0));
289+
m_linalg.def(
290+
"ExpH",
291+
[](const UniTensor &Tin, const py::numpy_scalar<double> &a, const py::numpy_scalar<double> &b) {
292+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_double>(a),
293+
static_cast<cytnx::cytnx_double>(b));
294+
},
295+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_double(0));
296+
m_linalg.def(
297+
"ExpH",
298+
[](const UniTensor &Tin, const py::numpy_scalar<float> &a, const py::numpy_scalar<float> &b) {
299+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_float>(a),
300+
static_cast<cytnx::cytnx_float>(b));
301+
},
302+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_float(0));
303+
m_linalg.def(
304+
"ExpH",
305+
[](const UniTensor &Tin, const py::numpy_scalar<int64_t> &a,
306+
const py::numpy_scalar<int64_t> &b) {
307+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int64>(a),
308+
static_cast<cytnx::cytnx_int64>(b));
309+
},
310+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int64(0));
311+
m_linalg.def(
312+
"ExpH",
313+
[](const UniTensor &Tin, const py::numpy_scalar<uint64_t> &a,
314+
const py::numpy_scalar<uint64_t> &b) {
315+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint64>(a),
316+
static_cast<cytnx::cytnx_uint64>(b));
317+
},
318+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint64(0));
319+
m_linalg.def(
320+
"ExpH",
321+
[](const UniTensor &Tin, const py::numpy_scalar<int32_t> &a,
322+
const py::numpy_scalar<int32_t> &b) {
323+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int32>(a),
324+
static_cast<cytnx::cytnx_int32>(b));
325+
},
326+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int32(0));
327+
m_linalg.def(
328+
"ExpH",
329+
[](const UniTensor &Tin, const py::numpy_scalar<uint32_t> &a,
330+
const py::numpy_scalar<uint32_t> &b) {
331+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint32>(a),
332+
static_cast<cytnx::cytnx_uint32>(b));
333+
},
334+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint32(0));
335+
m_linalg.def(
336+
"ExpH",
337+
[](const UniTensor &Tin, const py::numpy_scalar<int16_t> &a,
338+
const py::numpy_scalar<int16_t> &b) {
339+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int16>(a),
340+
static_cast<cytnx::cytnx_int16>(b));
341+
},
342+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int16(0));
343+
m_linalg.def(
344+
"ExpH",
345+
[](const UniTensor &Tin, const py::numpy_scalar<uint16_t> &a,
346+
const py::numpy_scalar<uint16_t> &b) {
347+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint16>(a),
348+
static_cast<cytnx::cytnx_uint16>(b));
349+
},
350+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint16(0));
273351

274352
m_linalg.def(
275353
"ExpH", [](const UniTensor &Tin) { return cytnx::linalg::ExpH(Tin); }, py::arg("Tin"));
@@ -336,6 +414,79 @@ void linalg_binding(py::module &m) {
336414
return cytnx::linalg::ExpH(Tin, a, b);
337415
},
338416
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_int16(0));
417+
m_linalg.def(
418+
"ExpH",
419+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<double>> &a,
420+
const py::numpy_scalar<std::complex<double>> &b) {
421+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_complex128>(a));
422+
},
423+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex128(0));
424+
m_linalg.def(
425+
"ExpH",
426+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<float>> &a,
427+
const py::numpy_scalar<std::complex<float>> &b) {
428+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_complex64>(a));
429+
},
430+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex64(0));
431+
m_linalg.def(
432+
"ExpH",
433+
[](const Tensor &Tin, const py::numpy_scalar<double> &a, const py::numpy_scalar<double> &b) {
434+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_double>(a),
435+
static_cast<cytnx::cytnx_double>(b));
436+
},
437+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_double(0));
438+
m_linalg.def(
439+
"ExpH",
440+
[](const Tensor &Tin, const py::numpy_scalar<float> &a, const py::numpy_scalar<float> &b) {
441+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_float>(a),
442+
static_cast<cytnx::cytnx_float>(b));
443+
},
444+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_float(0));
445+
m_linalg.def(
446+
"ExpH",
447+
[](const Tensor &Tin, const py::numpy_scalar<int64_t> &a, const py::numpy_scalar<int64_t> &b) {
448+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int64>(a),
449+
static_cast<cytnx::cytnx_int64>(b));
450+
},
451+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int64(0));
452+
m_linalg.def(
453+
"ExpH",
454+
[](const Tensor &Tin, const py::numpy_scalar<uint64_t> &a,
455+
const py::numpy_scalar<uint64_t> &b) {
456+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint64>(a),
457+
static_cast<cytnx::cytnx_uint64>(b));
458+
},
459+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint64(0));
460+
m_linalg.def(
461+
"ExpH",
462+
[](const Tensor &Tin, const py::numpy_scalar<int32_t> &a, const py::numpy_scalar<int32_t> &b) {
463+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int32>(a),
464+
static_cast<cytnx::cytnx_int32>(b));
465+
},
466+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int32(0));
467+
m_linalg.def(
468+
"ExpH",
469+
[](const Tensor &Tin, const py::numpy_scalar<uint32_t> &a,
470+
const py::numpy_scalar<uint32_t> &b) {
471+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint32>(a),
472+
static_cast<cytnx::cytnx_uint32>(b));
473+
},
474+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint32(0));
475+
m_linalg.def(
476+
"ExpH",
477+
[](const Tensor &Tin, const py::numpy_scalar<int16_t> &a, const py::numpy_scalar<int16_t> &b) {
478+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_int16>(a),
479+
static_cast<cytnx::cytnx_int16>(b));
480+
},
481+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int16(0));
482+
m_linalg.def(
483+
"ExpH",
484+
[](const Tensor &Tin, const py::numpy_scalar<uint16_t> &a,
485+
const py::numpy_scalar<uint16_t> &b) {
486+
return cytnx::linalg::ExpH(Tin, static_cast<cytnx::cytnx_uint16>(a),
487+
static_cast<cytnx::cytnx_uint16>(b));
488+
},
489+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint16(0));
339490

340491
m_linalg.def(
341492
"ExpH", [](const Tensor &Tin) { return cytnx::linalg::ExpH(Tin); }, py::arg("Tin"));
@@ -346,58 +497,131 @@ void linalg_binding(py::module &m) {
346497
[](const UniTensor &Tin, const cytnx_complex128 &a, const cytnx_complex128 &b) {
347498
return cytnx::linalg::ExpM(Tin, a, b);
348499
},
349-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
500+
py::arg("Tin"), py::arg("a"), py::arg("b") = complex128(0));
350501
m_linalg.def(
351502
"ExpM",
352503
[](const UniTensor &Tin, const cytnx_complex64 &a, const cytnx_complex64 &b) {
353504
return cytnx::linalg::ExpM(Tin, a, b);
354505
},
355-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
506+
py::arg("Tin"), py::arg("a"), py::arg("b") = complex64(0));
356507
m_linalg.def(
357508
"ExpM",
358509
[](const UniTensor &Tin, const cytnx_double &a, const cytnx_double &b) {
359510
return cytnx::linalg::ExpM(Tin, a, b);
360511
},
361-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
512+
py::arg("Tin"), py::arg("a"), py::arg("b") = double(0));
362513
m_linalg.def(
363514
"ExpM",
364515
[](const UniTensor &Tin, const cytnx_float &a, const cytnx_float &b) {
365516
return cytnx::linalg::ExpM(Tin, a, b);
366517
},
367-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
518+
py::arg("Tin"), py::arg("a"), py::arg("b") = float(0));
368519
m_linalg.def(
369520
"ExpM",
370521
[](const UniTensor &Tin, const cytnx_uint64 &a, const cytnx_uint64 &b) {
371522
return cytnx::linalg::ExpM(Tin, a, b);
372523
},
373-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
524+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_uint64(0));
374525
m_linalg.def(
375526
"ExpM",
376527
[](const UniTensor &Tin, const cytnx_int64 &a, const cytnx_int64 &b) {
377528
return cytnx::linalg::ExpM(Tin, a, b);
378529
},
379-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
530+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_int64(0));
380531
m_linalg.def(
381532
"ExpM",
382533
[](const UniTensor &Tin, const cytnx_uint32 &a, const cytnx_uint32 &b) {
383534
return cytnx::linalg::ExpM(Tin, a, b);
384535
},
385-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
536+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_uint32(0));
386537
m_linalg.def(
387538
"ExpM",
388539
[](const UniTensor &Tin, const cytnx_int32 &a, const cytnx_int32 &b) {
389540
return cytnx::linalg::ExpM(Tin, a, b);
390541
},
391-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
542+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_int32(0));
392543

393544
m_linalg.def(
394545
"ExpM",
395546
[](const UniTensor &Tin, const cytnx_uint16 &a, const cytnx_uint16 &b) {
396547
return cytnx::linalg::ExpM(Tin, a, b);
397548
},
398-
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
549+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx_uint16(0));
399550
m_linalg.def(
400551
"ExpM", [](const UniTensor &Tin) { return cytnx::linalg::ExpM(Tin); }, py::arg("Tin"));
552+
m_linalg.def(
553+
"ExpM",
554+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<double>> &a,
555+
const py::numpy_scalar<std::complex<double>> &b) {
556+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_complex128>(a));
557+
},
558+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex128(0));
559+
m_linalg.def(
560+
"ExpM",
561+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<float>> &a,
562+
const py::numpy_scalar<std::complex<float>> &b) {
563+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_complex64>(a));
564+
},
565+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex64(0));
566+
m_linalg.def(
567+
"ExpM",
568+
[](const Tensor &Tin, const py::numpy_scalar<double> &a, const py::numpy_scalar<double> &b) {
569+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_double>(a),
570+
static_cast<cytnx::cytnx_double>(b));
571+
},
572+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_double(0));
573+
m_linalg.def(
574+
"ExpM",
575+
[](const Tensor &Tin, const py::numpy_scalar<float> &a, const py::numpy_scalar<float> &b) {
576+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_float>(a),
577+
static_cast<cytnx::cytnx_float>(b));
578+
},
579+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_float(0));
580+
m_linalg.def(
581+
"ExpM",
582+
[](const Tensor &Tin, const py::numpy_scalar<int64_t> &a, const py::numpy_scalar<int64_t> &b) {
583+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int64>(a),
584+
static_cast<cytnx::cytnx_int64>(b));
585+
},
586+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int64(0));
587+
m_linalg.def(
588+
"ExpM",
589+
[](const Tensor &Tin, const py::numpy_scalar<uint64_t> &a,
590+
const py::numpy_scalar<uint64_t> &b) {
591+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint64>(a),
592+
static_cast<cytnx::cytnx_uint64>(b));
593+
},
594+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint64(0));
595+
m_linalg.def(
596+
"ExpM",
597+
[](const Tensor &Tin, const py::numpy_scalar<int32_t> &a, const py::numpy_scalar<int32_t> &b) {
598+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int32>(a),
599+
static_cast<cytnx::cytnx_int32>(b));
600+
},
601+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int32(0));
602+
m_linalg.def(
603+
"ExpM",
604+
[](const Tensor &Tin, const py::numpy_scalar<uint32_t> &a,
605+
const py::numpy_scalar<uint32_t> &b) {
606+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint32>(a),
607+
static_cast<cytnx::cytnx_uint32>(b));
608+
},
609+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint32(0));
610+
m_linalg.def(
611+
"ExpM",
612+
[](const Tensor &Tin, const py::numpy_scalar<int16_t> &a, const py::numpy_scalar<int16_t> &b) {
613+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int16>(a),
614+
static_cast<cytnx::cytnx_int16>(b));
615+
},
616+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int16(0));
617+
m_linalg.def(
618+
"ExpM",
619+
[](const Tensor &Tin, const py::numpy_scalar<uint16_t> &a,
620+
const py::numpy_scalar<uint16_t> &b) {
621+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint16>(a),
622+
static_cast<cytnx::cytnx_uint16>(b));
623+
},
624+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint16(0));
401625

402626
// Tn
403627
m_linalg.def(
@@ -448,13 +672,86 @@ void linalg_binding(py::module &m) {
448672
return cytnx::linalg::ExpM(Tin, a, b);
449673
},
450674
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
451-
452675
m_linalg.def(
453676
"ExpM",
454677
[](const Tensor &Tin, const cytnx_uint16 &a, const cytnx_uint16 &b) {
455678
return cytnx::linalg::ExpM(Tin, a, b);
456679
},
457680
py::arg("Tin"), py::arg("a"), py::arg("b") = 0);
681+
m_linalg.def(
682+
"ExpM",
683+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<double>> &a,
684+
const py::numpy_scalar<std::complex<double>> &b) {
685+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_complex128>(a));
686+
},
687+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex128(0));
688+
m_linalg.def(
689+
"ExpM",
690+
[](const Tensor &Tin, const py::numpy_scalar<std::complex<float>> &a,
691+
const py::numpy_scalar<std::complex<float>> &b) {
692+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_complex64>(a));
693+
},
694+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_complex64(0));
695+
m_linalg.def(
696+
"ExpM",
697+
[](const Tensor &Tin, const py::numpy_scalar<double> &a, const py::numpy_scalar<double> &b) {
698+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_double>(a),
699+
static_cast<cytnx::cytnx_double>(b));
700+
},
701+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_double(0));
702+
m_linalg.def(
703+
"ExpM",
704+
[](const Tensor &Tin, const py::numpy_scalar<float> &a, const py::numpy_scalar<float> &b) {
705+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_float>(a),
706+
static_cast<cytnx::cytnx_float>(b));
707+
},
708+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_float(0));
709+
m_linalg.def(
710+
"ExpM",
711+
[](const Tensor &Tin, const py::numpy_scalar<int64_t> &a, const py::numpy_scalar<int64_t> &b) {
712+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int64>(a),
713+
static_cast<cytnx::cytnx_int64>(b));
714+
},
715+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int64(0));
716+
m_linalg.def(
717+
"ExpM",
718+
[](const Tensor &Tin, const py::numpy_scalar<uint64_t> &a,
719+
const py::numpy_scalar<uint64_t> &b) {
720+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint64>(a),
721+
static_cast<cytnx::cytnx_uint64>(b));
722+
},
723+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint64(0));
724+
m_linalg.def(
725+
"ExpM",
726+
[](const Tensor &Tin, const py::numpy_scalar<int32_t> &a, const py::numpy_scalar<int32_t> &b) {
727+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int32>(a),
728+
static_cast<cytnx::cytnx_int32>(b));
729+
},
730+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int32(0));
731+
m_linalg.def(
732+
"ExpM",
733+
[](const Tensor &Tin, const py::numpy_scalar<uint32_t> &a,
734+
const py::numpy_scalar<uint32_t> &b) {
735+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint32>(a),
736+
static_cast<cytnx::cytnx_uint32>(b));
737+
},
738+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint32(0));
739+
m_linalg.def(
740+
"ExpM",
741+
[](const Tensor &Tin, const py::numpy_scalar<int16_t> &a, const py::numpy_scalar<int16_t> &b) {
742+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_int16>(a),
743+
static_cast<cytnx::cytnx_int16>(b));
744+
},
745+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_int16(0));
746+
m_linalg.def(
747+
"ExpM",
748+
[](const Tensor &Tin, const py::numpy_scalar<uint16_t> &a,
749+
const py::numpy_scalar<uint16_t> &b) {
750+
return cytnx::linalg::ExpM(Tin, static_cast<cytnx::cytnx_uint16>(a),
751+
static_cast<cytnx::cytnx_uint16>(b));
752+
},
753+
py::arg("Tin"), py::arg("a"), py::arg("b") = cytnx::cytnx_uint16(0));
754+
458755
m_linalg.def(
459756
"ExpM", [](const Tensor &Tin) { return cytnx::linalg::ExpM(Tin); }, py::arg("Tin"));
460757

0 commit comments

Comments
 (0)