From 5c28ed7b32796b4705af60a9769f4654a591e19b Mon Sep 17 00:00:00 2001 From: "David P. Chassin" Date: Thu, 19 Mar 2026 10:49:30 -0700 Subject: [PATCH 1/3] Refactor condition check for qcost array --- pypower/opf_hessfcn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pypower/opf_hessfcn.py b/pypower/opf_hessfcn.py index de842f5e..c940e090 100644 --- a/pypower/opf_hessfcn.py +++ b/pypower/opf_hessfcn.py @@ -103,7 +103,7 @@ def opf_hessfcn(x, lmbda, om, Ybus, Yf, Yt, ppopt, il=None, cost_mult=1.0): ipolp = find(pcost[:, MODEL] == POLYNOMIAL) d2f_dPg2[ipolp] = \ baseMVA**2 * polycost(pcost[ipolp, :], Pg[ipolp] * baseMVA, 2) - if any(qcost): ## Qg is not free + if qcost.any(): ## Qg is not free ipolq = find(qcost[:, MODEL] == POLYNOMIAL) d2f_dQg2[ipolq] = \ baseMVA**2 * polycost(qcost[ipolq, :], Qg[ipolq] * baseMVA, 2) From c6453be0f34f5e9fdb22569c4d895ca2fe3480a3 Mon Sep 17 00:00:00 2001 From: "David P. Chassin" Date: Thu, 19 Mar 2026 11:37:11 -0700 Subject: [PATCH 2/3] Prevent calculation on empty ipol in cost function Add check for non-empty ipol before calculating cost. --- pypower/opf_costfcn.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pypower/opf_costfcn.py b/pypower/opf_costfcn.py index ab584063..823b2742 100644 --- a/pypower/opf_costfcn.py +++ b/pypower/opf_costfcn.py @@ -102,7 +102,8 @@ def opf_costfcn(x, om, return_hessian=False): ## polynomial cost of P and Q df_dPgQg = zeros(2 * ng) ## w.r.t p.u. Pg and Qg - df_dPgQg[ipol] = baseMVA * polycost(gencost[ipol, :], xx[ipol], 1) + if len(ipol): + df_dPgQg[ipol] = baseMVA * polycost(gencost[ipol, :], xx[ipol], 1) df = zeros(nxyz) df[iPg] = df_dPgQg[:ng] df[iQg] = df_dPgQg[ng:ng + ng] From 6c2c1c048ff9726ee65e18be129f01f8fbcb81a6 Mon Sep 17 00:00:00 2001 From: "David P. Chassin" Date: Thu, 19 Mar 2026 11:38:19 -0700 Subject: [PATCH 3/3] Correct d2f_dPg2 assignment logic Fix conditional assignment for d2f_dPg2 calculation --- pypower/opf_hessfcn.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pypower/opf_hessfcn.py b/pypower/opf_hessfcn.py index c940e090..51778171 100644 --- a/pypower/opf_hessfcn.py +++ b/pypower/opf_hessfcn.py @@ -101,7 +101,8 @@ def opf_hessfcn(x, lmbda, om, Ybus, Yf, Yt, ppopt, il=None, cost_mult=1.0): d2f_dPg2 = zeros(ng)#sparse((ng, 1)) ## w.r.t. p.u. Pg d2f_dQg2 = zeros(ng)#sparse((ng, 1)) ## w.r.t. p.u. Qg ipolp = find(pcost[:, MODEL] == POLYNOMIAL) - d2f_dPg2[ipolp] = \ + if len(ipol): + d2f_dPg2[ipolp] = \ baseMVA**2 * polycost(pcost[ipolp, :], Pg[ipolp] * baseMVA, 2) if qcost.any(): ## Qg is not free ipolq = find(qcost[:, MODEL] == POLYNOMIAL)