# DO NOT EDIT! This file was auto-generated by crates/build/re_types_builder/src/codegen/python/mod.rs
# Based on "crates/store/re_sdk_types/definitions/rerun/components/geo_line_string.fbs".

# You can extend this class by creating a "GeoLineStringExt" class in "geo_line_string_ext.py".

from __future__ import annotations

from collections.abc import Sequence
from typing import TYPE_CHECKING, Any

import numpy as np
import numpy.typing as npt
import pyarrow as pa
from attrs import define, field

from .._baseclasses import (
    BaseBatch,
    ComponentBatchMixin,
    ComponentMixin,
)
from .geo_line_string_ext import GeoLineStringExt

__all__ = ["GeoLineString", "GeoLineStringArrayLike", "GeoLineStringBatch", "GeoLineStringLike"]


@define(init=False)
class GeoLineString(GeoLineStringExt, ComponentMixin):
    """**Component**: A geospatial line string expressed in [EPSG:4326](https://epsg.io/4326) latitude and longitude (North/East-positive degrees)."""

    _BATCH_TYPE = None
    # __init__ can be found in geo_line_string_ext.py

    lat_lon: list[datatypes.DVec2D] = field()

    def __len__(self) -> int:
        # You can define your own __len__ function as a member of GeoLineStringExt in geo_line_string_ext.py
        return len(self.lat_lon)


if TYPE_CHECKING:
    from .. import datatypes

    GeoLineStringLike = GeoLineString | datatypes.DVec2DArrayLike | npt.NDArray[np.float64]
    """A type alias for any GeoLineString-like object."""
else:
    GeoLineStringLike = Any

GeoLineStringArrayLike = GeoLineString | Sequence[GeoLineStringLike] | npt.NDArray[np.float64]
"""A type alias for any GeoLineString-like array object."""


class GeoLineStringBatch(BaseBatch[GeoLineStringArrayLike], ComponentBatchMixin):
    _ARROW_DATATYPE = pa.list_(
        pa.field(
            "item",
            pa.list_(pa.field("item", pa.float64(), nullable=False, metadata={}), 2),
            nullable=False,
            metadata={},
        )
    )
    _COMPONENT_TYPE: str = "rerun.components.GeoLineString"

    @staticmethod
    def _native_to_pa_array(data: GeoLineStringArrayLike, data_type: pa.DataType) -> pa.Array:
        return GeoLineStringExt.native_to_pa_array_override(data, data_type)


# This is patched in late to avoid circular dependencies.
GeoLineString._BATCH_TYPE = GeoLineStringBatch  # type: ignore[assignment]
