parameters: (self, matrix, k)
return_statement: return kth_smallest
docstring: :type matrix: List[List[int]]
          :type k: int
          :rtype: int
docstring_summary: :type matrix: List[List[int]]
          :type k: int
          :rtype: int
docstring_tokens: : type matrix : List [ List [ int ]] : type k : int : rtype : int
function: def kthSmallest(self, matrix, k):
          """
          :type matrix: List[List[int]]
          :type k: int
          :rtype: int
          """
          kth_smallest = 0
          min_heap = []
  
          def push(i, j):
              if len(matrix) > len(matrix[0]):
                  if i < len(matrix[0]) and j < len(matrix):
                      heappush(min_heap, [matrix[j][i], i, j])
              else:
                  if i < len(matrix) and j < len(matrix[0]):
                      heappush(min_heap, [matrix[i][j], i, j])
  
          push(0, 0)
          while min_heap and k > 0:
              kth_smallest, i, j = heappop(min_heap)
              push(i, j + 1)
              if j == 0:
                  push(i + 1, 0)
              k -= 1
  
          return kth_smallest
function_tokens: def kthSmallest ( self , matrix , k ) : kth_smallest = 0 min_heap = [ ] def push ( i , j ) : if len ( matrix ) > len ( matrix [ 0 ] ) : if i < len ( matrix [ 0 ] ) and j < len ( matrix ) : heappush ( min_heap , [ matrix [ j ] [ i ] , i , j ] ) else : if i < len ( matrix ) and j < len ( matrix [ 0 ] ) : heappush ( min_heap , [ matrix [ i ] [ j ] , i , j ] ) push ( 0 , 0 ) while min_heap and k > 0 : kth_smallest , i , j = heappop ( min_heap ) push ( i , j + 1 ) if j == 0 : push ( i + 1 , 0 ) k -= 1 return kth_smallest