class_docstr: Decomposes the given time series with a singular-spectrum analysis. Assumes the values of the time series are
  recorded at equal intervals.
  
  Args:
      time_series: Time series to be decomposed.
      max_simplex_dim: Maximum dimension of the simplices to be used in the Rips filtration.
      epsilon: Maximum distance between two points to be considered connected by an edge in the Rips filtration.
      persistence_params: ...
      window_length: Length of the window to be used in the rolling window function.
  
  Attributes:
      epsilon_range (np.ndarray): Range of epsilon values to be used in the Rips filtration.
class_docstr_tok: ["Decomposes","the","given","time","series","with","a","singular-spectrum","analysis",".","Assumes","the","values","of","the","time","series","are","recorded","at","equal","intervals",".","Args",":","time_series",":","Time","series","to","be","decomposed",".","max_simplex_dim",":","Maximum","dimension","of","the","simplices","to","be","used","in","the","Rips","filtration",".","epsilon",":","Maximum","distance","between","two","points","to","be","considered","connected","by","an","edge","in","the","Rips","filtration",".","persistence_params",":","...","window_length",":","Length","of","the","window","to","be","used","in","the","rolling","window","function",".","Attributes",":","epsilon_range","(","np.ndarray",")",":","Range","of","epsilon","values","to","be","used","in","the","Rips","filtration","."]
code: def point_cloud_to_persistent_cohomology_ripser(
      self, point_cloud: np.array = None, max_simplex_dim: int = 1
  ):
      # ensure epsilon_range is a numpy array
      epsilon_range = self.epsilon_range
  
      # build filtration
      self.persistence_params["maxdim"] = max_simplex_dim
      filtration = Rips(**self.persistence_params)
  
      if point_cloud is None:
          point_cloud = self.time_series_to_point_cloud()
  
      # initialize persistence diagrams
      diagrams = filtration.fit_transform(point_cloud)
      # Instantiate persistence landscape transformer
      # plot_diagrams(diagrams)
  
      # normalize epsilon distance in diagrams so max is 1
      diagrams = [
          np.array([dg for dg in diag if np.isfinite(dg).all()])
          for diag in diagrams
      ]
      diagrams = diagrams / max(
          [
              np.array(
                  [dg for dg in diag if np.isfinite(dg).all()]
              ).max()
              for diag in diagrams
              if diag.shape[0] > 0
          ]
      )
  
      ep_ran_len = len(epsilon_range)
  
      homology = {
          dimension: np.zeros(ep_ran_len).tolist()
          for dimension in range(max_simplex_dim + 1)
      }
  
      for dimension, diagram in enumerate(diagrams):
          if dimension <= max_simplex_dim and len(diagram) > 0:
              homology[dimension] = (
                  np.array(
                      [
                          np.array(
                              (
                                  (epsilon_range >= point[0])
                                  & (epsilon_range <= point[1])
                              ).astype(int)
                          )
                          for point in diagram
                      ]
                  )
                  .sum(axis=0)
                  .tolist()
              )
  
      return homology
  
file_path: FEDOT/fedot/core/operations/evaluation/operation_implementations/data_operations/topological/point_cloud.py
imports: import numpy
  import pandas
  from ripser import Rips
  from fedot.core.operations.evaluation.operation_implementations.data_operations.topological.hankel_matrix import HankelMatrix
label_desc: Use image node_id 4 for calling the TopologicalTransformation obj's underlying member method code with example usage: obj.point_cloud_to_persistent_cohomology_ripser(point_cloud, max_simplex_dim) and returns: homology