diff --git a/bids/analysis/transformations/compute.py b/bids/analysis/transformations/compute.py
index 80f6232f..4c06a354 100644
--- a/bids/analysis/transformations/compute.py
+++ b/bids/analysis/transformations/compute.py
@@ -138,9 +138,19 @@ class Scale(Transformation):
         None, no replacement is performed. If 'before', missing values are
         replaced with 0's before scaling. If 'after', missing values are
         replaced with 0 after scaling.
+
+    Notes
+    -----
+    If a constant column is passed in, and replace_na is None or 'before', an
+    exception will be raised.
     """
 
     def _transform(self, data, demean=True, rescale=True, replace_na=None):
+        if data.nunique() == 1 and replace_na in {None, 'before'}:
+            val = data.unique()[0]
+            raise ValueError("Cannot scale a column with constant value ({})! "
+                             "If you want a constant column of 0's returned, "
+                             "set replace_na to 'after'.".format(val))
         if replace_na == 'before':
             data = data.fillna(0.)
         if demean:
diff --git a/bids/layout/layout.py b/bids/layout/layout.py
index 35cb0f61..7ac52f6b 100644
--- a/bids/layout/layout.py
+++ b/bids/layout/layout.py
@@ -897,17 +897,27 @@ class BIDSLayout(object):
         -------
         list of :obj:`bids.layout.BIDSFile` or str
             A list of BIDSFiles (default) or strings (see return_type).
+
+        Notes
+        -----
+        * In pybids 0.9.0, the 'extensions' argument has been removed in
+          favor of the 'extension' entity.
         """
+        if 'extensions' in filters:
+            filters['extension'] = filters.pop('extensions')
+            warnings.warn("In pybids 0.9.0, the 'extensions' filter was "
+                          "deprecated in favor of 'extension'. The former will"
+                          " stop working in 0.11.0.", DeprecationWarning)
 
         layouts = self._get_layouts_in_scope(scope)
 
         entities = self.get_entities()
 
-        # Strip leading periods if extensions were passed
+        # For consistency with past versions where "extensions" was a
+        # hard-coded argument, allow leading periods
         if 'extension' in filters:
             exts = listify(filters['extension'])
-            filters['extension'] = [x.lstrip('.') if isinstance(x, str) else x
-                                    for x in exts]
+            filters['extension'] = [x.lstrip('.') for x in exts]
 
         if drop_invalid_filters:
             invalid_filters = set(filters.keys()) - set(entities.keys())

Scale transformation shouldn't return NAs in event of constant input
If constant input is passed to the `Scale` transformation, a column of N/A values is returned. This should probably just fail with an exception (or at minimum, return a column of `0`).
diff --git a/bids/analysis/tests/test_transformations.py b/bids/analysis/tests/test_transformations.py
index cc3126dd..63eecaa3 100644
--- a/bids/analysis/tests/test_transformations.py
+++ b/bids/analysis/tests/test_transformations.py
@@ -128,7 +128,7 @@ def test_sum(collection):
                       output='sum', weights=[1, 1, 1])
 
 
-def test_scale(collection):
+def test_scale(collection, sparse_run_variable_with_missing_values):
     transform.Scale(collection, variables=['RT', 'parametric gain'],
                     output=['RT_Z', 'gain_Z'], groupby=['run', 'subject'])
     groupby = collection['RT'].get_grouper(['run', 'subject'])
@@ -137,6 +137,16 @@ def test_scale(collection):
         groupby).apply(lambda x: (x - x.mean()) / x.std())
     assert np.allclose(z1, z2)
 
+    # Test constant input
+    coll = sparse_run_variable_with_missing_values
+    coll['var'].values.fillna(1)
+    with pytest.raises(ValueError, match="Cannot scale.*1.0"):
+        transform.Scale(coll, 'var').values
+    with pytest.raises(ValueError, match="Cannot scale.*1.0"):
+        transform.Scale(coll, 'var', replace_na='before').values
+    transform.Scale(coll, 'var', replace_na='after', output='zero')
+    assert coll['zero'].values.unique() == 0
+
 
 def test_demean(collection):
     transform.Demean(collection, variables=['RT'], output=['RT_dm'])
