--- a +++ b/deepvariant/python/direct_phasing_pybind.cc @@ -0,0 +1,63 @@ +/* + * Copyright 2024 Google LLC. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "pybind11/cast.h" +#if true // Trick to stop tooling from moving the #include around. +// MUST appear before any standard headers are included. +#include <pybind11/pybind11.h> +#endif + +#include <pybind11/stl.h> + +#include "deepvariant/direct_phasing.h" +#include "third_party/nucleus/core/python/type_caster_nucleus_status.h" +#include "third_party/nucleus/core/python/type_caster_nucleus_statusor.h" +#include "third_party/nucleus/util/python/type_caster_nucleus_proto_ptr.h" +#include "pybind11_protobuf/native_proto_caster.h" + +namespace py = pybind11; + +PYBIND11_MODULE(direct_phasing, m) { + pybind11_protobuf::ImportNativeProtoCasters(); + using namespace ::learning::genomics::deepvariant; // NOLINT + + py::class_<PhasedVariant>(m, "PhasedVariant") + .def_readwrite("position", &PhasedVariant::position) + .def_readwrite("phase_1_bases", &PhasedVariant::phase_1_bases) + .def_readwrite("phase_2_bases", &PhasedVariant::phase_2_bases); + + py::classh<DirectPhasing>(m, "DirectPhasing") + .def(py::init<>()) + .def("graphviz", &DirectPhasing::GraphViz) + .def("get_phased_variants", &DirectPhasing::GetPhasedVariants) + .def("phase", &DirectPhasing::PhaseReadsPython, py::arg("candidates"), + py::arg("reads")); +}