# TODO: this is a work in progress!

from typing import Any


class ConcreteModel:
    def __init__(self, name: str = None) -> None: ...
    def __setattr__(self, name: str, value: Any) -> None: ...
    def __getattribute__(self, name: str) -> Any: ...
    def add_component(self, name: str, c: Constraint) -> None: ...


class Objective:
    def __init__(self, *args, **kwargs): ...


class Param:
    def __init__(self, *args, **kwargs): ...
    def model(self) -> ConcreteModel: ...


class Set:
    def __init__(self, *args, **kwargs): ...
    def __iter__(self): ...
    def __len__(self) -> int: ...


class Var:
    dim: Any
    value: float
    fixed: bool
    name: str
    def __init__(self, *args, **kwargs): ...
    def __getitem__(self, *args) -> Any: ...
    def __getindex__(self, t: tuple) -> Any: ...
    def __iter__(self): ...
    def setub(self, v: float): ...
    def setlb(self, v: float): ...
    def iteritems(self) -> Any: ...
    def model(self) -> ConcreteModel: ...


class Constraint:
    Skip: Any
    def __init__(self, *args, **kwargs): ...


class RangeSet:
    def __init__(self, *args, **kwargs): ...


class ConstraintList:
    def __init__(self, *args, **kwargs): ...


def inequality(*args: Any) -> Any: ...
def value(*args: Any) -> float: ...
def sin(*args: Any) -> Any: ...
def cos(*args: Any) -> Any: ...
def atan(*args: Any) -> Any: ...
