import numpy as np
import matplotlib.pyplot as plt
from ripser import ripser
from persim import plot_diagrams

t = np.linspace(0, 30*np.pi, 800)
signal = np.cos(t) - np.cos(np.sqrt(3) * t)

d = 6 #la dimensión tiene que ser mayor o igual a 5 (2.2+1)
tau = 10 #un tau no muy chico

def takens_embedding(signal, d, tau):
    n = len(signal)
    m = n - (d - 1) * tau
    embedded = np.zeros((m, d))
    for i in range(m):
        for j in range(d):
            embedded[i, j] = signal[i + j * tau]
    return embedded

point_cloud = takens_embedding(signal, d, tau)

print('calculo PH')
result = ripser(point_cloud,thresh=4, maxdim=2)
diagrams = result['dgms']

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

axes[0].plot(t, signal)
axes[0].set_xlabel('t')
axes[0].set_ylabel('cos(t) - cos(√3·t)')
axes[0].grid(True, alpha=0.3)

plot_diagrams(diagrams, ax=axes[1], legend=True)

plt.tight_layout()
plt.show()