File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1822,6 +1822,11 @@ cdef extern from "blockmemshell/memory.h":
18221822 void BMScheckEmptyMemory()
18231823 long long BMSgetMemoryUsed()
18241824
1825+ cdef extern from " scip/scip_mem.h" :
1826+ SCIP_Longint SCIPgetMemUsed(SCIP* scip)
1827+ SCIP_Longint SCIPgetMemTotal(SCIP* scip)
1828+ SCIP_Longint SCIPgetMemExternEstim(SCIP* scip)
1829+
18251830cdef extern from " scip/scip_expr.h" :
18261831 SCIP_RETCODE SCIPcreateExpr(SCIP* scip,
18271832 SCIP_EXPR** expr,
Original file line number Diff line number Diff line change @@ -11467,6 +11467,41 @@ cdef class Model:
1146711467
1146811468 locale.setlocale(locale.LC_NUMERIC,user_locale)
1146911469
11470+ def getMemUsed (self ):
11471+ """
11472+ Gets the total number of bytes used in block and buffer memory.
11473+
11474+ Returns
11475+ -------
11476+ int
11477+
11478+ """
11479+ return SCIPgetMemUsed(self ._scip)
11480+
11481+ def getMemTotal (self ):
11482+ """
11483+ Gets the total number of bytes in block and buffer memory
11484+ (i.e., total allocated, including unused).
11485+
11486+ Returns
11487+ -------
11488+ int
11489+
11490+ """
11491+ return SCIPgetMemTotal(self ._scip)
11492+
11493+ def getMemExternEstim (self ):
11494+ """
11495+ Gets the estimated number of bytes used by external software,
11496+ e.g., the LP solver.
11497+
11498+ Returns
11499+ -------
11500+ int
11501+
11502+ """
11503+ return SCIPgetMemExternEstim(self ._scip)
11504+
1147011505 def getNLPs (self ):
1147111506 """
1147211507 Gets total number of LPs solved so far.
Original file line number Diff line number Diff line change @@ -1153,6 +1153,9 @@ class Model:
11531153 def getNLPIterations (self ) -> Incomplete : ...
11541154 def getNLPRows (self ) -> Incomplete : ...
11551155 def getNLPs (self ) -> Incomplete : ...
1156+ def getMemUsed (self ) -> int : ...
1157+ def getMemTotal (self ) -> int : ...
1158+ def getMemExternEstim (self ) -> int : ...
11561159 def getNLeaves (self ) -> Incomplete : ...
11571160 def getNLimSolsFound (self ) -> Incomplete : ...
11581161 def getNNlRows (self ) -> Incomplete : ...
Original file line number Diff line number Diff line change @@ -642,3 +642,23 @@ def test_getSolVal():
642642 m .getVal ("not_a_var" )
643643 with pytest .raises (TypeError ):
644644 m .getSolVal (sol , "not_a_var" )
645+
646+
647+ def test_memory_methods ():
648+ m = Model ()
649+
650+ # Memory values should be non-negative even on an empty model
651+ assert m .getMemUsed () >= 0
652+ assert m .getMemTotal () >= 0
653+ assert m .getMemExternEstim () >= 0
654+
655+ # Total allocated should be at least as much as actively used
656+ assert m .getMemTotal () >= m .getMemUsed ()
657+
658+ # After adding variables and solving, memory usage should increase
659+ x = m .addVar ("x" , vtype = "C" , obj = 1.0 )
660+ m .addCons (x >= 0 )
661+ m .optimize ()
662+
663+ assert m .getMemUsed () > 0
664+ assert m .getMemTotal () > 0
You can’t perform that action at this time.
0 commit comments