



'''simple docstring'''

snake_case_			=     256
# Modulus to hash a string
snake_case_			=     1000003






def       __lowercase  (_SCREAMING_SNAKE_CASE      :int    ,	_SCREAMING_SNAKE_CASE      :List[str]       ):
				SCREAMING_SNAKE_CASE  :						Optional[int]      					= len(SCREAMING_SNAKE_CASE_       )
				SCREAMING_SNAKE_CASE  :						Optional[Any]      					= len(SCREAMING_SNAKE_CASE_       )
				if p_len > t_len:
								return False

				SCREAMING_SNAKE_CASE  :						List[str]      					= 0
				SCREAMING_SNAKE_CASE  :						int      					= 0
				SCREAMING_SNAKE_CASE  :						Optional[int]      					= 1

				# Calculating the hash of pattern and substring of text
				for i in range(SCREAMING_SNAKE_CASE_       ):
								SCREAMING_SNAKE_CASE  :						Optional[int]      					= (ord(pattern[i]       ) + p_hash * alphabet_size) % modulus
								SCREAMING_SNAKE_CASE  :						List[Any]      					= (ord(text[i]       ) + text_hash * alphabet_size) % modulus
								if i == p_len - 1:
												continue
								SCREAMING_SNAKE_CASE  :						str      					= (modulus_power * alphabet_size) % modulus

				for i in range(0    ,	t_len - p_len + 1       ):
								if text_hash == p_hash and text[i : i + p_len] == pattern:
												return True
								if i == t_len - p_len:
												continue
								# Calculate the https://en.wikipedia.org/wiki/Rolling_hash
								SCREAMING_SNAKE_CASE  :						Tuple      					= (
								    (text_hash - ord(text[i]       ) * modulus_power) * alphabet_size
								    + ord(text[i + p_len]       )
								) % modulus
				return False






def       __lowercase  ():
				SCREAMING_SNAKE_CASE  :						List[str]      					= '''abc1abc12'''
				SCREAMING_SNAKE_CASE  :						Tuple      					= '''alskfjaldsabc1abc1abc12k23adsfabcabc'''
				SCREAMING_SNAKE_CASE  :						Any      					= '''alskfjaldsk23adsfabcabc'''
				assert rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       ) and not rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )

				# Test 2)
				SCREAMING_SNAKE_CASE  :						Dict      					= '''ABABX'''
				SCREAMING_SNAKE_CASE  :						Optional[int]      					= '''ABABZABABYABABX'''
				assert rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )

				# Test 3)
				SCREAMING_SNAKE_CASE  :						Dict      					= '''AAAB'''
				SCREAMING_SNAKE_CASE  :						str      					= '''ABAAAAAB'''
				assert rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )

				# Test 4)
				SCREAMING_SNAKE_CASE  :						int      					= '''abcdabcy'''
				SCREAMING_SNAKE_CASE  :						Union[str, Any]      					= '''abcxabcdabxabcdabcdabcy'''
				assert rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )

				# Test 5)
				SCREAMING_SNAKE_CASE  :						int      					= '''Lü'''
				SCREAMING_SNAKE_CASE  :						Union[str, Any]      					= '''Lüsai'''
				assert rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )
				SCREAMING_SNAKE_CASE  :						Union[str, Any]      					= '''Lue'''
				assert not rabin_karp(SCREAMING_SNAKE_CASE_    ,	SCREAMING_SNAKE_CASE_       )
				print('''Success.'''       )


if __name__ == "__main__":
	test_rabin_karp()









'''simple docstring'''

from ..utils import DummyObject, requires_backends


