Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

QuadraticExpression.groupby(...).sum() returns a LinearExpression

オープン 初心者向け
#1,064 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
backend, data

調査の方向性

linopy/expressions.py の LinearExpressionGroupby.sum と .map を読み、結果の構築方法を QuadraticExpression を処理する Relation の分岐と比較してください。提示された groupby の例で再現し、各 grouper について結果の型と vars の次元を確認してください。グループ化した合計が二次データを保持したまま QuadraticExpression を返せば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug

[!NOTE]
The following content was generated by AI.

Version Checks (indicate both or one)
  • I have confirmed this bug exists on the lastest release of Linopy.
  • I have confirmed this bug exists on the current master branch of Linopy.
Issue Description

QuadraticExpression.groupby(...).sum() returns a LinearExpression wrapping quadratic data (vars still carries the _factor dim). It happens for every grouper type: a dim-name string, a coordinate-name string, a DataArray and a pd.Series.

Cause: LinearExpressionGroupby.sum (and .map) in linopy/expressions.py construct the result with a hardcoded LinearExpression(ds, self.model) instead of the type of self.obj. Only the Relation branch special-cases QuadraticExpression.

Reproducible Example
import pandas as pd, xarray as xr
from linopy import Model

m = Model()
x = m.add_variables(coords=[pd.RangeIndex(4, name="i")], name="x")
q = x * x
g = xr.DataArray([0, 0, 1, 1], coords=[q.coords["i"]], name="g")

for by in ["i", g, g.to_series()]:
    print(type(q.groupby(by).sum()).__name__)
# LinearExpression  (x3)

r = q.groupby("i").sum()
print(r.data.vars.dims)
# ('i', '_factor', '_term')
Expected Behavior

The result is a QuadraticExpression, as for q.sum().

Installed Versions

linopy 0.10.0.post1.dev18+gae80bc89a (master @ ae80bc89)

主要言語
Python
スター
262
フォーク
89
平均マージ
2日 7時間
マージ済み PR(30日)
30

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

PyPSA/linopy のほかの issue

PyPSA/linopy の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。