
"""simple docstring"""




from __future__ import annotations

import json

import requests
from bsa import BeautifulSoup
from fake_useragent import UserAgent

A__   :					Optional[Any]							=   {'UserAgent': UserAgent().random}




def   _lowerCAmelCase		(		_UpperCamelCase						):






  """simple docstring"""



  _lowercase:			Tuple       =     script.contents[0]
  _lowercase:			Tuple       =     json.loads(data[data.find('''{"config"'''						) : -1]						)
  return info["entry_data"]["ProfilePage"][0]["graphql"]["user"]


class 			__magic_name__       :
       def __init__(     self ,				A_       )     ->	int:





         """simple docstring"""




         _lowercase:			str       =     f'''https://www.instagram.com/{username}/'''
         _lowercase:			Dict       =     self.get_json()
       def 							lowercase_							(     self       )     ->	dict:





         """simple docstring"""




         _lowercase:			str       =     requests.get(self.url ,				headers=A_       ).text
         _lowercase:			Optional[int]       =     BeautifulSoup(A_ ,				'''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       )     ->	str:





         """simple docstring"""




         return f'''{self.__class__.__name__}(\'{self.username}\')'''
       def __str__(     self       )     ->	str:





         """simple docstring"""




         return f'''{self.fullname} ({self.username}) is {self.biography}'''
       @property
       def 							lowercase_							(     self       )     ->	str:





         """simple docstring"""




         return self.user_data["username"]
       @property
       def 							lowercase_							(     self       )     ->	str:





         """simple docstring"""




         return self.user_data["full_name"]
       @property
       def 							lowercase_							(     self       )     ->	str:





         """simple docstring"""




         return self.user_data["biography"]
       @property
       def 							lowercase_							(     self       )     ->	str:





         """simple docstring"""




         return self.user_data["business_email"]
       @property
       def 							lowercase_							(     self       )     ->	str:





         """simple docstring"""




         return self.user_data["external_url"]
       @property
       def 							lowercase_							(     self       )     ->	int:





         """simple docstring"""




         return self.user_data["edge_followed_by"]["count"]
       @property
       def 							lowercase_							(     self       )     ->	int:





         """simple docstring"""




         return self.user_data["edge_follow"]["count"]
       @property
       def 							lowercase_							(     self       )     ->	int:





         """simple docstring"""




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





         """simple docstring"""




         return self.user_data["profile_pic_url_hd"]
       @property
       def 							lowercase_							(     self       )     ->	bool:





         """simple docstring"""




         return self.user_data["is_verified"]



       @property
       def 							lowercase_							(     self       )     ->	bool:





         """simple docstring"""




         return self.user_data["is_private"]




def   _lowerCAmelCase		(		_UpperCamelCase = "github"						):






  """simple docstring"""



  import os

  if os.environ.get('''CI'''						):
    return  # test failing on GitHub Actions
  _lowercase:			Tuple       =     InstagramUser(_UpperCamelCase						)
  assert instagram_user.user_data
  assert isinstance(instagram_user.user_data ,				_UpperCamelCase						)
  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 > 150
  assert instagram_user.number_of_followers > 120_000
  assert instagram_user.number_of_followings > 15
  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()
  A__   :					List[str]							=   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"""




def  _lowerCAmelCase		(		_UpperCamelCase						):






  """simple docstring"""



  if not isinstance(_UpperCamelCase ,				_UpperCamelCase						):
    raise ValueError('''Input series is not valid, valid series - [2, 4, 6]'''						)
  if len(_UpperCamelCase						) == 0:
    raise ValueError('''Input list must be a non empty list'''						)
  if len(_UpperCamelCase						) == 1:
    return True
  _lowercase:			Any       =     series[1] - series[0]
  for index in range(len(_UpperCamelCase						) - 1						):
    if series[index + 1] - series[index] != common_diff:
      return False
  return True




def  _lowerCAmelCase		(		_UpperCamelCase						):






  """simple docstring"""



  if not isinstance(_UpperCamelCase ,				_UpperCamelCase						):
    raise ValueError('''Input series is not valid, valid series - [2, 4, 6]'''						)
  if len(_UpperCamelCase						) == 0:
    raise ValueError('''Input list must be a non empty list'''						)
  _lowercase:			Tuple       =     0
  for val in series:
    answer += val
  return answer / len(_UpperCamelCase						)


if __name__ == "__main__":
  import doctest

  doctest.testmod()
