bids-standard / pybids

Python tools for querying and manipulating BIDS datasets.
https://bids-standard.github.io/pybids/
MIT License
224 stars 122 forks source link

Python3.12: Test fails with ValueError #1012

Open penguinpee opened 1 year ago

penguinpee commented 1 year ago

Python 3.12 has landed in Fedora. One of the tests fails with ValueError:

=================================== FAILURES ===================================
_________ test_run_variable_collection_bad_length_to_df_all_dense_vars _________
run_coll_bad_length = <BIDSRunVariableCollection['PTval', 'RT', 'gain', 'loss', 'parametric gain', 'respcat', 'respnum', 'trial_type']>
    def test_run_variable_collection_bad_length_to_df_all_dense_vars(run_coll_bad_length):

        timing_cols = {'onset', 'duration'}
        entity_cols = {'subject', 'run', 'task',  'suffix', 'datatype'}
        cond_names = {'PTval', 'RT', 'gain', 'loss', 'parametric gain', 'respcat',
                      'respnum', 'trial_type'}
        md_names = {'TaskName', 'RepetitionTime', 'extension', 'SliceTiming'}
        condition = {'condition'}
        ampl = {'amplitude'}

        unif_coll = run_coll_bad_length.to_dense(sampling_rate=10)

>       df = unif_coll.to_df()
bids/variables/tests/test_collections.py:238: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
bids/variables/collections.py:625: in to_df
    return super().to_df(
bids/variables/collections.py:152: in to_df
    dfs = [v.to_df(True, True, timing=True) for v in variables]
bids/variables/variables.py:618: in to_df
    df['onset'] = self.timestamps.values.astype(float) / 1e+9
/usr/lib64/python3.12/site-packages/pandas/core/frame.py:3980: in __setitem__
    self._set_item(key, value)
/usr/lib64/python3.12/site-packages/pandas/core/frame.py:4174: in _set_item
    value = self._sanitize_column(value)
/usr/lib64/python3.12/site-packages/pandas/core/frame.py:4915: in _sanitize_column
    com.require_length_match(value, self.index)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
data = array([0.0000e+00, 1.0000e-01, 2.0000e-01, ..., 4.3206e+03, 4.3207e+03,
       4.3208e+03])
index = RangeIndex(start=0, stop=43210, step=1)
    def require_length_match(data, index: Index) -> None:
        """
        Check the length of data matches the length of the index.
        """
        if len(data) != len(index):
>           raise ValueError(
                "Length of values "
                f"({len(data)}) "
                "does not match length of index "
                f"({len(index)})"
            )
E           ValueError: Length of values (43209) does not match length of index (43210)
/usr/lib64/python3.12/site-packages/pandas/core/common.py:571: ValueError
effigies commented 1 year ago

What versions of numpy and pandas? Are their test suites passing?

penguinpee commented 1 year ago

numpy 1.24.4 pandas 1.5.3

Regarding test suits, looking at the builds of the packages, both run tests. Tests not succeeding breaks the build, requiring intervention by either fixing the tests or disabling them temporarily.

For numpy refcount related tests were disabled for Python3.12.