






"""simple docstring"""






import os
import tempfile
from functools import partial
from unittest import TestCase
from unittest.mock import patch

import datasets
import datasets.config

from .utils import require_beam




class 							lowerCAmelCase__       (    datasets.BeamBasedBuilder				):






      '''simple docstring'''

      def _SCREAMING_SNAKE_CASE				(		self  :						List[Any]):




          '''simple docstring'''


          return datasets.DatasetInfo(
              features=datasets.Features({'''content''': datasets.Value('''string''')})		,			supervised_keys=lowercase_		,			)
      def _SCREAMING_SNAKE_CASE				(		self  :						Optional[int]		,			lowercase_  :						Union[str, Any]		,			lowercase_  :						Optional[int]):




          '''simple docstring'''


          return [datasets.SplitGenerator(name=datasets.Split.TRAIN		,			gen_kwargs={'''examples''': get_test_dummy_examples()})]



      def _SCREAMING_SNAKE_CASE				(		self  :						List[str]		,			lowercase_  :						Optional[Any]		,			lowercase_  :						int):




          '''simple docstring'''


          import apache_beam as beam

          return pipeline | "Load Examples" >> beam.Create(lowercase_)




class 							lowerCAmelCase__       (    datasets.BeamBasedBuilder				):






      '''simple docstring'''

      def _SCREAMING_SNAKE_CASE				(		self  :						str):




          '''simple docstring'''


          return datasets.DatasetInfo(
              features=datasets.Features({'''a''': datasets.Sequence({'''b''': datasets.Value('''string''')})})		,			supervised_keys=lowercase_		,			)
      def _SCREAMING_SNAKE_CASE				(		self  :						int		,			lowercase_  :						str		,			lowercase_  :						Dict):




          '''simple docstring'''


          return [
              datasets.SplitGenerator(name=datasets.Split.TRAIN		,			gen_kwargs={'''examples''': get_test_nested_examples()})
          ]



      def _SCREAMING_SNAKE_CASE				(		self  :						Optional[Any]		,			lowercase_  :						List[str]		,			lowercase_  :						Any):




          '''simple docstring'''


          import apache_beam as beam

          return pipeline | "Load Examples" >> beam.Create(lowercase_)



def       _A    ()				-> Optional[int]:
    """simple docstring"""






    return [(i, {"content": content}) for i, content in enumerate(['''foo''', '''bar''', '''foobar''']							)]



def       _A    ()				-> Dict:
    """simple docstring"""






    return [(i, {"a": {"b": [content]}}) for i, content in enumerate(['''foo''', '''bar''', '''foobar''']							)]





