Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unequal column heights using scan_parquet and filter on single file with hive partition, in single threaded mode #21327

Closed
2 tasks done
zexumath opened this issue Feb 18, 2025 · 2 comments · Fixed by #21340
Closed
2 tasks done
Assignees
Labels
A-io-parquet Area: reading/writing Parquet files A-io-partitioning Area: reading/writing (Hive) partitioned files accepted Ready for implementation bug Something isn't working P-medium Priority: medium python Related to Python Polars

Comments

@zexumath
Copy link

zexumath commented Feb 18, 2025

Checks

  • I have checked that this issue has not already been reported.
  • I have confirmed this bug exists on the latest version of Polars.

Reproducible example

change <path> before running

import datetime
import polars as pl
import os

# change <path> before running
os.environ["POLARS_MAX_THREADS"] = "1"
data = pl.DataFrame(
    {
        "date": [
            datetime.date(2025, 1, 1),
            datetime.date(2025, 1, 1),
            datetime.date(2025, 1, 2),
            datetime.date(2025, 1, 2),
        ],
        "value": ["1", "2", "3", "4"],
    }
)
data.write_parquet("<path>", partition_by="date")

df_1 = (
    pl.scan_parquet(
        [
            "<path>/date=2025-01-01/00000000.parquet",
            "<path>/date=2025-01-02/00000000.parquet",
        ],
        glob=False,
        hive_partitioning=True,
    )
    .filter(pl.col("value") == "1")
    .collect()
)  # success

df_2 = (
    pl.scan_parquet(
        [
            "<path>/date=2025-01-01/00000000.parquet",
            # "<path>/date=2025-01-02/00000000.parquet",
        ],
        glob=False,
        hive_partitioning=True,
    )
    .filter(pl.col("value") == "1")
    .collect()
)  # fail
print(df_1)
print(df_2) # fail

Log output

Log output
shape: (1, 2)
┌────────────┬───────┐
│ date       ┆ value │
│ ---        ┆ ---   │
│ date       ┆ str   │
╞════════════╪═══════╡
│ 2025-01-01 ┆ 1     │
└────────────┴───────┘

