| 392 | |
| 393 | template<class... Args> |
| 394 | pyGraphSolver(py::handle scope, const char *name, const Args &...args) : |
| 395 | Base(scope, signature(name, dim, typeid(Float).name(), typeid(Index).name()).c_str(), args...) { |
| 396 | attr("__doc__") = "GraphSolver(dim, float_type=dtype.float32, index_type=dtype.uint32, " |
| 397 | "device_ids=[], num_sampler_per_worker=auto, gpu_memory_limit=auto)" |
| 398 | R"( |
| 399 | Graph embedding solver. |
| 400 | |
| 401 | Parameters: |
| 402 | dim (int): dimension of embeddings |
| 403 | float_type (dtype): type of parameters |
| 404 | index_type (dtype): type of node indexes |
| 405 | device_ids (list of int, optional): GPU ids, [] for auto |
| 406 | num_sampler_per_worker (int, optional): number of sampler thread per GPU |
| 407 | gpu_memory_limit (int, optional): memory limit for each GPU in bytes |
| 408 | )"; |
| 409 | |
| 410 | // override instance name with template name |
| 411 | attr("__name__") = py::internal_str(name); |
| 412 | attr("__qualname__") = py::internal_str(name); |
| 413 | |
| 414 | // data members |
| 415 | def_readonly("num_partition", &GraphSolver::num_partition); |
| 416 | def_readonly("num_negative", &GraphSolver::num_negative); |
| 417 | def_readonly("optimizer", &GraphSolver::optimizer); |
| 418 | def_readonly("negative_sample_exponent", &GraphSolver::negative_sample_exponent); |
| 419 | def_readonly("negative_weight", &GraphSolver::negative_weight); |
| 420 | def_readonly("model", &GraphSolver::model); |
| 421 | def_readonly("num_epoch", &GraphSolver::num_epoch); |
| 422 | def_readonly("resume", &GraphSolver::resume); |
| 423 | def_readonly("episode_size", &GraphSolver::episode_size); |
| 424 | def_readonly("batch_size", &GraphSolver::batch_size); |
| 425 | def_readonly("augmentation_step", &GraphSolver::augmentation_step); |
| 426 | def_readonly("random_walk_length", &GraphSolver::random_walk_length); |
| 427 | def_readonly("random_walk_batch_size", &GraphSolver::random_walk_batch_size); |
| 428 | def_readonly("shuffle_base", &GraphSolver::shuffle_base); |
| 429 | def_readonly("p", &GraphSolver::p); |
| 430 | def_readonly("q", &GraphSolver::q); |
| 431 | def_readonly("positive_reuse", &GraphSolver::positive_reuse); |
| 432 | def_readonly("log_frequency", &GraphSolver::log_frequency); |
| 433 | def_readonly("num_worker", &GraphSolver::num_worker); |
| 434 | def_readonly("num_sampler", &GraphSolver::num_sampler); |
| 435 | def_readonly("gpu_memory_limit", &GraphSolver::gpu_memory_limit); |
| 436 | def_readonly("gpu_memory_cost", &GraphSolver::gpu_memory_cost); |
| 437 | |
| 438 | // numpy views (mutable but unassignable) |
| 439 | def_property_readonly("vertex_embeddings", numpy_view(&GraphSolver::vertex_embeddings), |
| 440 | "Vertex node embeddings (2D numpy view)."); |
| 441 | def_property_readonly("context_embeddings", numpy_view(&GraphSolver::context_embeddings), |
| 442 | "Context node embeddings (2D numpy view)."); |
| 443 | |
| 444 | // member functions |
| 445 | def(py::init<std::vector<int>, int, size_t>(), py::no_gil(), |
| 446 | py::arg("device_ids") = std::vector<int>(), py::arg("num_sampler_per_worker") = graphvite::kAuto, |
| 447 | py::arg("gpu_memory_limit") = graphvite::kAuto); |
| 448 | |
| 449 | def("build", &GraphSolver::build, py::no_gil(), |
| 450 | py::arg("graph"), py::arg("optimizer") = graphvite::Optimizer(graphvite::kAuto), |
| 451 | py::arg("num_partition") = graphvite::kAuto, py::arg("num_negative") = 1, py::arg("batch_size") = 100000, |
nothing calls this directly
no test coverage detected