| 524 | |
| 525 | template<class... Args> |
| 526 | pyKnowledgeGraphSolver(py::handle scope, const char *name, const Args &...args) : |
| 527 | Base(scope, signature(name, dim, typeid(Float).name(), typeid(Index).name()).c_str(), args...) { |
| 528 | attr("__doc__") = "KnowledgeGraphSolver(dim, float_type=dtype.float32, index_type=dtype.uint32, " |
| 529 | "device_ids=[], num_sampler_per_worker=auto, gpu_memory_limit=auto)" |
| 530 | R"( |
| 531 | Knowledge graph embedding solver. |
| 532 | |
| 533 | Parameters: |
| 534 | dim (int): dimension of embeddings |
| 535 | float_type (dtype): type of parameters |
| 536 | index_type (dtype): type of node indexes |
| 537 | device_ids (list of int, optional): GPU ids, [] for auto |
| 538 | num_sampler_per_worker (int, optional): number of sampler thread per GPU |
| 539 | gpu_memory_limit (int, optional): memory limit for each GPU in bytes |
| 540 | )"; |
| 541 | |
| 542 | // override instance name with template name |
| 543 | attr("__name__") = py::internal_str(name); |
| 544 | attr("__qualname__") = py::internal_str(name); |
| 545 | |
| 546 | // data members |
| 547 | def_readonly("num_partition", &KnowledgeGraphSolver::num_partition); |
| 548 | def_readonly("num_negative", &KnowledgeGraphSolver::num_negative); |
| 549 | def_readonly("sample_batch_size", &KnowledgeGraphSolver::sample_batch_size); |
| 550 | def_readonly("optimizer", &KnowledgeGraphSolver::optimizer); |
| 551 | def_readonly("negative_sample_exponent", &KnowledgeGraphSolver::negative_sample_exponent); |
| 552 | def_readonly("model", &KnowledgeGraphSolver::model); |
| 553 | def_readonly("num_epoch", &KnowledgeGraphSolver::num_epoch); |
| 554 | def_readonly("resume", &KnowledgeGraphSolver::resume); |
| 555 | def_readonly("relation_lr_multiplier", &KnowledgeGraphSolver::relation_lr_multiplier); |
| 556 | def_readonly("episode_size", &KnowledgeGraphSolver::episode_size); |
| 557 | def_readonly("batch_size", &KnowledgeGraphSolver::batch_size); |
| 558 | def_readonly("margin", &KnowledgeGraphSolver::margin); |
| 559 | def_readonly("l3_regularization", &KnowledgeGraphSolver::l3_regularization); |
| 560 | def_readonly("adversarial_temperature", &KnowledgeGraphSolver::adversarial_temperature); |
| 561 | def_readonly("positive_reuse", &KnowledgeGraphSolver::positive_reuse); |
| 562 | def_readonly("log_frequency", &KnowledgeGraphSolver::log_frequency); |
| 563 | def_readonly("num_worker", &KnowledgeGraphSolver::num_worker); |
| 564 | def_readonly("num_sampler", &KnowledgeGraphSolver::num_sampler); |
| 565 | def_readonly("gpu_memory_limit", &KnowledgeGraphSolver::gpu_memory_limit); |
| 566 | def_readonly("gpu_memory_cost", &KnowledgeGraphSolver::gpu_memory_cost); |
| 567 | |
| 568 | // numpy views (mutable but unassignable) |
| 569 | def_property_readonly("entity_embeddings", numpy_view(&KnowledgeGraphSolver::entity_embeddings), |
| 570 | "Entity embeddings (2D numpy view)."); |
| 571 | def_property_readonly("relation_embeddings", numpy_view(&KnowledgeGraphSolver::relation_embeddings), |
| 572 | "Relation embeddings (2D numpy view)."); |
| 573 | |
| 574 | // member functions |
| 575 | def(py::init<std::vector<int>, int, size_t>(), py::no_gil(), |
| 576 | py::arg("device_ids") = std::vector<int>(), py::arg("num_sampler_per_worker") = graphvite::kAuto, |
| 577 | py::arg("gpu_memory_limit") = graphvite::kAuto); |
| 578 | |
| 579 | def("build", &KnowledgeGraphSolver::build, py::no_gil(), |
| 580 | py::arg("graph"), py::arg("optimizer") = graphvite::Optimizer(graphvite::kAuto), |
| 581 | py::arg("num_partition") = graphvite::kAuto, py::arg("num_negative") = 64, py::arg("batch_size") = 100000, |
| 582 | py::arg("episode_size") = graphvite::kAuto, |
| 583 | "build(graph, optimizer=auto, num_partition=auto, num_negative=64, batch_size=100000, episode_size=auto)" |
nothing calls this directly
no test coverage detected