# =========================
# New errors in Python 3.13
# =========================

# TODO: triage these new errors
_thread.interrupt_main
_thread.lock
_thread.start_joinable_thread
_tkinter.create
ctypes._endian.DEFAULT_MODE
ctypes._endian.RTLD_GLOBAL
ctypes._endian.RTLD_LOCAL
ctypes._endian.SIZEOF_TIME_T
ctypes._endian.cdll
ctypes._endian.pydll
ctypes._endian.pythonapi
doctest.TestResults.__doc__
doctest.TestResults.__new__
filecmp.dircmp.__init__
importlib.resources.Anchor
importlib.resources.Resource
importlib.resources.__all__
importlib.resources.contents
importlib.resources.is_resource
importlib.resources.open_binary
importlib.resources.open_text
importlib.resources.path
importlib.resources.read_binary
importlib.resources.read_text
os.path.splitroot
# `__replace__` to be special cased in dataclasses
pstats.FunctionProfile.__replace__
pstats.StatsProfile.__replace__
tkinter.Misc.after_info
tkinter.Misc.busy
tkinter.Misc.busy_cget
tkinter.Misc.busy_config
tkinter.Misc.busy_configure
tkinter.Misc.busy_current
tkinter.Misc.busy_forget
tkinter.Misc.busy_hold
tkinter.Misc.busy_status
tkinter.Misc.tk_busy
tkinter.Misc.tk_busy_cget
tkinter.Misc.tk_busy_config
tkinter.Misc.tk_busy_configure
tkinter.Misc.tk_busy_current
tkinter.Misc.tk_busy_forget
tkinter.Misc.tk_busy_hold
tkinter.Misc.tk_busy_status
tkinter.Text.count
tkinter.Wm.wm_attributes

# ======================================
# Pre-existing errors from Python <=3.12
# ======================================

# Modules that exist at runtime, but are missing from typeshed
zipfile._path.glob

# Errors that also existed on Python 3.11
_collections_abc.AsyncIterable.__class_getitem__
_collections_abc.Awaitable.__class_getitem__
_collections_abc.Container.__class_getitem__
_collections_abc.Iterable.__class_getitem__
_collections_abc.MappingView.__class_getitem__
_csv.Reader
_csv.Writer
enum.Enum.__init__
importlib._abc.Loader.exec_module  # See Lib/importlib/_abc.py. Might be defined for backwards compatibility
tkinter._VersionInfoType.__doc__
typing.NewType.__mro_entries__
builtins.ellipsis  # type is not exposed anywhere

# ==========
# Related to positional-only arguments
# ==========

# These are not positional-only at runtime, but we treat them
# as positional-only to match dict.
_collections_abc.MutableMapping.pop
_collections_abc.MutableMapping.setdefault

# typing.IO uses positional-or-keyword arguments, but in the stubs we prefer
# to mark these as positional-only for compatibility with existing sub-classes.
typing(_extensions)?\.BinaryIO\.write
typing(_extensions)?\.IO\.read
typing(_extensions)?\.IO\.readline
typing(_extensions)?\.IO\.readlines
typing(_extensions)?\.IO\.seek
typing(_extensions)?\.IO\.truncate
typing(_extensions)?\.IO\.write
typing(_extensions)?\.IO\.writelines

# positional-only complaints caused by differences between typing aliases and the "real" classes in the stdlib
_collections_abc.Coroutine.send
_collections_abc.Coroutine.throw
_collections_abc.Generator.send
_collections_abc.Generator.throw

# typing.SupportsRound.__round__  # pos-or-kw at runtime, but we pretend it's pos-only in the stub so that e.g. float.__round__ satisfies the interface
types.DynamicClassAttribute..*  # In the stub we pretend it's an alias for property, but it has positional-only differences

# These three have a pos-or-keyword first parameter at runtime, but deliberately have a pos-only first parameter in the stub. #6812
posixpath.join
ntpath.join
os.path.join

# Pos-only parameters had different "names" in different Python versions:
zoneinfo.ZoneInfo.from_file

