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: Filters the list of row group indexes based on the requested training partitions. Returns
  a modified list of rowgroup indexes.
docstr_tok: ["Filters","the","list","of","row","group","indexes","based","on","the","requested","training","partitions",".","Returns","a","modified","list","of","rowgroup","indexes","."]
code: def _partition_row_groups(
      self,
      dataset,
      row_groups,
      shard_count,
      cur_shard,
      filtered_row_group_indexes,
      seed,
  ):
      """Filters the list of row group indexes based on the requested training partitions. Returns
      a modified list of rowgroup indexes."""
  
      if (
          not shard_count
          or not isinstance(cur_shard, int)
          or not isinstance(shard_count, int)
      ):
          raise ValueError(
              "partition and num_partitions must be ints and both specified to use partitioning"
          )
  
      if shard_count is not None and len(row_groups) < shard_count:
          raise NoDataAvailableError(
              "Number of row-groups in the dataset must be greater or equal to the number of "
              "requested shards. Otherwise, some of the shards will end up being empty."
          )
  
      # We hash on the relative path of each parquet file to guarantee consistency between different reader
      # constructions even after moving the dataset
      if seed is not None:
          import random
  
          # Instantiate a new Random class with a seed and sample from it.
          # Avoid affecting global/default random generator.
          shard_random = random.Random(seed)
          shard_random.shuffle(filtered_row_group_indexes)
  
      filtered_row_group_indexes = [
          index
          for index in filtered_row_group_indexes
          if index % shard_count == cur_shard
      ]
      return filtered_row_group_indexes
  
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 5 for calling the Reader obj's underlying member method code with example usage: obj._partition_row_groups(dataset, row_groups, shard_count, cur_shard, filtered_row_group_indexes, seed) and returns: filtered_row_group_indexes