class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[Any]	    =     ["sentencepiece"]


	def __init__(self : Optional[Any],					*__UpperCAmelCase : List[Any],					**__UpperCAmelCase : List[Any]      )     ->			Optional[int]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Tuple	    =     ["sentencepiece"]


	def __init__(self : Optional[int],					*__UpperCAmelCase : int,					**__UpperCAmelCase : List[str]      )     ->			int:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : List[str],					*__UpperCAmelCase : str,					**__UpperCAmelCase : List[Any]      )     ->			str:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : Optional[int],					*__UpperCAmelCase : str,					**__UpperCAmelCase : Optional[Any]      )     ->			List[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[str]	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : Union[str, Any],					**__UpperCAmelCase : Tuple      )     ->			Any:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Union[str, Any]	    =     ["sentencepiece"]


	def __init__(self : List[Any],					*__UpperCAmelCase : List[Any],					**__UpperCAmelCase : Optional[Any]      )     ->			str:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    int	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : int,					**__UpperCAmelCase : Any      )     ->			Union[str, Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    str	    =     ["sentencepiece"]


	def __init__(self : int,					*__UpperCAmelCase : Optional[Any],					**__UpperCAmelCase : Tuple      )     ->			Optional[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    str	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : Optional[Any],					**__UpperCAmelCase : Tuple      )     ->			Dict:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[Any]	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : Optional[int],					**__UpperCAmelCase : Tuple      )     ->			int:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Tuple	    =     ["sentencepiece"]


	def __init__(self : List[Any],					*__UpperCAmelCase : Optional[int],					**__UpperCAmelCase : Optional[int]      )     ->			Union[str, Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    int	    =     ["sentencepiece"]


	def __init__(self : str,					*__UpperCAmelCase : str,					**__UpperCAmelCase : str      )     ->			Optional[int]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[str]	    =     ["sentencepiece"]


	def __init__(self : int,					*__UpperCAmelCase : List[str],					**__UpperCAmelCase : str      )     ->			Union[str, Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    str	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : Tuple,					**__UpperCAmelCase : str      )     ->			List[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Any	    =     ["sentencepiece"]


	def __init__(self : Dict,					*__UpperCAmelCase : Optional[int],					**__UpperCAmelCase : List[str]      )     ->			Optional[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : str,					*__UpperCAmelCase : Optional[int],					**__UpperCAmelCase : Tuple      )     ->			Dict:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[Any]	    =     ["sentencepiece"]


	def __init__(self : Union[str, Any],					*__UpperCAmelCase : int,					**__UpperCAmelCase : str      )     ->			Optional[int]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : Any,					*__UpperCAmelCase : str,					**__UpperCAmelCase : List[Any]      )     ->			Optional[int]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : List[Any],					*__UpperCAmelCase : Union[str, Any],					**__UpperCAmelCase : List[Any]      )     ->			List[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : Dict,					*__UpperCAmelCase : Optional[Any],					**__UpperCAmelCase : str      )     ->			List[Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[Any]	    =     ["sentencepiece"]


	def __init__(self : List[Any],					*__UpperCAmelCase : Any,					**__UpperCAmelCase : str      )     ->			int:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    str	    =     ["sentencepiece"]


	def __init__(self : Optional[int],					*__UpperCAmelCase : str,					**__UpperCAmelCase : Tuple      )     ->			Any:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[int]	    =     ["sentencepiece"]


	def __init__(self : Union[str, Any],					*__UpperCAmelCase : Dict,					**__UpperCAmelCase : Optional[int]      )     ->			Tuple:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Tuple	    =     ["sentencepiece"]


	def __init__(self : List[str],					*__UpperCAmelCase : Union[str, Any],					**__UpperCAmelCase : Dict      )     ->			List[str]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Any	    =     ["sentencepiece"]


	def __init__(self : int,					*__UpperCAmelCase : Union[str, Any],					**__UpperCAmelCase : Optional[Any]      )     ->			Union[str, Any]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[Any]	    =     ["sentencepiece"]


	def __init__(self : Union[str, Any],					*__UpperCAmelCase : Tuple,					**__UpperCAmelCase : List[str]      )     ->			Optional[int]:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Any	    =     ["sentencepiece"]


	def __init__(self : Optional[int],					*__UpperCAmelCase : str,					**__UpperCAmelCase : str      )     ->			str:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    int	    =     ["sentencepiece"]


	def __init__(self : Dict,					*__UpperCAmelCase : Any,					**__UpperCAmelCase : List[str]      )     ->			Dict:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    Optional[Any]	    =     ["sentencepiece"]


	def __init__(self : List[Any],					*__UpperCAmelCase : Optional[Any],					**__UpperCAmelCase : int      )     ->			Any:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    int	    =     ["sentencepiece"]


	def __init__(self : Tuple,					*__UpperCAmelCase : Optional[Any],					**__UpperCAmelCase : int      )     ->			int:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )



class 	a__     (				metaclass=_lowercase	):
	__magic_name__		:    List[Any]	    =     ["sentencepiece"]


	def __init__(self : Optional[int],					*__UpperCAmelCase : str,					**__UpperCAmelCase : List[str]      )     ->			str:

					"""simple docstring"""

					requires_backends(self,					['''sentencepiece''']      )




