class_docstr: Reads a dataset from a Petastorm dataset.
  
  :ivar last_row_consumed: True if the last row was already returned by the Reader.
class_docstr_tok: ["Reads","a","dataset","from","a","Petastorm","dataset",".",":","ivar","last_row_consumed",":","True","if","the","last","row","was","already","returned","by","the","Reader","."]
docstr: Checks that shuffle_options doesnt ask for more patitions than rows in a row group.
  This prevents sending partitions to workers which will result in not reading anything.
docstr_tok: ["Checks","that","shuffle_options","doesnt","ask","for","more","patitions","than","rows","in","a","row","group",".","This","prevents","sending","partitions","to","workers","which","will","result","in","not","reading","anything","."]
code: def _normalize_shuffle_options(shuffle_row_drop_partitions, dataset):
      """Checks that shuffle_options doesnt ask for more patitions than rows in a row group.
      This prevents sending partitions to workers which will result in not reading anything.
      """
      if (
          shuffle_row_drop_partitions > 1
          and dataset.metadata
          and dataset.metadata.num_row_groups
      ):
          max_rows_in_row_group = 1
          for i in six.moves.xrange(dataset.metadata.num_row_groups):
              max_rows_in_row_group = max(
                  max_rows_in_row_group,
                  dataset.metadata.row_group(i).num_rows,
              )
  
          return min(shuffle_row_drop_partitions, max_rows_in_row_group)
      return shuffle_row_drop_partitions
  
imports: import collections.abc
  import logging
  import warnings
  import six
  from pyarrow import parquet
  from petastorm.arrow_reader_worker import ArrowReaderWorker
  from petastorm.cache import NullCache
  from petastorm.errors import NoDataAvailableError
  from petastorm.etl import dataset_metadata, rowgroup_indexing
  from petastorm.etl.dataset_metadata import PetastormMetadataError, infer_or_load_unischema
  from petastorm.fs_utils import get_filesystem_and_path_or_paths, normalize_dir_url
  from petastorm.local_disk_cache import LocalDiskCache
  from petastorm.ngram import NGram
  from petastorm.predicates import PredicateBase
  from petastorm.py_dict_reader_worker import PyDictReaderWorker
  from petastorm.reader_impl.arrow_table_serializer import ArrowTableSerializer
  from petastorm.reader_impl.pickle_serializer import PickleSerializer
  from petastorm.selectors import RowGroupSelectorBase
  from petastorm.transform import transform_schema
  from petastorm.workers_pool.dummy_pool import DummyPool
  from petastorm.workers_pool.process_pool import ProcessPool
  from petastorm.workers_pool.thread_pool import ThreadPool
  from petastorm.workers_pool.ventilator import ConcurrentVentilator
label_desc: Use image node_id 8 for calling the Reader obj's underlying member method code with example usage: obj._normalize_shuffle_options(shuffle_row_drop_partitions, dataset) and returns: shuffle_row_drop_partitions, min