<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_bounds(self, R):
 """Calculate lower and upper bounds for centers and widths Parameters R : 2D array, with shape [n_voxel, n_dim] The coordinate matrix of fMRI data from one subject Returns ------- bounds : 2-tuple of array_like, default: None The lower and upper bounds on factor's centers and widths. """


        max_sigma = self._get_max_sigma(R)
        final_lower = np.zeros(self.K * (self.n_dim + 1))
        final_lower[0:self.K * self.n_dim] =\
            np.tile(np.nanmin(R, axis=0), self.K)
        final_lower[self.K * self.n_dim:] =\
            np.repeat(self.lower_ratio * max_sigma, self.K)
        final_upper = np.zeros(self.K * (self.n_dim + 1))
        final_upper[0:self.K * self.n_dim] =\
            np.tile(np.nanmax(R, axis=0), self.K)
        final_upper[self.K * self.n_dim:] =\
            np.repeat(self.upper_ratio * max_sigma, self.K)
        bounds = (final_lower, final_upper)
        return bounds