# Copyright 2010-2025 Google LLC # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Python wrapper for cp_model. load("@pip_deps//:requirements.bzl", "requirement") load("@pybind11_bazel//:build_defs.bzl", "pybind_extension") load("@rules_python//python:py_library.bzl", "py_library") load("@rules_python//python:py_test.bzl", "py_test") cc_library( name = "linear_expr_doc", hdrs = ["linear_expr_doc.h"], ) cc_library( name = "linear_expr", srcs = ["linear_expr.cc"], hdrs = ["linear_expr.h"], deps = [ "//ortools/sat:cp_model_cc_proto", "//ortools/sat:cp_model_utils", "//ortools/util:fp_roundtrip_conv", "//ortools/util:sorted_interval_list", "@abseil-cpp//absl/container:btree", "@abseil-cpp//absl/container:fixed_array", "@abseil-cpp//absl/container:flat_hash_map", "@abseil-cpp//absl/log:check", "@abseil-cpp//absl/strings", ], ) cc_library( name = "wrappers", srcs = ["wrappers.cc"], hdrs = ["wrappers.h"], deps = [ "@abseil-cpp//absl/base:nullability", "@abseil-cpp//absl/container:flat_hash_map", "@abseil-cpp//absl/container:flat_hash_set", "@abseil-cpp//absl/log", "@abseil-cpp//absl/log:check", "@abseil-cpp//absl/log:die_if_null", "@abseil-cpp//absl/strings", "@abseil-cpp//absl/types:span", "@protobuf", ], ) cc_binary( name = "gen_proto_builder_pybind11", srcs = ["gen_proto_builder_pybind11.cc"], deps = [ ":wrappers", "//ortools/base", "//ortools/sat:cp_model_cc_proto", "//ortools/sat:sat_parameters_cc_proto", "@abseil-cpp//absl/log:die_if_null", "@abseil-cpp//absl/strings:str_format", ], ) genrule( name = "run_gen_proto_builder_pybind11", outs = ["proto_builder_pybind11.h"], cmd = "$(location :gen_proto_builder_pybind11) > $@", tools = [":gen_proto_builder_pybind11"], ) cc_library( name = "proto_builder_pybind11", hdrs = ["proto_builder_pybind11.h"], ) pybind_extension( name = "cp_model_helper", srcs = ["cp_model_helper.cc"], visibility = ["//visibility:public"], deps = [ ":linear_expr", ":linear_expr_doc", ":proto_builder_pybind11", "//ortools/base:string_view_migration", "//ortools/sat:cp_model_cc_proto", "//ortools/sat:cp_model_utils", "//ortools/sat:sat_parameters_cc_proto", "//ortools/sat:swig_helper", "@abseil-cpp//absl/strings", ], ) py_test( name = "cp_model_helper_test", srcs = ["cp_model_helper_test.py"], deps = [ ":cp_model_helper", "//ortools/util/python:sorted_interval_list", requirement("absl-py"), ], ) py_library( name = "cp_model", srcs = ["cp_model.py"], visibility = ["//visibility:public"], deps = [ ":cp_model_helper", requirement("numpy"), requirement("pandas"), "//ortools/util/python:sorted_interval_list", ], ) py_test( name = "cp_model_test", srcs = ["cp_model_test.py"], deps = [ ":cp_model", ":cp_model_helper", requirement("absl-py"), requirement("numpy"), ], )