






from math import ceil, sqrt
def     __lowercase  (_lowercase = 1_000_000     )   ->     int:


     """simple docstring"""
     __lowerCamelCase						:       List[Any]				   =				0

     for outer_width in range(3,						(limit // 4) + 2     ):
          if outer_width**2 > limit:
               __lowerCamelCase						:       List[str]				   =				max(ceil(sqrt(outer_width**2 - limit     )     ),						1     )
          else:
               __lowerCamelCase						:       Optional[Any]				   =				1
          if (outer_width - hole_width_lower_bound) % 2:
               hole_width_lower_bound += 1

          answer += (outer_width - hole_width_lower_bound - 2) // 2 + 1

     return answer


if __name__ == "__main__":
   print(f'''{solution() = }''')











'''simple docstring'''

from unittest.mock import patch

import pyspark

from datasets.packaged_modules.spark.spark import (
    Spark,
    SparkExamplesIterable,
    _generate_iterable_examples,
)

from ..utils import (
    require_dill_gt_0_3_2,
    require_not_windows,
)
def     __lowercase  (_lowercase,						_lowercase     )   ->     List[str]:


     """simple docstring"""
     __lowerCamelCase						:       Union[str, Any]				   =				[]
     for part_id in partition_order:
          __lowerCamelCase						:       Union[str, Any]				   =				df.where(f"SPARK_PARTITION_ID() = {part_id}"     ).collect()
          for row_idx, row in enumerate(_lowercase     ):
               expected_row_ids_and_row_dicts.append((f"{part_id}_{row_idx}", row.asDict())     )
     return expected_row_ids_and_row_dicts
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     Optional[int]:


     """simple docstring"""
     __lowerCamelCase						:       int				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       List[str]				   =				spark.range(100     ).repartition(1     )
     __lowerCamelCase						:       str				   =				Spark(_lowercase     )
     # The id ints will be converted to Pyarrow int64s, so each row will be 8 bytes. Setting a max_shard_size of 16 means
     # that each partition can hold 2 rows.
     spark_builder._repartition_df_if_needed(max_shard_size=16     )
     # Given that the dataframe has 100 rows and each partition has 2 rows, we expect 50 partitions.
     assert spark_builder.df.rdd.getNumPartitions() == 50
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     Optional[Any]:


     """simple docstring"""
     __lowerCamelCase						:       Any				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       Dict				   =				spark.range(10     ).repartition(2     )
     __lowerCamelCase						:       List[Any]				   =				[1, 0]
     __lowerCamelCase						:       Any				   =				_generate_iterable_examples(_lowercase,						_lowercase     )  # Reverse the partitions.
     __lowerCamelCase						:       int				   =				_get_expected_row_ids_and_row_dicts_for_partition_order(_lowercase,						_lowercase     )

     for i, (row_id, row_dict) in enumerate(generate_fn()     ):
          __lowerCamelCase   ,      __lowerCamelCase						:       str				   =				expected_row_ids_and_row_dicts[i]
          assert row_id == expected_row_id
          assert row_dict == expected_row_dict
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     int:


     """simple docstring"""
     __lowerCamelCase						:       Dict				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       Union[str, Any]				   =				spark.range(10     ).repartition(1     )
     __lowerCamelCase						:       Dict				   =				SparkExamplesIterable(_lowercase     )
     assert it.n_shards == 1
     for i, (row_id, row_dict) in enumerate(_lowercase     ):
          assert row_id == f"0_{i}"
          assert row_dict == {"id": i}
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     Tuple:


     """simple docstring"""
     __lowerCamelCase						:       int				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       Optional[Any]				   =				spark.range(30     ).repartition(3     )
     # Mock the generator so that shuffle reverses the partition indices.
     with patch("""numpy.random.Generator"""     ) as generator_mock:
          __lowerCamelCase						:       Dict				   =				lambda _lowercase     : x.reverse()
          __lowerCamelCase						:       Union[str, Any]				   =				_get_expected_row_ids_and_row_dicts_for_partition_order(_lowercase,						[2, 1, 0]     )

          __lowerCamelCase						:       Tuple				   =				SparkExamplesIterable(_lowercase     ).shuffle_data_sources(_lowercase     )
          assert shuffled_it.n_shards == 3
          for i, (row_id, row_dict) in enumerate(_lowercase     ):
               __lowerCamelCase   ,      __lowerCamelCase						:       Union[str, Any]				   =				expected_row_ids_and_row_dicts[i]
               assert row_id == expected_row_id
               assert row_dict == expected_row_dict
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     str:


     """simple docstring"""
     __lowerCamelCase						:       Union[str, Any]				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       List[str]				   =				spark.range(20     ).repartition(4     )

     # Partitions 0 and 2
     __lowerCamelCase						:       Union[str, Any]				   =				SparkExamplesIterable(_lowercase     ).shard_data_sources(worker_id=0,						num_workers=2     )
     assert shard_it_a.n_shards == 2
     __lowerCamelCase						:       Optional[int]				   =				_get_expected_row_ids_and_row_dicts_for_partition_order(_lowercase,						[0, 2]     )
     for i, (row_id, row_dict) in enumerate(_lowercase     ):
          __lowerCamelCase   ,      __lowerCamelCase						:       int				   =				expected_row_ids_and_row_dicts_a[i]
          assert row_id == expected_row_id
          assert row_dict == expected_row_dict

     # Partitions 1 and 3
     __lowerCamelCase						:       List[str]				   =				SparkExamplesIterable(_lowercase     ).shard_data_sources(worker_id=1,						num_workers=2     )
     assert shard_it_a.n_shards == 2
     __lowerCamelCase						:       int				   =				_get_expected_row_ids_and_row_dicts_for_partition_order(_lowercase,						[1, 3]     )
     for i, (row_id, row_dict) in enumerate(_lowercase     ):
          __lowerCamelCase   ,      __lowerCamelCase						:       int				   =				expected_row_ids_and_row_dicts_a[i]
          assert row_id == expected_row_id
          assert row_dict == expected_row_dict
@require_not_windows
@require_dill_gt_0_3_2
def     __lowercase  ()   ->     int:


     """simple docstring"""
     __lowerCamelCase						:       Union[str, Any]				   =				pyspark.sql.SparkSession.builder.master("""local[*]"""     ).appName("""pyspark"""     ).getOrCreate()
     __lowerCamelCase						:       Dict				   =				spark.range(100     ).repartition(1     )
     __lowerCamelCase						:       Any				   =				Spark(_lowercase     )
     # Choose a small max_shard_size for maximum partitioning.
     spark_builder._repartition_df_if_needed(max_shard_size=1     )
     # The new number of partitions should not be greater than the number of rows.
     assert spark_builder.df.rdd.getNumPartitions() == 100