diff --git a/bids/layout/tests/test_layout.py b/bids/layout/tests/test_layout.py
index 229634d9..52647802 100644
--- a/bids/layout/tests/test_layout.py
+++ b/bids/layout/tests/test_layout.py
@@ -280,8 +280,7 @@ def test_get_val_none(layout_7t_trt, acq):
 
 def test_get_val_enum_any(layout_7t_trt):
     t1w_files = layout_7t_trt.get(
-        subject='01', ses='1', suffix='T1w', acquisition=Query.ANY,
-        extension=Query.ANY)
+        subject='01', ses='1', suffix='T1w', acquisition=Query.ANY)
     assert not t1w_files
     bold_files = layout_7t_trt.get(subject='01', ses='1', run=1, suffix='bold',
                                    acquisition=Query.ANY)

pip install -e .[dev]
parse_log_pytest
pytest
numpy>=1.16.0 pandas>=1.0.0 pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs @ file:///croot/attrs_1668696182826/work
Babel==2.14.0
bids-validator==1.14.0
certifi @ file:///croot/certifi_1671487769961/work/certifi
charset-normalizer==3.4.1
coverage==7.2.7
docopt==0.6.2
docutils==0.17.1
execnet==2.0.2
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
greenlet==3.1.1
idna==3.10
imagesize==1.4.1
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==3.0.3
m2r==0.3.1
MarkupSafe==2.1.5
mistune==0.8.4
mock==5.2.0
nibabel==4.0.2
num2words==0.5.14
numpy==1.21.6
numpydoc==1.2.1
packaging @ file:///croot/packaging_1671697413597/work
pandas==1.3.5
patsy==1.0.1
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
-e git+https://github.com/bids-standard/pybids.git@c39e7df3081cd2f5e4bef8f2673729f086ffe347#egg=pybids
Pygments==2.17.2
pytest==7.1.2
pytest-asyncio==0.21.2
pytest-cov==4.1.0
pytest-mock==3.11.1
pytest-xdist==3.5.0
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.31.0
scipy==1.7.3
six==1.17.0
snowballstemmer==2.2.0
Sphinx==2.4.5
sphinx-rtd-theme==1.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
SQLAlchemy==2.0.40
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions==4.7.1
urllib3==2.0.7
zipp @ file:///croot/zipp_1672387121353/work

name: pybids
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - babel==2.14.0
      - bids-validator==1.14.0
      - charset-normalizer==3.4.1
      - coverage==7.2.7
      - docopt==0.6.2
      - docutils==0.17.1
      - execnet==2.0.2
      - greenlet==3.1.1
      - idna==3.10
      - imagesize==1.4.1
      - jinja2==3.0.3
      - m2r==0.3.1
      - markupsafe==2.1.5
      - mistune==0.8.4
      - mock==5.2.0
      - nibabel==4.0.2
      - num2words==0.5.14
      - numpy==1.21.6
      - numpydoc==1.2.1
      - pandas==1.3.5
      - patsy==1.0.1
      - pybids==0.10.2+77.gc39e7df3
      - pygments==2.17.2
      - pytest-asyncio==0.21.2
      - pytest-cov==4.1.0
      - pytest-mock==3.11.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.31.0
      - scipy==1.7.3
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==2.4.5
      - sphinx-rtd-theme==1.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - sqlalchemy==2.0.40
      - typing-extensions==4.7.1
      - urllib3==2.0.7
prefix: /opt/conda/envs/pybids

