diff --git a/cmake/python.cmake b/cmake/python.cmake index 74d42c4b7c..5270dfedfb 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -165,7 +165,7 @@ if(BUILD_TESTING) search_python_module(virtualenv) # Testing using a vitual environment set(VENV_EXECUTABLE ${Python_EXECUTABLE} -m virtualenv) - set(VENV_DIR ${CMAKE_BINARY_DIR}/venv) + set(VENV_DIR ${PROJECT_BINARY_DIR}/python/venv) if(WIN32) set(VENV_Python_EXECUTABLE "${VENV_DIR}\\Scripts\\python.exe") else() diff --git a/examples/contrib/CMakeLists.txt b/examples/contrib/CMakeLists.txt index 236e080643..4f1bd84448 100644 --- a/examples/contrib/CMakeLists.txt +++ b/examples/contrib/CMakeLists.txt @@ -7,15 +7,31 @@ if(BUILD_CXX_EXAMPLES) endif() if(BUILD_PYTHON_EXAMPLES) - foreach(TEST IN ITEMS - assignment - costas_array - hidato - knapsack_cp - knapsack_mip - ) - add_test(py${TEST}_venv ${VENV_BIN_DIR}/python ${CMAKE_CURRENT_SOURCE_DIR}/${TEST}.py) - set_tests_properties(py${TEST}_venv PROPERTIES DEPENDS build_venv) + file(GLOB PYTHON_SRCS "*.py") + # Remove too long examples, or not working + # ISSUE: Seems to works using Makefile based build + # ???: not tested even in Makefile based build (i.e. unmaintained) + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/bacp.py") # need input + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/diet1.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/magic_sequence_sat.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/nontransitive_dice.py") # too long + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/project_scheduling_sat.py") # ??? + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/rostering_with_travel.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/scheduling_with_transitions_sat.py") # ??? + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/school_scheduling_sat.py") # too long + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/secret_santa.py") # too long + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/sports_schedule_sat.py") # ??? + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/stable_marriage.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/stable_marriage_sat.py") # ??? + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/steel.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/steel_lns.py") # ISSUE + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/wedding_optimal_chart.py") # ISSUE + # Not working everywhere since it rely on /usr/share/dict/words + list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/word_square.py") + foreach(FILE_NAME IN LISTS PYTHON_SRCS) + message(STATUS "Add python example: ${FILE_NAME}") + get_filename_component(NAME ${FILE_NAME} NAME_WE) + add_test(python_${NAME} ${VENV_Python_EXECUTABLE} ${FILE_NAME}) endforeach() install(DIRECTORY . diff --git a/examples/contrib/coins_grid.py b/examples/contrib/coins_grid.py index d316489ed4..52a8f45302 100644 --- a/examples/contrib/coins_grid.py +++ b/examples/contrib/coins_grid.py @@ -56,7 +56,7 @@ import sys from ortools.constraint_solver import pywrapcp -def main(n=31, c=14): +def main(n, c): # Create the solver. solver = pywrapcp.Solver("Coins grid") # data @@ -116,8 +116,8 @@ def main(n=31, c=14): if __name__ == "__main__": # data - n = 31 # the grid size - c = 14 # number of coins per row/column + n = 5 # the grid size + c = 2 # number of coins per row/column if len(sys.argv) > 1: n = int(sys.argv[1]) if len(sys.argv) > 2: diff --git a/examples/contrib/hidato.py b/examples/contrib/hidato.py index 742431ab31..23d5f3a0d2 100644 --- a/examples/contrib/hidato.py +++ b/examples/contrib/hidato.py @@ -205,7 +205,7 @@ def print_game(game, rows, cols): if __name__ == "__main__": # data - r = 5 + r = 3 c = r if len(sys.argv) > 1: r = int(sys.argv[1]) diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt index 47557c7ed6..6f4cdabbeb 100644 --- a/examples/python/CMakeLists.txt +++ b/examples/python/CMakeLists.txt @@ -2,3 +2,50 @@ if(NOT BUILD_PYTHON_EXAMPLES) return() endif() +file(GLOB PYTHON_SRCS "*.py") +# Remove too long examples, or not working +# ISSUE: Seems to works using Makefile based build +# ???: not tested even in Makefile based build (i.e. unmaintained) +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/appointments.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/arc_flow_cutting_stock_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/assignment_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/assignment_with_constraints_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/balance_group_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/bus_driver_scheduling_flow_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/bus_driver_scheduling_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/chemical_balance_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/clustering_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/cover_rectangle_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/cvrptw_plot.py") # ??? (depend on numpy) +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/jobshop_with_maintenance_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/nqueens_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/prize_collecting_tsp_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/flexible_job_shop_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/gate_scheduling_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/qubo_sat.py") # too long +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/hidato_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/jobshop_ft06_distance_sat.py") # ISSSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/jobshop_ft06_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/random_tsp.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/rcpsp_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/reallocate_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/shift_scheduling_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/single_machine_scheduling_with_setup_release_due_dates_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/steel_mill_slab_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/sudoku_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/task_allocation_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/tasks_and_workers_assignment_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/tsp_sat.py") # ??? +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/vendor_scheduling_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/wedding_optimal_chart_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/worker_schedule_sat.py") # ISSUE +list(FILTER PYTHON_SRCS EXCLUDE REGEX ".*/zebra_sat.py") # ISSUE + +foreach(FILE_NAME IN LISTS PYTHON_SRCS) + get_filename_component(NAME ${FILE_NAME} NAME_WE) + add_test(python_${NAME} ${VENV_Python_EXECUTABLE} ${FILE_NAME}) +endforeach() + +install(DIRECTORY . + DESTINATION ${CMAKE_INSTALL_DATADIR}/ortools/examples/python + FILES_MATCHING PATTERN "*.py")