Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .github/workflows/main_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ jobs:
include:
- image: ubuntu-latest
platform: linux
- image: macos-13
- image: macos-15-intel
platform: macos-intel
- image: macos-14
- image: macos-latest
platform: macos-arm
- image: windows-latest
platform: windows

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive

Expand Down Expand Up @@ -62,19 +62,19 @@ jobs:

- name: Build wheels
if: matrix.platform != 'macos-arm'
uses: pypa/cibuildwheel@v2.19.2
uses: pypa/cibuildwheel@v3.3.1
env:
MACOSX_DEPLOYMENT_TARGET: 13.0
CC: gcc-13
CXX: g++-13
MACOSX_DEPLOYMENT_TARGET: 15.0
CC: gcc-15
CXX: g++-15

- name: Build wheels
if: matrix.platform == 'macos-arm'
uses: pypa/cibuildwheel@v2.19.2
uses: pypa/cibuildwheel@v3.3.1
env:
MACOSX_DEPLOYMENT_TARGET: 14.0
CC: gcc-13
CXX: g++-13
MACOSX_DEPLOYMENT_TARGET: 15.0
CC: gcc-15
CXX: g++-15

- name: Verify clean directory
run: git diff --exit-code
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:

- uses: actions/setup-python@v5
with:
python-version: "3.9"
python-version: "3.10"

- name: "Install system dependencies"
run: sudo apt update -y && sudo apt install -y libssl-dev libasio-dev
Expand Down
40 changes: 21 additions & 19 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,17 @@ jobs:
name: sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Build sdist
run: pipx run build --sdist

- name: Check metadata
run: pipx run twine check dist/*

- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v6
with:
overwrite: true
path: dist/*.tar.gz

build_wheels:
Expand All @@ -33,15 +34,15 @@ jobs:
include:
- image: ubuntu-latest
platform: linux
- image: macos-13
- image: macos-15-intel
platform: macos-intel
- image: macos-14
- image: macos-15
platform: macos-arm
- image: windows-latest
platform: windows

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive

Expand Down Expand Up @@ -73,10 +74,10 @@ jobs:
conan install --build=openssl --install-folder conan_build .

- name: Set up QEMU
if: matrix.platform == 'linux'
if: matrix.platform == 'linux' && runner.arch == 'X64'
uses: docker/setup-qemu-action@v3
with:
platforms: all
env:
CIBW_ARCHS_LINUX: ${{ runner.arch == 'X64' && 'auto ppc64le s390x' || 'auto' }}

- name: Set version
if: matrix.platform != 'macos-arm' && matrix.platform != 'macos-intel'
Expand All @@ -90,24 +91,25 @@ jobs:

- name: Build wheels
if: matrix.platform != 'macos-arm'
uses: pypa/cibuildwheel@v2.19.2
uses: pypa/cibuildwheel@v3.3.1
env:
MACOSX_DEPLOYMENT_TARGET: 13.0
CC: gcc-14
CXX: g++-14
MACOSX_DEPLOYMENT_TARGET: 15.0
CC: gcc-15
CXX: g++-15

- name: Build wheels
if: matrix.platform == 'macos-arm'
uses: pypa/cibuildwheel@v2.19.2
uses: pypa/cibuildwheel@v3.3.1
env:
MACOSX_DEPLOYMENT_TARGET: 14.0
CC: gcc-14
CXX: g++-14
MACOSX_DEPLOYMENT_TARGET: 15.0
CC: gcc-15
CXX: g++-15

- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
path: wheelhouse/*.whl
overwrite: true
path: '*/pyvroom-*.whl'

upload:
name: upload
Expand All @@ -117,7 +119,7 @@ jobs:
steps:
- uses: actions/setup-python@v5

- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5
with:
name: artifact
path: dist
Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ exclude = '''

[tool.cibuildwheel]
test-command = 'python -c "import vroom"'
build = "cp3{9,10,11,12}-*"
build = "cp3{10,11,12,13,14}-*"
skip = "*musllinux*"
archs = "native"
manylinux-x86_64-image = "quay.io/pypa/manylinux_2_28_x86_64"
manylinux-aarch64-image = "quay.io/pypa/manylinux_2_28_aarch64"
manylinux-x86_64-image = "quay.io/pypa/manylinux_2_34_x86_64"
manylinux-aarch64-image = "quay.io/pypa/manylinux_2_34_aarch64"

[tool.cibuildwheel.linux]
before-all = """
Expand Down
26 changes: 23 additions & 3 deletions src/bind/input/input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ void init_input(py::module_ &m) {
py::arg("apply_TSPFix") = false)
.def_readonly("jobs", &vroom::Input::jobs)
.def_readonly("vehicles", &vroom::Input::vehicles)
.def_readonly("job_id_to_rank", &vroom::Input::job_id_to_rank)
.def_readonly("pickup_id_to_rank", &vroom::Input::pickup_id_to_rank)
.def_readonly("delivery_id_to_rank", &vroom::Input::delivery_id_to_rank)
.def_readonly("compatible_vehicles_for_job", &vroom::Input::compatible_vehicles_for_job)
.def("_from_json", &vroom::io::parse, py::arg("json_string"),
py::arg("geometry"))
.def("_set_geometry", &vroom::Input::set_geometry)
Expand All @@ -44,20 +48,36 @@ void init_input(py::module_ &m) {
vroom::Matrix<vroom::UserCost> &m) {
self.set_costs_matrix(profile, std::move(m));
})
.def("zero_amount", &vroom::Input::zero_amount)
.def("apply_TSPFix", &vroom::Input::apply_TSPFix)
.def("is_used_several_times", &vroom::Input::is_used_several_times)
.def("has_skills", &vroom::Input::has_skills)
.def("has_jobs", &vroom::Input::has_jobs)
.def("has_shipments", &vroom::Input::has_shipments)
.def("report_distances", &vroom::Input::report_distances)
.def("get_cost_upper_bound", &vroom::Input::get_cost_upper_bound)
.def("all_locations_have_coords", &vroom::Input::all_locations_have_coords)
.def("jobs_vehicles_evals", &vroom::Input::jobs_vehicles_evals)
.def("has_homogeneous_locations",
&vroom::Input::has_homogeneous_locations)
.def("has_homogeneous_profiles", &vroom::Input::has_homogeneous_profiles)
.def("has_homogeneous_costs", &vroom::Input::has_homogeneous_costs)
.def("has_initial_routes", &vroom::Input::has_initial_routes)
.def("vehicle_ok_with_job", &vroom::Input::has_initial_routes)
.def("vehicle_ok_with_vehicle", &vroom::Input::has_initial_routes)
.def("_solve",
[](vroom::Input &self, unsigned exploration_level, unsigned nb_threads, const vroom::Timeout& timeout, const std::vector<vroom::HeuristicParameters> h_param) {
return self.solve(exploration_level, nb_threads, timeout, h_param);
[](vroom::Input &self, unsigned exploration_level, unsigned nb_threads, const vroom::Timeout& timeout) {
return self.solve(exploration_level, nb_threads, timeout);
},
"Solve routing problem",
py::arg("exploration_level"), py::arg("nb_threads"), py::arg("timeout"), py::arg("h_param")
py::arg("exploration_level"), py::arg("nb_threads"), py::arg("timeout")
)
.def("_solve",
[](vroom::Input &self, unsigned nb_searches, unsigned depth, unsigned nb_threads, const vroom::Timeout& timeout) {
return self.solve(nb_searches, depth, nb_threads, timeout);
},
"Solve routing problem",
py::arg("nb_searches"), py::arg("depth"), py::arg("nb_threads"), py::arg("timeout")
)
.def("check", &vroom::Input::check);
}
30 changes: 19 additions & 11 deletions src/bind/job.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,40 +9,48 @@ namespace py = pybind11;
void init_job(py::module_ &m) {

py::class_<vroom::Job>(m, "Job")
.def(py::init<vroom::Id, vroom::Location &, vroom::Duration,
vroom::Duration, vroom::Amount &, vroom::Amount &,
.def(py::init<vroom::Id, vroom::Location &, vroom::UserDuration,
vroom::UserDuration, vroom::Amount &, vroom::Amount &,
vroom::Skills &, vroom::Priority,
std::vector<vroom::TimeWindow> &, std::string &>(),
std::vector<vroom::TimeWindow> &, std::string &, vroom::TypeToUserDurationMap &, vroom::TypeToUserDurationMap>(),
"Regular one-stop job.", py::arg("id"), py::arg("location"),
py::arg("setup") = 0, py::arg("service") = 0,
py::arg("default_setup") = 0, py::arg("default_service") = 0,
py::arg("delivery") = vroom::Amount(0),
py::arg("pickup") = vroom::Amount(0),
py::arg("skills") = vroom::Skills(), py::arg("priority") = 0,
py::arg("tws") =
std::vector<vroom::TimeWindow>(1, vroom::TimeWindow()),
py::arg("description") = "")
py::arg("description") = "",
py::arg("setup_per_type") = vroom::TypeToUserDurationMap(),
py::arg("service_per_type") = vroom::TypeToUserDurationMap())
.def(py::init<vroom::Id, vroom::JOB_TYPE, vroom::Location &,
vroom::Duration, vroom::Duration, vroom::Amount &,
vroom::Skills &, vroom::Priority,
std::vector<vroom::TimeWindow> &, std::string &>(),
std::vector<vroom::TimeWindow> &, std::string &, vroom::TypeToUserDurationMap &, vroom::TypeToUserDurationMap &>(),
"Pickup and delivery job.", py::arg("id"), py::arg("type"),
py::arg("location"), py::arg("setup") = 0, py::arg("service") = 0,
py::arg("location"), py::arg("default_setup") = 0, py::arg("default_service") = 0,
py::arg("amount") = vroom::Amount(0),
py::arg("skills") = vroom::Skills(), py::arg("priority") = 0,
py::arg("tws") =
std::vector<vroom::TimeWindow>(1, vroom::TimeWindow()),
py::arg("description") = "")
py::arg("description") = "",
py::arg("setup_per_type") = vroom::TypeToUserDurationMap(),
py::arg("service_per_type") = vroom::TypeToUserDurationMap())
.def("index", &vroom::Job::index)
.def("is_valid_start", &vroom::Job::is_valid_start)
.def_readonly("_id", &vroom::Job::id)
.def_readwrite("_location", &vroom::Job::location)
.def_readonly("_type", &vroom::Job::type)
.def_readonly("_setup", &vroom::Job::setup)
.def_readonly("_service", &vroom::Job::service)
.def_readonly("_default_setup", &vroom::Job::default_setup)
.def_readonly("_default_service", &vroom::Job::default_service)
.def_readonly("_delivery", &vroom::Job::delivery)
.def_readonly("_pickup", &vroom::Job::pickup)
.def_readonly("_skills", &vroom::Job::skills)
.def_readonly("_priority", &vroom::Job::priority)
.def_readonly("_time_windows", &vroom::Job::tws)
.def_readonly("_description", &vroom::Job::description);
.def_readonly("_description", &vroom::Job::description)
.def_readonly("_setup_per_type", &vroom::Job::setup_per_type)
.def_readonly("_service_per_type", &vroom::Job::service_per_type)
.def_readonly("_setups", &vroom::Job::setups)
.def_readonly("_services", &vroom::Job::services);
}
3 changes: 2 additions & 1 deletion src/bind/solution/step.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ void init_step(py::module_ &m) {

py::class_<vroom::Step>(m, "Step")
.def(py::init<vroom::STEP_TYPE, vroom::Location, vroom::Amount>())
.def(py::init<vroom::Job, vroom::Duration, vroom::Amount>())
.def(py::init<vroom::Job, vroom::UserDuration, vroom::UserDuration, vroom::Amount>())
.def(py::init<vroom::Break, vroom::Amount>())
.def("_departure", &vroom::Step::departure)
.def_readonly("_step_type", &vroom::Step::step_type)
.def_readonly("_job_type", &vroom::Step::job_type)
.def_readonly("_location", &vroom::Step::location)
Expand Down
10 changes: 8 additions & 2 deletions src/bind/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@

void init_utils(py::module_ &m) {

m.def("scale_from_user_duration", &vroom::utils::scale_from_user_duration,
py::arg("duration"));
m.def("scale_from_user_duration", [](vroom::UserDuration d) {
return vroom::utils::scale_from_user_duration(d);
}, py::arg("user_duration"));
m.def("scale_from_user_duration", [](vroom::TypeToUserDurationMap& d) {
return vroom::utils::scale_from_user_duration(d);
}, py::arg("duration_per_type"));
m.def("scale_to_user_duration", &vroom::utils::scale_to_user_duration,
py::arg("duration"));
m.def("scale_from_user_cost", &vroom::utils::scale_from_user_cost,
py::arg("user_cost"));
m.def("scale_to_user_cost", &vroom::utils::scale_to_user_cost,
py::arg("cost"));
}
2 changes: 1 addition & 1 deletion vroom
Submodule vroom updated 185 files
Loading