--- /dev/null
+# Stubs for re\r
+# Ron Murawski <ron@horizonchess.com>\r
+# 'bytes' support added by Jukka Lehtosalo\r
+\r
+# based on: http://docs.python.org/3.2/library/re.html\r
+# and http://hg.python.org/cpython/file/618ea5612e83/Lib/re.py\r
+\r
+import sys\r
+from typing import (\r
+ List, Iterator, overload, Callable, Tuple, Sequence, Dict,\r
+ Generic, AnyStr, Match, Pattern, Any, Optional, Union\r
+)\r
+\r
+# ----- re variables and constants -----\r
+if sys.version_info >= (3, 6):\r
+ import enum\r
+ class RegexFlag(enum.IntFlag):\r
+ A = 0\r
+ ASCII = 0\r
+ DEBUG = 0\r
+ I = 0\r
+ IGNORECASE = 0\r
+ L = 0\r
+ LOCALE = 0\r
+ M = 0\r
+ MULTILINE = 0\r
+ S = 0\r
+ DOTALL = 0\r
+ X = 0\r
+ VERBOSE = 0\r
+ U = 0\r
+ UNICODE = 0\r
+ T = 0\r
+ TEMPLATE = 0\r
+\r
+ A = RegexFlag.A\r
+ ASCII = RegexFlag.ASCII\r
+ DEBUG = RegexFlag.DEBUG\r
+ I = RegexFlag.I\r
+ IGNORECASE = RegexFlag.IGNORECASE\r
+ L = RegexFlag.L\r
+ LOCALE = RegexFlag.LOCALE\r
+ M = RegexFlag.M\r
+ MULTILINE = RegexFlag.MULTILINE\r
+ S = RegexFlag.S\r
+ DOTALL = RegexFlag.DOTALL\r
+ X = RegexFlag.X\r
+ VERBOSE = RegexFlag.VERBOSE\r
+ U = RegexFlag.U\r
+ UNICODE = RegexFlag.UNICODE\r
+ T = RegexFlag.T\r
+ TEMPLATE = RegexFlag.TEMPLATE\r
+ _FlagsType = Union[int, RegexFlag]\r
+else:\r
+ A = 0\r
+ ASCII = 0\r
+ DEBUG = 0\r
+ I = 0\r
+ IGNORECASE = 0\r
+ L = 0\r
+ LOCALE = 0\r
+ M = 0\r
+ MULTILINE = 0\r
+ S = 0\r
+ DOTALL = 0\r
+ X = 0\r
+ VERBOSE = 0\r
+ U = 0\r
+ UNICODE = 0\r
+ T = 0\r
+ TEMPLATE = 0\r
+ _FlagsType = int\r
+\r
+class error(Exception): ...\r
+\r
+@overload\r
+def compile(pattern: AnyStr, flags: _FlagsType = ...) -> Pattern[AnyStr]: ...\r
+@overload\r
+def compile(pattern: Pattern[AnyStr], flags: _FlagsType = ...) -> Pattern[AnyStr]: ...\r
+\r
+@overload\r
+def search(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+@overload\r
+def search(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+\r
+@overload\r
+def match(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+@overload\r
+def match(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+\r
+# New in Python 3.4\r
+@overload\r
+def fullmatch(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+@overload\r
+def fullmatch(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ...\r
+\r
+@overload\r
+def split(pattern: AnyStr, string: AnyStr,\r
+ maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ...\r
+@overload\r
+def split(pattern: Pattern[AnyStr], string: AnyStr,\r
+ maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ...\r
+\r
+@overload\r
+def findall(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ...\r
+@overload\r
+def findall(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ...\r
+\r
+# Return an iterator yielding match objects over all non-overlapping matches\r
+# for the RE pattern in string. The string is scanned left-to-right, and\r
+# matches are returned in the order found. Empty matches are included in the\r
+# result unless they touch the beginning of another match.\r
+@overload\r
+def finditer(pattern: AnyStr, string: AnyStr,\r
+ flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ...\r
+@overload\r
+def finditer(pattern: Pattern[AnyStr], string: AnyStr,\r
+ flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ...\r
+\r
+@overload\r
+def sub(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> AnyStr: ...\r
+@overload\r
+def sub(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr],\r
+ string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ...\r
+@overload\r
+def sub(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> AnyStr: ...\r
+@overload\r
+def sub(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr],\r
+ string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ...\r
+\r
+@overload\r
+def subn(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ...\r
+@overload\r
+def subn(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr],\r
+ string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ...\r
+@overload\r
+def subn(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ...\r
+@overload\r
+def subn(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr],\r
+ string: AnyStr, count: int = ...,\r
+ flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ...\r
+\r
+def escape(string: AnyStr) -> AnyStr: ...\r
+\r
+def purge() -> None: ...\r
+def template(pattern: Union[AnyStr, Pattern[AnyStr]], flags: _FlagsType = ...) -> Pattern[AnyStr]: ...\r