diff --git a/ortools/linear_solver/proto_solver/BUILD.bazel b/ortools/linear_solver/proto_solver/BUILD.bazel index 98e396c86c..2d1bd47b97 100644 --- a/ortools/linear_solver/proto_solver/BUILD.bazel +++ b/ortools/linear_solver/proto_solver/BUILD.bazel @@ -15,13 +15,34 @@ load("@rules_cc//cc:cc_library.bzl", "cc_library") package(default_visibility = ["//visibility:public"]) +cc_library( + name = "preprocessor", + srcs = ["preprocessor.cc"], + hdrs = ["preprocessor.h"], + deps = [ + "//ortools/glop:preprocessor", + "//ortools/lp_data", + "//ortools/lp_data:base", + "//ortools/lp_data:lp_utils", + "//ortools/lp_data:sparse", + "//ortools/lp_data:sparse_column", + "//ortools/util:fp_utils", + "//ortools/util:return_macros", + "//ortools/util:stats", + "@abseil-cpp//absl/log", + "@abseil-cpp//absl/log:check", + ], +) + cc_library( name = "proto_utils", hdrs = ["proto_utils.h"], - visibility = ["//visibility:public"], deps = [ + "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/port:proto_utils", + "@abseil-cpp//absl/log", "@abseil-cpp//absl/log:check", + "@abseil-cpp//absl/status:statusor", "@protobuf", ], ) @@ -56,6 +77,7 @@ cc_library( hdrs = ["pdlp_proto_solver.h"], deps = [ "//ortools/base:logging", + "//ortools/base:status_macros", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/linear_solver:model_validator", "//ortools/pdlp:iteration_stats", @@ -78,9 +100,12 @@ cc_library( "//ortools/glop:parameters_cc_proto", "//ortools/glop:preprocessor", "//ortools/linear_solver:linear_solver_cc_proto", + "//ortools/lp_data", + "//ortools/lp_data:base", "//ortools/lp_data:proto_utils", "//ortools/util:logging", - "@abseil-cpp//absl/memory", + "//ortools/util:time_limit", + "@abseil-cpp//absl/log:check", ], ) @@ -118,7 +143,7 @@ cc_library( srcs = ["scip_params.cc"], hdrs = ["scip_params.h"], deps = [ - "//ortools/base:logging", + "//ortools/base", "//ortools/linear_solver:scip_helper_macros", "@abseil-cpp//absl/status", "@abseil-cpp//absl/strings", @@ -136,16 +161,19 @@ cc_library( "//conditions:default": [], }), deps = [ - "//ortools/base", + ":scip_params", + "//ortools/base:status_macros", "//ortools/base:timer", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/linear_solver:model_validator", "//ortools/linear_solver:scip_helper_macros", - "//ortools/linear_solver/proto_solver:scip_params", "//ortools/util:lazy_mutable_copy", + "@abseil-cpp//absl/base:core_headers", "@abseil-cpp//absl/cleanup", "@abseil-cpp//absl/container:btree", + "@abseil-cpp//absl/flags:flag", "@abseil-cpp//absl/log", + "@abseil-cpp//absl/log:check", "@abseil-cpp//absl/status", "@abseil-cpp//absl/status:statusor", "@abseil-cpp//absl/strings", @@ -162,6 +190,7 @@ cc_library( srcs = ["gurobi_proto_solver.cc"], hdrs = ["gurobi_proto_solver.h"], deps = [ + "//ortools/base:status_macros", "//ortools/base:timer", "//ortools/linear_solver:gurobi_util", "//ortools/linear_solver:linear_solver_cc_proto", @@ -177,7 +206,6 @@ cc_library( "@abseil-cpp//absl/strings", "@abseil-cpp//absl/strings:str_format", "@abseil-cpp//absl/time", - "@abseil-cpp//absl/types:optional", ], ) @@ -193,28 +221,13 @@ cc_library( "//ortools/base:timer", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/linear_solver:model_validator", - "//ortools/port:proto_utils", "//ortools/util:lazy_mutable_copy", + "@abseil-cpp//absl/status", "@abseil-cpp//absl/status:statusor", + "@abseil-cpp//absl/strings", + "@abseil-cpp//absl/time", + "@abseil-cpp//absl/types:optional", "@highs", - ], -) - -cc_library( - name = "preprocessor", - srcs = ["preprocessor.cc"], - hdrs = ["preprocessor.h"], - deps = [ - "//ortools/glop:preprocessor", - "//ortools/lp_data", - "//ortools/lp_data:base", - "//ortools/lp_data:lp_utils", - "//ortools/lp_data:sparse", - "//ortools/lp_data:sparse_column", - "//ortools/util:fp_utils", - "//ortools/util:return_macros", - "//ortools/util:stats", - "@abseil-cpp//absl/log", - "@abseil-cpp//absl/log:check", + "@protobuf", ], ) diff --git a/ortools/linear_solver/python/BUILD.bazel b/ortools/linear_solver/python/BUILD.bazel index 78163a0d84..88c31d7503 100644 --- a/ortools/linear_solver/python/BUILD.bazel +++ b/ortools/linear_solver/python/BUILD.bazel @@ -11,22 +11,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Python wrapper for model_builder. load("@pip_deps//:requirements.bzl", "requirement") load("@pybind11_bazel//:build_defs.bzl", "pybind_extension") load("@rules_python//python:py_binary.bzl", "py_binary") load("@rules_python//python:py_library.bzl", "py_library") load("@rules_python//python:py_test.bzl", "py_test") +# Python wrapper for model_builder. pybind_extension( name = "model_builder_helper", srcs = ["model_builder_helper.cc"], visibility = ["//visibility:public"], deps = [ + "//ortools/base:logging", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/linear_solver:model_exporter", "//ortools/linear_solver/wrappers:model_builder_helper", + "@abseil-cpp//absl/hash", + "@abseil-cpp//absl/log:check", "@abseil-cpp//absl/strings", + "@abseil-cpp//absl/types:span", "@eigen", "@pybind11_protobuf//pybind11_protobuf:native_proto_caster", ], @@ -41,11 +45,10 @@ py_test( ], deps = [ ":model_builder_helper", - ":model_builder_numbers", - "//ortools/linear_solver:linear_solver_py_pb2", requirement("absl-py"), requirement("numpy"), requirement("scipy"), + "//ortools/linear_solver:linear_solver_py_pb2", ], ) @@ -80,18 +83,22 @@ py_test( ], deps = [ ":model_builder", + ":model_builder_helper", + "@protobuf//:protobuf_python", requirement("absl-py"), + requirement("numpy"), requirement("pandas"), "//ortools/linear_solver:linear_solver_py_pb2", ], ) +## Proto solver + py_binary( name = "solve_model", srcs = ["solve_model.py"], deps = [ ":model_builder", requirement("absl-py"), - "//ortools/linear_solver:linear_solver_py_pb2", ], ) diff --git a/ortools/linear_solver/samples/BUILD.bazel b/ortools/linear_solver/samples/BUILD.bazel index 4291500825..7bf8a21dfe 100644 --- a/ortools/linear_solver/samples/BUILD.bazel +++ b/ortools/linear_solver/samples/BUILD.bazel @@ -11,49 +11,282 @@ # See the License for the specific language governing permissions and # limitations under the License. -load(":code_samples.bzl", "code_sample_cc", "code_sample_java", "code_sample_py") +load("@pip_deps//:requirements.bzl", "requirement") +load("@rules_cc//cc:cc_test.bzl", "cc_test") +load("@rules_java//java:java_binary.bzl", "java_binary") +load("@rules_python//python:py_test.bzl", "py_test") +load("//bazel:run_binary_test.bzl", "run_binary_test") # Linear Solver -code_sample_cc(name = "assignment_mip") -code_sample_cc(name = "basic_example") +cc_test( + name = "assignment_mip_test", + srcs = ["assignment_mip.cc"], + deps = [ + "//ortools/base", + "//ortools/base:logging", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) -code_sample_cc(name = "bin_packing_mip") +cc_test( + name = "assignment_groups_mip_test", + srcs = ["assignment_groups_mip.cc"], + deps = [ + "//ortools/base", + "//ortools/base:logging", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + "@abseil-cpp//absl/strings:str_format", + ], +) -code_sample_cc(name = "integer_programming_example") +cc_test( + name = "assignment_task_sizes_mip_test", + srcs = ["assignment_task_sizes_mip.cc"], + deps = [ + "//ortools/base", + "//ortools/base:logging", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + "@abseil-cpp//absl/strings:str_format", + ], +) -code_sample_cc(name = "linear_programming_example") +cc_test( + name = "assignment_teams_mip_test", + srcs = ["assignment_teams_mip.cc"], + deps = [ + "//ortools/base", + "//ortools/base:logging", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + "@abseil-cpp//absl/strings:str_format", + ], +) -code_sample_cc(name = "mip_var_array") +cc_test( + name = "basic_example_test", + srcs = ["basic_example.cc"], + deps = [ + "//ortools/base", + "//ortools/init", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log", + "@abseil-cpp//absl/log:globals", + ], +) -code_sample_cc(name = "multiple_knapsack_mip") +cc_test( + name = "bin_packing_mip_test", + srcs = ["bin_packing_mip.cc"], + deps = ["//ortools/linear_solver"], +) -#code_sample_cc(name = "network_design_ilph") +cc_test( + name = "linear_programming_example_test", + srcs = ["linear_programming_example.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) -code_sample_cc(name = "simple_lp_program") +cc_test( + name = "integer_programming_example_test", + srcs = ["integer_programming_example.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) -code_sample_cc(name = "simple_mip_program") +cc_test( + name = "mip_var_array_test", + srcs = ["mip_var_array.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) -code_sample_cc(name = "stigler_diet") +cc_test( + name = "multiple_knapsack_mip_test", + srcs = ["multiple_knapsack_mip.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + "@abseil-cpp//absl/strings:str_format", + ], +) + +cc_test( + name = "simple_lp_program_test", + srcs = ["simple_lp_program.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) + +cc_test( + name = "simple_mip_program_test", + srcs = ["simple_mip_program.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log:globals", + ], +) + +cc_test( + name = "stigler_diet_test", + srcs = ["stigler_diet.cc"], + deps = [ + "//ortools/base", + "//ortools/linear_solver", + "@abseil-cpp//absl/base:log_severity", + "@abseil-cpp//absl/log", + "@abseil-cpp//absl/log:globals", + ], +) # Model Builder -code_sample_java(name = "AssignmentMb") +py_test( + name = "assignment_mb_py3", + srcs = ["assignment_mb.py"], + main = "assignment_mb.py", + deps = [ + requirement("pandas"), + "//ortools/linear_solver/python:model_builder", + ], +) -code_sample_java(name = "BinPackingMb") +py_test( + name = "bin_packing_mb_py3", + srcs = ["bin_packing_mb.py"], + main = "bin_packing_mb.py", + deps = [ + requirement("pandas"), + "//ortools/linear_solver/python:model_builder", + ], +) -code_sample_java(name = "CloneModelMb") +py_test( + name = "clone_model_mb_py3", + srcs = ["clone_model_mb.py"], + main = "clone_model_mb.py", + deps = ["//ortools/linear_solver/python:model_builder"], +) -code_sample_java(name = "SimpleLpProgramMb") +py_test( + name = "simple_lp_program_mb_py3", + srcs = ["simple_lp_program_mb.py"], + main = "simple_lp_program_mb.py", + deps = ["//ortools/linear_solver/python:model_builder"], +) -code_sample_java(name = "SimpleMipProgramMb") +py_test( + name = "simple_mip_program_mb_py3", + srcs = ["simple_mip_program_mb.py"], + main = "simple_mip_program_mb.py", + deps = ["//ortools/linear_solver/python:model_builder"], +) -code_sample_py(name = "assignment_mb") +java_binary( + name = "AssignmentMb", + srcs = ["AssignmentMb.java"], + main_class = "com.google.ortools.linearsolver.samples.AssignmentMb", + deps = [ + "//ortools/java/com/google/ortools:Loader", + "//ortools/java/com/google/ortools/modelbuilder", + "//ortools/linear_solver/java:modelbuilder", + ], +) -code_sample_py(name = "bin_packing_mb") +run_binary_test( + name = "AssignmentMbTest", + binary = ":AssignmentMb", +) -code_sample_py(name = "clone_model_mb") +java_binary( + name = "BinPackingMb", + srcs = ["BinPackingMb.java"], + main_class = "com.google.ortools.linearsolver.samples.BinPackingMb", + deps = [ + "//ortools/java/com/google/ortools:Loader", + "//ortools/java/com/google/ortools/modelbuilder", + "//ortools/linear_solver/java:modelbuilder", + ], +) -code_sample_py(name = "simple_lp_program_mb") +run_binary_test( + name = "BinPackingMbTest", + binary = ":BinPackingMb", +) -code_sample_py(name = "simple_mip_program_mb") +java_binary( + name = "CloneModelMb", + srcs = ["CloneModelMb.java"], + main_class = "com.google.ortools.linearsolver.samples.CloneModelMb", + deps = [ + "//ortools/java/com/google/ortools:Loader", + "//ortools/java/com/google/ortools/modelbuilder", + "//ortools/linear_solver/java:modelbuilder", + ], +) + +run_binary_test( + name = "CloneModelMbTest", + binary = ":CloneModelMb", +) + +java_binary( + name = "SimpleLpProgramMb", + srcs = ["SimpleLpProgramMb.java"], + main_class = "com.google.ortools.linearsolver.samples.SimpleLpProgramMb", + deps = [ + "//ortools/java/com/google/ortools:Loader", + "//ortools/java/com/google/ortools/modelbuilder", + "//ortools/linear_solver/java:modelbuilder", + ], +) + +run_binary_test( + name = "SimpleLpProgramMbTest", + binary = ":SimpleLpProgramMb", +) + +java_binary( + name = "SimpleMipProgramMb", + srcs = ["SimpleMipProgramMb.java"], + main_class = "com.google.ortools.linearsolver.samples.SimpleMipProgramMb", + deps = [ + "//ortools/java/com/google/ortools:Loader", + "//ortools/java/com/google/ortools/modelbuilder", + "//ortools/linear_solver/java:modelbuilder", + ], +) + +run_binary_test( + name = "SimpleMipProgramMbTest", + binary = ":SimpleMipProgramMb", +) diff --git a/ortools/linear_solver/samples/code_samples.bzl b/ortools/linear_solver/samples/code_samples.bzl deleted file mode 100644 index 5b387375d0..0000000000 --- a/ortools/linear_solver/samples/code_samples.bzl +++ /dev/null @@ -1,93 +0,0 @@ -# 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. - -"""Helper macro to compile and test code samples.""" - -load("@pip_deps//:requirements.bzl", "requirement") -load("@rules_cc//cc:cc_binary.bzl", "cc_binary") -load("@rules_cc//cc:cc_test.bzl", "cc_test") -load("@rules_java//java:java_test.bzl", "java_test") -load("@rules_python//python:py_binary.bzl", "py_binary") -load("@rules_python//python:py_test.bzl", "py_test") - -def code_sample_cc(name): - cc_binary( - name = name + "_cc", - srcs = [name + ".cc"], - deps = [ - "//ortools/base", - "//ortools/init", - "//ortools/linear_solver", - "//ortools/linear_solver:linear_solver_cc_proto", - ], - ) - - cc_test( - name = name + "_cc_test", - size = "small", - srcs = [name + ".cc"], - deps = [ - ":" + name + "_cc", - "//ortools/base", - "//ortools/init", - "//ortools/linear_solver", - "//ortools/linear_solver:linear_solver_cc_proto", - ], - ) - -def code_sample_py(name): - py_binary( - name = name + "_py3", - srcs = [name + ".py"], - main = name + ".py", - deps = [ - requirement("absl-py"), - requirement("protobuf"), - requirement("numpy"), - requirement("pandas"), - "//ortools/init/python:init", - "//ortools/linear_solver/python:model_builder", - ], - ) - - py_test( - name = name + "_py_test", - size = "small", - srcs = [name + ".py"], - main = name + ".py", - data = [ - "//ortools/init/python:init", - "//ortools/linear_solver/python:model_builder", - ], - deps = [ - requirement("absl-py"), - requirement("protobuf"), - requirement("numpy"), - requirement("pandas"), - ], - ) - -def code_sample_java(name): - java_test( - name = name + "_java_test", - size = "small", - srcs = [name + ".java"], - main_class = "com.google.ortools.linearsolver.samples." + name, - test_class = "com.google.ortools.linearsolver.samples." + name, - deps = [ - "//ortools/init/java:init", - "//ortools/linear_solver/java:modelbuilder", - "//ortools/java/com/google/ortools/modelbuilder", - "//ortools/java/com/google/ortools:Loader", - ], - )