Skip to content

Implement sim2 physics ownership and independent sensor modules - #4982

Closed
Nabla7 wants to merge 26 commits into
jeff/feat/shared_configfrom
pim/feat/sim2-body-observations
Closed

Nabla7 wants to merge 26 commits into
jeff/feat/shared_configfrom
pim/feat/sim2-body-observations

Conversation

@Nabla7

@Nabla7 Nabla7 commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Superseded by the Option E capability stack https://github.com/dimensionalOS/dimos/stack/5042 (#5033–#5041); this core draft and its review history remain available as the previous split-stream implementation.

@github-actions github-actions Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

go2 replay realtime (arm64)

Details
Benchmark suite Current: ccdd5eb Previous: 73bed07 Ratio
peak memory 1761.266 MB 1769.906 MB 1.00
peak threads 371 threads 378 threads 0.98
network (transport) 2730.981 MB 2723.992 MB 1.00
disk write 1.73 MB 1.508 MB 1.15
instructions 138.033 G 137.278 G 1.01

This comment was automatically generated by workflow using github-action-benchmark.

@codecov

codecov Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

❌ 17 Tests Failed:

Tests completed Failed Passed Skipped
7462 17 7445 50
View the top 3 failed test(s) by shortest run time
dimos.simulation.habitat.test_server::test_camera_info_round_trip
Stack Traces | 0.002s run time
def test_camera_info_round_trip():
        k = {"fx": 320.0, "fy": 320.0, "cx": 320.0, "cy": 180.0, "width": 640.0, "height": 360.0}
>       out = CameraInfo.lcm_decode(server.camera_info_msg(k, "camera_optical", 1.5))

k          = {'cx': 320.0, 'cy': 180.0, 'fx': 320.0, 'fy': 320.0, ...}

.../simulation/habitat/test_server.py:52: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:114: in camera_info_msg
    return bytes(m.lcm_encode())
        cx         = 320.0
        cy         = 180.0
        frame_id   = 'camera_optical'
        fx         = 320.0
        fy         = 320.0
        k          = {'cx': 320.0, 'cy': 180.0, 'fx': 320.0, 'fy': 320.0, ...}
        m          = <dimos_lcm.sensor_msgs.CameraInfo.CameraInfo object at 0x7feebc7ed2c0>
        ts         = 1.5
.venv/lib/python3.11.../dimos_lcm/sensor_msgs/CameraInfo.py:119: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a037e0>
        self       = <dimos_lcm.sensor_msgs.CameraInfo.CameraInfo object at 0x7feebc7ed2c0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.sensor_msgs.CameraInfo.CameraInfo object at 0x7feebc7ed2c0>
buf = <_io.BytesIO object at 0x7ff0d1a037e0>

    def _encode_one(self, buf):
        buf.write(struct.pack(">i", self.D_length))
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a037e0>
self       = <dimos_lcm.sensor_msgs.CameraInfo.CameraInfo object at 0x7feebc7ed2c0>

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/CameraInfo.py:125: AssertionError
dimos.simulation.habitat.test_server::test_cloud_round_trip_keeps_points_and_colour
Stack Traces | 0.002s run time
def test_cloud_round_trip_keeps_points_and_colour():
        pts = np.array([[1.0, 2.0, 3.0], [-4.0, 0.5, 0.25]], dtype=np.float32)
        colors = np.array([[255, 0, 0], [0, 128, 64]], dtype=np.uint8)
>       out = PointCloud2.lcm_decode(server.cloud_msg(pts, colors, "world", 1.5))

colors     = array([[255,   0,   0],
       [  0, 128,  64]], dtype=uint8)
pts        = array([[          1,           2,           3],
       [         -4,         0.5,        0.25]], dtype=float32)

.../simulation/habitat/test_server.py:62: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:160: in cloud_msg
    return bytes(m.lcm_encode())
        colors     = array([[255,   0,   0],
       [  0, 128,  64]], dtype=uint8)
        data       = array([[          1,           2,           3,  2.3418e-38],
       [         -4,         0.5,        0.25,  4.6007e-41]], dtype=float32)
        frame_id   = 'world'
        m          = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7ff0e66eafc0>
        points     = array([[          1,           2,           3],
       [         -4,         0.5,        0.25]], dtype=float32)
        rgb_u32    = array([16711680,    32832], dtype=uint32)
        ts         = 1.5
        view       = <memory at 0x7ff0d1d74040>
.venv/lib/python3.11.../dimos_lcm/sensor_msgs/PointCloud2.py:112: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a001d0>
        self       = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7ff0e66eafc0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7ff0e66eafc0>
buf = <_io.BytesIO object at 0x7ff0d1a001d0>

    def _encode_one(self, buf):
        buf.write(struct.pack(">ii", self.fields_length, self.data_length))
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a001d0>
self       = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7ff0e66eafc0>

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/PointCloud2.py:118: AssertionError
dimos.simulation.habitat.test_server::test_color_image_round_trip
Stack Traces | 0.002s run time
def test_color_image_round_trip():
        rgb = np.arange(8 * 12 * 3, dtype=np.uint8).reshape(8, 12, 3)
>       out = Image.lcm_decode(server.image_msg(rgb, "rgb8", "camera_optical", 1.5))

rgb        = array([[[  0,   1,   2],
        [  3,   4,   5],
        [  6,   7,   8],
        [  9,  10,  11],
        [ 12,  13,...19],
        [ 20,  21,  22],
        [ 23,  24,  25],
        [ 26,  27,  28],
        [ 29,  30,  31]]], dtype=uint8)

.../simulation/habitat/test_server.py:39: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:97: in image_msg
    return bytes(m.lcm_encode())
        array      = array([[[  0,   1,   2],
        [  3,   4,   5],
        [  6,   7,   8],
        [  9,  10,  11],
        [ 12,  13,...19],
        [ 20,  21,  22],
        [ 23,  24,  25],
        [ 26,  27,  28],
        [ 29,  30,  31]]], dtype=uint8)
        channels   = 3
        encoding   = 'rgb8'
        frame_id   = 'camera_optical'
        m          = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1c39360>
        ts         = 1.5
        view       = <memory at 0x7ff0d1373100>
.venv/lib/python3.11.../dimos_lcm/sensor_msgs/Image.py:80: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a722f0>
        self       = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1c39360>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1c39360>
