"""simple docstring"""






from __future__ import annotations

import json

import requests
from bsa import BeautifulSoup
from fake_useragent import UserAgent

lowerCAmelCase__  :  Dict						     =	{'UserAgent': UserAgent().random}



def   a_						(					lowerCamelCase       ):
				UpperCAmelCase__             =							script.contents[0]
				UpperCAmelCase__             =							json.loads(data[data.find('{\"config\"'       ) : -1]       )
				return info["entry_data"]["ProfilePage"][0]["graphql"]["user"]
class 				snake_case       :




					"""simple docstring"""

					def __init__(				self   :	Dict    ,lowerCamelCase__   :	Tuple			):
									UpperCAmelCase__             =							f'''https://www.instagram.com/{username}/'''
									UpperCAmelCase__             =							self.get_json()







					def 		__lowerCAmelCase						(				self   :	Any			):
									UpperCAmelCase__             =							requests.get(self.url    ,headers=__lowerCAmelCase			).text
									UpperCAmelCase__             =							BeautifulSoup(__lowerCAmelCase    ,'html.parser'			).find_all('script'			)
									try:
													return extract_user_profile(scripts[4]			)
									except (json.decoder.JSONDecodeError, KeyError):
													return extract_user_profile(scripts[3]			)







					def __repr__(				self   :	Dict			):
									return f'''{self.__class__.__name__}(\'{self.username}\')'''







					def __str__(				self   :	Optional[Any]			):
									return f'''{self.fullname} ({self.username}) is {self.biography}'''







					@property
					def 		__lowerCAmelCase						(				self   :	Any			):
									return self.user_data["username"]







					@property
					def 		__lowerCAmelCase						(				self   :	int			):
									return self.user_data["full_name"]







					@property
					def 		__lowerCAmelCase						(				self   :	str			):
									return self.user_data["biography"]







					@property
					def 		__lowerCAmelCase						(				self   :	str			):
									return self.user_data["business_email"]







					@property
					def 		__lowerCAmelCase						(				self   :	Dict			):
									return self.user_data["external_url"]







					@property
					def 		__lowerCAmelCase						(				self   :	List[str]			):
									return self.user_data["edge_followed_by"]["count"]







					@property
					def 		__lowerCAmelCase						(				self   :	List[Any]			):
									return self.user_data["edge_follow"]["count"]







					@property
					def 		__lowerCAmelCase						(				self   :	str			):
									return self.user_data["edge_owner_to_timeline_media"]["count"]







					@property
					def 		__lowerCAmelCase						(				self   :	Union[str, Any]			):
									return self.user_data["profile_pic_url_hd"]







					@property
					def 		__lowerCAmelCase						(				self   :	Union[str, Any]			):
									return self.user_data["is_verified"]







					@property
					def 		__lowerCAmelCase						(				self   :	Dict			):
									return self.user_data["is_private"]






def   a_						(					lowerCamelCase = "github"       ):
				import os

				if os.environ.get('CI'       ):
								return  # test failing on GitHub Actions
				UpperCAmelCase__             =							InstagramUser(lowerCamelCase       )
				assert instagram_user.user_data
				assert isinstance(instagram_user.user_data					,			lowerCamelCase       )
				assert instagram_user.username == username
				if username != "github":
								return
				assert instagram_user.fullname == "GitHub"
				assert instagram_user.biography == "Built for developers."
				assert instagram_user.number_of_posts > 1_5_0
				assert instagram_user.number_of_followers > 1_2_0_0_0_0
				assert instagram_user.number_of_followings > 1_5
				assert instagram_user.email == "support@github.com"
				assert instagram_user.website == "https://github.com/readme"
				assert instagram_user.profile_picture_url.startswith('https://instagram.'       )
				assert instagram_user.is_verified is True
				assert instagram_user.is_private is False


if __name__ == "__main__":
						import doctest

						doctest.testmod()
						lowerCAmelCase__  :  Any						     =	InstagramUser('github')
						print(instagram_user)
						print(F"""{instagram_user.number_of_posts = }""")
						print(F"""{instagram_user.number_of_followers = }""")
						print(F"""{instagram_user.number_of_followings = }""")
						print(F"""{instagram_user.email = }""")
						print(F"""{instagram_user.website = }""")
						print(F"""{instagram_user.profile_picture_url = }""")
						print(F"""{instagram_user.is_verified = }""")
						print(F"""{instagram_user.is_private = }""")




"""simple docstring"""


from __future__ import annotations






def 			__UpperCAmelCase    (	lowercase      ,lowercase						):







  """simple docstring"""
  _UpperCAmelCase         =					get_failure_array(lowercase						)

  # 2) Step through text searching for pattern
  _UpperCAmelCase       , _UpperCAmelCase         =					0, 0  # index into text, pattern
  while i < len(lowercase						):
    if pattern[j] == text[i]:
      if j == (len(lowercase						) - 1):
        return True
      j += 1

    # if this is a prefix in our pattern
    # just go back far enough to continue
    elif j > 0:
      _UpperCAmelCase         =					failure[j - 1]
      continue
    i += 1
  return False






def 			__UpperCAmelCase    (	lowercase						):







  """simple docstring"""
  _UpperCAmelCase         =					[0]
  _UpperCAmelCase         =					0
  _UpperCAmelCase         =					1
  while j < len(lowercase						):
    if pattern[i] == pattern[j]:
      i += 1
    elif i > 0:
      _UpperCAmelCase         =					failure[i - 1]
      continue
    j += 1
    failure.append(lowercase						)
  return failure


if __name__ == "__main__":
    # Test 1)
    UpperCAmelCase__     						=  """abc1abc12"""
    UpperCAmelCase__     						=  """alskfjaldsabc1abc1abc12k23adsfabcabc"""
    UpperCAmelCase__     						=  """alskfjaldsk23adsfabcabc"""
    assert kmp(pattern, texta) and not kmp(pattern, texta)

    # Test 2)
    UpperCAmelCase__     						=  """ABABX"""
    UpperCAmelCase__     						=  """ABABZABABYABABX"""
    assert kmp(pattern, text)

    # Test 3)
    UpperCAmelCase__     						=  """AAAB"""
    UpperCAmelCase__     						=  """ABAAAAAB"""
    assert kmp(pattern, text)

    # Test 4)
    UpperCAmelCase__     						=  """abcdabcy"""
    UpperCAmelCase__     						=  """abcxabcdabxabcdabcdabcy"""
    assert kmp(pattern, text)

    # Test 5)
    UpperCAmelCase__     						=  """aabaabaaa"""
    assert get_failure_array(pattern) == [0, 1, 0, 1, 2, 3, 4, 5, 2]
