Skip to content

Using AI tools to automatically wrap missing SCIP methods. Yay or nay? #1173

@Joao-Dionisio

Description

@Joao-Dionisio

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions