def normalize_rbf(rbf_obj, X_scaler, Y_scaler):
    """
    Generate a normalized RBF model.
    
    Args:
        
        rbf_obj (`Rbf` type): Original RBF model.
        
        X_scaler (`sklearn.preprocessing` scaler type or None): Scaler for input X. 
            If None, then no normalization will be performed on the model input.
                    
        Y_scaler (`sklearn.preprocessing` scaler type or None): Scaler for output Y. 
            If None, then no normalization will be performed on the model output.
            
    Returns:
        
        norm_rbf_mod (callable): Normalized Rbf model.
    """
    def norm_rbf_mod(X):
        """
        Normalized RBF model.
        
        Args:
            
            X (2d array): Points to be evaluated. Each row is one point.
        
        Returns:
            
            Y (1d array): Function evaluations at points in `X`.
        """
        assert(X.ndim == 2)
        
        if X_scaler is not None:
            X = X_scaler.transform(X)
        Y = rbf_obj(*X.T)
        if Y_scaler is not None:
            Y = Y_scaler.inverse_transform(Y.reshape((-1, 1))).flatten()
            
        return Y
    
    return norm_rbf_mod