Demux summarize broken after upgrading from 2025.7 to 2025.10

Demux summarize broken after upgrading to 2025.10

Hi everyone,

I hope this is the correct forum to post. I am experiencing some unexpected behaviour after upgrading QIIME from 2025.7 to 2025.10. The summarize command from the demux plugin does no longer work in a QIIME 2025.10 environment but works perfectly fine for 2025.7.

Here is the command I run:

qiime demux summarize \
    --i-data $data_dir/raw/demux_paired_end.qza \
    --o-visualization $data_dir/processed/demux_paired_end.qzv \
    --verbose 

where data_dir points to my data directory and demux_paired_end.qza contains paired-end reads.

qiime tools peek $data_dir/raw/demux_paired_end.qza
UUID:        3e48be7c-af27-4f87-b7d2-2726aca3b65d
Type:        SampleData[PairedEndSequencesWithQuality]
Data format: SingleLanePerSamplePairedEndFastqDirFmt

You can download the data as follows:

wget -O "$data_dir/raw/demux_paired_end.qza" \
    "https://polybox.ethz.ch/index.php/s/zi5ZBrBwcn7SYof/download/demux-paired-end.qza"

Error message

This is the error message that I receive when running the command in the 2025.10 environment:

/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/emperor/__init__.py:9: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
Traceback (most recent call last):
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/plugin/model/directory_format.py", line 187, in validate
    self._validate_(level)
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/q2_types/per_sample_sequences/_formats.py", line 371, in _validate_
    validate_paired_ends_equal_record_count(
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/q2_types/per_sample_sequences/_util.py", line 394, in validate_paired_ends_equal_record_count
    raise ValidationError(
qiime2.core.exceptions.ValidationError: A pair of paired-end files were found not to have the same number of records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_5_S771_L001_R1_001.fastq.gz has 112892 records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_51_S266_L001_R1_001.fastq.gz has 14284 records.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/q2cli/commands.py", line 567, in __call__
    results = self._execute_action(
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/q2cli/commands.py", line 639, in _execute_action
    results = action(**arguments)
  File "<decorator-gen-927>", line 2, in summarize
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/sdk/action.py", line 262, in bound_callable
    self.signature.transform_and_add_callable_args_to_prov(
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/core/type/signature.py", line 401, in transform_and_add_callable_args_to_prov
    self._transform_and_add_input_to_prov(
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/core/type/signature.py", line 434, in _transform_and_add_input_to_prov
    transformed_input = _input._view(spec.view_type, recorder)
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/sdk/result.py", line 747, in _view
    result = transformation(self._archiver.data_dir)
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/core/transform.py", line 68, in transformation
    self.validate(view, level=validate_level)
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/core/transform.py", line 143, in validate
    view.validate(level)
  File "/Users/<username>/miniconda3/envs/microbEvolve/lib/python3.10/site-packages/qiime2/plugin/model/directory_format.py", line 189, in validate
    raise ValidationError(
qiime2.core.exceptions.ValidationError: /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data is not a(n) SingleLanePerSamplePairedEndFastqDirFmt:

A pair of paired-end files were found not to have the same number of records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_5_S771_L001_R1_001.fastq.gz has 112892 records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_51_S266_L001_R1_001.fastq.gz has 14284 records.

Plugin error from demux:

  /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data is not a(n) SingleLanePerSamplePairedEndFastqDirFmt:

  A pair of paired-end files were found not to have the same number of records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_5_S771_L001_R1_001.fastq.gz has 112892 records. /var/folders/t2/68ltn7ds36523gbx2tkkj4zh0000gn/T/qiime2/<username>/data/3e48be7c-af27-4f87-b7d2-2726aca3b65d/data/sample_51_S266_L001_R1_001.fastq.gz has 14284 records.

See above for debug info.

In the 2025.7 environment, the command runs fine and produces the expected visualization.

/Users/<username>/miniconda3/envs/microbEvolve07/lib/python3.10/site-packages/q2_demux/_summarize/_visualizer.py:11: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
  import pkg_resources
Saved Visualization to: ../data/processed/demux_paired_end.qzv

For both versions, I have installed QIIME in a conda environment using the installation instructions for Apple Silicon from the amplicon docs.

QIIME 2025.7

$ qiime info

System versions
Python version: 3.10.14
QIIME 2 release: 2025.7
QIIME 2 version: 2025.7.0
q2cli version: 2025.7.0

Installed plugins
alignment: 2025.7.0
composition: 2025.7.0
cutadapt: 2025.7.0
dada2: 2025.7.0
deblur: 2025.7.0
demux: 2025.7.0
diversity: 2025.7.0
diversity-lib: 2025.7.0
emperor: 2025.7.0
feature-classifier: 2025.7.0
feature-table: 2025.7.0
fragment-insertion: 2025.7.0
longitudinal: 2025.7.0
metadata: 2025.7.0
phylogeny: 2025.7.0
quality-control: 2025.7.0
quality-filter: 2025.7.0
rescript: 2025.7.0
sample-classifier: 2025.7.0
stats: 2025.7.0
taxa: 2025.7.0
types: 2025.7.0
vizard: 0.0.1.dev0
vsearch: 2025.7.0

QIIME 2025.10

$ qiime info

System versions
Python version: 3.10.14
QIIME 2 release: 2025.10
QIIME 2 version: 2025.10.1
q2cli version: 2025.10.1

Installed plugins
alignment: 2025.10.0
boots: 2025.10.1
composition: 2025.10.0
cutadapt: 2025.10.0
dada2: 2025.10.0
deblur: 2025.10.0
demux: 2025.10.0
diversity: 2025.10.1
diversity-lib: 2025.10.0
emperor: 2025.10.0
feature-classifier: 2025.10.0
feature-table: 2025.10.0
fondue: 2025.10.0
fragment-insertion: 2025.10.0
kmerizer: 2025.10.1
longitudinal: 2025.10.0
metadata: 2025.10.0
phylogeny: 2025.10.0
quality-control: 2025.10.0
quality-filter: 2025.10.0
rescript: 2025.10.1
sample-classifier: 2025.10.0
stats: 2025.10.0
taxa: 2025.10.0
types: 2025.10.0
vizard: 2025.10.0
vsearch: 2025.10.0

Hi @flurin-sch
Welcome to the QIIME 2 Forum :qiime2:.

I was able to confirm this error in 2025.10 (the command ran successfully in 2025.7). Thank you for pointing this issue out.

It looks like our pair-end validator thinks sample_5_S771_L001_R1_001.fastq.gz and sample_51_S266_L001_R1_001.fastq.gz are related samples, but they are not. (Sample 5 vs Sample 51).

One follow up question:
Are you able to import this data in QIIME 2 using 2025.10?

I'm going to look into the fix for this bug and I will keep you updated. For now, my best advice is to use 2025.7 to summarize your demux. Sorry for the workaround.

Again, thanks for pointing this issue out.

Hi Chloe,

Yes, importing the data with in 2025.10 with

qiime tools import \
 --type 'SampleData[PairedEndSequencesWithQuality]' \
 --input-path MANIFEST \
 --output-path demux_paired_end.qza \
 --input-format PairedEndFastqManifestPhred33V2

works fine. I exported the data from the artifact and then adjusted the MANIFEST file to point to the fastq files.

I just ran the summarize tool again on the new demux artifact, and interestingly it worked fine!

The original demux artifact that I have made available above was created in QIIME 2024.10. The jump from 2024.10 to 2025.7 seems to work for demux summarize, but 2025.10 seems to be incompatible.

Hope this helps.

Thanks @flurin-sch

I have fixed the issue in this pull request here: BUG: fix the error that says sample 5 and sample 51 are the same. by cherman2 · Pull Request #378 · qiime2/q2-types · GitHub
Since this bug isn't critical, I expect it will be merged and fixed in the next release (as opposed to an emergency release patch).

Thanks for pointing this out!

Hi,

I just want to mention that I am running into a similar error on import. I tried to import a CasavaOneEightSingleLanePerSampleDirFmt format dataset that successfully imported with a previous version of q2, but which with 2025.10 errors due to e.g. S11_* and S118_* being considered the same sample but having different numbers of reads.
Importing as PairedEndFastqManifestPhred33V2 fixed the issue, but I thought it would be worth noting that this issue is found at the import level if you don’t use the manifest option.

Thanks @mcmk3 - this makes sense based on the source of the issue. @cherman2 fixed this bug, and the fix will be included in the 2026.1 (January) release of QIIME 2. Sorry for the trouble, but glad you found a work-around!