67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
"""Event-stream vision modality adapter."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
import numpy as np
|
|
|
|
from sensorium.protocol import CL41_DIM, Modality, ModalityPack, ModalityVocabulary
|
|
from sensorium.vision_event.compiler import EventVisionCompiler
|
|
from sensorium.vision_event.types import EventPacket
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class EventVisionProjectionHead:
|
|
"""ProjectionHead for one synthetic EventPacket."""
|
|
|
|
compiler: EventVisionCompiler
|
|
modality: Modality = Modality.VISION
|
|
|
|
@property
|
|
def embedding_dim(self) -> int:
|
|
return CL41_DIM
|
|
|
|
def project(self, signal: EventPacket) -> np.ndarray:
|
|
out = self.compiler.compile_packet(signal).versor
|
|
if out.shape != (CL41_DIM,):
|
|
raise ValueError(f"expected ({CL41_DIM},), got {out.shape}")
|
|
if out.dtype != np.float32:
|
|
raise TypeError(f"expected float32, got {out.dtype}")
|
|
return out
|
|
|
|
def project_batch(self, signals: list[EventPacket]) -> np.ndarray:
|
|
return np.stack([self.project(signal) for signal in signals], axis=0)
|
|
|
|
def verify_unitarity(self, sample: EventPacket) -> bool:
|
|
try:
|
|
return self.compiler.compile_packet(sample).versor_condition < 1e-6
|
|
except Exception:
|
|
return False
|
|
|
|
|
|
def make_event_vision_pack(
|
|
pack_id: str = "vision_event_core_v1",
|
|
*,
|
|
gate_engaged: bool = False,
|
|
checksum_verified: bool = False,
|
|
packs_root=None,
|
|
) -> ModalityPack:
|
|
from packs.vision.loader import load_vision_pack
|
|
|
|
loaded = load_vision_pack(pack_id, packs_root=packs_root)
|
|
compiler = EventVisionCompiler(loaded.registry, pack_id=loaded.pack_id)
|
|
head = EventVisionProjectionHead(compiler)
|
|
return ModalityPack(
|
|
pack_id=loaded.pack_id,
|
|
modality_type=Modality.VISION,
|
|
projection=head,
|
|
decoder=None,
|
|
vocabulary=ModalityVocabulary(),
|
|
grammar_scaffold=None,
|
|
checksum_verified=checksum_verified,
|
|
gate_engaged=gate_engaged,
|
|
)
|
|
|
|
|
|
__all__ = ["EventVisionProjectionHead", "make_event_vision_pack"]
|