buf = <_io.BytesIO object at 0x7ff0d1a722f0>

    def _encode_one(self, buf):
        buf.write(struct.pack(">i", self.data_length))
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a722f0>
self       = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1c39360>

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/Image.py:86: AssertionError
dimos.simulation.habitat.test_server::test_depth_image_round_trip
Stack Traces | 0.002s run time
def test_depth_image_round_trip():
        depth = np.linspace(0.2, 4.5, 8 * 12, dtype=np.float32).reshape(8, 12)
>       out = Image.lcm_decode(server.image_msg(depth, "32FC1", "camera_optical", 1.5))

depth      = array([[        0.2,     0.24526,     0.29053,     0.33579,     0.38105,     0.42632,     0.47158,     0.51684,     0....    4.1832,      4.2284,      4.2737,      4.3189,      4.3642,      4.4095,      4.4547,         4.5]], dtype=float32)

.../simulation/habitat/test_server.py:46: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:97: in image_msg
    return bytes(m.lcm_encode())
        array      = array([[        0.2,     0.24526,     0.29053,     0.33579,     0.38105,     0.42632,     0.47158,     0.51684,     0....    4.1832,      4.2284,      4.2737,      4.3189,      4.3642,      4.4095,      4.4547,         4.5]], dtype=float32)
        channels   = 1
        encoding   = '32FC1'
        frame_id   = 'camera_optical'
        m          = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1befa60>
        ts         = 1.5
        view       = <memory at 0x7ff0d2013dc0>
.venv/lib/python3.11.../dimos_lcm/sensor_msgs/Image.py:80: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1acfd80>
        self       = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1befa60>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1befa60>
buf = <_io.BytesIO object at 0x7ff0d1acfd80>

    def _encode_one(self, buf):
        buf.write(struct.pack(">i", self.data_length))
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1acfd80>
self       = <dimos_lcm.sensor_msgs.Image.Image object at 0x7ff0d1befa60>

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/Image.py:86: AssertionError
dimos.simulation.habitat.test_server::test_each_tf_link_keeps_its_own_pose
Stack Traces | 0.002s run time
def test_each_tf_link_keeps_its_own_pose():
        """Regression: the generated bindings share nested defaults between instances.
    
        Mutating ``Transform().translation`` in place made all three links serialize
        the last one's pose, which showed up as the whole map pointing up. Only a
        value check catches it -- the frame names were right the whole time.
        """
        links = [
            ("world", "base_link", (1.0, 2.0, 3.0), (0.0, 0.0, 0.0, 1.0)),
            ("base_link", "camera", (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)),
            ("camera", "camera_optical", (0.0, 0.0, 0.0), server.frames.OPTICAL_QUAT_XYZW),
        ]
        by_child = {
>           t.child_frame_id: t for t in TFMessage.lcm_decode(server.tf_msg(links, 1.5)).transforms
        }

links      = [('world', 'base_link', (1.0, 2.0, 3.0), (0.0, 0.0, 0.0, 1.0)), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]

.../simulation/habitat/test_server.py:150: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:215: in tf_msg
    return bytes(m.lcm_encode())
        child      = 'camera_optical'
        links      = [('world', 'base_link', (1.0, 2.0, 3.0), (0.0, 0.0, 0.0, 1.0)), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]
        m          = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1f7d630>
        out        = [<dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1e289c0>, <dimos_lcm.geometry_msgs.Transf...tamped object at 0x7ff0d1e28280>, <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1e297c0>]
        parent     = 'camera'
        quat       = (-0.5, 0.5, -0.5, 0.5)
        t          = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1e297c0>
        transform  = <dimos_lcm.geometry_msgs.Transform.Transform object at 0x7ff0d1f7f2b0>
        ts         = 1.5
        xyz        = (0.0, 0.0, 0.0)
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:34: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a75350>
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1f7d630>
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:44: in _encode_one
    self.transforms[i0]._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a75350>
        i0         = 0
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1f7d630>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1e289c0>
buf = <_io.BytesIO object at 0x7ff0d1a75350>

    def _encode_one(self, buf):
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a75350>
self       = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1e289c0>

.venv/lib/python3.11.../dimos_lcm/geometry_msgs/TransformStamped.py:49: AssertionError
dimos.simulation.habitat.test_server::test_empty_cloud_is_valid
Stack Traces | 0.002s run time
def test_empty_cloud_is_valid():
        out = PointCloud2.lcm_decode(
>           server.cloud_msg(np.zeros((0, 3), np.float32), np.zeros((0, 3), np.uint8), "world", 1.0)
        )


.../simulation/habitat/test_server.py:70: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:147: in cloud_msg
    return bytes(m.lcm_encode())
        colors     = array([], shape=(0, 3), dtype=uint8)
        frame_id   = 'world'
        m          = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7feebc7ed9c0>
        points     = array([], shape=(0, 3), dtype=float32)
        ts         = 1.0
.venv/lib/python3.11.../dimos_lcm/sensor_msgs/PointCloud2.py:112: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a01da0>
        self       = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7feebc7ed9c0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7feebc7ed9c0>
buf = <_io.BytesIO object at 0x7ff0d1a01da0>

    def _encode_one(self, buf):
        buf.write(struct.pack(">ii", self.fields_length, self.data_length))
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a01da0>
self       = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7feebc7ed9c0>

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/PointCloud2.py:118: AssertionError
dimos.simulation.habitat.test_server::test_tf_chain_puts_the_camera_looking_forward
Stack Traces | 0.002s run time
def test_tf_chain_puts_the_camera_looking_forward():
        """Composing the published chain must aim optical +z along world +x, not +z."""
        yaw = 0.0
        links = [
            ("world", "base_link", (0.0, 0.0, 0.0), (0.0, 0.0, np.sin(yaw / 2), np.cos(yaw / 2))),
            ("base_link", "camera", (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)),
            ("camera", "camera_optical", (0.0, 0.0, 0.0), server.frames.OPTICAL_QUAT_XYZW),
        ]
        by_child = {
>           t.child_frame_id: t for t in TFMessage.lcm_decode(server.tf_msg(links, 1.5)).transforms
        }

links      = [('world', 'base_link', (0.0, 0.0, 0.0), (0.0, 0.0, np.float64(0.0), np.float64(1.0))), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]
yaw        = 0.0

