import numpy as np

from .base import SequentialVisualOdometryBase
from models.processing import RelativePose, Matches


class SequentialVisualOdometry(SequentialVisualOdometryBase):
    async def compute_relative_pose(
        self, prev_image: np.ndarray, curr_image: np.ndarray
    ) -> RelativePose:
        raise NotImplementedError

    async def extract_keypoints(
        self, image: np.ndarray
    ) -> tuple[np.ndarray, np.ndarray]:
        raise NotImplementedError

    async def match_features(
        self,
        keypoints1: np.ndarray,
        descriptors1: np.ndarray,
        keypoints2: np.ndarray,
        descriptors2: np.ndarray,
    ) -> Matches:
        raise NotImplementedError

    async def estimate_motion(
        self, matches: Matches, camera_matrix: np.ndarray
    ) -> RelativePose:
        raise NotImplementedError

    def is_tracking_good(self, pose: RelativePose) -> bool:
        raise NotImplementedError

