Repository: simpeg/simpeg
Pull request #1534 (2024-09-18 21:47:14)

Replace `indActive` and `actInd` for `active_cells` in maps
#### Summary

Deprecate the `indActive`, `actInd` arguments and properties from maps and replace them for `active_cells`. Deprecate the `valInactive` argument and property from `InjectActiveCells` and replace it for `value_inactive`. Add tests for the deprecations. Avoid a try and except pattern in the setter for `value_inactive`: we don't want to ignore any error that might happen in those lines. Update usage of `actInd`, `indActive` and `valInactive` in tutorials and examples.


#### PR Checklist
* [ ] If this is a work in progress PR, set as a Draft PR
* [ ] Linted my code according to the [style guides](https://docs.simpeg.xyz/content/getting_started/contributing/code-style.html).
* [ ] Added [tests](https://docs.simpeg.xyz/content/getting_started/practices.html#testing) to verify changes to the code.
* [ ] Added necessary documentation to any new functions/classes following the
      expect [style](https://docs.simpeg.xyz/content/getting_started/practices.html#documentation).
* [ ] Marked as ready for review (if this is was a draft PR), and converted
      to a Pull Request
* [ ] Tagged ``@simpeg/simpeg-developers`` when ready for review.

#### Reference issue
<!--Example: write "Closes #NNNN" to automatically close that issue on merge.-->

Part of #1121

#### What does this implement/fix?
<!--Please explain your changes.-->

#### Additional information
<!--Any additional information you think is important.-->


<!--
Once all tests pass and the code has been reviewed and approved, it will be merged into main
-->

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg) Report
Attention: Patch coverage is `96.34146%` with `9 lines` in your changes missing coverage. Please review.
> Project coverage is 86.28%. Comparing base [(`048ef80`)](https://app.codecov.io/gh/simpeg/simpeg/commit/048ef809fa550446305c752b1fd137cf1837bb60?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg) to head [(`a350906`)](https://app.codecov.io/gh/simpeg/simpeg/commit/a350906b80e16c7485c246923d723ae3c19d12ec?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg).

| [Files with missing lines](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg) | Patch % | Lines |
|---|---|---|
| [simpeg/maps/\_parametric.py](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?src=pr&el=tree&filepath=simpeg%2Fmaps%2F_parametric.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg#diff-c2ltcGVnL21hcHMvX3BhcmFtZXRyaWMucHk=) | 88.00% | [6 Missing :warning: ](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg) |
| [simpeg/maps/\_injection.py](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?src=pr&el=tree&filepath=simpeg%2Fmaps%2F_injection.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg#diff-c2ltcGVnL21hcHMvX2luamVjdGlvbi5weQ==) | 94.64% | [1 Missing and 2 partials :warning: ](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg) |

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main    #1534      +/-   ##
==========================================
+ Coverage   86.23%   86.28%   +0.05%     
==========================================
  Files         397      397              
  Lines       50711    50890     +179     
  Branches     5645     5677      +32     
==========================================
+ Hits        43730    43911     +181     
+ Misses       5527     5526       -1     
+ Partials     1454     1453       -1     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/simpeg/simpeg/pull/1534?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=simpeg).


Patch:
diff --git a/examples/04-dcip/plot_inv_dcip_dipoledipole_3Dinversion_twospheres.py b/examples/04-dcip/plot_inv_dcip_dipoledipole_3Dinversion_twospheres.py
index 7f1ba7dfd..ecf4fa0de 100644
--- a/examples/04-dcip/plot_inv_dcip_dipoledipole_3Dinversion_twospheres.py
+++ b/examples/04-dcip/plot_inv_dcip_dipoledipole_3Dinversion_twospheres.py
@@ -153,7 +153,7 @@ survey = DC.Survey(survey1.source_list + survey2.source_list + survey3.source_li
 
 # Setup Problem with exponential mapping and Active cells only in the core mesh
 expmap = maps.ExpMap(mesh)
-mapactive = maps.InjectActiveCells(mesh=mesh, indActive=actind, valInactive=-5.0)
+mapactive = maps.InjectActiveCells(mesh=mesh, active_cells=actind, value_inactive=-5.0)
 mapping = expmap * mapactive
 problem = DC.Simulation3DCellCentered(
     mesh, survey=survey, sigmaMap=mapping, solver=Solver, bc_type="Neumann"
diff --git a/examples/06-tdem/plot_inv_tdem_1D.py b/examples/06-tdem/plot_inv_tdem_1D.py
index 992dbb13f..8a581ba27 100644
--- a/examples/06-tdem/plot_inv_tdem_1D.py
+++ b/examples/06-tdem/plot_inv_tdem_1D.py
@@ -56,7 +56,7 @@ def run(plotIt=True):
     data = simulation.make_synthetic_data(mtrue, relative_error=rel_err)
 
     dmisfit = data_misfit.L2DataMisfit(simulation=simulation, data=data)
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(regMesh, alpha_s=1e-2, alpha_x=1.0)
     opt = optimization.InexactGaussNewton(maxIter=5, LSshorten=0.5)
     invProb = inverse_problem.BaseInvProblem(dmisfit, reg, opt)
diff --git a/examples/06-tdem/plot_inv_tdem_1D_raw_waveform.py b/examples/06-tdem/plot_inv_tdem_1D_raw_waveform.py
index 06b793bb5..de8aa68f5 100644
--- a/examples/06-tdem/plot_inv_tdem_1D_raw_waveform.py
+++ b/examples/06-tdem/plot_inv_tdem_1D_raw_waveform.py
@@ -80,7 +80,7 @@ def run(plotIt=True):
     data = prb.make_synthetic_data(mtrue, relative_error=0.02, noise_floor=1e-11)
 
     dmisfit = data_misfit.L2DataMisfit(simulation=prb, data=data)
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(regMesh)
     opt = optimization.InexactGaussNewton(maxIter=5, LSshorten=0.5)
     invProb = inverse_problem.BaseInvProblem(dmisfit, reg, opt)
diff --git a/examples/20-published/plot_booky_1D_time_freq_inv.py b/examples/20-published/plot_booky_1D_time_freq_inv.py
index dd42c3938..a1b7ee672 100644
--- a/examples/20-published/plot_booky_1D_time_freq_inv.py
+++ b/examples/20-published/plot_booky_1D_time_freq_inv.py
@@ -244,7 +244,7 @@ def run(plotIt=True, saveFig=False, cleanup=True):
     dmisfit = data_misfit.L2DataMisfit(simulation=prb, data=data_resolve)
 
     # Regularization
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(
         regMesh, mapping=maps.IdentityMap(regMesh)
     )
@@ -360,7 +360,7 @@ def run(plotIt=True, saveFig=False, cleanup=True):
     dmisfit = data_misfit.L2DataMisfit(simulation=prob, data=data_sky)
 
     # Regularization
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(
         regMesh, mapping=maps.IdentityMap(regMesh)
     )
diff --git a/examples/20-published/plot_booky_1Dstitched_resolve_inv.py b/examples/20-published/plot_booky_1Dstitched_resolve_inv.py
index ec900f6da..17192c115 100644
--- a/examples/20-published/plot_booky_1Dstitched_resolve_inv.py
+++ b/examples/20-published/plot_booky_1Dstitched_resolve_inv.py
@@ -125,7 +125,7 @@ def resolve_1Dinversions(
     dmisfit = data_misfit.L2DataMisfit(simulation=prb, data=dat)
 
     # regularization
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(regMesh)
     reg.reference_model = mref
 
diff --git a/examples/20-published/plot_heagyetal2017_casing.py b/examples/20-published/plot_heagyetal2017_casing.py
index fda876b95..337dc3b1a 100644
--- a/examples/20-published/plot_heagyetal2017_casing.py
+++ b/examples/20-published/plot_heagyetal2017_casing.py
@@ -244,13 +244,13 @@ class PrimSecCasingExample(object):
             # inject casing parameters so they are included in the construction
             # of the layered background + casing
             injectCasingParams = maps.InjectActiveCells(
-                None, indActive=np.r_[0, 1, 4, 5], valInactive=valInactive, nC=10
+                None, active_cells=np.r_[0, 1, 4, 5], value_inactive=valInactive, nC=10
             )
 
             # maps a list of casing parameters to the cyl mesh (below the
             # subsurface)
             paramMapPrimary = maps.ParametricCasingAndLayer(
-                self.meshp, indActive=self.indActivePrimary, slopeFact=1e4
+                self.meshp, active_cells=self.indActivePrimary, slopeFact=1e4
             )
 
             # inject air cells
@@ -538,7 +538,9 @@ class PrimSecCasingExample(object):
         # model on our mesh
         if getattr(self, "_mapping", None) is None:
             print("building secondary mapping")
-            paramMap = maps.ParametricBlockInLayer(self.meshs, indActive=self.indActive)
+            paramMap = maps.ParametricBlockInLayer(
+                self.meshs, active_cells=self.indActive
+            )
             self._mapping = (
                 self.expMap
                 * self.injActMap  # log sigma --> sigma
@@ -555,7 +557,7 @@ class PrimSecCasingExample(object):
             # block)
             print("Building primaryMap2meshs")
             paramMapPrimaryMeshs = maps.ParametricLayer(
-                self.meshs, indActive=self.indActive
+                self.meshs, active_cells=self.indActive
             )
 
             self._primaryMap2mesh = (
diff --git a/examples/20-published/plot_heagyetal2017_cyl_inversions.py b/examples/20-published/plot_heagyetal2017_cyl_inversions.py
index 53f328aea..0c72149b2 100644
--- a/examples/20-published/plot_heagyetal2017_cyl_inversions.py
+++ b/examples/20-published/plot_heagyetal2017_cyl_inversions.py
@@ -102,7 +102,7 @@ def run(plotIt=True, saveFig=False):
     # FDEM inversion
     np.random.seed(1)
     dmisfit = data_misfit.L2DataMisfit(simulation=prbFD, data=dataFD)
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(regMesh)
     opt = optimization.InexactGaussNewton(maxIterCG=10)
     invProb = inverse_problem.BaseInvProblem(dmisfit, reg, opt)
@@ -148,7 +148,7 @@ def run(plotIt=True, saveFig=False):
 
     # TDEM inversion
     dmisfit = data_misfit.L2DataMisfit(simulation=prbTD, data=dataTD)
-    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+    regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
     reg = regularization.WeightedLeastSquares(regMesh)
     opt = optimization.InexactGaussNewton(maxIterCG=10)
     invProb = inverse_problem.BaseInvProblem(dmisfit, reg, opt)
diff --git a/examples/_archived/plot_inv_dcip_dipoledipole_2_5Dinversion_irls.py b/examples/_archived/plot_inv_dcip_dipoledipole_2_5Dinversion_irls.py
index a2c67c696..03b43b500 100644
--- a/examples/_archived/plot_inv_dcip_dipoledipole_2_5Dinversion_irls.py
+++ b/examples/_archived/plot_inv_dcip_dipoledipole_2_5Dinversion_irls.py
@@ -111,7 +111,9 @@ def run(plotIt=True, survey_type="dipole-dipole", p=0.0, qx=2.0, qz=2.0):
         plt.show()
 
     # Use Exponential Map: m = log(rho)
-    actmap = maps.InjectActiveCells(mesh, indActive=actind, valInactive=np.log(1e8))
+    actmap = maps.InjectActiveCells(
+        mesh, active_cells=actind, value_inactive=np.log(1e8)
+    )
     mapping = maps.ExpMap(mesh) * actmap
 
     # Generate mtrue
diff --git a/simpeg/electromagnetics/static/spectral_induced_polarization/run.py b/simpeg/electromagnetics/static/spectral_induced_polarization/run.py
index 93ee3cf5e..36bedcbb4 100644
--- a/simpeg/electromagnetics/static/spectral_induced_polarization/run.py
+++ b/simpeg/electromagnetics/static/spectral_induced_polarization/run.py
@@ -41,12 +41,14 @@ def spectral_ip_mappings(
         indActive = np.ones(mesh.nC, dtype=bool)
 
     actmap_eta = maps.InjectActiveCells(
-        mesh, indActive=indActive, valInactive=inactive_eta
+        mesh, active_cells=indActive, value_inactive=inactive_eta
     )
     actmap_tau = maps.InjectActiveCells(
-        mesh, indActive=indActive, valInactive=inactive_tau
+        mesh, active_cells=indActive, value_inactive=inactive_tau
+    )
+    actmap_c = maps.InjectActiveCells(
+        mesh, active_cells=indActive, value_inactive=inactive_c
     )
-    actmap_c = maps.InjectActiveCells(mesh, indActive=indActive, valInactive=inactive_c)
 
     wires = maps.Wires(
         ("eta", indActive.sum()), ("tau", indActive.sum()), ("c", indActive.sum())
diff --git a/simpeg/maps/_injection.py b/simpeg/maps/_injection.py
index 4b80d6cb7..e99c5bad1 100644
--- a/simpeg/maps/_injection.py
+++ b/simpeg/maps/_injection.py
@@ -2,9 +2,11 @@
 Injection and interpolation map classes.
 """
 
+import warnings
 import discretize
 import numpy as np
 import scipy.sparse as sp
+from numbers import Number
 
 from ..utils import (
     validate_type,
@@ -13,6 +15,7 @@ from ..utils import (
     validate_active_indices,
 )
 from ._base import IdentityMap
+from ..utils.code_utils import deprecate_property
 
 
 class Mesh2Mesh(IdentityMap):
@@ -20,7 +23,7 @@ class Mesh2Mesh(IdentityMap):
     Takes a model on one mesh are translates it to another mesh.
     """
 
-    def __init__(self, meshes, indActive=None, **kwargs):
+    def __init__(self, meshes, active_cells=None, indActive=None, **kwargs):
         # Sanity checks for the meshes parameter
         try:
             mesh, mesh2 = meshes
@@ -36,7 +39,24 @@ class Mesh2Mesh(IdentityMap):
                 f"Found meshes with dimensions '{mesh.dim}' and '{mesh2.dim}'. "
                 + "Both meshes must have the same dimension."
             )
-        self.indActive = indActive
+
+        # Deprecate indActive argument
+        if indActive is not None:
+            if active_cells is not None:
+                raise TypeError(
+                    "Cannot pass both 'active_cells' and 'indActive'."
+                    "'indActive' has been deprecated and will be removed in "
+                    " SimPEG v0.24.0, please use 'active_cells' instead.",
+                )
+            warnings.warn(
+                "'indActive' has been deprecated and will be removed in "
+                " SimPEG v0.24.0, please use 'active_cells' instead.",
+                FutureWarning,
+                stacklevel=2,
+            )
+            active_cells = indActive
+
+        self.active_cells = active_cells
 
     # reset to not accepted None for mesh
     @IdentityMap.mesh.setter
@@ -60,28 +80,37 @@ class Mesh2Mesh(IdentityMap):
         )
 
     @property
-    def indActive(self):
+    def active_cells(self):
         """Active indices on target mesh.
 
         Returns
         -------
         (mesh.n_cells) numpy.ndarray of bool or none
         """
-        return self._indActive
+        return self._active_cells
 
-    @indActive.setter
-    def indActive(self, value):
+    @active_cells.setter
+    def active_cells(self, value):
         if value is not None:
-            value = validate_active_indices("indActive", value, self.mesh.n_cells)
-        self._indActive = value
+            value = validate_active_indices("active_cells", value, self.mesh.n_cells)
+        self._active_cells = value
+
+    indActive = deprecate_property(
+        active_cells,
+        "indActive",
+        "active_cells",
+        removal_version="0.24.0",
+        future_warn=True,
+        error=False,
+    )
 
     @property
     def P(self):
         if getattr(self, "_P", None) is None:
             self._P = self.mesh2.get_interpolation_matrix(
                 (
-                    self.mesh.cell_centers[self.indActive, :]
-                    if self.indActive is not None
+                    self.mesh.cell_centers[self.active_cells, :]
+                    if self.active_cells is not None
                     else self.mesh.cell_centers
                 ),
                 "CC",
@@ -92,8 +121,8 @@ class Mesh2Mesh(IdentityMap):
     @property
     def shape(self):
         """Number of parameters in the model."""
-        if self.indActive is not None:
-            return (self.indActive.sum(), self.mesh2.nC)
+        if self.active_cells is not None:
+            return (self.active_cells.sum(), self.mesh2.nC)
         return (self.mesh.nC, self.mesh2.nC)
 
     @property
@@ -131,50 +160,112 @@ class InjectActiveCells(IdentityMap):
     ----------
     mesh : discretize.BaseMesh
         A discretize mesh
-    indActive : numpy.ndarray
+    active_cells : numpy.ndarray
         Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
         or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
-    valInactive : float or numpy.ndarray
+    value_inactive : float or numpy.ndarray
         The physical property value assigned to all inactive cells in the mesh
+    indActive : numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``indActive`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
+
+    valInactive : float or numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``valInactive`` is deprecated in favor of ``value_inactive`` and
+           will be removed in SimPEG v0.24.0.
 
     """
 
-    def __init__(self, mesh, indActive=None, valInactive=0.0, nC=None):
+    def __init__(
+        self,
+        mesh,
+        active_cells=None,
+        value_inactive=0.0,
+        nC=None,
+        indActive=None,
+        valInactive=0.0,
+    ):
         self.mesh = mesh
         self.nC = nC or mesh.nC
 
-        self._indActive = validate_active_indices("indActive", indActive, self.nC)
-        self._nP = np.sum(self.indActive)
+        # Deprecate indActive argument
+        if indActive is not None:
+            if active_cells is not None:
+                raise TypeError(
+                    "Cannot pass both 'active_cells' and 'indActive'."
+                    "'indActive' has been deprecated and will be removed in "
+                    " SimPEG v0.24.0, please use 'active_cells' instead.",
+                )
+            warnings.warn(
+                "'indActive' has been deprecated and will be removed in "
+                " SimPEG v0.24.0, please use 'active_cells' instead.",
+                FutureWarning,
+                stacklevel=2,
+            )
+            active_cells = indActive
+
+        # Deprecate valInactive argument
+        if not isinstance(valInactive, Number) or valInactive != 0.0:
+            if not isinstance(value_inactive, Number) or value_inactive != 0.0:
+                raise TypeError(
+                    "Cannot pass both 'value_inactive' and 'valInactive'."
+                    "'valInactive' has been deprecated and will be removed in "
+                    " SimPEG v0.24.0, please use 'value_inactive' instead.",
+                )
+            warnings.warn(
+                "'valInactive' has been deprecated and will be removed in "
+                " SimPEG v0.24.0, please use 'value_inactive' instead.",
+                FutureWarning,
+                stacklevel=2,
+            )
+            value_inactive = valInactive
+
+        self.active_cells = active_cells
+        self._nP = np.sum(self.active_cells)
 
-        self.P = sp.eye(self.nC, format="csr")[:, self.indActive]
+        self.P = sp.eye(self.nC, format="csr")[:, self.active_cells]
 
-        self.valInactive = valInactive
+        self.value_inactive = value_inactive
 
     @property
-    def valInactive(self):
+    def value_inactive(self):
         """The physical property value assigned to all inactive cells in the mesh.
 
         Returns
         -------
         numpy.ndarray
         """
-        return self._valInactive
+        return self._value_inactive
 
-    @valInactive.setter
-    def valInactive(self, value):
+    @value_inactive.setter
+    def value_inactive(self, value):
         n_inactive = self.nC - self.nP
-        try:
-            value = validate_float("valInactive", value)
+        if isinstance(value, Number):
+            value = validate_float("value_inactive", value)
             value = np.full(n_inactive, value)
-        except Exception:
-            pass
-        value = validate_ndarray_with_shape("valInactive", value, shape=(n_inactive,))
-
-        self._valInactive = np.zeros(self.nC, dtype=float)
-        self._valInactive[~self.indActive] = value
+        value = validate_ndarray_with_shape(
+            "value_inactive", value, shape=(n_inactive,)
+        )
+        value_inactive = np.zeros(self.nC, dtype=float)
+        value_inactive[~self.active_cells] = value
+        self._value_inactive = value_inactive
+
+    valInactive = deprecate_property(
+        value_inactive,
+        "valInactive",
+        "value_inactive",
+        removal_version="0.24.0",
+        future_warn=True,
+        error=False,
+    )
 
     @property
-    def indActive(self):
+    def active_cells(self):
         """
 
         Returns
@@ -182,7 +273,22 @@ class InjectActiveCells(IdentityMap):
         numpy.ndarray of bool
 
         """
-        return self._indActive
+        return self._active_cells
+
+    @active_cells.setter
+    def active_cells(self, value):
+        if value is not None:
+            value = validate_active_indices("active_cells", value, self.nC)
+        self._active_cells = value
+
+    indActive = deprecate_property(
+        active_cells,
+        "indActive",
+        "active_cells",
+        removal_version="0.24.0",
+        future_warn=True,
+        error=False,
+    )
 
     @property
     def shape(self):
@@ -206,12 +312,12 @@ class InjectActiveCells(IdentityMap):
         int
             Number of parameters the model acts on; i.e. the number of active cells
         """
-        return int(self.indActive.sum())
+        return int(self.active_cells.sum())
 
     def _transform(self, m):
         if m.ndim > 1:
-            return self.P * m + self.valInactive[:, None]
-        return self.P * m + self.valInactive
+            return self.P * m + self.value_inactive[:, None]
+        return self.P * m + self.value_inactive
 
     def inverse(self, u):
         r"""Recover the model parameters (active cells) from a set of physical
diff --git a/simpeg/maps/_parametric.py b/simpeg/maps/_parametric.py
index db5298962..814808eb8 100644
--- a/simpeg/maps/_parametric.py
+++ b/simpeg/maps/_parametric.py
@@ -2,6 +2,7 @@
 Parametric map classes.
 """
 
+import warnings
 import discretize
 import numpy as np
 from numpy.polynomial import polynomial
@@ -19,6 +20,7 @@ from ..utils import (
     validate_active_indices,
 )
 from ._base import IdentityMap
+from ..utils.code_utils import deprecate_property
 
 
 class ParametricCircleMap(IdentityMap):
@@ -329,9 +331,16 @@ class ParametricPolyMap(IdentityMap):
         If ``True``, parameters :math:`\sigma_1` and :math:`\sigma_2` represent
         the natural log of a physical property.
     normal : {'x', 'y', 'z'}
-    actInd : numpy.ndarray
-        Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
-        or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
+    active_cells : (n_cells) numpy.ndarray, optional
+        Active cells array. Can be a boolean ``numpy.ndarray`` of length
+        ``mesh.n_cells`` or a ``numpy.ndarray`` of ``int`` containing the
+        indices of the active cells.
+    actInd : numpy.ndarray, optional
+
+        .. deprecated:: 0.23.0
+
+           Argument ``actInd`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
 
     Examples
     --------
@@ -355,7 +364,7 @@ class ParametricPolyMap(IdentityMap):
     >>> model = np.r_[sig1, sig2, c0, c1]
 
     >>> poly_map = ParametricPolyMap(
-    >>>     mesh, order=1, logSigma=False, normal='Y', actInd=ind_active, slope=1e4
+    >>>     mesh, order=1, logSigma=False, normal='Y', active_cells=ind_active, slope=1e4
     >>> )
     >>> act_map = InjectActiveCells(mesh, ind_active, 0.)
 
@@ -376,7 +385,7 @@ class ParametricPolyMap(IdentityMap):
     >>> model = np.r_[sig1, sig2, c0, cx, cy, cxy]
     >>>
     >>> poly_map = ParametricPolyMap(
-    >>>     mesh, order=[1, 1], logSigma=False, normal='Z', actInd=ind_active, slope=2
+    >>>     mesh, order=[1, 1], logSigma=False, normal='Z', active_cells=ind_active, slope=2
     >>> )
     >>> act_map = InjectActiveCells(mesh, ind_active, 0.)
     >>>
@@ -387,16 +396,41 @@ class ParametricPolyMap(IdentityMap):
 
     """
 
-    def __init__(self, mesh, order, logSigma=True, normal="X", actInd=None, slope=1e4):
+    def __init__(
+        self,
+        mesh,
+        order,
+        logSigma=True,
+        normal="X",
+        active_cells=None,
+        slope=1e4,
+        actInd=None,
+    ):
         super().__init__(mesh=mesh)
         self.logSigma = logSigma
         self.order = order
         self.normal = normal
         self.slope = slope
 
-        if actInd is None:
-            actInd = np.ones(mesh.n_cells, dtype=bool)
-        self.actInd = actInd
+        # Deprecate actInd argument
+        if actInd is not None:
+            if active_cells is not None:
+                raise TypeError(
+                    "Cannot pass both 'active_cells' and 'actInd'."
+                    "'actInd' has been deprecated and will be removed in "
+                    " SimPEG v0.24.0, please use 'active_cells' instead.",
+                )
+            warnings.warn(
+                "'actInd' has been deprecated and will be removed in "
+                " SimPEG v0.24.0, please use 'active_cells' instead.",
+                FutureWarning,
+                stacklevel=2,
+            )
+            active_cells = actInd
+
+        if active_cells is None:
+            active_cells = np.ones(mesh.n_cells, dtype=bool)
+        self.active_cells = active_cells
 
     @property
     def slope(self):
@@ -443,19 +477,30 @@ class ParametricPolyMap(IdentityMap):
         self._normal = validate_string("normal", value, ("x", "y", "z"))
 
     @property
-    def actInd(self):
+    def active_cells(self):
         """Active indices of the mesh.
 
         Returns
         -------
         (mesh.n_cells) numpy.ndarray of bool
         """
-        return self._actInd
+        return self._active_cells
 
-    @actInd.setter
-    def actInd(self, value):
-        self._actInd = validate_active_indices("actInd", value, self.mesh.n_cells)
-        self._nC = sum(self._actInd)
+    @active_cells.setter
+    def active_cells(self, value):
+        self._active_cells = validate_active_indices(
+            "active_cells", value, self.mesh.n_cells
+        )
+        self._nC = sum(self._active_cells)
+
+    actInd = deprecate_property(
+        active_cells,
+        "actInd",
+        "active_cells",
+        removal_version="0.24.0",
+        future_warn=True,
+        error=False,
+    )
 
     @property
     def shape(self):
@@ -467,7 +512,7 @@ class ParametricPolyMap(IdentityMap):
             The dimensions of the mapping as a tuple of the form
             (*nC* , *nP*), where *nP* is the number of model parameters
             the mapping acts on and *nC* is the number of active cells
-            being mapping to. If *actInd* is ``None``, then
+            being mapping to. If ``active_cells`` is ``None``, then
             *nC = mesh.nC*.
         """
         return (self.nC, self.nP)
@@ -507,8 +552,8 @@ class ParametricPolyMap(IdentityMap):
 
         # 2D
         if self.mesh.dim == 2:
-            X = self.mesh.cell_centers[self.actInd, 0]
-            Y = self.mesh.cell_centers[self.actInd, 1]
+            X = self.mesh.cell_centers[self.active_cells, 0]
+            Y = self.mesh.cell_centers[self.active_cells, 1]
             if self.normal == "x":
                 f = polynomial.polyval(Y, c) - X
             elif self.normal == "y":
@@ -518,9 +563,9 @@ class ParametricPolyMap(IdentityMap):
 
         # 3D
         elif self.mesh.dim == 3:
-            X = self.mesh.cell_centers[self.actInd, 0]
-            Y = self.mesh.cell_centers[self.actInd, 1]
-            Z = self.mesh.cell_centers[self.actInd, 2]
+            X = self.mesh.cell_centers[self.active_cells, 0]
+            Y = self.mesh.cell_centers[self.active_cells, 1]
+            Z = self.mesh.cell_centers[self.active_cells, 2]
 
             if self.normal == "x":
                 f = (
@@ -596,8 +641,8 @@ class ParametricPolyMap(IdentityMap):
 
         # 2D
         if self.mesh.dim == 2:
-            X = self.mesh.cell_centers[self.actInd, 0]
-            Y = self.mesh.cell_centers[self.actInd, 1]
+            X = self.mesh.cell_centers[self.active_cells, 0]
+            Y = self.mesh.cell_centers[self.active_cells, 1]
 
             if self.normal == "x":
                 f = polynomial.polyval(Y, c) - X
@@ -610,9 +655,9 @@ class ParametricPolyMap(IdentityMap):
 
         # 3D
         elif self.mesh.dim == 3:
-            X = self.mesh.cell_centers[self.actInd, 0]
-            Y = self.mesh.cell_centers[self.actInd, 1]
-            Z = self.mesh.cell_centers[self.actInd, 2]
+            X = self.mesh.cell_centers[self.active_cells, 0]
+            Y = self.mesh.cell_centers[self.active_cells, 1]
+            Z = self.mesh.cell_centers[self.active_cells, 2]
 
             if self.normal == "x":
                 f = (
@@ -1049,21 +1094,53 @@ class BaseParametric(IdentityMap):
     ----------
     mesh : discretize.BaseMesh
         A discretize mesh
-    indActive : numpy.ndarray, optional
-        Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
-        or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
     slope : float, optional
         Directly set the scaling parameter *slope* which sets the sharpness of boundaries
         between units.
     slopeFact : float, optional
         Set sharpness of boundaries between units based on minimum cell size. If set,
         the scalaing parameter *slope = slopeFact / dh*.
+    active_cells : numpy.ndarray, optional
+        Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
+        or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
+    indActive : numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``indActive`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
+
 
     """
 
-    def __init__(self, mesh, slope=None, slopeFact=1.0, indActive=None, **kwargs):
+    def __init__(
+        self,
+        mesh,
+        slope=None,
+        slopeFact=1.0,
+        active_cells=None,
+        indActive=None,
+        **kwargs,
+    ):
         super(BaseParametric, self).__init__(mesh, **kwargs)
-        self.indActive = indActive
+
+        # Deprecate indActive argument
+        if indActive is not None:
+            if active_cells is not None:
+                raise TypeError(
+                    "Cannot pass both 'active_cells' and 'indActive'."
+                    "'indActive' has been deprecated and will be removed in "
+                    " SimPEG v0.24.0, please use 'active_cells' instead.",
+                )
+            warnings.warn(
+                "'indActive' has been deprecated and will be removed in "
+                " SimPEG v0.24.0, please use 'active_cells' instead.",
+                FutureWarning,
+                stacklevel=2,
+            )
+            active_cells = indActive
+
+        self.active_cells = active_cells
         self.slopeFact = slopeFact
         if slope is not None:
             self.slope = slope
@@ -1098,14 +1175,23 @@ class BaseParametric(IdentityMap):
         self.slope = self._slopeFact / self.mesh.edge_lengths.min()
 
     @property
-    def indActive(self):
-        return self._indActive
+    def active_cells(self):
+        return self._active_cells
 
-    @indActive.setter
-    def indActive(self, value):
+    @active_cells.setter
+    def active_cells(self, value):
         if value is not None:
-            value = validate_active_indices("indActive", value, self.mesh.n_cells)
-        self._indActive = value
+            value = validate_active_indices("active_cells", value, self.mesh.n_cells)
+        self._active_cells = value
+
+    indActive = deprecate_property(
+        active_cells,
+        "indActive",
+        "active_cells",
+        removal_version="0.24.0",
+        future_warn=True,
+        error=False,
+    )
 
     @property
     def x(self):
@@ -1121,16 +1207,16 @@ class BaseParametric(IdentityMap):
                 self._x = [
                     (
                         self.mesh.cell_centers
-                        if self.indActive is None
-                        else self.mesh.cell_centers[self.indActive]
+                        if self.active_cells is None
+                        else self.mesh.cell_centers[self.active_cells]
                     )
                 ][0]
             else:
                 self._x = [
                     (
                         self.mesh.cell_centers[:, 0]
-                        if self.indActive is None
-                        else self.mesh.cell_centers[self.indActive, 0]
+                        if self.active_cells is None
+                        else self.mesh.cell_centers[self.active_cells, 0]
                     )
                 ][0]
         return self._x
@@ -1149,8 +1235,8 @@ class BaseParametric(IdentityMap):
                 self._y = [
                     (
                         self.mesh.cell_centers[:, 1]
-                        if self.indActive is None
-                        else self.mesh.cell_centers[self.indActive, 1]
+                        if self.active_cells is None
+                        else self.mesh.cell_centers[self.active_cells, 1]
                     )
                 ][0]
             else:
@@ -1171,8 +1257,8 @@ class BaseParametric(IdentityMap):
                 self._z = [
                     (
                         self.mesh.cell_centers[:, 2]
-                        if self.indActive is None
-                        else self.mesh.cell_centers[self.indActive, 2]
+                        if self.active_cells is None
+                        else self.mesh.cell_centers[self.active_cells, 2]
                     )
                 ][0]
             else:
@@ -1226,7 +1312,7 @@ class ParametricLayer(BaseParametric):
     ----------
     mesh : discretize.BaseMesh
         A discretize mesh
-    indActive : numpy.ndarray
+    active_cells : numpy.ndarray, optional
         Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
         or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
     slope : float
@@ -1235,6 +1321,12 @@ class ParametricLayer(BaseParametric):
     slopeFact : float
         Scaling factor for the sharpness of the boundaries based on cell size.
         Using this option, we set *a = slopeFact / dh*.
+    indActive : numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``indActive`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
 
     Examples
     --------
@@ -1256,7 +1348,7 @@ class ParametricLayer(BaseParametric):
     >>> model = np.r_[sig0, sig1, zL, h]
 
     >>> layer_map = ParametricLayer(
-    >>>     mesh, indActive=ind_active, slope=4
+    >>>     mesh, active_cells=ind_active, slope=4
     >>> )
     >>> act_map = InjectActiveCells(mesh, ind_active, 0.)
 
@@ -1291,8 +1383,8 @@ class ParametricLayer(BaseParametric):
             and *nAct* is the number of active cells in the mesh, **shape**
             returns a tuple (*nAct* , *4*).
         """
-        if self.indActive is not None:
-            return (sum(self.indActive), self.nP)
+        if self.active_cells is not None:
+            return (sum(self.active_cells), self.nP)
         return (self.mesh.nC, self.nP)
 
     def mDict(self, m):
@@ -1484,7 +1576,7 @@ class ParametricBlock(BaseParametric):
     ----------
     mesh : discretize.BaseMesh
         A discretize mesh
-    indActive : numpy.ndarray
+    active_cells : numpy.ndarray
         Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
         or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
     slope : float
@@ -1497,6 +1589,12 @@ class ParametricBlock(BaseParametric):
         Epsilon value used in the ekblom representation of the block
     p : float
         p-value used in the ekblom representation of the block.
+    indActive : numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``indActive`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
 
     Examples
     --------
@@ -1517,7 +1615,7 @@ class ParametricBlock(BaseParametric):
     >>> sig0, sigb, xb, Lx, yb, Ly = 5., 10., 5., 4., 4., 2.
     >>> model = np.r_[sig0, sigb, xb, Lx, yb, Ly]
 
-    >>> block_map = ParametricBlock(mesh, indActive=ind_active)
+    >>> block_map = ParametricBlock(mesh, active_cells=ind_active)
     >>> act_map = InjectActiveCells(mesh, ind_active, 0.)
 
     >>> fig = plt.figure(figsize=(5, 5))
@@ -1591,8 +1689,8 @@ class ParametricBlock(BaseParametric):
             and *nAct* is the number of active cells in the mesh, **shape**
             returns a tuple (*nAct* , *nP*).
         """
-        if self.indActive is not None:
-            return (sum(self.indActive), self.nP)
+        if self.active_cells is not None:
+            return (sum(self.active_cells), self.nP)
         return (self.mesh.nC, self.nP)
 
     def _mDict1d(self, m):
@@ -1829,7 +1927,7 @@ class ParametricEllipsoid(ParametricBlock):
     ----------
     mesh : discretize.BaseMesh
         A discretize mesh
-    indActive : numpy.ndarray
+    active_cells : numpy.ndarray
         Active cells array. Can be a boolean ``numpy.ndarray`` of length *mesh.nC*
         or a ``numpy.ndarray`` of ``int`` containing the indices of the active cells.
     slope : float
@@ -1840,6 +1938,12 @@ class ParametricEllipsoid(ParametricBlock):
         Using this option, we set *a = slopeFact / dh*.
     epsilon : float
         Epsilon value used in the ekblom representation of the block
+    indActive : numpy.ndarray
+
+        .. deprecated:: 0.23.0
+
+           Argument ``indActive`` is deprecated in favor of ``active_cells`` and will
+           be removed in SimPEG v0.24.0.
 
     Examples
     --------
@@ -1860,7 +1964,7 @@ class ParametricEllipsoid(ParametricBlock):
     >>> sig0, sigb, xb, Lx, yb, Ly = 5., 10., 5., 4., 4., 3.
     >>> model = np.r_[sig0, sigb, xb, Lx, yb, Ly]
 
-    >>> ellipsoid_map = ParametricEllipsoid(mesh, indActive=ind_active)
+    >>> ellipsoid_map = ParametricEllipsoid(mesh, active_cells=ind_active)
     >>> act_map = InjectActiveCells(mesh, ind_active, 0.)
 
     >>> fig = plt.figure(figsize=(5, 5))
@@ -1906,8 +2010,8 @@ class ParametricCasingAndLayer(ParametricLayer):
 
     @property
     def shape(self):
-        if self.indActive is not None:
-            return (sum(self.indActive), self.nP)
+        if self.active_cells is not None:
+            return (sum(self.active_cells), self.nP)
         return (self.mesh.nC, self.nP)
 
     def mDict(self, m):
@@ -2234,7 +2338,7 @@ class ParametricBlockInLayer(ParametricLayer):
                             spacing to give the slope of the arctan
                             functions
     :param float slope: slope of the arctan function
-    :param numpy.ndarray indActive: bool vector with
+    :param numpy.ndarray active_cells: bool vector with
 
     """
 
@@ -2250,8 +2354,8 @@ class ParametricBlockInLayer(ParametricLayer):
 
     @property
     def shape(self):
-        if self.indActive is not None:
-            return (sum(self.indActive), self.nP)
+        if self.active_cells is not None:
+            return (sum(self.active_cells), self.nP)
         return (self.mesh.nC, self.nP)
 
     def _mDict2d(self, m):
diff --git a/tutorials/01-models_mapping/plot_1_tensor_models.py b/tutorials/01-models_mapping/plot_1_tensor_models.py
index ebcf496e9..d2a06ca02 100644
--- a/tutorials/01-models_mapping/plot_1_tensor_models.py
+++ b/tutorials/01-models_mapping/plot_1_tensor_models.py
@@ -263,7 +263,9 @@ active_map = maps.InjectActiveCells(mesh, ind_active, air_value)
 
 # Define the model on subsurface cells
 model = np.r_[background_value, block_value, xc, dx, yc, dy, zc, dz]
-parametric_map = maps.ParametricBlock(mesh, indActive=ind_active, epsilon=1e-10, p=5.0)
+parametric_map = maps.ParametricBlock(
+    mesh, active_cells=ind_active, epsilon=1e-10, p=5.0
+)
 
 # Define a single mapping from model to mesh
 model_map = active_map * parametric_map
diff --git a/tutorials/01-models_mapping/plot_2_cyl_models.py b/tutorials/01-models_mapping/plot_2_cyl_models.py
index cb118b43f..89f1ab42d 100644
--- a/tutorials/01-models_mapping/plot_2_cyl_models.py
+++ b/tutorials/01-models_mapping/plot_2_cyl_models.py
@@ -161,7 +161,9 @@ active_map = maps.InjectActiveCells(mesh, ind_active, air_value)
 model = np.r_[
     background_value, pipe_value, rc, dr, 0.0, 1.0, zc, dz
 ]  # add dummy values for phi
-parametric_map = maps.ParametricBlock(mesh, indActive=ind_active, epsilon=1e-10, p=8.0)
+parametric_map = maps.ParametricBlock(
+    mesh, active_cells=ind_active, epsilon=1e-10, p=8.0
+)
 
 # Define a single mapping from model to mesh
 model_map = active_map * parametric_map
diff --git a/tutorials/01-models_mapping/plot_3_tree_models.py b/tutorials/01-models_mapping/plot_3_tree_models.py
index 2a8549aa6..252e3ec95 100644
--- a/tutorials/01-models_mapping/plot_3_tree_models.py
+++ b/tutorials/01-models_mapping/plot_3_tree_models.py
@@ -279,7 +279,9 @@ active_map = maps.InjectActiveCells(mesh, ind_active, air_value)
 
 # Define the model on subsurface cells
 model = np.r_[background_value, block_value, xc, dx, yc, dy, zc, dz]
-parametric_map = maps.ParametricBlock(mesh, indActive=ind_active, epsilon=1e-10, p=5.0)
+parametric_map = maps.ParametricBlock(
+    mesh, active_cells=ind_active, epsilon=1e-10, p=5.0
+)
 
 # Define a single mapping from model to mesh
 model_map = active_map * parametric_map


Test patch:
diff --git a/simpeg/electromagnetics/natural_source/utils/test_utils.py b/simpeg/electromagnetics/natural_source/utils/test_utils.py
index 878ddaea8..8effd747d 100644
--- a/simpeg/electromagnetics/natural_source/utils/test_utils.py
+++ b/simpeg/electromagnetics/natural_source/utils/test_utils.py
@@ -242,7 +242,7 @@ def setupSimpegNSEM_tests_location_assign_list(
 
     # Set the mapping
     actMap = maps.InjectActiveCells(
-        mesh=mesh, indActive=active, valInactive=np.log(1e-8)
+        mesh=mesh, active_cells=active, value_inactive=np.log(1e-8)
     )
     mapping = maps.ExpMap(mesh) * actMap
     # print(survey_ns.source_list)
@@ -367,7 +367,7 @@ def setupSimpegNSEM_PrimarySecondary(inputSetup, freqs, comp="Imp", singleFreq=F
 
     # Set the mapping
     actMap = maps.InjectActiveCells(
-        mesh=mesh, indActive=active, valInactive=np.log(1e-8)
+        mesh=mesh, active_cells=active, value_inactive=np.log(1e-8)
     )
     mapping = maps.ExpMap(mesh) * actMap
     # print(survey_ns.source_list)
diff --git a/tests/base/regularizations/test_regularization.py b/tests/base/regularizations/test_regularization.py
index 257dca9db..9c5023c30 100644
--- a/tests/base/regularizations/test_regularization.py
+++ b/tests/base/regularizations/test_regularization.py
@@ -469,7 +469,7 @@ class RegularizationTests(unittest.TestCase):
         )
         mapping = maps.ExpMap(mesh) * maps.SurjectVertical1D(mesh) * actMap
 
-        regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].indActive]])
+        regMesh = discretize.TensorMesh([mesh.h[2][mapping.maps[-1].active_cells]])
         reg = regularization.WeightedLeastSquares(regMesh)
 
         self.assertTrue(reg._nC_residual == regMesh.nC)
diff --git a/tests/base/test_maps.py b/tests/base/test_maps.py
index f5a815a81..0441adf7d 100644
--- a/tests/base/test_maps.py
+++ b/tests/base/test_maps.py
@@ -1,3 +1,4 @@
+from copy import deepcopy
 import numpy as np
 import unittest
 import discretize
@@ -8,6 +9,13 @@ from simpeg import maps, models, utils
 from discretize.utils import mesh_builder_xyz, refine_tree_xyz, active_from_xyz
 import inspect
 
+from simpeg.maps._parametric import (
+    BaseParametric,
+    ParametricLayer,
+    ParametricBlock,
+    ParametricEllipsoid,
+)
+
 TOL = 1e-14
 
 np.random.seed(121)
@@ -772,5 +780,275 @@ def test_linearity():
     assert all(not m.is_linear for m in non_linear_maps)
 
 
+class DeprecatedIndActive:
+    """Base class to test deprecated ``actInd`` and ``indActive`` arguments in maps."""
+
+    @pytest.fixture
+    def mesh(self):
+        """Sample mesh."""
+        return discretize.TensorMesh([np.ones(10), np.ones(10)], "CN")
+
+    @pytest.fixture
+    def active_cells(self, mesh):
+        """Sample active cells for the mesh."""
+        active_cells = np.ones(mesh.n_cells, dtype=bool)
+        active_cells[0] = False
+        return active_cells
+
+    def get_message_duplicated_error(self, old_name, new_name, version="v0.24.0"):
+        msg = (
+            f"Cannot pass both '{new_name}' and '{old_name}'."
+            f"'{old_name}' has been deprecated and will be removed in "
+            f" SimPEG {version}, please use '{new_name}' instead."
+        )
+        return msg
+
+    def get_message_deprecated_warning(self, old_name, new_name, version="v0.24.0"):
+        msg = (
+            f"'{old_name}' has been deprecated and will be removed in "
+            f" SimPEG {version}, please use '{new_name}' instead."
+        )
+        return msg
+
+
+class TestParametricPolyMap(DeprecatedIndActive):
+    """Test deprecated ``actInd`` in ParametricPolyMap."""
+
+    def test_warning_argument(self, mesh, active_cells):
+        """
+        Test if warning is raised after passing ``actInd`` to the constructor.
+        """
+        msg = self.get_message_deprecated_warning("actInd", "active_cells")
+        with pytest.warns(FutureWarning, match=msg):
+            maps.ParametricPolyMap(mesh, 2, actInd=active_cells)
+
+    def test_error_duplicated_argument(self, mesh, active_cells):
+        """
+        Test error after passing ``actInd`` and ``active_cells`` to the constructor.
+        """
+        msg = self.get_message_duplicated_error("actInd", "active_cells")
+        with pytest.raises(TypeError, match=msg):
+            maps.ParametricPolyMap(
+                mesh, 2, active_cells=active_cells, actInd=active_cells
+            )
+
+    def test_warning_accessing_property(self, mesh, active_cells):
+        """
+        Test warning when trying to access the ``actInd`` property.
+        """
+        mapping = maps.ParametricPolyMap(mesh, 2, active_cells=active_cells)
+        msg = "actInd has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            old_act_ind = mapping.actInd
+        np.testing.assert_allclose(mapping.active_cells, old_act_ind)
+
+    def test_warning_setter(self, mesh, active_cells):
+        """
+        Test warning when trying to set the ``actInd`` property.
+        """
+        mapping = maps.ParametricPolyMap(mesh, 2, active_cells=active_cells)
+        # Define new active cells to pass to the setter
+        new_active_cells = active_cells.copy()
+        new_active_cells[-4:] = False
+        msg = "actInd has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            mapping.actInd = new_active_cells
+        np.testing.assert_allclose(mapping.active_cells, new_active_cells)
+
+
+class TestMesh2Mesh(DeprecatedIndActive):
+    """Test deprecated ``indActive`` in ``Mesh2Mesh``."""
+
+    @pytest.fixture
+    def meshes(self, mesh):
+        return [mesh, deepcopy(mesh)]
+
+    def test_warning_argument(self, meshes, active_cells):
+        """
+        Test if warning is raised after passing ``indActive`` to the constructor.
+        """
+        msg = self.get_message_deprecated_warning("indActive", "active_cells")
+        with pytest.warns(FutureWarning, match=msg):
+            maps.Mesh2Mesh(meshes, indActive=active_cells)
+
+    def test_error_duplicated_argument(self, meshes, active_cells):
+        """
+        Test error after passing ``indActive`` and ``active_cells`` to the constructor.
+        """
+        msg = self.get_message_duplicated_error("indActive", "active_cells")
+        with pytest.raises(TypeError, match=msg):
+            maps.Mesh2Mesh(meshes, active_cells=active_cells, indActive=active_cells)
+
+    def test_warning_accessing_property(self, meshes, active_cells):
+        """
+        Test warning when trying to access the ``indActive`` property.
+        """
+        mapping = maps.Mesh2Mesh(meshes, active_cells=active_cells)
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            old_act_ind = mapping.indActive
+        np.testing.assert_allclose(mapping.active_cells, old_act_ind)
+
+    def test_warning_setter(self, meshes, active_cells):
+        """
+        Test warning when trying to set the ``indActive`` property.
+        """
+        mapping = maps.Mesh2Mesh(meshes, active_cells=active_cells)
+        # Define new active cells to pass to the setter
+        new_active_cells = active_cells.copy()
+        new_active_cells[-4:] = False
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            mapping.indActive = new_active_cells
+        np.testing.assert_allclose(mapping.active_cells, new_active_cells)
+
+
+class TestInjectActiveCells(DeprecatedIndActive):
+    """Test deprecated ``indActive`` and ``valInactive`` in ``InjectActiveCells``."""
+
+    def test_indactive_warning_argument(self, mesh, active_cells):
+        """
+        Test if warning is raised after passing ``indActive`` to the constructor.
+        """
+        msg = self.get_message_deprecated_warning("indActive", "active_cells")
+        with pytest.warns(FutureWarning, match=msg):
+            maps.InjectActiveCells(mesh, indActive=active_cells)
+
+    def test_indactive_error_duplicated_argument(self, mesh, active_cells):
+        """
+        Test error after passing ``indActive`` and ``active_cells`` to the constructor.
+        """
+        msg = self.get_message_duplicated_error("indActive", "active_cells")
+        with pytest.raises(TypeError, match=msg):
+            maps.InjectActiveCells(
+                mesh, active_cells=active_cells, indActive=active_cells
+            )
+
+    def test_indactive_warning_accessing_property(self, mesh, active_cells):
+        """
+        Test warning when trying to access the ``indActive`` property.
+        """
+        mapping = maps.InjectActiveCells(mesh, active_cells=active_cells)
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            old_act_ind = mapping.indActive
+        np.testing.assert_allclose(mapping.active_cells, old_act_ind)
+
+    def test_indactive_warning_setter(self, mesh, active_cells):
+        """
+        Test warning when trying to set the ``indActive`` property.
+        """
+        mapping = maps.InjectActiveCells(mesh, active_cells=active_cells)
+        # Define new active cells to pass to the setter
+        new_active_cells = active_cells.copy()
+        new_active_cells[-4:] = False
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            mapping.indActive = new_active_cells
+        np.testing.assert_allclose(mapping.active_cells, new_active_cells)
+
+    @pytest.mark.parametrize("valInactive", (3.14, np.array([1])))
+    def test_valinactive_warning_argument(self, mesh, active_cells, valInactive):
+        """
+        Test if warning is raised after passing ``valInactive`` to the constructor.
+        """
+        msg = self.get_message_deprecated_warning("valInactive", "value_inactive")
+        with pytest.warns(FutureWarning, match=msg):
+            maps.InjectActiveCells(
+                mesh, active_cells=active_cells, valInactive=valInactive
+            )
+
+    @pytest.mark.parametrize("valInactive", (3.14, np.array([3.14])))
+    @pytest.mark.parametrize("value_inactive", (3.14, np.array([3.14])))
+    def test_valinactive_error_duplicated_argument(
+        self, mesh, active_cells, valInactive, value_inactive
+    ):
+        """
+        Test error after passing ``valInactive`` and ``value_inactive`` to the
+        constructor.
+        """
+        msg = self.get_message_duplicated_error("valInactive", "value_inactive")
+        with pytest.raises(TypeError, match=msg):
+            maps.InjectActiveCells(
+                mesh,
+                active_cells=active_cells,
+                value_inactive=value_inactive,
+                valInactive=valInactive,
+            )
+
+    def test_valinactive_warning_accessing_property(self, mesh, active_cells):
+        """
+        Test warning when trying to access the ``valInactive`` property.
+        """
+        mapping = maps.InjectActiveCells(
+            mesh, active_cells=active_cells, value_inactive=3.14
+        )
+        msg = "valInactive has been deprecated, please use value_inactive"
+        with pytest.warns(FutureWarning, match=msg):
+            old_value = mapping.valInactive
+        np.testing.assert_allclose(mapping.value_inactive, old_value)
+
+    def test_valinactive_warning_setter(self, mesh, active_cells):
+        """
+        Test warning when trying to set the ``valInactive`` property.
+        """
+        mapping = maps.InjectActiveCells(
+            mesh, active_cells=active_cells, value_inactive=3.14
+        )
+        msg = "valInactive has been deprecated, please use value_inactive"
+        with pytest.warns(FutureWarning, match=msg):
+            mapping.valInactive = 4.5
+        np.testing.assert_allclose(mapping.value_inactive[~mapping.active_cells], 4.5)
+
+
+class TestParametric(DeprecatedIndActive):
+    """Test deprecated ``indActive`` in parametric mappings."""
+
+    CLASSES = (BaseParametric, ParametricLayer, ParametricBlock, ParametricEllipsoid)
+
+    @pytest.mark.parametrize("map_class", CLASSES)
+    def test_indactive_warning_argument(self, mesh, active_cells, map_class):
+        """
+        Test if warning is raised after passing ``indActive`` to the constructor.
+        """
+        msg = self.get_message_deprecated_warning("indActive", "active_cells")
+        with pytest.warns(FutureWarning, match=msg):
+            map_class(mesh, indActive=active_cells)
+
+    @pytest.mark.parametrize("map_class", CLASSES)
+    def test_indactive_error_duplicated_argument(self, mesh, active_cells, map_class):
+        """
+        Test error after passing ``indActive`` and ``active_cells`` to the constructor.
+        """
+        msg = self.get_message_duplicated_error("indActive", "active_cells")
+        with pytest.raises(TypeError, match=msg):
+            map_class(mesh, active_cells=active_cells, indActive=active_cells)
+
+    @pytest.mark.parametrize("map_class", CLASSES)
+    def test_indactive_warning_accessing_property(self, mesh, active_cells, map_class):
+        """
+        Test warning when trying to access the ``indActive`` property.
+        """
+        mapping = map_class(mesh, active_cells=active_cells)
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            old_act_ind = mapping.indActive
+        np.testing.assert_allclose(mapping.active_cells, old_act_ind)
+
+    @pytest.mark.parametrize("map_class", CLASSES)
+    def test_indactive_warning_setter(self, mesh, active_cells, map_class):
+        """
+        Test warning when trying to set the ``indActive`` property.
+        """
+        mapping = map_class(mesh, active_cells=active_cells)
+        # Define new active cells to pass to the setter
+        new_active_cells = active_cells.copy()
+        new_active_cells[-4:] = False
+        msg = "indActive has been deprecated, please use active_cells"
+        with pytest.warns(FutureWarning, match=msg):
+            mapping.indActive = new_active_cells
+        np.testing.assert_allclose(mapping.active_cells, new_active_cells)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/tests/em/nsem/inversion/test_complex_resistivity.py b/tests/em/nsem/inversion/test_complex_resistivity.py
index 67cdbbba2..477a81b7e 100644
--- a/tests/em/nsem/inversion/test_complex_resistivity.py
+++ b/tests/em/nsem/inversion/test_complex_resistivity.py
@@ -79,7 +79,7 @@ class ComplexResistivityTest(unittest.TestCase):
 
         # Set the mapping
         actMap = maps.InjectActiveCells(
-            mesh=self.mesh, indActive=self.active, valInactive=np.log(1e-8)
+            mesh=self.mesh, active_cells=self.active, value_inactive=np.log(1e-8)
         )
         mapping = maps.ExpMap(self.mesh) * actMap
         # print(survey_ns.source_list)
@@ -121,7 +121,7 @@ class ComplexResistivityTest(unittest.TestCase):
 
         # Set the mapping
         actMap = maps.InjectActiveCells(
-            mesh=self.mesh, indActive=self.active, valInactive=np.log(1e-8)
+            mesh=self.mesh, active_cells=self.active, value_inactive=np.log(1e-8)
         )
         mapping = maps.ExpMap(self.mesh) * actMap
         # print(survey_ns.source_list)
@@ -173,7 +173,7 @@ class ComplexResistivityTest(unittest.TestCase):
 
         # Set the mapping
         actMap = maps.InjectActiveCells(
-            mesh=self.mesh, indActive=self.active, valInactive=np.log(1e-8)
+            mesh=self.mesh, active_cells=self.active, value_inactive=np.log(1e-8)
         )
         mapping = maps.ExpMap(self.mesh) * actMap
         # print(survey_ns.source_list)
@@ -212,7 +212,7 @@ class ComplexResistivityTest(unittest.TestCase):
 
         # Set the mapping
         actMap = maps.InjectActiveCells(
-            mesh=self.mesh, indActive=self.active, valInactive=np.log(1e-8)
+            mesh=self.mesh, active_cells=self.active, value_inactive=np.log(1e-8)
         )
         mapping = maps.ExpMap(self.mesh) * actMap
         # print(survey_ns.source_list)