.../simulation/habitat/test_server.py:185: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:215: in tf_msg
    return bytes(m.lcm_encode())
        child      = 'camera_optical'
        links      = [('world', 'base_link', (0.0, 0.0, 0.0), (0.0, 0.0, np.float64(0.0), np.float64(1.0))), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]
        m          = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7feeba9f9fc0>
        out        = [<dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1cf8740>, <dimos_lcm.geometry_msgs.Transf...tamped object at 0x7ff0d1cfaec0>, <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1cfbfc0>]
        parent     = 'camera'
        quat       = (-0.5, 0.5, -0.5, 0.5)
        t          = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1cfbfc0>
        transform  = <dimos_lcm.geometry_msgs.Transform.Transform object at 0x7ff0d12927a0>
        ts         = 1.5
        xyz        = (0.0, 0.0, 0.0)
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:34: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d19e1df0>
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7feeba9f9fc0>
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:44: in _encode_one
    self.transforms[i0]._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d19e1df0>
        i0         = 0
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7feeba9f9fc0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1cf8740>
buf = <_io.BytesIO object at 0x7ff0d19e1df0>

    def _encode_one(self, buf):
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d19e1df0>
self       = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d1cf8740>

.venv/lib/python3.11.../dimos_lcm/geometry_msgs/TransformStamped.py:49: AssertionError
dimos.simulation.habitat.test_server::test_tf_round_trip_carries_the_optical_link
Stack Traces | 0.002s run time
def test_tf_round_trip_carries_the_optical_link():
        links = [
            ("world", "base_link", (1.0, 2.0, 0.0), (0.0, 0.0, 0.0, 1.0)),
            ("base_link", "camera", (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)),
            ("camera", "camera_optical", (0.0, 0.0, 0.0), server.frames.OPTICAL_QUAT_XYZW),
        ]
>       out = TFMessage.lcm_decode(server.tf_msg(links, 1.5))

links      = [('world', 'base_link', (1.0, 2.0, 0.0), (0.0, 0.0, 0.0, 1.0)), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]

.../simulation/habitat/test_server.py:131: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../simulation/habitat/server.py:215: in tf_msg
    return bytes(m.lcm_encode())
        child      = 'camera_optical'
        links      = [('world', 'base_link', (1.0, 2.0, 0.0), (0.0, 0.0, 0.0, 1.0)), ('base_link', 'camera', (0.0, 0.0, 0.45), (0.0, 0.0, 0.0, 1.0)), ('camera', 'camera_optical', (0.0, 0.0, 0.0), (-0.5, 0.5, -0.5, 0.5))]
        m          = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1134220>
        out        = [<dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d19a7780>, <dimos_lcm.geometry_msgs.Transf...tamped object at 0x7ff0d19a6700>, <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d19a42c0>]
        parent     = 'camera'
        quat       = (-0.5, 0.5, -0.5, 0.5)
        t          = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d19a42c0>
        transform  = <dimos_lcm.geometry_msgs.Transform.Transform object at 0x7ff0d1135b70>
        ts         = 1.5
        xyz        = (0.0, 0.0, 0.0)
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:34: in lcm_encode
    self._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a752b0>
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1134220>
.venv/lib/python3.11.../dimos_lcm/tf2_msgs/TFMessage.py:44: in _encode_one
    self.transforms[i0]._encode_one(buf)
        buf        = <_io.BytesIO object at 0x7ff0d1a752b0>
        i0         = 0
        self       = <dimos_lcm.tf2_msgs.TFMessage.TFMessage object at 0x7ff0d1134220>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d19a7780>
buf = <_io.BytesIO object at 0x7ff0d1a752b0>

    def _encode_one(self, buf):
        assert (
>           self.header._get_packed_fingerprint()
            == common_msgs.SampleHeader._get_packed_fingerprint()
        )
E       AssertionError

buf        = <_io.BytesIO object at 0x7ff0d1a752b0>
self       = <dimos_lcm.geometry_msgs.TransformStamped.TransformStamped object at 0x7ff0d19a7780>

