diff --git a/src/auspex/experiment.py b/src/auspex/experiment.py
index 936fa70f..6452b6f8 100644
--- a/src/auspex/experiment.py
+++ b/src/auspex/experiment.py
@@ -237,7 +237,6 @@ class Experiment(metaclass=MetaExperiment):
 
         # Run the stream init
         self.init_streams()
-        self.update_descriptors()
 
     def set_graph(self, edges):
         unique_nodes = []
@@ -248,7 +247,6 @@ class Experiment(metaclass=MetaExperiment):
                 unique_nodes.append(ee.parent)
         self.nodes = unique_nodes
         self.graph = ExperimentGraph(edges, self.loop)
-        self.update_descriptors()
 
     def init_streams(self):
         """Establish the base descriptors for any internal data streams and connectors."""
@@ -386,6 +384,9 @@ class Experiment(metaclass=MetaExperiment):
         self.instrs_connected = False
 
     def run_sweeps(self):
+        # Propagate the descriptors through the network
+        self.update_descriptors()
+
         #connect all instruments
         if not self.instrs_connected:
             self.connect_instruments()
@@ -495,7 +496,6 @@ class Experiment(metaclass=MetaExperiment):
         for oc in self.output_connectors.values():
             logger.debug("Adding axis %s to connector %s.", axis, oc.name)
             oc.descriptor.add_axis(axis)
-        self.update_descriptors()
 
     def add_sweep(self, parameters, sweep_list, refine_func=None, callback_func=None, metadata=None):
         ax = SweepAxis(parameters, sweep_list, refine_func=refine_func, callback_func=callback_func, metadata=metadata)
diff --git a/src/auspex/instruments/instrument.py b/src/auspex/instruments/instrument.py
index c00a8e5d..93874085 100644
--- a/src/auspex/instruments/instrument.py
+++ b/src/auspex/instruments/instrument.py
@@ -1,6 +1,6 @@
-# __all__ = ['Command', 'FloatCommand', 'StringCommand', 'IntCommand', 'RampCommand',
-#             'SCPICommand',
-#             'DigitizerChannel',
+# __all__ = ['Command', 'FloatCommand', 'StringCommand', 'IntCommand', 'RampCommand', 
+#             'SCPICommand', 
+#             'DigitizerChannel', 
 __all__ = ['Instrument'] # 'SCPIInstrument', 'CLibInstrument', 'MetaInstrument']
 
 import numpy as np
@@ -226,24 +226,22 @@ class SCPIInstrument(Instrument):
             # Load the dummy interface, unless we see that GPIB is in the resource string
             if any([x in self.resource_name for x in ["GPIB", "USB", "SOCKET", "hislip", "inst0", "COM"]]):
                 interface_type = "VISA"
-
+                
         try:
             if interface_type is None:
                 logger.debug("Instrument {} is using a generic instrument " +
                     "interface as none was provided.".format(self.name))
                 self.interface = Interface()
             elif interface_type == "VISA":
-                if "GPIB" in self.full_resource_name:
-                    pass
-                elif any(is_valid_ipv4(substr) for substr in self.full_resource_name.split("::")) and "TCPIP" not in self.full_resource_name:
+                if any(is_valid_ipv4(substr) for substr in self.full_resource_name.split("::")) and "TCPIP" not in self.full_resource_name:
                     # assume single NIC for now
                     self.full_resource_name = "TCPIP0::" + self.full_resource_name
                 self.interface = VisaInterface(self.full_resource_name)
                 print(self.interface._resource)
                 logger.debug("A pyVISA interface {} was created for instrument {}.".format(str(self.interface._resource), self.name))
-            elif interface_type == "Prologix":
+            elif interface_type == "Prologix":                
                 self.interface = PrologixInterface(self.full_resource_name)
-
+                    
             else:
                 raise ValueError("That interface type is not yet recognized.")
         except:

