-
Notifications
You must be signed in to change notification settings - Fork 277
Description
Following the in-person SCIP meeting of 2025, a discussion on using AI to wrap the missing SCIP methods came around. It can be frustrating for an experienced SCIP user to find that their favorite SCIP method is not available in their favorite SCIP interface. Until now, the workflow has been to incrementally add such methods, always accompanied by a proper test. But, with the proliferation of AI agents, some suggested the automatic wrapping of all SCIP methods into PySCIPOpt, so that the problems mentioned earlier disappear.
I have some qualms with this approach, primarily with the lack of testing it would entail. Either we trust that all the methods are usable and SCIP has no bugs, or we also trust AI to write the tests (and it then takes 5 times longer to run all tests for merging PRs). Another big downside is that the compilation speed would be significantly affected, making development much more difficult.
Perhaps a good middle ground would be to choose a small section where PySCIPOpt is lacking (for example, tree management or solution metadata).
Anyway, here's an AI (of course) analysis of the missing methods in PySCIPOpt. Please give your insights on all this!
- Total SCIP public functions: 3766
- Already wrapped: 564 (15.0%)
- Missing (to wrap): 2223 (59.0%)
- Ignored (not applicable): 979 (26.0%)
Coverage by Header File
| Header | Total | Wrapped | Missing | Coverage |
|---|---|---|---|---|
scip_var.h |
197 | 37 | 160 | 18.8% |
pub_var.h |
205 | 45 | 160 | 22.0% |
scip_solvingstats.h |
166 | 22 | 144 | 13.3% |
pub_cons.h |
130 | 18 | 112 | 13.8% |
pub_expr.h |
103 | 4 | 99 | 3.9% |
scip_cons.h |
82 | 15 | 67 | 18.3% |
scip_expr.h |
67 | 3 | 64 | 4.5% |
scip_lp.h |
99 | 42 | 57 | 42.4% |
pub_heur.h |
59 | 3 | 56 | 5.1% |
scip_numerics.h |
82 | 27 | 55 | 32.9% |
pub_benders.h |
62 | 7 | 55 | 11.3% |
scip_nlp.h |
59 | 7 | 52 | 11.9% |
scip_sol.h |
81 | 29 | 52 | 35.8% |
scip_prob.h |
93 | 44 | 49 | 47.3% |
scip_branch.h |
50 | 11 | 39 | 22.0% |
scip_datastructures.h |
38 | 0 | 38 | 0.0% |
pub_matrix.h |
37 | 0 | 37 | 0.0% |
pub_prop.h |
38 | 1 | 37 | 2.6% |
pub_misc_rowprep.h |
34 | 0 | 34 | 0.0% |
pub_sepa.h |
33 | 1 | 32 | 3.0% |
scip_param.h |
48 | 17 | 31 | 35.4% |
scip_benders.h |
44 | 15 | 29 | 34.1% |
scip_nlpi.h |
29 | 0 | 29 | 0.0% |
pub_lp.h |
65 | 36 | 29 | 55.4% |
scip_conflict.h |
26 | 0 | 26 | 0.0% |
scip_copy.h |
30 | 5 | 25 | 16.7% |
pub_sol.h |
27 | 2 | 25 | 7.4% |
pub_dcmp.h |
23 | 0 | 23 | 0.0% |
pub_event.h |
30 | 7 | 23 | 23.3% |
pub_presol.h |
24 | 1 | 23 | 4.2% |
scip_cut.h |
30 | 9 | 21 | 30.0% |
pub_nlhdlr.h |
20 | 0 | 20 | 0.0% |
pub_paramset.h |
27 | 8 | 19 | 29.6% |
pub_reopt.h |
19 | 0 | 19 | 0.0% |
pub_branch.h |
20 | 2 | 18 | 10.0% |
pub_relax.h |
19 | 1 | 18 | 5.3% |
scip_datatree.h |
16 | 0 | 16 | 0.0% |
scip_prop.h |
17 | 1 | 16 | 5.9% |
scip_reopt.h |
16 | 0 | 16 | 0.0% |
scip_timing.h |
19 | 4 | 15 | 21.1% |
scip_general.h |
24 | 10 | 14 | 41.7% |
scip_probing.h |
28 | 14 | 14 | 50.0% |
scip_nodesel.h |
14 | 1 | 13 | 7.1% |
scip_sepa.h |
15 | 2 | 13 | 13.3% |
pub_disp.h |
13 | 0 | 13 | 0.0% |
pub_nlpi.h |
13 | 0 | 13 | 0.0% |
pub_pricer.h |
14 | 1 | 13 | 7.1% |
pub_tree.h |
26 | 13 | 13 | 50.0% |
scip_heur.h |
14 | 2 | 12 | 14.3% |
pub_benderscut.h |
13 | 1 | 12 | 7.7% |
pub_compr.h |
12 | 0 | 12 | 0.0% |
scip_compr.h |
11 | 0 | 11 | 0.0% |
scip_cutsel.h |
12 | 1 | 11 | 8.3% |
scip_presol.h |
12 | 1 | 11 | 8.3% |
scip_pricer.h |
15 | 4 | 11 | 26.7% |
scip_solve.h |
19 | 8 | 11 | 42.1% |
scip_tree.h |
31 | 20 | 11 | 64.5% |
pub_cutpool.h |
11 | 0 | 11 | 0.0% |
scip_event.h |
18 | 8 | 10 | 44.4% |
scip_relax.h |
12 | 2 | 10 | 16.7% |
pub_network.h |
10 | 0 | 10 | 0.0% |
scip_dcmp.h |
9 | 0 | 9 | 0.0% |
pub_conflict.h |
9 | 0 | 9 | 0.0% |
pub_datatree.h |
9 | 0 | 9 | 0.0% |
pub_implics.h |
9 | 0 | 9 | 0.0% |
pub_cutsel.h |
9 | 1 | 8 | 11.1% |
pub_iisfinder.h |
16 | 8 | 8 | 50.0% |
pub_misc_linear.h |
11 | 3 | 8 | 27.3% |
pub_nodesel.h |
9 | 1 | 8 | 11.1% |
pub_table.h |
8 | 0 | 8 | 0.0% |
pub_reader.h |
8 | 1 | 7 | 12.5% |
scip_disp.h |
6 | 0 | 6 | 0.0% |
scip_iisfinder.h |
10 | 4 | 6 | 40.0% |
scip_reader.h |
9 | 3 | 6 | 33.3% |
pub_bandit.h |
5 | 0 | 5 | 0.0% |
scip_bandit.h |
4 | 0 | 4 | 0.0% |
scip_randnumgen.h |
4 | 0 | 4 | 0.0% |
scip_table.h |
4 | 0 | 4 | 0.0% |
pub_bandit_exp3.h |
4 | 0 | 4 | 0.0% |
pub_nlp.h |
12 | 8 | 4 | 66.7% |
pub_bandit_epsgreedy.h |
3 | 0 | 3 | 0.0% |
pub_bandit_ucb.h |
3 | 0 | 3 | 0.0% |
pub_bandit_exp3ix.h |
2 | 0 | 2 | 0.0% |
scip_lpexact.h |
24 | 0 | 24 | 0.0% |
scip_certificate.h |
13 | 0 | 13 | 0.0% |
pub_lpexact.h |
1 | 0 | 1 | 0.0% |
Ignored Files
These files contain functions that are not applicable for Python wrapping:
| Header | Functions | Reason |
|---|---|---|
pub_misc_sort.h |
377 | Sorting utilities - use Python built-ins (sorted, list.sort) |
pub_misc_select.h |
242 | Selection utilities - use Python built-ins (heapq, sorted) |
pub_misc.h |
228 | General C utilities (memory, strings, arrays) - use Python built-ins |
pub_message.h |
28 | Message handling - already wrapped via Model methods |
pub_dialog.h |
24 | Interactive dialog system - not applicable to Python API |
scip_dialog.h |
10 | Interactive dialog system - not applicable to Python API |
scip_mem.h |
9 | Memory allocation - handled by Cython/Python |
scip_message.h |
8 | Message handling internals - use existing wrapper |
pub_history.h |
7 | Internal history tracking - low-level implementation detail |
scip_concurrent.h |
6 | Concurrent solving internals - requires special setup |
scip_validation.h |
2 | Validation/debugging utilities |