.venv/lib/python3.11.../dimos_lcm/geometry_msgs/TransformStamped.py:49: AssertionError
dimos.web.test_lcm_codec::test_golden_vector[joint_state]
Stack Traces | 0.007s run time
vec = {'encoding': 'sensor_msgs.JointState.lcm.v1', 'name': 'joint_state', 'payload_b64': 'zO+opJK5Z+MAAAADAAAAAwAAAAMAAAADA...one]], 'std_msgs.Time': [['sec', 'int32_t', None], ['nsec', 'int32_t', None]]}, 'type': 'sensor_msgs.JointState'}, ...}

    @pytest.mark.parametrize("vec", VECTORS, ids=lambda v: v["name"])
    def test_golden_vector(vec: dict[str, Any]) -> None:
        msg = MESSAGES[vec["name"]]
        generated = schema_class_for(type(msg))
        assert vec["encoding"] == default_encoding(type(msg), "rx")
>       assert export_schema(generated) == vec["schema"]
E       AssertionError: assert {'fp': 'b4f25...s.JointState'} == {'fp': 'ccefa...s.JointState'}
E         
E         Omitting 1 identical items, use -vv to show
E         Differing items:
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mcommon_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mclock_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mepoch#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mtime_ns#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64...rt_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mheader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mcommon_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mname#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, [#x1B[33m'#x1B[39;49;00m#x1B[33mname_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]], ...]}}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33msensor_msgs.JointState#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mname_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mposition_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mvelo...s.Time#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mframe_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]], #x1B[33m'#x1B[39;49;00m#x1B[33mstd_msgs.Time#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33msec#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mnsec#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]]}}#x1B[90m#x1B[39;49;00m
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33mb4f25117c0c33bba#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33mccefa8a492b967e3#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m
E         
E         Full diff:
E         #x1B[0m#x1B[90m #x1B[39;49;00m {#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'fp': 'ccefa8a492b967e3',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     'fp': 'b4f25117c0c33bba',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'structs': {#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         'common_msgs.SampleHeader': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'clock_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'epoch',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'time_ns',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'source_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'sequence',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'sensor_msgs.JointState': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'name_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'position_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'velocity_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'effort_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'header',#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Header',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'common_msgs.SampleHeader',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^^^^      ++++++#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'name',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'string',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'name_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'position',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'position_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'velocity',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'velocity_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'effort',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'effort_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Header': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'seq',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'stamp',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Time',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Time': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'sec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'nsec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     },#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'type': 'sensor_msgs.JointState',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m }#x1B[90m#x1B[39;49;00m

generated  = <class 'dimos_lcm.sensor_msgs.JointState.JointState'>
msg        = JointState(ts=1757400000.5, frame_id='arm', name=['shoulder', 'elbow', 'wrist_é'], position=[0.1, -0.2, 0.3], velocity=[0.01, 0.02, 0.03], effort=[1.0, 2.0, 3.0])
vec        = {'encoding': 'sensor_msgs.JointState.lcm.v1', 'name': 'joint_state', 'payload_b64': 'zO+opJK5Z+MAAAADAAAAAwAAAAMAAAADA...one]], 'std_msgs.Time': [['sec', 'int32_t', None], ['nsec', 'int32_t', None]]}, 'type': 'sensor_msgs.JointState'}, ...}

dimos/web/test_lcm_codec.py:131: AssertionError
dimos.web.test_lcm_codec::test_golden_vector[point_cloud]
Stack Traces | 0.007s run time
vec = {'encoding': 'sensor_msgs.PointCloud2.lcm.v1', 'name': 'point_cloud', 'payload_b64': '9es9ocKFMXUAAAADAAAAGAAAAABov8vA...ne]], 'std_msgs.Time': [['sec', 'int32_t', None], ['nsec', 'int32_t', None]]}, 'type': 'sensor_msgs.PointCloud2'}, ...}

    @pytest.mark.parametrize("vec", VECTORS, ids=lambda v: v["name"])
    def test_golden_vector(vec: dict[str, Any]) -> None:
        msg = MESSAGES[vec["name"]]
        generated = schema_class_for(type(msg))
        assert vec["encoding"] == default_encoding(type(msg), "rx")
>       assert export_schema(generated) == vec["schema"]
E       AssertionError: assert {'fp': 'ddede....PointCloud2'} == {'fp': 'f5eb3....PointCloud2'}
E         
E         Omitting 1 identical items, use -vv to show
E         Differing items:
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mcommon_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mclock_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mepoch#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mtime_ns#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64...eld#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mname#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33moffset#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mdatatype#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mbyte#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mcount#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]]}}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33msensor_msgs.PointCloud2#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mfields_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mdata_length#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mheade...s.Time#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mframe_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]], #x1B[33m'#x1B[39;49;00m#x1B[33mstd_msgs.Time#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33msec#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mnsec#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint32_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]]}}#x1B[90m#x1B[39;49;00m
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33mddede614f08f054c#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33mf5eb3da1c2853175#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m
E         
E         Full diff:
E         #x1B[0m#x1B[90m #x1B[39;49;00m {#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'fp': 'f5eb3da1c2853175',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     'fp': 'ddede614f08f054c',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'structs': {#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         'common_msgs.SampleHeader': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'clock_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'epoch',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'time_ns',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'source_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'sequence',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'sensor_msgs.PointCloud2': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'fields_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'data_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'header',#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Header',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'common_msgs.SampleHeader',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^^^^      ++++++#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'height',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'width',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'fields',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'sensor_msgs.PointField',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'fields_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'is_bigendian',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'boolean',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'point_step',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'row_step',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'data',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'byte',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'data_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'is_dense',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'boolean',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'sensor_msgs.PointField': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'name',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'string',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'offset',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'datatype',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'byte',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'count',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Header': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'seq',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'stamp',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Time',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Time': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'sec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'nsec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     },#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'type': 'sensor_msgs.PointCloud2',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m }#x1B[90m#x1B[39;49;00m

generated  = <class 'dimos_lcm.sensor_msgs.PointCloud2.PointCloud2'>
msg        = <dimos_lcm.sensor_msgs.PointCloud2.PointCloud2 object at 0x7f427e2a71c0>
vec        = {'encoding': 'sensor_msgs.PointCloud2.lcm.v1', 'name': 'point_cloud', 'payload_b64': '9es9ocKFMXUAAAADAAAAGAAAAABov8vA...ne]], 'std_msgs.Time': [['sec', 'int32_t', None], ['nsec', 'int32_t', None]]}, 'type': 'sensor_msgs.PointCloud2'}, ...}

dimos/web/test_lcm_codec.py:131: AssertionError
dimos.web.test_lcm_codec::test_golden_vector[tf_message]
Stack Traces | 0.007s run time
vec = {'encoding': 'tf2_msgs.TFMessage.lcm.v1', 'name': 'tf_message', 'payload_b64': 'wrihwzqJI+wAAAACAAAAAWi/y8AdzWUAAAAABG...tor3': [['x', 'double', None], ['y', 'double', None], ['z', 'double', None]], ...}, 'type': 'tf2_msgs.TFMessage'}, ...}

    @pytest.mark.parametrize("vec", VECTORS, ids=lambda v: v["name"])
    def test_golden_vector(vec: dict[str, Any]) -> None:
        msg = MESSAGES[vec["name"]]
        generated = schema_class_for(type(msg))
        assert vec["encoding"] == default_encoding(type(msg), "rx")
>       assert export_schema(generated) == vec["schema"]
E       AssertionError: assert {'fp': '92bdf...gs.TFMessage'} == {'fp': 'c2b8a...gs.TFMessage'}
E         
E         Omitting 1 identical items, use -vv to show
E         Differing items:
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mcommon_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mclock_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mepoch#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mtime_ns#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64...n_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mchild_frame_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mtransform#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mgeometry_msgs.Transform#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]], ...}}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mgeometry_msgs.Quaternion#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mx#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33my#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mz#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mw#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m...ansform#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]], #x1B[33m'#x1B[39;49;00m#x1B[33mgeometry_msgs.Vector3#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mx#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33my#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mz#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m]], ...}}#x1B[90m#x1B[39;49;00m
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33m92bdf2a9969ccb9e#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33mc2b8a1c33a8923ec#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m
E         
E         Full diff:
E         #x1B[0m#x1B[90m #x1B[39;49;00m {#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'fp': 'c2b8a1c33a8923ec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     'fp': '92bdf2a9969ccb9e',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'structs': {#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         'common_msgs.SampleHeader': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'clock_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'epoch',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'time_ns',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'source_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'sequence',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.Quaternion': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'x',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'y',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'z',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'w',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.Transform': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'translation',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Vector3',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'rotation',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Quaternion',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.TransformStamped': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'header',#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Header',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'common_msgs.SampleHeader',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^^^^      ++++++#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'child_frame_id',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'string',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'transform',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Transform',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.Vector3': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'x',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'y',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'z',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Header': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'seq',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'stamp',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Time',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Time': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'sec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'nsec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'tf2_msgs.TFMessage': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'transforms_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'int32_t',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'transforms',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.TransformStamped',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     'transforms_length',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     },#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'type': 'tf2_msgs.TFMessage',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m }#x1B[90m#x1B[39;49;00m

generated  = <class 'dimos_lcm.tf2_msgs.TFMessage.TFMessage'>
msg        = TFMessage(2 transforms)
vec        = {'encoding': 'tf2_msgs.TFMessage.lcm.v1', 'name': 'tf_message', 'payload_b64': 'wrihwzqJI+wAAAACAAAAAWi/y8AdzWUAAAAABG...tor3': [['x', 'double', None], ['y', 'double', None], ['z', 'double', None]], ...}, 'type': 'tf2_msgs.TFMessage'}, ...}

