






'''simple docstring'''







import webbrowser
from sys import argv
from urllib.parse import parse_qs, quote

import requests
from bsa import BeautifulSoup
from fake_useragent import UserAgent

if __name__ == "__main__":
		__lowerCAmelCase       		=					'%20'.join(argv[1:]) if len(argv) > 1 else quote(str(input('Search: ')))

		print('Googling.....')

		__lowerCAmelCase       		=					F"""https://www.google.com/search?q={query}&num=100"""

		__lowerCAmelCase       		=					requests.get(
		    url,
		    headers={'User-Agent': str(UserAgent().random)},
		)

		try:
				__lowerCAmelCase       		=					(
				    BeautifulSoup(res.text, 'html.parser')
				    .find('div', attrs={'class': 'yuRUbf'})
				    .find('a')
				    .get('href')
				)

		except AttributeError:
				__lowerCAmelCase       		=					parse_qs(
				    BeautifulSoup(res.text, 'html.parser')
				    .find('div', attrs={'class': 'kCrYT'})
				    .find('a')
				    .get('href')
				)['url'][0]

		webbrowser.open(link)












'''simple docstring'''







import torch

from transformers import AutoModel





class 	SCREAMING_SNAKE_CASE					(					torch.nn.Module       ):






			def __init__( self      :			Optional[int]  ,						__SCREAMING_SNAKE_CASE      :			int="sayef/fsner-bert-base-uncased"					)			->			str:
							super(__SCREAMING_SNAKE_CASE  ,						self					).__init__()

							a_		:  str											=      AutoModel.from_pretrained(__SCREAMING_SNAKE_CASE  ,						return_dict=__SCREAMING_SNAKE_CASE					)
							a_		:  Optional[int]											=      torch.nn.CosineSimilarity(3  ,						1e-08					)
							a_		:  Dict											=      torch.nn.Softmax(dim=1					)






			def 			SCREAMING_SNAKE_CASE      ( self      :			str  ,						**__SCREAMING_SNAKE_CASE      :			int					)			->			str:
							return self.bert(**__SCREAMING_SNAKE_CASE					).last_hidden_state






			def 			SCREAMING_SNAKE_CASE      ( self      :			List[str]  ,						__SCREAMING_SNAKE_CASE      :			List[Any]					)			->			Optional[int]:
							return token_embeddings.sum(2  ,						keepdim=__SCREAMING_SNAKE_CASE					)






			def 			SCREAMING_SNAKE_CASE      ( self      :			List[Any]  ,						__SCREAMING_SNAKE_CASE      :			Optional[int]  ,						__SCREAMING_SNAKE_CASE      :			Union[str, Any]  ,						__SCREAMING_SNAKE_CASE      :			int=1					)			->			Dict:
							return self.softmax(T * self.cos(__SCREAMING_SNAKE_CASE  ,						__SCREAMING_SNAKE_CASE					)					)







			def 			SCREAMING_SNAKE_CASE      ( self      :			str  ,						__SCREAMING_SNAKE_CASE      :			Optional[Any]  ,						__SCREAMING_SNAKE_CASE      :			Optional[int]					)			->			Any:
							a_		:  Dict											=      W_supports['''sizes'''].tolist()
							a_		:  Tuple											=      W_supports['''start_token_id'''].item()
							a_		:  List[Any]											=      W_supports['''end_token_id'''].item()

							del W_supports["sizes"]
							del W_supports["start_token_id"]
							del W_supports["end_token_id"]

							a_		:  int											=      self.BERT(**__SCREAMING_SNAKE_CASE					)
							a_		:  Any											=      self.BERT(**__SCREAMING_SNAKE_CASE					)

							a_		:  Optional[Any]											=      None
							a_		:  Tuple											=      None

							a_		:  List[str]											=      W_supports['''input_ids'''] == start_token_id
							a_		:  Dict											=      W_supports['''input_ids'''] == end_token_id

							for i, size in enumerate(__SCREAMING_SNAKE_CASE					):
											if i == 0:
															a_		:  str											=      0
											else:
															a_		:  str											=      support_sizes[i - 1]

											a_		:  Union[str, Any]											=      S[s : s + size][start_token_masks[s : s + size]]
											a_		:  Tuple											=      S[s : s + size][end_token_masks[s : s + size]]

											a_		:  Tuple											=      torch.matmul(q[i]  ,						s_start.T					).sum(1					).softmax(0					)
											a_		:  Optional[Any]											=      torch.matmul(q[i]  ,						s_end.T					).sum(1					).softmax(0					)

											if p_starts is not None:
															a_		:  Any											=      torch.vstack((p_starts, p_start)					)
															a_		:  Dict											=      torch.vstack((p_ends, p_end)					)
											else:
															a_		:  Optional[int]											=      p_start
															a_		:  List[Any]											=      p_end

							return p_starts, p_ends




