'Update k means estimate on a single mini-batch X.
Parameters
X : array-like, shape = [n_samples, n_features]
Coordinates of the data points to cluster.'

def partial_fit(self, X, y=None):

    X = check_array(X, accept_sparse='csr')
    (n_samples, n_features) = X.shape
    if hasattr(self.init, '__array__'):
        self.init = np.ascontiguousarray(self.init, dtype=X.dtype)
    if (n_samples == 0):
        return self
    x_squared_norms = row_norms(X, squared=True)
    self.random_state_ = getattr(self, 'random_state_', check_random_state(self.random_state))
    if ((not hasattr(self, 'counts_')) or (not hasattr(self, 'cluster_centers_'))):
        self.cluster_centers_ = _init_centroids(X, self.n_clusters, self.init, random_state=self.random_state_, x_squared_norms=x_squared_norms, init_size=self.init_size)
        self.counts_ = np.zeros(self.n_clusters, dtype=np.int32)
        random_reassign = False
        distances = None
    else:
        random_reassign = (self.random_state_.randint((10 * (1 + self.counts_.min()))) == 0)
        distances = np.zeros(X.shape[0], dtype=X.dtype)
    _mini_batch_step(X, x_squared_norms, self.cluster_centers_, self.counts_, np.zeros(0, dtype=X.dtype), 0, random_reassign=random_reassign, distances=distances, random_state=self.random_state_, reassignment_ratio=self.reassignment_ratio, verbose=self.verbose)
    if self.compute_labels:
        (self.labels_, self.inertia_) = _labels_inertia(X, x_squared_norms, self.cluster_centers_)
    return self