Defer update_descriptors() until run time
Many filters are quite confused about their lot in life before the experiment has all of its parameter sweeps added. Defer calling update_descriptors() until we actually want to run.
diff --git a/test/test_average.py b/test/test_average.py
index 5c015bd1..93bf241d 100644
--- a/test/test_average.py
+++ b/test/test_average.py
@@ -136,7 +136,7 @@ class AverageTestCase(unittest.TestCase):
         exp             = TestExperiment()
         printer_partial = Print(name="Partial")
         printer_final   = Print(name="Final")
-        avgr            = Averager(name="TestAverager")
+        avgr            = Averager(name="TestAverager", axis='freq_1')
 
         edges = [(exp.chan1, avgr.sink),
                  (avgr.partial_average, printer_partial.sink),
@@ -144,8 +144,6 @@ class AverageTestCase(unittest.TestCase):
         exp.set_graph(edges)
 
         exp.add_sweep(exp.freq_1, np.linspace(0,9,10))
-        avgr.axis.value = 'freq_1'
-        avgr.update_descriptors()
         exp.run_sweeps()
 
 if __name__ == '__main__':
diff --git a/test/test_experiment.py b/test/test_experiment.py
index 64ba5297..6ec15025 100644
--- a/test/test_experiment.py
+++ b/test/test_experiment.py
@@ -138,7 +138,7 @@ class ExperimentTestCase(unittest.TestCase):
                  (pt.source, prnt.sink)]
 
         exp.set_graph(edges)
-
+        exp.update_descriptors()
         self.assertFalse(pt.sink.descriptor is None)
         self.assertFalse(prnt.sink.descriptor is None)
         self.assertTrue(exp.chan1.descriptor == pt.sink.descriptor)

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
-e git+https://github.com/BBN-Q/Auspex.git@783df41a1baaeb7a85611e5d599d07510df0d1ff#egg=auspex
cached-property==1.5.2
certifi==2021.5.30
cffi==1.15.1
cycler==0.11.0
dataclasses==0.8
decorator==4.4.2
h5py==3.1.0
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
kiwisolver==1.3.1
matplotlib==3.3.4
networkx==2.5.1
numpy==1.19.5
packaging==21.3
pandas==1.1.5
Pillow==8.4.0
pluggy==1.0.0
py==1.11.0
pycparser==2.21
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
pytz==2025.2
PyVISA==1.11.3
scipy==1.5.4
six==1.17.0
tomli==1.2.3
tqdm==4.64.1
typing_extensions==4.1.1
zipp==3.6.0

name: Auspex
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
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - 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
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - cached-property==1.5.2
      - cffi==1.15.1
      - cycler==0.11.0
      - dataclasses==0.8
      - decorator==4.4.2
      - h5py==3.1.0
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - kiwisolver==1.3.1
      - matplotlib==3.3.4
      - networkx==2.5.1
      - numpy==1.19.5
      - packaging==21.3
      - pandas==1.1.5
      - pillow==8.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycparser==2.21
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyvisa==1.11.3
      - scipy==1.5.4
      - six==1.17.0
      - tomli==1.2.3
      - tqdm==4.64.1
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/Auspex

test/test_average.py::AverageTestCase::test_sameness
test/test_average.py::AverageTestCase::test_final_average_runs test/test_average.py::AverageTestCase::test_final_variance_runs test/test_average.py::AverageTestCase::test_partial_average_runs test/test_experiment.py::ExperimentTestCase::test_compressed_streams test/test_experiment.py::ExperimentTestCase::test_copy_descriptor test/test_experiment.py::ExperimentTestCase::test_create_graph test/test_experiment.py::ExperimentTestCase::test_depth test/test_experiment.py::ExperimentTestCase::test_graph_parenting test/test_experiment.py::ExperimentTestCase::test_instruments test/test_experiment.py::ExperimentTestCase::test_parameters test/test_experiment.py::ExperimentTestCase::test_run_simple_graph test/test_experiment.py::ExperimentTestCase::test_run_simple_graph_branchout test/test_experiment.py::ExperimentTestCase::test_update_descriptors
src/auspex/instruments/instrument.py src/auspex/experiment.py
src/auspex/instruments/instrument.py src/auspex/experiment.py