






import json
import os
from pathlib import Path

import pytest

from datasets.download.download_config import DownloadConfig
from datasets.download.download_manager import DownloadManager
from datasets.utils.file_utils import hash_url_to_filename


lowerCamelCase      :       str    =						'''http://www.mocksite.com/file1.txt'''
lowerCamelCase      :       Dict    =						'''"text": ["foo", "foo"]'''
lowerCamelCase      :       List[Any]    =						'''6d8ce9aa78a471c7477201efbeabd3bb01ac2e7d100a6dc024ba1608361f90a8'''



class 				_UpperCamelCase      :
      snake_case_	=				200
      snake_case_	=				{"""Content-Length""": """100"""}
      snake_case_	=				{}


      def 			__UpperCAmelCase		(						self       ,    **__UpperCamelCase						)->						Dict:
           return [bytes(__UpperCamelCase       ,    "utf-8"						)]





def    __lowerCAmelCase   (    *__snake_case       ,			**__snake_case							):
     return MockResponse()





@pytest.mark.parametrize("urls_type"       ,			[str, list, dict]							)
def    __lowerCAmelCase   (    __snake_case       ,			__snake_case       ,			__snake_case							):
     import requests

     monkeypatch.setattr(__snake_case       ,			"request"       ,			__snake_case							)

     __lowerCAmelCase             =       URL
     if issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       url
     elif issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       [url]
     elif issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       {"train": url}
     __lowerCAmelCase             =       "dummy"
     __lowerCAmelCase             =       "downloads"
     __lowerCAmelCase             =       tmp_path
     __lowerCAmelCase             =       DownloadConfig(
         cache_dir=os.path.join(__snake_case       ,			__snake_case							)       ,			use_etag=__snake_case       ,			)
     __lowerCAmelCase             =       DownloadManager(dataset_name=__snake_case       ,			download_config=__snake_case							)
     __lowerCAmelCase             =       dl_manager.download(__snake_case							)
     __lowerCAmelCase             =       urls
     for downloaded_paths in [downloaded_paths]:
          if isinstance(__snake_case       ,			__snake_case							):
               __lowerCAmelCase             =       [downloaded_paths]
               __lowerCAmelCase             =       [urls]
          elif isinstance(__snake_case       ,			__snake_case							):
               assert "train" in downloaded_paths.keys()
               __lowerCAmelCase             =       downloaded_paths.values()
               __lowerCAmelCase             =       urls.values()
          assert downloaded_paths
          for downloaded_path, input_url in zip(__snake_case       ,			__snake_case							):
               assert downloaded_path == dl_manager.downloaded_paths[input_url]
               __lowerCAmelCase             =       Path(__snake_case							)
               __lowerCAmelCase             =       downloaded_path.parts
               assert parts[-1] == HASH
               assert parts[-2] == cache_subdir
               assert downloaded_path.exists()
               __lowerCAmelCase             =       downloaded_path.read_text()
               assert content == CONTENT
               __lowerCAmelCase             =       downloaded_path.with_suffix(".json"							)
               assert metadata_downloaded_path.exists()
               __lowerCAmelCase             =       json.loads(metadata_downloaded_path.read_text()							)
               assert metadata_content == {"url": URL, "etag": None}