class 							lowerCAmelCase__       (    UpperCAmelCase__				):






      '''simple docstring'''

      @require_beam
      def _SCREAMING_SNAKE_CASE				(		self  :						Tuple):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	len(get_test_dummy_examples())
          with tempfile.TemporaryDirectory() as tmp_cache_dir:
              SCREAMING_SNAKE_CASE_   :						Any							=	DummyBeamDataset(cache_dir=lowercase_		,			beam_runner='''DirectRunner''')
              builder.download_and_prepare()
              self.assertTrue(
                  os.path.exists(
                      os.path.join(lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			F'{builder.name}-train.arrow')))
              self.assertDictEqual(builder.info.features		,			datasets.Features({'''content''': datasets.Value('''string''')}))
              SCREAMING_SNAKE_CASE_   :						Tuple							=	builder.as_dataset()
              self.assertEqual(dset['''train'''].num_rows		,			lowercase_)
              self.assertEqual(dset['''train'''].info.splits['''train'''].num_examples		,			lowercase_)
              self.assertDictEqual(dset['''train'''][0]		,			get_test_dummy_examples()[0][1])
              self.assertDictEqual(
                  dset['''train'''][expected_num_examples - 1]		,			get_test_dummy_examples()[expected_num_examples - 1][1])
              self.assertTrue(
                  os.path.exists(os.path.join(lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			'''dataset_info.json''')))
              del dset
      @require_beam
      def _SCREAMING_SNAKE_CASE				(		self  :						int):




          '''simple docstring'''


          import apache_beam as beam

          SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	beam.io.parquetio.WriteToParquet

          SCREAMING_SNAKE_CASE_   :						Dict							=	len(get_test_dummy_examples())
          with tempfile.TemporaryDirectory() as tmp_cache_dir:
              SCREAMING_SNAKE_CASE_   :						Tuple							=	DummyBeamDataset(cache_dir=lowercase_		,			beam_runner='''DirectRunner''')
              with patch('''apache_beam.io.parquetio.WriteToParquet''') as write_parquet_mock:
                  SCREAMING_SNAKE_CASE_   :						List[Any]							=	partial(lowercase_		,			num_shards=2)
                  builder.download_and_prepare()
              self.assertTrue(
                  os.path.exists(
                      os.path.join(
                          lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			F'{builder.name}-train-00000-of-00002.arrow')))
              self.assertTrue(
                  os.path.exists(
                      os.path.join(
                          lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			F'{builder.name}-train-00000-of-00002.arrow')))
              self.assertDictEqual(builder.info.features		,			datasets.Features({'''content''': datasets.Value('''string''')}))
              SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	builder.as_dataset()
              self.assertEqual(dset['''train'''].num_rows		,			lowercase_)
              self.assertEqual(dset['''train'''].info.splits['''train'''].num_examples		,			lowercase_)
              # Order is not preserved when sharding, so we just check that all the elements are there
              self.assertListEqual(sorted(dset['''train''']['''content'''])		,			sorted(['''foo''', '''bar''', '''foobar''']))
              self.assertTrue(
                  os.path.exists(os.path.join(lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			'''dataset_info.json''')))
              del dset
      @require_beam
      def _SCREAMING_SNAKE_CASE				(		self  :						Optional[Any]):




          '''simple docstring'''


          with tempfile.TemporaryDirectory() as tmp_cache_dir:
              SCREAMING_SNAKE_CASE_   :						Union[str, Any]							=	DummyBeamDataset(cache_dir=lowercase_)
              self.assertRaises(datasets.builder.MissingBeamOptions		,			builder.download_and_prepare)



      @require_beam
      def _SCREAMING_SNAKE_CASE				(		self  :						str):




          '''simple docstring'''


          SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	len(get_test_nested_examples())
          with tempfile.TemporaryDirectory() as tmp_cache_dir:
              SCREAMING_SNAKE_CASE_   :						List[Any]							=	NestedBeamDataset(cache_dir=lowercase_		,			beam_runner='''DirectRunner''')
              builder.download_and_prepare()
              self.assertTrue(
                  os.path.exists(
                      os.path.join(lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			F'{builder.name}-train.arrow')))
              self.assertDictEqual(
                  builder.info.features		,			datasets.Features({'''a''': datasets.Sequence({'''b''': datasets.Value('''string''')})}))
              SCREAMING_SNAKE_CASE_   :						Optional[Any]							=	builder.as_dataset()
              self.assertEqual(dset['''train'''].num_rows		,			lowercase_)
              self.assertEqual(dset['''train'''].info.splits['''train'''].num_examples		,			lowercase_)
              self.assertDictEqual(dset['''train'''][0]		,			get_test_nested_examples()[0][1])
              self.assertDictEqual(
                  dset['''train'''][expected_num_examples - 1]		,			get_test_nested_examples()[expected_num_examples - 1][1])
              self.assertTrue(
                  os.path.exists(os.path.join(lowercase_		,			builder.name		,			'''default'''		,			'''0.0.0'''		,			'''dataset_info.json''')))
              del dset










"""simple docstring"""






from __future__ import annotations

import requests



def       _A    (__a							)				-> dict:
    """simple docstring"""






    SCREAMING_SNAKE_CASE_   :						Any							=	f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json?print=pretty'
    return requests.get(__a							).json()



def       _A    (__a = 10							)				-> list[dict]:
    """simple docstring"""






    SCREAMING_SNAKE_CASE_   :						Any							=	'''https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty'''
    SCREAMING_SNAKE_CASE_   :						Dict							=	requests.get(__a							).json()[:max_stories]
    return [get_hackernews_story(__a							) for story_id in story_ids]



def       _A    (__a = 10							)				-> str:
    """simple docstring"""






    SCREAMING_SNAKE_CASE_   :						Tuple							=	hackernews_top_stories(__a							)
    return "\n".join('''* [{title}]({url})'''.format(**__a							) for story in stories							)


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


