The pure binary MIPLIB set tracked for progress, 140 instances at sixty
seconds and sixteen threads, went from 22 closed to 36.
Root cut separation, a conflict-driven search beside the tree, doubleton
aggregation, node propagation, reduced cost fixing and restarts are on by
default. search::solve_with takes rows while the search runs, as cuts or
lazy constraints, and the Python module gains gurobipy's callback API for
them. Refactorization is triggered by cost, which makes root relaxations
25% faster on the cached MIPLIB set. Wrong answers fixed: fractional
general integers taken as incumbents, refactorization and phase-1 noise
read as infeasibility, and a gap of zero reported with no bound proven.
The Python module is packaged for PyPI, published by CI on this tag.