@pytest.mark.parametrize("paths_type"       ,			[str, list, dict]							)
def    __lowerCAmelCase   (    __snake_case       ,			__snake_case       ,			__snake_case							):
     __lowerCAmelCase             =       str(__snake_case							)
     if issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       filename
     elif issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       [filename]
     elif issubclass(__snake_case       ,			__snake_case							):
          __lowerCAmelCase             =       {"train": filename}
     __lowerCAmelCase             =       "dummy"
     __lowerCAmelCase             =       xz_file.parent
     __lowerCAmelCase             =       "extracted"
     __lowerCAmelCase             =       DownloadConfig(
         cache_dir=__snake_case       ,			use_etag=__snake_case       ,			)
     __lowerCAmelCase             =       DownloadManager(dataset_name=__snake_case       ,			download_config=__snake_case							)
     __lowerCAmelCase             =       dl_manager.extract(__snake_case							)
     __lowerCAmelCase             =       paths
     for extracted_paths in [extracted_paths]:
          if isinstance(__snake_case       ,			__snake_case							):
               __lowerCAmelCase             =       [extracted_paths]
               __lowerCAmelCase             =       [paths]
          elif isinstance(__snake_case       ,			__snake_case							):
               assert "train" in extracted_paths.keys()
               __lowerCAmelCase             =       extracted_paths.values()
               __lowerCAmelCase             =       paths.values()
          assert extracted_paths
          for extracted_path, input_path in zip(__snake_case       ,			__snake_case							):
               assert extracted_path == dl_manager.extracted_paths[input_path]
               __lowerCAmelCase             =       Path(__snake_case							)
               __lowerCAmelCase             =       extracted_path.parts
               assert parts[-1] == hash_url_to_filename(__snake_case       ,			etag=__snake_case							)
               assert parts[-2] == extracted_subdir
               assert extracted_path.exists()
               __lowerCAmelCase             =       extracted_path.read_text()
               __lowerCAmelCase             =       text_file.read_text()
               assert extracted_file_content == expected_file_content





def    __lowerCAmelCase   (    __snake_case       ,			__snake_case							):
     assert path.endswith(".jsonl"							)
     for num_items, line in enumerate(__snake_case       ,			start=1							):
          __lowerCAmelCase             =       json.loads(line.decode("utf-8"							)							)
          assert item.keys() == {"col_1", "col_2", "col_3"}
     assert num_items == 4





@pytest.mark.parametrize("archive_jsonl"       ,			["tar_jsonl_path", "zip_jsonl_path"]							)
def    __lowerCAmelCase   (    __snake_case       ,			__snake_case							):
     __lowerCAmelCase             =       request.getfixturevalue(__snake_case							)
     __lowerCAmelCase             =       DownloadManager()
     for num_jsonl, (path, file) in enumerate(dl_manager.iter_archive(__snake_case							)       ,			start=1							):
          _test_jsonl(__snake_case       ,			__snake_case							)
     assert num_jsonl == 2





@pytest.mark.parametrize("archive_nested_jsonl"       ,			["tar_nested_jsonl_path", "zip_nested_jsonl_path"]							)
def    __lowerCAmelCase   (    __snake_case       ,			__snake_case							):
     __lowerCAmelCase             =       request.getfixturevalue(__snake_case							)
     __lowerCAmelCase             =       DownloadManager()
     for num_tar, (path, file) in enumerate(dl_manager.iter_archive(__snake_case							)       ,			start=1							):
          for num_jsonl, (subpath, subfile) in enumerate(dl_manager.iter_archive(__snake_case							)       ,			start=1							):
               _test_jsonl(__snake_case       ,			__snake_case							)
     assert num_tar == 1
     assert num_jsonl == 2





def    __lowerCAmelCase   (    __snake_case							):
     __lowerCAmelCase             =       DownloadManager()
     for num_file, file in enumerate(dl_manager.iter_files(__snake_case							)       ,			start=1							):
          assert os.path.basename(__snake_case							) == ("test.txt" if num_file == 1 else "train.txt")
     assert num_file == 2














import os

# Precomputes a list of the 100 first triangular numbers
lowerCamelCase      :       str    =						[int(0.5 * n * (n + 1)) for n in range(1, 101)]





def    __lowerCAmelCase   (    ):
     __lowerCAmelCase             =       os.path.dirname(os.path.realpath(__snake_case							)							)
     __lowerCAmelCase             =       os.path.join(__snake_case       ,			"words.txt"							)

     __lowerCAmelCase             =       ""
     with open(__snake_case							) as f:
          __lowerCAmelCase             =       f.readline()

     __lowerCAmelCase             =       [word.strip("\""							) for word in words.strip("\r\n"							).split(","							)]
     __lowerCAmelCase             =       [
         word
         for word in [sum(ord(__snake_case							) - 64 for x in word							) for word in words]
         if word in TRIANGULAR_NUMBERS
     ]
     return len(__snake_case							)


if __name__ == "__main__":
 print(solution())






