def fit(self,
            data,
            class_name,
            categorial_name,
            multidimentionality=False):
        # X,y series
        self.categorial_name = categorial_name
        conjugate_matrix = ConjugateMatrix()
        conjugate_matrix.make(data, class_name, categorial_name)
        probability_matrix = ProbabilityMatrix()
        probability_matrix.make_form_cobjugate_matrix(conjugate_matrix)
        conjugate_matrix.get_D1()
        # conjugate_matrix = None

        D1 = probability_matrix.get_D1()
        D2 = probability_matrix.get_D2()
        D1_sqrt_ = fractional_matrix_power(D1, -0.5)
        D2_sqrt_ = fractional_matrix_power(D2, -0.5)
        PH = np.dot(np.dot(D1_sqrt_, probability_matrix.matrix), D2_sqrt_)
        T_1 = np.dot(PH.T, PH)
        # T_2 = np.dot(PH,PH.T)
        tags = Tags()
        tags.make(T_1, D2_sqrt_, multidimentionality)
        self.C = tags.tags
        return self
    def fit(self, X, multidimentionality=False):
        X = deepcopy(X)
        #         X - only caregorial
        self.columns = X.columns.values
        p = X.columns.values.shape[0]
        binary_matrix = BinaryMatrixData()
        binary_matrix = binary_matrix.make(X)
        D = binary_matrix.make_D()

        D_sqrt_ = fractional_matrix_power(D, -0.5)
        D = None
        F = np.dot(((1 / p ** 0.5) * binary_matrix.matrix), D_sqrt_)
        binary_matrix = None
        T_1 = np.dot(F.T, F)
        F = None
        tags = Tags()
        tags.make(T_1,D_sqrt_,multidimentionality)
        T_1 = None
        self.C = tags.tags
        return self