code: def rows(self, *args) -> List[List[Well]]:
          
          row_dict = self._create_indexed_dictionary(group=1)
          keys = sorted(row_dict)
  
          if not args:
              res = [row_dict[key] for key in keys]
          elif isinstance(args[0], int):
              res = [row_dict[keys[idx]] for idx in args]
          elif isinstance(args[0], str):
              res = [row_dict[idx] for idx in args]
          else:
              raise TypeError
          return res
docs: Accessor function used to navigate through a labware by row.
  
          With indexing one can treat it as a typical python nested list.
          To access row A for example, simply write: labware.rows()[0]. This
          will output ['A1', 'A2', 'A3', 'A4'...]
  
          Note that this method takes args for backward-compatibility, but use
          of args is deprecated and will be removed in future versions. Args
          can be either strings or integers, but must all be the same type (e.g.:
          `self.rows(1, 4, 8)` or `self.rows('A', 'B')`, but  `self.rows('A', 4)`
          is invalid.
  
          :return: A list of row lists