SOURCE /home/frank14f/CelerisLab/src/CelerisLab/__init__.py
speed=0.0 audit=True BFL=7.4505806e-09 ledger=[1.604948192834854e-05, -5.038455128669739e-07, -6.919726729393005e-07] budget=0.00221051117 boundary=[4.0978193283081055e-08, 0.0, 0.0] transfer=[0.0, 0.0, 0.0] drive_mass=+4.09781933e-08; counts=PASS
speed=None audit=False BFL=7.4505806e-09 ledger=[1.604948192834854e-05, -5.038455128669739e-07, -6.919726729393005e-07] budget=0.00221051117 boundary=[4.0978193283081055e-08, 0.0, 0.0] transfer=[0.0, 0.0, 0.0] drive_mass=+4.09781933e-08; counts=normal build
.speed=0.002 audit=True BFL=9.73073444e-09 ledger=[1.597730442881584e-05, -5.154870450496674e-07, -7.622875273227692e-07] budget=0.00221052543 boundary=[0.0071802823804318905, 0.003110995050519705, 0.0026390845887362957] transfer=[0.0, 0.0, 0.0] drive_mass=+0.00620033871; counts=PASS
.speed=-0.002 audit=True BFL=7.4505806e-09 ledger=[1.66366808116436e-05, -5.881302058696747e-07, -7.147900760173798e-07] budget=0.00221049693 boundary=[-0.007164992857724428, -0.0030983122996985912, -0.00262861093506217] transfer=[0.0, 0.0, 0.0] drive_mass=-0.00618575338; counts=PASS
.FF.normal rectangle 17x13 bounds=(2, 2, 6, 5) fine=16x14 steps=1: max_population=1.14050047e-07 device_arrays=35288; halo/stride PASS
host_peak_rss=279.887 MiB
.slot/reservoir steps=8 max_population=1.78241457e-07 max_BC_error=2.21654773e-07 discrete_leaf_mass_change=+0.0309633738 final_sum_rho_v_bottom=0.00426894613 top=0.000960694626; raw halos/corners/fine BC isolation PASS
host_peak_rss=279.887 MiB
.
=================================== FAILURES ===================================
_ test_missing_surface_device_buffer_rejects_before_launch[surface_velocity_gpu] _

missing = 'surface_velocity_gpu'

    @pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"])
    def test_missing_surface_device_buffer_rejects_before_launch(missing):
        backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper)
        backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)])
        backend._fine_curved = SimpleNamespace(surface_velocity_gpu=object(), link_exchange_gpu=object())
        setattr(backend._fine_curved, missing, None)
        backend._curved = Mock()
        with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"):
>           backend._apply_fine_boundary(object())

tests/validation/multigrid/test_fine_surface_gpu.py:289: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CelerisLab.lbm.refinement_stepper.FixedPatchStepper object at 0x761fb9325480>
buffer = <object object at 0x761fb937c570>, kw = {}
cl = namespace(surface_velocity_gpu=None, link_exchange_gpu=<object object at 0x761fb937c630>)

    def _apply_fine_boundary(self, buffer, **kw):
        """Stage solid source slots; exchange buffer holds this fine substep only."""
        cl = self._fine_curved
        if cl is None:
            if self.fine_boundary is not None:
                raise RuntimeError("Fine boundary device buffers are missing")
            return
>       if self._curved is None or cl.fluid_idx_gpu is None:
E       AttributeError: 'types.SimpleNamespace' object has no attribute 'fluid_idx_gpu'

src/CelerisLab/lbm/refinement_stepper.py:195: AttributeError
_ test_missing_surface_device_buffer_rejects_before_launch[link_exchange_gpu] __

missing = 'link_exchange_gpu'

    @pytest.mark.parametrize("missing", ["surface_velocity_gpu", "link_exchange_gpu"])
    def test_missing_surface_device_buffer_rejects_before_launch(missing):
        backend = implementation.FixedPatchStepper.__new__(implementation.FixedPatchStepper)
        backend.fine_boundary = SimpleNamespace(objects=[object_spec(.002)])
        backend._fine_curved = SimpleNamespace(surface_velocity_gpu=object(), link_exchange_gpu=object())
        setattr(backend._fine_curved, missing, None)
        backend._curved = Mock()
        with pytest.raises(RuntimeError, match="Surface boundary device buffers are missing"):
>           backend._apply_fine_boundary(object())

tests/validation/multigrid/test_fine_surface_gpu.py:289: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CelerisLab.lbm.refinement_stepper.FixedPatchStepper object at 0x761fb92299c0>
buffer = <object object at 0x761fb937f700>, kw = {}
cl = namespace(surface_velocity_gpu=<object object at 0x761fb937f710>, link_exchange_gpu=None)

    def _apply_fine_boundary(self, buffer, **kw):
        """Stage solid source slots; exchange buffer holds this fine substep only."""
        cl = self._fine_curved
        if cl is None:
            if self.fine_boundary is not None:
                raise RuntimeError("Fine boundary device buffers are missing")
            return
>       if self._curved is None or cl.fluid_idx_gpu is None:
E       AttributeError: 'types.SimpleNamespace' object has no attribute 'fluid_idx_gpu'

src/CelerisLab/lbm/refinement_stepper.py:195: AttributeError
=========================== short test summary info ============================
FAILED tests/validation/multigrid/test_fine_surface_gpu.py::test_missing_surface_device_buffer_rejects_before_launch[surface_velocity_gpu]
FAILED tests/validation/multigrid/test_fine_surface_gpu.py::test_missing_surface_device_buffer_rejects_before_launch[link_exchange_gpu]
2 failed, 6 passed in 23.73s
