from collections.abc import Iterable
from typing import Self
import numpy as np
from pyautd3.driver.geometry import Geometry
from pyautd3.gain.holo.amplitude import Amplitude
from pyautd3.native_methods.autd3capi_driver import GainPtr
from pyautd3.native_methods.structs import Vector3
from .backend import Backend
from .constraint import EmissionConstraint
from .holo import HoloWithBackend



class LM(HoloWithBackend[LM]):
    def __init__(self, backend: Backend, iterable: Iterable[tuple[np.ndarray, Amplitude]]) -> None: ...
    def _gain_ptr(self, _: Geometry) -> GainPtr: ...
    def with_eps1(self, eps1: float) -> LM: ...
    def with_eps2(self, eps2: float) -> LM: ...
    def with_tau(self, tau: float) -> LM: ...
    def with_kmax(self, kmax: int) -> LM: ...
    def with_initial(self, initial: np.ndarray) -> LM: ...
    @property
    def eps1(self) -> float: ...
    @property
    def eps2(self) -> float: ...
    @property
    def tau(self) -> float: ...
    @property
    def kmax(self) -> int: ...
    @property
    def initial(self) -> np.ndarray: ...
