
'''simple docstring'''


from __future__ import annotations

import json

import requests
from bsa import BeautifulSoup
from fake_useragent import UserAgent

snake_case_ :  List[str]     =					{'UserAgent': UserAgent().random}



def  __snake_case     (    _UpperCAmelCase					:       Any):
   UpperCamelCase       =  script.contents[0]
   UpperCamelCase       =  json.loads(data[data.find('''{"config"''') : -1])
   return info["entry_data"]["ProfilePage"][0]["graphql"]["user"]


class 						lowercase__	:






   '''simple docstring'''







   def __init__(			self ,   lowerCamelCase__   ):

      '''simple docstring'''







      UpperCamelCase       =  f'https://www.instagram.com/{username}/'
      UpperCamelCase       =  self.get_json()







   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      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   ):

      '''simple docstring'''







      return f'{self.__class__.__name__}(\'{self.username}\')'







   def __str__(			self   ):

      '''simple docstring'''







      return f'{self.fullname} ({self.username}) is {self.biography}'







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["username"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["full_name"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["biography"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["business_email"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["external_url"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["edge_followed_by"]["count"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["edge_follow"]["count"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["edge_owner_to_timeline_media"]["count"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["profile_pic_url_hd"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["is_verified"]







   @property
   def       UpperCAmelCase				(			self   ):

      '''simple docstring'''







      return self.user_data["is_private"]




def  __snake_case     (    _UpperCAmelCase					:       str = "github"):
   import os

   if os.environ.get('''CI'''):
      return  # test failing on GitHub Actions
   UpperCamelCase       =  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 > 12_0000
   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()
   snake_case_ :  List[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'''


def  __snake_case     (    _UpperCAmelCase					:       list[list[float]]):
   UpperCamelCase       =  []
   for data in source_data:
      for i, el in enumerate(_UpperCAmelCase):
         if len(_UpperCAmelCase) < i + 1:
            data_lists.append([])
         data_lists[i].append(float(_UpperCAmelCase))
   return data_lists



def  __snake_case     (    _UpperCAmelCase					:       list[list[float]],      _UpperCAmelCase					:       list[int]):
   UpperCamelCase       =  []
   for dlist, weight in zip(_UpperCAmelCase,      _UpperCAmelCase):
      UpperCamelCase       =  min(_UpperCAmelCase)
      UpperCamelCase       =  max(_UpperCAmelCase)

      UpperCamelCase       =  []
      # for weight 0 score is 1 - actual score
      if weight == 0:
         for item in dlist:
            try:
               score.append(1 - ((item - mind) / (maxd - mind)))
            except ZeroDivisionError:
               score.append(1)

      elif weight == 1:
         for item in dlist:
            try:
               score.append((item - mind) / (maxd - mind))
            except ZeroDivisionError:
               score.append(0)

        # weight not 0 or 1
      else:
         UpperCamelCase       =  f'Invalid weight of {weight:f} provided'
         raise ValueError(_UpperCAmelCase)

      score_lists.append(_UpperCAmelCase)

   return score_lists



def  __snake_case     (    _UpperCAmelCase					:       list[list[float]]):
   UpperCamelCase       =  [0 for i in range(len(score_lists[0]))]

   for slist in score_lists:
      for j, ele in enumerate(_UpperCAmelCase):
         UpperCamelCase       =  final_scores[j] + ele

   return final_scores



def  __snake_case     (    _UpperCAmelCase					:       list[list[float]],      _UpperCAmelCase					:       list[int]):
   UpperCamelCase       =  get_data(_UpperCAmelCase)
   UpperCamelCase       =  calculate_each_score(_UpperCAmelCase,      _UpperCAmelCase)
   UpperCamelCase       =  generate_final_scores(_UpperCAmelCase)

   # append scores to source data
   for i, ele in enumerate(_UpperCAmelCase):
      source_data[i].append(_UpperCAmelCase)

   return source_data