# ==========
# Allowlist entries that cannot or should not be fixed
# ==========

# The internal implementation of the REPL on py313+; not for public consumption
_pyrepl\..+

# Runtime AST node runtime constructor behaviour is too loose.
# For static typing, the loose behaviour is undesirable (https://github.com/python/typeshed/issues/8378).
# For the runtime, the loose behaviour is deprecated in Python 3.13 (https://github.com/python/cpython/issues/105858)
_?ast.pattern.__init__
_?ast.type_param.__init__

_ast.ImportFrom.level  # None on the class, but never None on instances
_collections_abc.AsyncGenerator.athrow  # async at runtime, deliberately not in the stub, see #7491. Pos-only differences also.
_weakref.ProxyType.__reversed__  # Doesn't really exist
argparse._MutuallyExclusiveGroup.add_mutually_exclusive_group  # deprecated, forwards arguments to super
ast.ImportFrom.level  # None on the class, but never None on instances
builtins.property.__set_name__  # Doesn't actually exist
collections\.UserList\.index  # ignoring pos-or-keyword parameter
dataclasses.KW_ONLY  # white lies around defaults
enum.auto.__init__  # The stub for enum.auto is nothing like the implementation
enum.auto.value  # The stub for enum.auto is nothing like the implementation
functools._lru_cache_wrapper.cache_parameters  # Cannot be detected statically
http.HTTPMethod.description  # mutable instance attribute at runtime but we pretend it's a property
inspect._ParameterKind.description  # Still exists, but stubtest can't see it
os.PathLike.__class_getitem__  # PathLike is a protocol; we don't expect all PathLike classes to implement class_getitem
types.GenericAlias.__call__  # Would be complicated to fix properly, Any could silence problems. #6392
types.GenericAlias.__getattr__
types.GenericAlias.__mro_entries__
sys._monitoring  # Doesn't really exist. See comments in the stub.
weakref.ProxyType.__reversed__  # Doesn't really exist
importlib.metadata._meta.SimplePath.joinpath  # Incorrect runtime definition

# sys attributes that are not always defined
sys.last_exc

# C signature is broader than what is actually accepted
ast.ExtSlice.__new__
ast.Index.__new__
contextvars.Context.__init__

# Treated an alias of a typing class in the stubs,
# they are generic to type checkers anyway.
contextlib.AbstractAsyncContextManager.__class_getitem__
contextlib.AbstractContextManager.__class_getitem__

# platform.uname_result's processor field is now dynamically made to exist
platform.uname_result.__match_args__
platform.uname_result.__new__
platform.uname_result.processor

# Runtime has *args, **kwargs, but will error if any are supplied
unittest.TestCase.__init_subclass__
unittest.case.TestCase.__init_subclass__

# Problematic protocol signature at runtime, see source code comments.
importlib.abc.Traversable.open
importlib.resources.abc.Traversable.open

# Deprecation wrapper classes; their methods are just pass-through, so we can ignore them.
importlib.metadata.DeprecatedNonAbstract.__new__

# Super-special typing primitives
typing\._SpecialForm.*
typing\.NamedTuple
typing\.LiteralString
typing_extensions.Protocol

# These only exist to give a better error message if you try to subclass an instance
typing.ParamSpec.__mro_entries__
typing.ParamSpecArgs.__mro_entries__
typing.ParamSpecKwargs.__mro_entries__
typing.TypeVar.__mro_entries__
typing.TypeVarTuple.__mro_entries__

# TODO: mypy should infer that this attribute is inherited from builtins.type;
# why doesn't it infer this?
typing.SupportsAbs.__type_params__
typing.SupportsRound.__type_params__
typing_extensions.SupportsAbs.__type_params__
typing_extensions.SupportsRound.__type_params__

# Runtime incorrectly has `self`
codecs.backslashreplace_errors
codecs.ignore_errors
codecs.namereplace_errors
codecs.replace_errors
codecs.strict_errors
codecs.xmlcharrefreplace_errors

# To match `dict`, we lie about the runtime, but use overloads to match the correct behavior
types.MappingProxyType.get