thread '<unnamed>' panicked at crates/polars-core/src/fmt.rs:580:13:
The column lengths in the DataFrame are not equal.
stack backtrace:
   0:     0x7f7d3b93f6cf - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hc56bb2061e3f2faf
   1:     0x7f7d37bd3a63 - core::fmt::write::hf476acdbab1f8242
   2:     0x7f7d3b93ecb2 - std::io::Write::write_fmt::hff3ae507590478c7
   3:     0x7f7d3b93f503 - std::sys::backtrace::BacktraceLock::print::h59430f67692bb429
   4:     0x7f7d3b93e91f - std::panicking::rust_panic_with_hook::h91fff69bbdba9796
   5:     0x7f7d3b97e875 - std::panicking::begin_panic_handler::{{closure}}::hd4b1f7b56f925873
   6:     0x7f7d3b97e809 - std::sys::backtrace::__rust_end_short_backtrace::hd7883fbf49e31f3d
   7:     0x7f7d3b97f0ae - rust_begin_unwind
   8:     0x7f7d37bd1f9f - core::panicking::panic_fmt::h67ab54dd60b05f99
   9:     0x7f7d38c6134e - polars_core::fmt::<impl core::fmt::Display for polars_core::frame::DataFrame>::fmt::h46cbdd24fc3fe29e
  10:     0x7f7d37bd3a63 - core::fmt::write::hf476acdbab1f8242
  11:     0x7f7d37b522e7 - alloc::fmt::format::format_inner::h317f06645a8db5d2
  12:     0x7f7d3a9de6c4 - polars_python::dataframe::general::<impl polars_python::dataframe::PyDataFrame>::__pymethod_as_str__::hc2c37c847a3afa0b
  13:     0x7f7d3a95910c - pyo3::impl_::trampoline::trampoline::h3dc4ee1feae75ee6
  14:     0x7f7d3a993294 - polars_python::dataframe::general::_::__INVENTORY::trampoline::h2ca491a999d679ba
  15:           0x538cc0 - method_vectorcall_NOARGS
                               at /usr/local/src/conda/python-3.11.8/Objects/descrobject.c:453:24
  16:           0x51e2c1 - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  17:           0x51e2c1 - PyObject_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:299:12
  18:           0x511256 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:4769:23
  19:           0x58040e - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  20:           0x58040e - _PyEval_Vector
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:6434:24
  21:           0x58040e - _PyFunction_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:393:16
  22:           0x58040e - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  23:           0x58040e - vectorcall_unbound
                               at /usr/local/src/conda/python-3.11.8/Objects/typeobject.c:1641:12
  24:           0x58040e - vectorcall_method
                               at /usr/local/src/conda/python-3.11.8/Objects/typeobject.c:1672:24
  25:           0x615b1a - slot_tp_str
                               at /usr/local/src/conda/python-3.11.8/Objects/typeobject.c:7560:0
  26:           0x5494f7 - PyObject_Str
                               at /usr/local/src/conda/python-3.11.8/Objects/object.c:492:12
  27:           0x5dba5b - PyFile_WriteObject
                               at /usr/local/src/conda/python-3.11.8/Objects/fileobject.c:129:17
  28:           0x5db0b5 - builtin_print_impl
                               at /usr/local/src/conda/python-3.11.8/Python/bltinmodule.c:2039:15
  29:           0x5db0b5 - builtin_print
                               at /usr/local/src/conda/python-3.11.8/Python/clinic/bltinmodule.c.h:838:20
  30:           0x51e3d7 - cfunction_vectorcall_FASTCALL_KEYWORDS
                               at /usr/local/src/conda/python-3.11.8/Objects/methodobject.c:443:24
  31:           0x51e2c1 - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  32:           0x51e2c1 - PyObject_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:299:12
  33:           0x511256 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:4769:23
  34:           0x5cb78a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  35:           0x5cb78a - _PyEval_Vector
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:6434:24
  36:           0x5cae5f - PyEval_EvalCode
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:1148:21
  37:           0x5e45e3 - builtin_exec_impl
                               at /usr/local/src/conda/python-3.11.8/Python/bltinmodule.c:1077:17
  38:           0x5e45e3 - builtin_exec
                               at /usr/local/src/conda/python-3.11.8/Python/clinic/bltinmodule.c.h:465:20
  39:           0x5142e8 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:5091:29
  40:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  41:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  42:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  43:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  44:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  45:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  46:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  47:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  48:           0x5e2656 - gen_send_ex
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:287:9
  49:           0x540ceb - method_vectorcall_O
                               at /usr/local/src/conda/python-3.11.8/Objects/descrobject.c:481:24
  50:           0x51e2c1 - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  51:           0x51e2c1 - PyObject_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:299:12
  52:           0x511256 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:4769:23
  53:           0x55799f - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  54:           0x55799f - _PyEval_Vector
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:6434:24
  55:           0x55799f - _PyFunction_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:393:16
  56:           0x55799f - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  57:           0x55718e - method_vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/classobject.c:59:18
  58:           0x54288c - _PyVectorcall_Call
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:257:24
  59:           0x54288c - _PyObject_Call
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:328:16
  60:           0x54288c - PyObject_Call
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:355:12
  61:           0x515419 - do_call_core
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:7349:12
  62:           0x515419 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:5376:22
  63:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  64:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  65:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  66:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  67:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  68:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  69:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  70:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  71:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  72:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  73:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  74:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  75:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  76:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  77:           0x513dcf - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:2585:30
  78:           0x5e001a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  79:           0x5e001a - gen_send_ex2
                               at /usr/local/src/conda/python-3.11.8/Objects/genobject.c:219:14
  80:     0x7f7d69f009fb - task_step_impl
                               at /usr/local/src/conda/python-3.11.8/Modules/_asynciomodule.c:2693:22
  81:     0x7f7d69f009fb - task_step
                               at /usr/local/src/conda/python-3.11.8/Modules/_asynciomodule.c:2993:11
  82:           0x52657b - cfunction_vectorcall_O
                               at /usr/local/src/conda/python-3.11.8/Objects/methodobject.c:514:24
  83:           0x4c6caf - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  84:           0x4cbd10 - context_run
                               at /usr/local/src/conda/python-3.11.8/Python/context.c:673:0
  85:           0x51e3d7 - cfunction_vectorcall_FASTCALL_KEYWORDS
                               at /usr/local/src/conda/python-3.11.8/Objects/methodobject.c:443:24
  86:           0x519e3f - do_call_core
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:7321:9
  87:           0x519e3f - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:5376:22
  88:           0x5cb78a - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  89:           0x5cb78a - _PyEval_Vector
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:6434:24
  90:           0x5cae5f - PyEval_EvalCode
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:1148:21
  91:           0x5e45e3 - builtin_exec_impl
                               at /usr/local/src/conda/python-3.11.8/Python/bltinmodule.c:1077:17
  92:           0x5e45e3 - builtin_exec
                               at /usr/local/src/conda/python-3.11.8/Python/clinic/bltinmodule.c.h:465:20
  93:           0x51e3d7 - cfunction_vectorcall_FASTCALL_KEYWORDS
                               at /usr/local/src/conda/python-3.11.8/Objects/methodobject.c:443:24
  94:           0x51e2c1 - _PyObject_VectorcallTstate
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_call.h:92:11
  95:           0x51e2c1 - PyObject_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:299:12
  96:           0x511256 - _PyEval_EvalFrameDefault
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:4769:23
  97:           0x538903 - _PyEval_EvalFrame
                               at /usr/local/src/conda/python-3.11.8/Include/internal/pycore_ceval.h:73:16
  98:           0x538903 - _PyEval_Vector
                               at /usr/local/src/conda/python-3.11.8/Python/ceval.c:6434:24
  99:           0x538903 - _PyFunction_Vectorcall
                               at /usr/local/src/conda/python-3.11.8/Objects/call.c:393:16
 100:           0x5f6c2f - pymain_run_module
                               at /usr/local/src/conda/python-3.11.8/Modules/main.c:300:14
 101:           0x5f663a - pymain_run_python
                               at /usr/local/src/conda/python-3.11.8/Modules/main.c:595:21
 102:           0x5f663a - Py_RunMain
                               at /usr/local/src/conda/python-3.11.8/Modules/main.c:680:5
 103:           0x5bb5c9 - Py_BytesMain
                               at /usr/local/src/conda/python-3.11.8/Modules/main.c:734:12
 104:     0x7f7d6a14ed85 - __libc_start_main
 105:           0x5bb413 - <unknown>
 106:                0x0 - <unknown>

