"""Helpers for Python and platform compatibility."""

import sys

from thinc.util import copy_array

try:
    import cPickle as pickle
except ImportError:
    import pickle  # type: ignore[no-redef]

try:
    import copy_reg
except ImportError:
    import copyreg as copy_reg  # type: ignore[no-redef]

try:
    from cupy.cuda.stream import Stream as CudaStream
except ImportError:
    CudaStream = None

try:
    import cupy
except ImportError:
    cupy = None

if sys.version_info[:2] >= (3, 8):  # Python 3.8+
    from typing import Literal, Protocol, runtime_checkable
else:
    from typing_extensions import Literal, Protocol, runtime_checkable  # noqa: F401

# Important note: The importlib_metadata "backport" includes functionality
# that's not part of the built-in importlib.metadata. We should treat this
# import like the built-in and only use what's available there.
try:  # Python 3.8+
    import importlib.metadata as importlib_metadata
except ImportError:
    from catalogue import (  # type: ignore[no-redef]
        _importlib_metadata as importlib_metadata,  # noqa: F401
    )

from thinc.api import Optimizer  # noqa: F401

pickle = pickle
copy_reg = copy_reg
CudaStream = CudaStream
cupy = cupy
copy_array = copy_array

is_windows = sys.platform.startswith("win")
is_linux = sys.platform.startswith("linux")
is_osx = sys.platform == "darwin"
