from typing import Literal

from sympy.multipledispatch import Dispatcher
from sympy.sets.fancysets import Complexes, Range, Rationals, Reals
from sympy.sets.sets import FiniteSet, Interval, ProductSet, Set, Union

_inf_sets = ...
is_subset_sets: Dispatcher

@is_subset_sets.register(Set, Set)
def _(a, b) -> None: ...
@is_subset_sets.register(Interval, Interval)
def _(a, b) -> Literal[False] | None: ...
@is_subset_sets.register(Interval, FiniteSet)
def _(a_interval, b_fs) -> Literal[False] | None: ...
@is_subset_sets.register(Interval, Union)
def _(a_interval, b_u) -> Literal[False] | None: ...
@is_subset_sets.register(Range, Range)
def _(a, b) -> bool | None: ...
@is_subset_sets.register(Range, Interval)
def _(a_range, b_interval) -> bool | None: ...
@is_subset_sets.register(Range, FiniteSet)
def _(a_range, b_finiteset) -> bool | None: ...
@is_subset_sets.register(Interval, Range)
def _(a_interval, b_range) -> Literal[False] | None: ...
@is_subset_sets.register(Interval, Rationals)
def _(a_interval, b_rationals) -> Literal[False] | None: ...
@is_subset_sets.register(Range, Complexes)
def _(a, b) -> Literal[True]: ...
@is_subset_sets.register(Complexes, Interval)
def _(a, b) -> Literal[False]: ...
@is_subset_sets.register(Complexes, Range)
def _(a, b) -> Literal[False]: ...
@is_subset_sets.register(Complexes, Rationals)
def _(a, b) -> Literal[False]: ...
@is_subset_sets.register(Rationals, Reals)
def _(a, b) -> Literal[True]: ...
@is_subset_sets.register(Rationals, Range)
def _(a, b) -> Literal[False]: ...
@is_subset_sets.register(ProductSet, FiniteSet)
def _(a_ps, b_fs) -> bool | None: ...