bids/analysis/tests/test_transformations.py::test_scale
bids/analysis/tests/test_transformations.py::test_convolve bids/analysis/tests/test_transformations.py::test_rename bids/analysis/tests/test_transformations.py::test_product bids/analysis/tests/test_transformations.py::test_sum bids/analysis/tests/test_transformations.py::test_demean bids/analysis/tests/test_transformations.py::test_orthogonalize_dense bids/analysis/tests/test_transformations.py::test_orthogonalize_sparse bids/analysis/tests/test_transformations.py::test_split bids/analysis/tests/test_transformations.py::test_resample_dense bids/analysis/tests/test_transformations.py::test_threshold bids/analysis/tests/test_transformations.py::test_assign bids/analysis/tests/test_transformations.py::test_copy bids/analysis/tests/test_transformations.py::test_expand_variable_names bids/analysis/tests/test_transformations.py::test_factor bids/analysis/tests/test_transformations.py::test_filter bids/analysis/tests/test_transformations.py::test_replace bids/analysis/tests/test_transformations.py::test_select bids/analysis/tests/test_transformations.py::test_delete bids/analysis/tests/test_transformations.py::test_and bids/analysis/tests/test_transformations.py::test_or bids/analysis/tests/test_transformations.py::test_not bids/analysis/tests/test_transformations.py::test_dropna bids/analysis/tests/test_transformations.py::test_group bids/analysis/tests/test_transformations.py::test_resample bids/layout/tests/test_layout.py::test_layout_init bids/layout/tests/test_layout.py::test_index_metadata[True-None-3.0] bids/layout/tests/test_layout.py::test_index_metadata[False-None-None] bids/layout/tests/test_layout.py::test_index_metadata[False-query2-3.0] bids/layout/tests/test_layout.py::test_index_metadata[False-query3-3.0] bids/layout/tests/test_layout.py::test_index_metadata[False-query4-3.0] bids/layout/tests/test_layout.py::test_index_metadata[False-query5-3.0] bids/layout/tests/test_layout.py::test_index_metadata[False-query6-3.0] bids/layout/tests/test_layout.py::test_layout_repr bids/layout/tests/test_layout.py::test_load_description bids/layout/tests/test_layout.py::test_get_file bids/layout/tests/test_layout.py::test_get_metadata bids/layout/tests/test_layout.py::test_get_metadata2 bids/layout/tests/test_layout.py::test_get_metadata3 bids/layout/tests/test_layout.py::test_get_metadata4 bids/layout/tests/test_layout.py::test_get_metadata_meg bids/layout/tests/test_layout.py::test_get_metadata5 bids/layout/tests/test_layout.py::test_get_metadata_via_bidsfile bids/layout/tests/test_layout.py::test_get_metadata_error bids/layout/tests/test_layout.py::test_get_with_bad_target bids/layout/tests/test_layout.py::test_get_bvals_bvecs bids/layout/tests/test_layout.py::test_get_subjects bids/layout/tests/test_layout.py::test_get_fieldmap bids/layout/tests/test_layout.py::test_get_fieldmap2 bids/layout/tests/test_layout.py::test_bids_json bids/layout/tests/test_layout.py::test_get_return_type_dir bids/layout/tests/test_layout.py::test_get_val_none[None] bids/layout/tests/test_layout.py::test_get_val_none[Query.NONE] bids/layout/tests/test_layout.py::test_get_val_enum_any bids/layout/tests/test_layout.py::test_get_return_sorted bids/layout/tests/test_layout.py::test_ignore_files bids/layout/tests/test_layout.py::test_force_index bids/layout/tests/test_layout.py::test_nested_include_exclude bids/layout/tests/test_layout.py::test_nested_include_exclude_with_regex bids/layout/tests/test_layout.py::test_layout_with_derivs bids/layout/tests/test_layout.py::test_layout_with_multi_derivs[None] bids/layout/tests/test_layout.py::test_get_layouts_in_scope[None] bids/layout/tests/test_layout.py::test_get_dataset_description[None] bids/layout/tests/test_layout.py::test_layout_with_multi_derivs[bidsdb0] bids/layout/tests/test_layout.py::test_get_layouts_in_scope[bidsdb0] bids/layout/tests/test_layout.py::test_get_dataset_description[bidsdb0] bids/layout/tests/test_layout.py::test_layout_with_multi_derivs[bidsdb1] bids/layout/tests/test_layout.py::test_get_layouts_in_scope[bidsdb1] bids/layout/tests/test_layout.py::test_get_dataset_description[bidsdb1] bids/layout/tests/test_layout.py::test_query_derivatives bids/layout/tests/test_layout.py::test_restricted_words_in_path bids/layout/tests/test_layout.py::test_derivative_getters bids/layout/tests/test_layout.py::test_get_tr bids/layout/tests/test_layout.py::test_to_df bids/layout/tests/test_layout.py::test_parse_file_entities bids/layout/tests/test_layout.py::test_parse_file_entities_from_layout[None] bids/layout/tests/test_layout.py::test_parse_file_entities_from_layout[bidsdb-synth0] bids/layout/tests/test_layout.py::test_parse_file_entities_from_layout[bidsdb-synth1] bids/layout/tests/test_layout.py::test_deriv_indexing bids/layout/tests/test_layout.py::test_add_config_paths bids/layout/tests/test_layout.py::test_layout_in_scope bids/layout/tests/test_layout.py::test_indexed_file_associations bids/layout/tests/test_layout.py::test_layout_save bids/layout/tests/test_layout.py::test_indexing_tag_conflict bids/layout/tests/test_layout.py::test_get_with_wrong_dtypes bids/layout/tests/test_layout.py::test_get_with_regex_search bids/layout/tests/test_layout.py::test_get_with_regex_search_bad_dtype bids/layout/tests/test_layout.py::test_load_layout
bids/layout/layout.py bids/analysis/transformations/compute.py
bids/layout/layout.py bids/analysis/transformations/compute.py