|
61 | 61 | libfile = os.environ["PMIP_CBC_LIBRARY"] |
62 | 62 | pathlib = dirname(libfile) |
63 | 63 | if platform.lower().startswith("win"): |
64 | | - if pathlib not in os.environ["PATH"]: |
| 64 | + if hasattr(os, "add_dll_directory"): |
| 65 | + os.add_dll_directory(pathlib) |
| 66 | + elif pathlib not in os.environ["PATH"]: |
65 | 67 | os.environ["PATH"] += ";" + pathlib |
66 | 68 | old_dir = os.getcwd() |
67 | 69 | os.chdir(pathlib) |
|
81 | 83 | # autotools/MinGW places DLLs under bin/, not lib/ |
82 | 84 | _bin_dir = os.path.join(_cbcbox.cbc_dist_dir(), "bin") |
83 | 85 | libfile = os.path.join(_bin_dir, "libCbc.dll") |
84 | | - if _bin_dir not in os.environ.get("PATH", ""): |
| 86 | + # Python 3.8+ ignores PATH for DLL resolution; use add_dll_directory |
| 87 | + if hasattr(os, "add_dll_directory"): |
| 88 | + os.add_dll_directory(_bin_dir) |
| 89 | + elif _bin_dir not in os.environ.get("PATH", ""): |
85 | 90 | os.environ["PATH"] = _bin_dir + ";" + os.environ["PATH"] |
86 | 91 | elif platform.lower().startswith("darwin") or platform.lower().startswith( |
87 | 92 | "macos" |
|
585 | 590 | INT_PARAM_MAX_NODES_NOT_IMPROV_FS = 19 |
586 | 591 |
|
587 | 592 |
|
588 | | -Osi_getNumCols = cbclib.Osi_getNumCols |
589 | | -Osi_getColSolution = cbclib.Osi_getColSolution |
590 | | -Osi_getIntegerTolerance = cbclib.Osi_getIntegerTolerance |
591 | | -Osi_isInteger = cbclib.Osi_isInteger |
592 | | -Osi_isProvenOptimal = cbclib.Osi_isProvenOptimal |
593 | | -Cbc_setIntParam = cbclib.Cbc_setIntParam |
594 | | -Cbc_setDblParam = cbclib.Cbc_setDblParam |
595 | | -Cbc_getSolverPtr = cbclib.Cbc_getSolverPtr |
596 | | - |
597 | | -Cbc_generateCuts = cbclib.Cbc_generateCuts |
598 | | -Cbc_solveLinearProgram = cbclib.Cbc_solveLinearProgram |
599 | | - |
600 | | -Cbc_reset = cbclib.Cbc_reset |
601 | | - |
602 | | -Cbc_computeFeatures = cbclib.Cbc_computeFeatures |
603 | | -Cbc_nFeatures = cbclib.Cbc_nFeatures |
604 | | -Cbc_featureName = cbclib.Cbc_featureName |
605 | | - |
606 | | -OsiCuts_new = cbclib.OsiCuts_new |
607 | | -OsiCuts_addRowCut = cbclib.OsiCuts_addRowCut |
608 | | -OsiCuts_addGlobalRowCut = cbclib.OsiCuts_addGlobalRowCut |
609 | | -OsiCuts_sizeRowCuts = cbclib.OsiCuts_sizeRowCuts |
610 | | -OsiCuts_nzRowCut = cbclib.OsiCuts_nzRowCut |
611 | | -OsiCuts_idxRowCut = cbclib.OsiCuts_idxRowCut |
612 | | -OsiCuts_coefRowCut = cbclib.OsiCuts_coefRowCut |
613 | | -OsiCuts_rhsRowCut = cbclib.OsiCuts_rhsRowCut |
614 | | -OsiCuts_senseRowCut = cbclib.OsiCuts_senseRowCut |
615 | | -OsiCuts_delete = cbclib.OsiCuts_delete |
| 593 | +if has_cbc: |
| 594 | + Osi_getNumCols = cbclib.Osi_getNumCols |
| 595 | + Osi_getColSolution = cbclib.Osi_getColSolution |
| 596 | + Osi_getIntegerTolerance = cbclib.Osi_getIntegerTolerance |
| 597 | + Osi_isInteger = cbclib.Osi_isInteger |
| 598 | + Osi_isProvenOptimal = cbclib.Osi_isProvenOptimal |
| 599 | + Cbc_setIntParam = cbclib.Cbc_setIntParam |
| 600 | + Cbc_setDblParam = cbclib.Cbc_setDblParam |
| 601 | + Cbc_getSolverPtr = cbclib.Cbc_getSolverPtr |
| 602 | + |
| 603 | + Cbc_generateCuts = cbclib.Cbc_generateCuts |
| 604 | + Cbc_solveLinearProgram = cbclib.Cbc_solveLinearProgram |
| 605 | + |
| 606 | + Cbc_reset = cbclib.Cbc_reset |
| 607 | + |
| 608 | + Cbc_computeFeatures = cbclib.Cbc_computeFeatures |
| 609 | + Cbc_nFeatures = cbclib.Cbc_nFeatures |
| 610 | + Cbc_featureName = cbclib.Cbc_featureName |
| 611 | + |
| 612 | + OsiCuts_new = cbclib.OsiCuts_new |
| 613 | + OsiCuts_addRowCut = cbclib.OsiCuts_addRowCut |
| 614 | + OsiCuts_addGlobalRowCut = cbclib.OsiCuts_addGlobalRowCut |
| 615 | + OsiCuts_sizeRowCuts = cbclib.OsiCuts_sizeRowCuts |
| 616 | + OsiCuts_nzRowCut = cbclib.OsiCuts_nzRowCut |
| 617 | + OsiCuts_idxRowCut = cbclib.OsiCuts_idxRowCut |
| 618 | + OsiCuts_coefRowCut = cbclib.OsiCuts_coefRowCut |
| 619 | + OsiCuts_rhsRowCut = cbclib.OsiCuts_rhsRowCut |
| 620 | + OsiCuts_senseRowCut = cbclib.OsiCuts_senseRowCut |
| 621 | + OsiCuts_delete = cbclib.OsiCuts_delete |
616 | 622 |
|
617 | 623 |
|
618 | 624 | def cbc_set_parameter(model: Solver, param: str, value: str): |
|
0 commit comments