Skip to content

Emit flat/to_polars directly from the CSR store #968

Description

@FabianHofmann

Note

The following content was generated by AI.

Describe the feature you'd like to see

Emit flat and to_polars directly from the CSR store, without building the dense rectangle first. Child of #756.

LinearExpression.flat (linopy/expressions.py:2612) and to_polars (2693) both read self.data, expand to the padded coord_dims x _term rectangle, convert to a long frame and then mask the padding straight back out. For a CSR-backed expression that is a round trip through exactly the representation the long format is trying to reach.

This matters twice: it is the export boundary, and it is the natural way to inspect a sparse expression, so it currently doubles as a densification trap.

Implementation ideas

csr_to_term_arrays (linopy/csr.py:506-532) already produces the flat term arrays. The work is to assemble the coordinate columns from Grid (indexer, strides, indexes) and emit the polars frame directly, then have flat share that path.

CSRConstraint.to_polars (linopy/constraints.py:1271) is the existing precedent on the constraint side and should be the model for the expression side.

Note that a CSR-backed result is compact canonical form, so the emitted row count legitimately differs from the dense path where explicit zeros were pruned. See #925.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestperformanceThis improves performance while not (meaningfully) altering behaviour for userssparseSparse / CSR-backed expressions and constraints

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions