text: import numpy as np
  
  import math
  
  ########################################################################################################################
  """
  GROUP: Data/Batch Sizeing
  	-Takes care of sizing data batches for training 
  	
  EXTERNAL FUNCTIONS: 
  					1) random_mini_batches: Creates random minibatches of specified size for all training examples
  					
  INTERNAL FUNCTIONS:
  					None
  """
  ########################################################################################################################
  
  ###EXTERNAL FUNCTIONS ###
  
  def random_mini_batches(X, Y, mini_batch_size = 64, seed = 0):
  	"""
  	Creates a list of random minibatches from (X, Y)
  
  	Arguments:
  	X -- input data, of shape (input size, number of examples)
  	Y -- true "label" vector (1 / 0 ), of shape (1, number of examples)
  	mini_batch_size -- size of the mini-batches, integer
  
  	Returns:
  	mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)
  	"""
  	np.random.seed(seed)
  	m = X.shape[1]                  # number of training examples
  	mini_batches = []
  
  	# Step 1: Shuffle (X, Y)
  	permutation = list(np.random.permutation(m))
  	shuffled_X = X[:, permutation]
  	shuffled_Y = Y[:, permutation].reshape((1,m))
  
  	# Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.
  	num_complete_minibatches = int(math.floor(m/mini_batch_size)) # number of mini batches of size mini_batch_size
  	for k in range(0, num_complete_minibatches):
  		mini_batch_X = (shuffled_X[:,k*mini_batch_size:(k+1)*mini_batch_size])
  		mini_batch_Y = (shuffled_Y[:,k*mini_batch_size:(k+1)*mini_batch_size])
  		mini_batch = (mini_batch_X, mini_batch_Y)
  		mini_batches.append(mini_batch)
  
  	# Handling the end case (last mini-batch < mini_batch_size)
  	if m % mini_batch_size != 0:
  		mini_batch_X = shuffled_X[:,mini_batch_size*num_complete_minibatches:m]
  		mini_batch_Y = shuffled_Y[:,mini_batch_size*num_complete_minibatches:m]
  		mini_batch = (mini_batch_X, mini_batch_Y)
  		mini_batches.append(mini_batch)
  
  	return mini_batches
  