import numpy as np
import tensorflow as tf
from ..util import ztyping as ztyping
from ..util.container import convert_to_container as convert_to_container
from ..util.exception import AxesIncompatibleError as AxesIncompatibleError, CoordinatesIncompatibleError as CoordinatesIncompatibleError, CoordinatesUnderdefinedError as CoordinatesUnderdefinedError, IntentionAmbiguousError as IntentionAmbiguousError, ObsIncompatibleError as ObsIncompatibleError, OverdefinedError as OverdefinedError
from zfit import z as z
from zfit._interfaces import ZfitData as ZfitData, ZfitDimensional as ZfitDimensional, ZfitOrderableDimensional as ZfitOrderableDimensional, ZfitSpace as ZfitSpace

class Coordinates(ZfitOrderableDimensional):
    def __init__(self, obs=None, axes=None) -> None: ...
    @property
    def obs(self) -> ztyping.ObsTypeReturn: ...
    @property
    def axes(self) -> ztyping.AxesTypeReturn: ...
    @property
    def n_obs(self) -> int: ...
    def with_obs(self, obs: ztyping.ObsTypeInput | None, allow_superset: bool = True, allow_subset: bool = True) -> Coordinates: ...
    def with_axes(self, axes: ztyping.AxesTypeInput | None, allow_superset: bool = True, allow_subset: bool = True) -> Coordinates: ...
    def with_autofill_axes(self, overwrite: bool = False) -> ZfitOrderableDimensional: ...
    def get_reorder_indices(self, obs: ztyping.ObsTypeInput = None, axes: ztyping.AxesTypeInput = None) -> tuple[int]: ...
    def reorder_x(self, x: tf.Tensor | np.ndarray, *, x_obs: ztyping.ObsTypeInput = None, x_axes: ztyping.AxesTypeInput = None, func_obs: ztyping.ObsTypeInput = None, func_axes: ztyping.AxesTypeInput = None) -> ztyping.XTypeReturnNoData: ...
    def __eq__(self, other): ...
    def __hash__(self): ...

def convert_to_axes(axes, container=...): ...
def convert_to_obs_str(obs, container=...): ...