dimos/web/test_lcm_codec.py:131: AssertionError
dimos.msgs.test_lcm_definitions::test_dimos_lcm_packages_hold_only_dimos_lcm_messages
Stack Traces | 0.022s run time
def test_dimos_lcm_packages_hold_only_dimos_lcm_messages() -> None:
        missing = set()
        for path in MSGS.glob("*/*.py"):
            if path.name.startswith(("test_", "tool_", "_")):
                continue
            package, name = path.parent.name, path.stem
            if importlib.util.find_spec(f"dimos_lcm.{package}") is None:
                continue  # a dimos-only package, free to add to
            try:
                lcm_msg_type(f"{package}.{name}")
            except ImportError:
                missing.add(f"{package}.{name}")
        new = sorted(missing - KNOWN)
        packages = sorted({m.split(".")[0] for m in new})
>       assert not new, (
            f"{new} are not defined in dimos-lcm.\n"
            f"{packages} mirror ROS packages from dimos-lcm, which generates every language's "
            "bindings from them, so nothing new goes in there.\n"
            "New messages can be added temporarily, but not in a ROS package:\n"
            "  - first look for an existing ROS message that fits, often one already does\n"
            "  - the right way: add it to dimos-lcm, new ROS namespaces are welcome there\n"
            "  - meanwhile, a package dimos-lcm doesn't have, e.g. dimos/msgs/<yours>_msgs/\n",
            "but keep in mind, this breaks native module support so a lot of the system will not work with it and it will be removed eventually.\n",
        )
E       AssertionError: ("['sim_msgs.Contacts'] are not defined in dimos-lcm.
E         ['sim_msgs'] mirror ROS packages from dimos-lcm, which generates every language's bindings from them, so nothing new goes in there.
E         New messages can be added temporarily, but not in a ROS package:
E           - first look for an existing ROS message that fits, often one already does
E           - the right way: add it to dimos-lcm, new ROS namespaces are welcome there
E           - meanwhile, a package dimos-lcm doesn't have, e.g. dimos/msgs/<yours>_msgs/
E         ", 'but keep in mind, this breaks native module support so a lot of the system will not work with it and it will be removed eventually.
E         ')
E       assert not ['sim_msgs.Contacts']

missing    = {'nav_msgs.LineSegments3D', 'sensor_msgs.ImuInfo', 'sensor_msgs.JointCommand', 'sensor_msgs.MotorCommandArray', 'sensor_msgs.RobotState', 'shape_msgs.TriangleMesh', ...}
name       = 'GraspCandidateArray'
new        = ['sim_msgs.Contacts']
package    = 'manipulation_msgs'
packages   = ['sim_msgs']
path       = PosixPath('.../msgs/manipulation_msgs/GraspCandidateArray.py')

dimos/msgs/test_lcm_definitions.py:56: AssertionError
dimos.codebase_checks.test_docs_branding::test_docs_use_current_branding
Stack Traces | 0.034s run time
def test_docs_use_current_branding() -> None:
        """Fail if any file under docs/ spells the brand "DimOS" instead of "dimOS"."""
        hits = find_old_branding()
        if hits:
            listing = "\n".join(
                f"  - {p.relative_to(DIMOS_PROJECT_ROOT)}:{lineno}: {line.strip()}"
                for p, lineno, line in hits
            )
>           raise AssertionError(f'Found "DimOS" in docs/:\n{listing}\n\nThe brand is spelled "dimOS".')
E           AssertionError: Found "DimOS" in docs/:
E             - .../development/sim2/README.md:90: DimOS blueprints. Backend tests exercise native physics directly.
E             - .../development/sim2/README.md:168: Backend/sensor component checks: 20 passed. Deployed DimOS module/evaluation
E           
E           The brand is spelled "dimOS".

hits       = [(PosixPath('/home/runner/work/dimos/dimos/.../development/sim2/README.md'), 90, 'DimOS blueprints. Backend tests exe....../development/sim2/README.md'), 168, 'Backend/sensor component checks: 20 passed. Deployed DimOS module/evaluation')]
listing    = '  - .../development/sim2/README.md:90: DimOS blueprints. Backend tests exercise native physics directly.\n  - .../development/sim2/README.md:168: Backend/sensor component checks: 20 passed. Deployed DimOS module/evaluation'

