| 798 | }; |
| 799 | |
| 800 | class pyOptimizer : public py::class_<graphvite::Optimizer> { |
| 801 | public: |
| 802 | typedef graphvite::Optimizer Optimizer; |
| 803 | typedef py::class_<Optimizer> Base; |
| 804 | using Base::def; |
| 805 | using Base::def_readonly; |
| 806 | |
| 807 | template<class... Args> |
| 808 | pyOptimizer(py::handle scope, const char *name, const Args &...args) : |
| 809 | Base(scope, name, args...) { |
| 810 | attr("__doc__") = "Optimizer(*args, **kwargs)" |
| 811 | R"( |
| 812 | General interface of first-order optimizers. |
| 813 | |
| 814 | This class has 2 constructors |
| 815 | |
| 816 | .. function:: Optimizer(type) |
| 817 | .. function:: Optimizer(lr=1e-4) |
| 818 | |
| 819 | Parameters: |
| 820 | type (int): kAuto |
| 821 | lr (float, optional): initial learning rate |
| 822 | )"; |
| 823 | |
| 824 | // data members |
| 825 | def_readonly("type", &Optimizer::type); |
| 826 | def_readonly("lr", &Optimizer::lr); |
| 827 | def_readonly("weight_decay", &Optimizer::weight_decay); |
| 828 | def_readonly("schedule", &Optimizer::schedule); |
| 829 | |
| 830 | // member functions |
| 831 | def(py::init<int>(), py::no_gil(), |
| 832 | py::arg("type") = graphvite::kAuto); |
| 833 | |
| 834 | def(py::init<float>(), py::no_gil(), |
| 835 | py::arg("lr") = 1e-4); |
| 836 | |
| 837 | py::implicitly_convertible<int, graphvite::Optimizer>(); |
| 838 | py::implicitly_convertible<float, graphvite::Optimizer>(); |
| 839 | |
| 840 | def("__repr__", &Optimizer::info, py::no_gil()); |
| 841 | } |
| 842 | }; |
| 843 | |
| 844 | class pySGD : public py::class_<graphvite::SGD, graphvite::Optimizer> { |
| 845 | public: |
nothing calls this directly
no outgoing calls
no test coverage detected