Issue description

The issue is only reproducible when scan_parquet is used on single file with hive_partitioning=True, and further filtering on a string column. The error message is probably indicating that it is trying to concat the following two when getting the partition cols back to the dataframe:

  • A: the dataframe of partition_cols, with the original number of rows,
  • B: the filtered dataframe, with less (but not 0) number of rows

This issue would not throw an error upon collecting. It would actually throw an error message when the partitioned col is queried in the following steps. In the case of the example, print.

Expected behavior

df_1 and df_2 should be exactly the same.

Installed versions

--------Version info---------
Polars:              1.21.0
Index type:          UInt32
Platform:            Linux-4.18.0-477.27.1.el8_8.x86_64-x86_64-with-glibc2.28
Python:              3.11.8 (main, Feb 26 2024, 21:39:34) [GCC 11.2.0]
LTS CPU:             False

----Optional dependencies----
Azure CLI            <not installed>
adbc_driver_manager  1.2.0
altair               5.4.1
azure.identity       <not installed>
boto3                <not installed>
cloudpickle          3.0.0
connectorx           0.3.3
deltalake            0.19.2
fastexcel            0.11.6
fsspec               2024.6.1
gevent               24.2.1
google.auth          <not installed>
great_tables         0.11.0
matplotlib           3.10.0
numpy                1.26.4
openpyxl             3.1.5
pandas               2.0.3
pyarrow              17.0.0
pydantic             2.8.2
pyiceberg            0.7.1
sqlalchemy           2.0.34
torch                <not installed>
xlsx2csv             0.8.3
xlsxwriter           3.2.0```

</details>
@zexumath zexumath added bug Something isn't working needs triage Awaiting prioritization by a maintainer python Related to Python Polars labels Feb 18, 2025
@zexumath zexumath changed the title Error using scan_parquet and filter on single file with hive partition, in single threaded mode Error using scan_parquet and filter on single file with hive partition, in single threaded mode Feb 18, 2025
@Bidek56
Copy link
Contributor

Bidek56 commented Feb 19, 2025

Does it work if you move filter after collect() ? I am seeing a similar issue with pl.scan_delta

df_2 = (
    pl.scan_parquet(
        [
            "<path>/date=2025-01-01/00000000.parquet",
            # "<path>/date=2025-01-02/00000000.parquet",
        ],
        glob=False,
        hive_partitioning=True,
    )
    .collect()
    .filter(pl.col("value") == "1") 
) 

@nameexhaustion
Copy link
Collaborator

nameexhaustion commented Feb 19, 2025

Backtrace using #21335

Backtrace
Rust backtrace:
   0: std::backtrace_rs::backtrace::libunwind::trace
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1: std::backtrace_rs::backtrace::trace_unsynchronized
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2: std::backtrace::Backtrace::create
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/std/src/backtrace.rs:331:13
   3: <polars_error::ErrString as core::convert::From<T>>::from
             at ./crates/polars-error/src/lib.rs:51:17
   4: <T as core::convert::Into<U>>::into
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/convert/mod.rs:761:9
   5: polars_core::frame::validation::<impl polars_core::frame::DataFrame>::validate_columns_slice
             at ./crates/polars-core/src/frame/validation.rs:24:25
   6: polars_core::frame::DataFrame::new_no_checks
             at ./crates/polars-core/src/frame/mod.rs:518:13
   7: polars_io::hive::materialize_hive_partitions
             at ./crates/polars-io/src/hive.rs:53:24
   8: polars_io::parquet::read::read_impl::rg_to_dfs_prefiltered::{{closure}}::{{closure}}
             at ./crates/polars-io/src/parquet/read/read_impl.rs:492:21
   9: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:272:13
  10: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:305:13
  11: core::option::Option<T>::map
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:1119:29
  12: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:26
  13: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:9
  14: <core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/take_while.rs:48:21
  15: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:9
  16: alloc::vec::Vec<T,A>::extend_desugared
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3535:35
  17: <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/spec_extend.rs:19:9
  18: <alloc::vec::Vec<T,A> as core::iter::traits::collect::Extend<T>>::extend
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3496:9
  19: <rayon::iter::extend::ListVecFolder<T> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/extend.rs:130:9
  20: <rayon::iter::while_some::WhileSomeFolder<C> as rayon::iter::plumbing::Folder<core::option::Option<T>>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/while_some.rs:139:21
  21: <rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:248:21
  22: <rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:248:21
  23: rayon::iter::plumbing::Producer::fold_with
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:109:9
  24: rayon::iter::plumbing::bridge_producer_consumer::helper
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:437:13
  25: rayon::iter::plumbing::bridge_producer_consumer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:396:12
  26: <rayon::iter::plumbing::bridge::Callback<C> as rayon::iter::plumbing::ProducerCallback<I>>::callback
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:372:13
  27: rayon::range::<impl rayon::range::private::IndexedRangeInteger for usize>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/range.rs:188:17
  28: <rayon::range::Iter<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/range.rs:149:9
  29: rayon::iter::plumbing::bridge
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:356:12
  30: rayon::range::<impl rayon::range::private::RangeInteger for usize>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/range.rs:162:17
  31: <rayon::range::Iter<T> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/range.rs:123:9
  32: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:49:9
  33: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:49:9
  34: <rayon::iter::while_some::WhileSome<I> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/while_some.rs:44:9
  35: rayon::iter::extend::<impl rayon::iter::ParallelExtend<T> for alloc::vec::Vec<T>>::par_extend
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/extend.rs:588:28
  36: rayon::iter::from_par_iter::collect_extended
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/from_par_iter.rs:20:5
  37: rayon::iter::from_par_iter::<impl rayon::iter::FromParallelIterator<T> for alloc::vec::Vec<T>>::from_par_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/from_par_iter.rs:33:9
  38: rayon::iter::ParallelIterator::collect
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/mod.rs:2069:9
  39: rayon::result::<impl rayon::iter::FromParallelIterator<core::result::Result<T,E>> for core::result::Result<C,E>>::from_par_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/result.rs:121:26
  40: rayon::iter::ParallelIterator::collect
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/mod.rs:2069:9
  41: polars_io::parquet::read::read_impl::rg_to_dfs_prefiltered::{{closure}}
             at ./crates/polars-io/src/parquet/read/read_impl.rs:342:9
  42: rayon_core::thread_pool::ThreadPool::install::{{closure}}
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/thread_pool/mod.rs:147:40
  43: rayon_core::registry::Registry::in_worker
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:502:17
  44: rayon_core::thread_pool::ThreadPool::install
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/thread_pool/mod.rs:147:9
  45: polars_io::parquet::read::read_impl::rg_to_dfs_prefiltered
             at ./crates/polars-io/src/parquet/read/read_impl.rs:338:39
  46: polars_io::parquet::read::read_impl::rg_to_dfs
             at ./crates/polars-io/src/parquet/read/read_impl.rs:176:24
  47: polars_io::parquet::read::read_impl::read_parquet
             at ./crates/polars-io/src/parquet/read/read_impl.rs:956:15
  48: <polars_io::parquet::read::reader::ParquetReader<R> as polars_io::shared::SerReader<R>>::finish
             at ./crates/polars-io/src/parquet/read/reader.rs:265:22
  49: polars_mem_engine::executors::scan::parquet::ParquetExec::read_par::{{closure}}::{{closure}}
             at ./crates/polars-mem-engine/src/executors/scan/parquet.rs:238:34
  50: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:272:13
  51: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:305:13
  52: core::option::Option<T>::map
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:1119:29
  53: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:26
  54: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:9
  55: <core::iter::adapters::take_while::TakeWhile<I,P> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/take_while.rs:48:21
  56: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs:107:9
  57: alloc::vec::Vec<T,A>::extend_desugared
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3535:35
  58: <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/spec_extend.rs:19:9
  59: <alloc::vec::Vec<T,A> as core::iter::traits::collect::Extend<T>>::extend
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3496:9
  60: <rayon::iter::extend::ListVecFolder<T> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/extend.rs:130:9
  61: <rayon::iter::while_some::WhileSomeFolder<C> as rayon::iter::plumbing::Folder<core::option::Option<T>>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/while_some.rs:139:21
  62: <rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:248:21
  63: <rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:248:21
  64: rayon::iter::plumbing::Producer::fold_with
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:109:9
  65: rayon::iter::plumbing::bridge_producer_consumer::helper
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:437:13
  66: rayon::iter::plumbing::bridge_producer_consumer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:396:12
  67: <rayon::iter::plumbing::bridge::Callback<C> as rayon::iter::plumbing::ProducerCallback<I>>::callback
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:372:13
  68: <<rayon::iter::zip::Zip<A,B> as rayon::iter::IndexedParallelIterator>::with_producer::CallbackB<CB,A> as rayon::iter::plumbing::ProducerCallback<ITEM>>::callback
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/zip.rs:112:17
  69: <rayon::vec::Drain<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/vec.rs:147:13
  70: <rayon::vec::IntoIter<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/vec.rs:83:9
  71: <<rayon::iter::zip::Zip<A,B> as rayon::iter::IndexedParallelIterator>::with_producer::CallbackA<CB,B> as rayon::iter::plumbing::ProducerCallback<ITEM>>::callback
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/zip.rs:89:17
  72: <rayon::vec::Drain<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/vec.rs:147:13
  73: <rayon::vec::IntoIter<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/vec.rs:83:9
  74: <rayon::iter::zip::Zip<A,B> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/zip.rs:68:16
  75: rayon::iter::plumbing::bridge
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:356:12
  76: <rayon::iter::zip::Zip<A,B> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/zip.rs:40:9
  77: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:49:9
  78: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/map.rs:49:9
  79: <rayon::iter::while_some::WhileSome<I> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/while_some.rs:44:9
  80: rayon::iter::extend::<impl rayon::iter::ParallelExtend<T> for alloc::vec::Vec<T>>::par_extend
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/extend.rs:588:28
  81: rayon::iter::from_par_iter::collect_extended
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/from_par_iter.rs:20:5
  82: rayon::iter::from_par_iter::<impl rayon::iter::FromParallelIterator<T> for alloc::vec::Vec<T>>::from_par_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/from_par_iter.rs:33:9
  83: rayon::iter::ParallelIterator::collect
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/mod.rs:2069:9
  84: rayon::result::<impl rayon::iter::FromParallelIterator<core::result::Result<T,E>> for core::result::Result<C,E>>::from_par_iter
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/result.rs:121:26
  85: rayon::iter::ParallelIterator::collect
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/mod.rs:2069:9
  86: polars_mem_engine::executors::scan::parquet::ParquetExec::read_par::{{closure}}
             at ./crates/polars-mem-engine/src/executors/scan/parquet.rs:229:17
  87: rayon_core::thread_pool::ThreadPool::install::{{closure}}
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/thread_pool/mod.rs:147:40
  88: rayon_core::registry::Registry::in_worker_cold::{{closure}}::{{closure}}
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:522:21
  89: rayon_core::job::JobResult<T>::call::{{closure}}
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:218:41
  90: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:272:9
  91: std::panicking::try::do_call
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:584:40
  92: ___rust_try
  93: std::panicking::try
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:547:19
  94: std::panic::catch_unwind
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panic.rs:358:14
  95: rayon_core::unwind::halt_unwinding
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/unwind.rs:17:5
  96: rayon_core::job::JobResult<T>::call
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:218:15
  97: <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:120:32
  98: rayon_core::job::JobRef::execute
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:64:9
  99: rayon_core::registry::WorkerThread::execute
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:860:9
 100: rayon_core::registry::WorkerThread::wait_until_cold
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:794:21
 101: rayon_core::registry::WorkerThread::wait_until
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:769:13
 102: rayon_core::registry::WorkerThread::wait_until_out_of_work
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:818:9
 103: rayon_core::registry::main_loop
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:923:5
 104: rayon_core::registry::ThreadBuilder::run
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:53:18
 105: <rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{{closure}}
             at /Users/nxs/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:98:20
 106: std::sys::backtrace::__rust_begin_short_backtrace
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:152:18
 107: std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/thread/mod.rs:564:17
 108: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:272:9
 109: std::panicking::try::do_call
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:584:40
 110: ___rust_try
 111: std::panicking::try
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:547:19
 112: std::panic::catch_unwind
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panic.rs:358:14
 113: std::thread::Builder::spawn_unchecked_::{{closure}}
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/thread/mod.rs:562:30
 114: core::ops::function::FnOnce::call_once{{vtable.shim}}
             at /Users/nxs/.rustup/toolchains/nightly-2025-01-05-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
 115: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/alloc/src/boxed.rs:2013:9
 116: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/alloc/src/boxed.rs:2013:9
 117: std::sys::pal::unix::thread::Thread::new::thread_start
             at /rustc/1891c28669863bf7ed3ef8f43f2d3fa546f34861/library/std/src/sys/pal/unix/thread.rs:106:17
 118: __pthread_joiner_wake

@nameexhaustion nameexhaustion added accepted Ready for implementation P-medium Priority: medium A-io-parquet Area: reading/writing Parquet files A-io-partitioning Area: reading/writing (Hive) partitioned files and removed needs triage Awaiting prioritization by a maintainer labels Feb 19, 2025
@nameexhaustion nameexhaustion changed the title Error using scan_parquet and filter on single file with hive partition, in single threaded mode Unequal column heights using scan_parquet and filter on single file with hive partition, in single threaded mode Feb 19, 2025
@c-peters c-peters added this to Backlog Feb 24, 2025
@c-peters c-peters moved this to Done in Backlog Feb 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-io-parquet Area: reading/writing Parquet files A-io-partitioning Area: reading/writing (Hive) partitioned files accepted Ready for implementation bug Something isn't working P-medium Priority: medium python Related to Python Polars
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

3 participants