dimos/codebase_checks/test_docs_branding.py:43: AssertionError
dimos.sim2.sensors.camera.test_camera::test_camera_renders_recorded_body_poses_without_physics_state
Stack Traces | 0.045s run time
world = SceneConfig(instances=(Instance(id='left', model=RobotModel(_source_path=PosixPath('.../work/_temp/pytest-of-..._prefix='door/'), xyz=(0.6, 0.4, 0), floating=False, drives=(), rpy=(0.0, 0.0, 0.0))), gravity_world=(0.0, 0.0, -9.81))

    @pytest.fixture
    def renderer(world):
        renderer = MujocoRenderer()
>       renderer.load(world, CameraConfig("left/camera"))

renderer   = <dimos.sim2.sensors.camera.renderers.mujoco.MujocoRenderer object at 0x7f425a2d0d90>
world      = SceneConfig(instances=(Instance(id='left', model=RobotModel(_source_path=PosixPath('.../work/_temp/pytest-of-..._prefix='door/'), xyz=(0.6, 0.4, 0), floating=False, drives=(), rpy=(0.0, 0.0, 0.0))), gravity_world=(0.0, 0.0, -9.81))

.../sensors/camera/test_camera.py:27: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../camera/renderers/mujoco.py:50: in load
    self.renderer = mujoco.Renderer(
        camera     = CameraConfig(frame_id='left/camera', source_id='camera', hz=15, width=320, height=240, fx=188.36, fy=188.36, cx=160, cy=120)
        scene      = SceneConfig(instances=(Instance(id='left', model=RobotModel(_source_path=PosixPath('.../work/_temp/pytest-of-..._prefix='door/'), xyz=(0.6, 0.4, 0), floating=False, drives=(), rpy=(0.0, 0.0, 0.0))), gravity_world=(0.0, 0.0, -9.81))
        self       = <dimos.sim2.sensors.camera.renderers.mujoco.MujocoRenderer object at 0x7f425a2d0d90>
        spec       = <mujoco._specs.MjSpec object at 0x7f425a51e970>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mujoco.rendering.classic.renderer.Renderer object at 0x7f425a773210>
model = <mujoco._structs.MjModel object at 0x7f425a3bb9f0>, height = 240
width = 320, max_geom = 10000, font_scale = <mjtFontScale.mjFONTSCALE_150: 150>

      def __init__(
          self,
          model: mujoco.MjModel,
          height: int = 240,
          width: int = 320,
          max_geom: int = 10000,
          font_scale: mujoco.mjtFontScale = mujoco.mjtFontScale.mjFONTSCALE_150,
      ) -> None:
        """Initializes a new `Renderer`.
    
        Args:
          model: an MjModel instance.
          height: image height in pixels.
          width: image width in pixels.
          max_geom: Optional integer specifying the maximum number of geoms that can
            be rendered in the same scene. If None this will be chosen automatically
            based on the estimated maximum number of renderable geoms in the model.
          font_scale: Optional enum specifying the font scale for text.
    
        Raises:
          ValueError: If `camera_id` is outside the valid range, or if `width` or
            `height` exceed the dimensions of MuJoCo's offscreen framebuffer.
        """
        # Pre-initialize context attributes so __del__ -> close() is safe even if
        # __init__ raises below before they are assigned. See #3213.
        self._gl_context = None  # type: ignore
        self._mjr_context = None
    
        buffer_width = model.vis.global_.offwidth
        buffer_height = model.vis.global_.offheight
        if width > buffer_width:
          raise ValueError(f"""
    Image width {width} > framebuffer width {buffer_width}. Either reduce the image
    width or specify a larger offscreen framebuffer in the model XML using the
    clause:
    <visual>
      <global offwidth="my_width"/>
    </visual>""".lstrip())
    
        if height > buffer_height:
          raise ValueError(f"""
    Image height {height} > framebuffer height {buffer_height}. Either reduce the
    image height or specify a larger offscreen framebuffer in the model XML using
    the clause:
    <visual>
      <global offheight="my_height"/>
    </visual>""".lstrip())
    
        self._width = width
        self._height = height
        self._model = model
    
        self._scene = mujoco.MjvScene(model=model, maxgeom=max_geom)
        self._scene_option = mujoco.MjvOption()
    
        self._rect = mujoco.MjrRect(0, 0, self._width, self._height)
    
        # Create render contexts.
        # TODO(nimrod): Figure out why pytype doesn't like gl_context.GLContext
        if gl_context.GLContext is not None:
          self._gl_context = gl_context.GLContext(width, height)  # type: ignore
        if self._gl_context:
          self._gl_context.make_current()
>       self._mjr_context = mujoco.MjrContext(model, font_scale.value)
E       mujoco.FatalError: gladLoadGL error

buffer_height = 240
buffer_width = 320
font_scale = <mjtFontScale.mjFONTSCALE_150: 150>
height     = 240
max_geom   = 10000
model      = <mujoco._structs.MjModel object at 0x7f425a3bb9f0>
self       = <mujoco.rendering.classic.renderer.Renderer object at 0x7f425a773210>
width      = 320

.venv/lib/python3.11.../rendering/classic/renderer.py:92: FatalError
dimos.web.test_lcm_codec::test_golden_vector[imu]
Stack Traces | 0.05s run time
vec = {'encoding': 'sensor_msgs.Imu.lcm.v1', 'name': 'imu', 'payload_b64': 'MasgXI3VeqgAAAAAaL/LwB3NZQAAAAAEaW11AAAAAAAAAAAA...nt32_t', None], ['stamp', 'std_msgs.Time', None], ['frame_id', 'string', None]], ...}, 'type': 'sensor_msgs.Imu'}, ...}

    @pytest.mark.parametrize("vec", VECTORS, ids=lambda v: v["name"])
    def test_golden_vector(vec: dict[str, Any]) -> None:
        msg = MESSAGES[vec["name"]]
        generated = schema_class_for(type(msg))
        assert vec["encoding"] == default_encoding(type(msg), "rx")
>       assert export_schema(generated) == vec["schema"]
E       AssertionError: assert {'fp': '19adc...sor_msgs.Imu'} == {'fp': '31ab2...sor_msgs.Imu'}
E         
E         Omitting 1 identical items, use -vv to show
E         Differing items:
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mcommon_msgs.SampleHeader#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mclock_id#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mstring#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mepoch#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64_t#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mtime_ns#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mint64..., None], [#x1B[39;49;00m#x1B[33m'#x1B[39;49;00mangular_velocity_covariance#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mdouble#x1B[33m'#x1B[39;49;00m#x1B[33m, [9]], [#x1B[39;49;00m#x1B[33m'#x1B[39;49;00mlinear_acceleration#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mgeometry_msgs.Vector3#x1B[33m'#x1B[39;49;00m#x1B[33m, None], ...]}}#x1B[39;49;00m#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mstructs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: {#x1B[33m'#x1B[39;49;00m#x1B[33mgeometry_msgs.Quaternion#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: [[#x1B[33m'#x1B[39;49;00m#x1B[33mx#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33my#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mz#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mdouble#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m], [#x1B[33m'#x1B[39;49;00m#x1B[33mw#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m...], #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mstd_msgs.Header#x1B[33m'#x1B[39;49;00m#x1B[33m: [[#x1B[39;49;00m#x1B[33m'#x1B[39;49;00mseq#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mint32_t#x1B[33m'#x1B[39;49;00m#x1B[33m, None], [#x1B[39;49;00m#x1B[33m'#x1B[39;49;00mstamp#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mstd_msgs.Time#x1B[33m'#x1B[39;49;00m#x1B[33m, None], [#x1B[39;49;00m#x1B[33m'#x1B[39;49;00mframe_id#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00mstring#x1B[33m'#x1B[39;49;00m#x1B[33m, None]], ...}}#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33m19adc8cfbbdf4e81#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m != #x1B[0m{#x1B[33m'#x1B[39;49;00m#x1B[33mfp#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m: #x1B[33m'#x1B[39;49;00m#x1B[33m31ab205c8dd57aa8#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m}#x1B[90m#x1B[39;49;00m
E         
E         Full diff:
E         #x1B[0m#x1B[90m #x1B[39;49;00m {#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'fp': '31ab205c8dd57aa8',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     'fp': '19adc8cfbbdf4e81',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'structs': {#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         'common_msgs.SampleHeader': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'clock_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'epoch',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'time_ns',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'source_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'sequence',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'int64_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.Quaternion': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'x',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'y',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'z',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'w',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'geometry_msgs.Vector3': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'x',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'y',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'z',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         'sensor_msgs.Imu': [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'header',#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Header',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^#x1B[90m#x1B[39;49;00m
E         #x1B[92m+                 'common_msgs.SampleHeader',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         ?                  ^^^^^^      ++++++#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'orientation',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Quaternion',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'orientation_covariance',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     9,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'angular_velocity',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Vector3',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'angular_velocity_covariance',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     9,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'linear_acceleration',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'geometry_msgs.Vector3',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 None,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'linear_acceleration_covariance',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 'double',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 [#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                     9,#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m                 ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m             ],#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m         ],#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Header': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'seq',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'stamp',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'std_msgs.Time',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'frame_id',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'string',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         'std_msgs.Time': [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'sec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             [#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'nsec',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 'int32_t',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-                 None,#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-             ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-         ],#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     },#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m     'type': 'sensor_msgs.Imu',#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m }#x1B[90m#x1B[39;49;00m

generated  = <class 'dimos_lcm.sensor_msgs.Imu.Imu'>
msg        = Imu(ts=1757400000.5, frame_id='imu', angular_velocity=↑ Vector Vector([        0.1        -0.2         0.3]), linear_a...· Vector Vector([          0           0         9.5]), orientation=Quaternion(0.000000, 0.000000, 0.600000, 0.800000))
vec        = {'encoding': 'sensor_msgs.Imu.lcm.v1', 'name': 'imu', 'payload_b64': 'MasgXI3VeqgAAAAAaL/LwB3NZQAAAAAEaW11AAAAAAAAAAAA...nt32_t', None], ['stamp', 'std_msgs.Time', None], ['frame_id', 'string', None]], ...}, 'type': 'sensor_msgs.Imu'}, ...}

dimos/web/test_lcm_codec.py:131: AssertionError
experimental.gateway.tests.test_config::test_every_registered_blueprint_is_annotated
Stack Traces | 0.199s run time
def test_every_registered_blueprint_is_annotated() -> None:
        source = annotation_file.load()
        annotated = {name for robot in source["robots"].values() for name in robot["blueprints"]}
        missing = sorted(
            name
            for name in all_blueprints
            if name not in annotated and not annotation_file.HIDDEN_NAME.search(name)
        )
>       assert not missing, f"add these to experimental/gateway/annotations.yaml: {', '.join(missing)}"
E       AssertionError: add these to experimental/gateway/annotations.yaml: sim2-basic
E       assert not ['sim2-basic']

annotated  = {'a1z-planner-coordinator', 'alfred-keyboard-teleop', 'alfred-mls-nav', 'alfred-mls-nav-lidar', 'alfred-nav', 'coordinator-a1z', ...}
missing    = ['sim2-basic']
source     = {'robots': {'a1z': {'blueprints': {'a1z-planner-coordinator': {'description': 'Motion planning and execution for a Gal...': {'label': 'Arms'}, 'dog': {'label': 'Dogs'}, 'drone': {'label': 'Drones'}, 'humanoid': {'label': 'Humanoids'}, ...}}

.../gateway/tests/test_config.py:255: AssertionError
dimos.evals.test_evals::test_mcp_client_adapter_ends_a_failed_turn_as_an_error[no_response]
Stack Traces | 0.209s run time
tmp_path = PosixPath('.../pytest-0/popen-gw2/test_mcp_client_adapter_ends_a0')
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xfff9b4429f10>
error_response = False

    @pytest.mark.parametrize("error_response", [False, True], ids=["no_response", "http_error"])
    def test_mcp_client_adapter_ends_a_failed_turn_as_an_error(
        tmp_path: Path, monkeypatch: pytest.MonkeyPatch, error_response: bool
    ) -> None:
        """McpClient's failure note is not a model call, so it ends the case as an error.
    
        An HTTP error leaves a trace pair for the failed request; a connection error doesn't.
        """
        note = "This turn failed with AuthenticationError: Error code: 401"
    
        def fake_mcp_client(
            text: str, trace_dir: Path, agent_t: PubSubTransport[Any], idle: PubSubTransport[Any]
        ) -> None:
            idle.publish(False)
            agent_t.publish(HumanMessage(content=text))
            _write_trace_pair(trace_dir, 0)
            agent_t.publish(
                AIMessage(content="", tool_calls=[{"name": "move_to", "args": {}, "id": "c1"}])
            )
            agent_t.publish(ToolMessage(content="arrived", tool_call_id="c1"))
            _write_trace_pair(trace_dir, 1, response=error_response)
            agent_t.publish(AIMessage(content=note, additional_kwargs={TURN_FAILED_KEY: True}))
            idle.publish(True)
    
        trajectory = _run_mcp_client_adapter(tmp_path, monkeypatch, fake_mcp_client, timeout_s=10.0)
    
>       assert (trajectory.extra.ended_by, trajectory.extra.error) == ("error", note)
E       AssertionError: assert ('answer', '') == ('error', 'Th...or code: 401')
E         
E         At index 0 diff: #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33manswer#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m != #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33merror#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         
E         Full diff:
E         #x1B[0m#x1B[90m #x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'error',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[91m-     'This turn failed with AuthenticationError: Error code: 401',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     'answer',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[92m+     '',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
E         #x1B[90m #x1B[39;49;00m )#x1B[90m#x1B[39;49;00m

error_response = False
fake_mcp_client = <function test_mcp_client_adapter_ends_a_failed_turn_as_an_error.<locals>.fake_mcp_client at 0xfff9b4478900>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xfff9b4429f10>
note       = 'This turn failed with AuthenticationError: Error code: 401'
tmp_path   = PosixPath('.../pytest-0/popen-gw2/test_mcp_client_adapter_ends_a0')
trajectory = Trajectory(schema_version='ATIF-v1.7', agent=AgentInfo(name='McpClientAdapter', version='0.0.15', model_name='gpt-5.6-...tal_cached_tokens=0, total_cost_usd=None, total_steps=2), extra=RunExtra(ended_by='answer', error='', blocked_calls=0))

dimos/evals/test_evals.py:943: AssertionError
dimos.msgs.nav_msgs.test_OccupancyGrid::test_from_pointcloud
Stack Traces | 0.862s run time
def test_from_pointcloud() -> None:
        """Test creating OccupancyGrid from PointCloud2."""
        file_path = get_data("lcm_msgs") / "sensor_msgs/PointCloud2.pickle"
        with open(file_path, "rb") as f:
            lcm_msg = pickle.loads(f.read())
    
>       pointcloud = PointCloud2.lcm_decode(lcm_msg)

f          = <_io.BufferedReader name='.../lcm_msgs/sensor_msgs/PointCloud2.pickle'>
file_path  = PosixPath('.../lcm_msgs/sensor_msgs/PointCloud2.pickle')
lcm_msg    = b'\xf5\xeb=\xa1\xc2\x851u\x00\x00\x00\x04\x00\r\xb3\xc0\x00\x00\x00\x00h\x880A\x07Z\xd5\xff\x00\x00\x00\x06world\x00\x...\xf3>\x00\x00\x00\x00\x08P\xc5? @u\xbf\n\xa4\x92\xbd\x00\x00\x00\x00\xab\xaaj@\x9a\x99!\xc033\xf3>\x00\x00\x00\x00\x01'

.../msgs/nav_msgs/test_OccupancyGrid.py:202: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../msgs/sensor_msgs/PointCloud2.py:681: in lcm_decode
    msg = LCMPointCloud2.lcm_decode(data)
        cls        = <class 'dimos.msgs.sensor_msgs.PointCloud2.PointCloud2'>
        data       = b'\xf5\xeb=\xa1\xc2\x851u\x00\x00\x00\x04\x00\r\xb3\xc0\x00\x00\x00\x00h\x880A\x07Z\xd5\xff\x00\x00\x00\x06world\x00\x...\xf3>\x00\x00\x00\x00\x08P\xc5? @u\xbf\n\xa4\x92\xbd\x00\x00\x00\x00\xab\xaaj@\x9a\x99!\xc033\xf3>\x00\x00\x00\x00\x01'
        o3c        = <module 'open3d.cpu.pybind.core'>
        o3d        = <module 'open3d' from '.../dimos/dimos/.venv/lib/python3.11.../site-packages/open3d/__init__.py'>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

cls = <class 'dimos_lcm.sensor_msgs.PointCloud2.PointCloud2'>
data = b'\xf5\xeb=\xa1\xc2\x851u\x00\x00\x00\x04\x00\r\xb3\xc0\x00\x00\x00\x00h\x880A\x07Z\xd5\xff\x00\x00\x00\x06world\x00\x...\xf3>\x00\x00\x00\x00\x08P\xc5? @u\xbf\n\xa4\x92\xbd\x00\x00\x00\x00\xab\xaaj@\x9a\x99!\xc033\xf3>\x00\x00\x00\x00\x01'

    @classmethod
    def lcm_decode(cls, data: bytes):
        if hasattr(data, "read"):
            buf = data
        else:
            buf = BytesIO(data)
        if buf.read(8) != cls._get_packed_fingerprint():
>           raise ValueError("Decode error")
E           ValueError: Decode error

buf        = <_io.BytesIO object at 0x7ff0d2ba9f30>
cls        = <class 'dimos_lcm.sensor_msgs.PointCloud2.PointCloud2'>
data       = b'\xf5\xeb=\xa1\xc2\x851u\x00\x00\x00\x04\x00\r\xb3\xc0\x00\x00\x00\x00h\x880A\x07Z\xd5\xff\x00\x00\x00\x06world\x00\x...\xf3>\x00\x00\x00\x00\x08P\xc5? @u\xbf\n\xa4\x92\xbd\x00\x00\x00\x00\xab\xaaj@\x9a\x99!\xc033\xf3>\x00\x00\x00\x00\x01'

.venv/lib/python3.11.../dimos_lcm/sensor_msgs/PointCloud2.py:142: ValueError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@Nabla7
Nabla7 added this pull request to stack #4985 November 3, 2026 02:49
Comment thread dimos/sim2/physics/module.py Outdated
Comment on lines +67 to +70
tf: IO[TFMessage]
actions: In[Actions]
observations: Out[Observations]
robot_feedback: Out[ControlValues]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only these, should be the Ports on sim

Comment thread dimos/sim2/messages/observations.py Outdated
class SceneSample:
run_id: str
revision: str
epoch: int

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to remove

Comment thread dimos/sim2/messages/observations.py Outdated
epoch: int
tick: int
sim_time: float
wall_time: float

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not needed in transport (messages)

Comment thread dimos/sim2/messages/observations.py Outdated
tick=state.tick,
sim_time=state.sim_time,
ts=state.wall_time,
frame_id="world",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove

Comment thread dimos/sim2/messages/observations.py Outdated
sim_time=state.sim_time,
ts=state.wall_time,
frame_id="world",
complete=True,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to see use cases before we add

@Nabla7 Nabla7 changed the title [sim2 1/2] Complete body observations and independent sensor queries Implement sim2 physics ownership and independent sensor modules Nov 4, 2026
@Nabla7
Nabla7 removed this pull request from stack #4985 November 4, 2026 02:07
@Nabla7
Nabla7 changed the base branch from main to jeff/feat/shared_config November 4, 2026 02:07
@Nabla7
Nabla7 added this pull request to stack #5004 November 4, 2026 02:07

This branch was previously deployed

1 inactive deployment
cachix — 2651d034 Deployed Nov 4, 2026 by Nabla7 via cachix-build #15682
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants