Skip to content

[BUG][Hidalgo] AssertionError: assert rmax > 0 #3068

@kir0ul

Description

@kir0ul

Describe the bug

I'm trying to use Hidalgo to segment our dataset, but I get an assert rmax > 0 error.

Steps/Code to reproduce the bug

import json
import pandas as pd
from aeon.segmentation import HidalgoSegmenter
from sklearn.preprocessing import MinMaxScaler

# Data subset
data_dict = json.loads('{"x":{"0":0.4257669507,"1":0.4253725033,"2":0.4252818198,"3":0.4252818198,"4":0.425349677,"5":0.4253740215,"6":0.4254784689,"7":0.4254784689,"8":0.4255383361,"9":0.4254318762,"10":0.4256996914,"11":0.4256130534,"12":0.4256130534,"13":0.4253865468,"14":0.4253865468,"15":0.4252407974,"16":0.4252407974,"17":0.4257405957,"18":0.4257405957,"19":0.4255358599,"20":0.4251156221,"21":0.4251156221,"22":0.4253575551,"23":0.4255880915,"24":0.4255663679,"25":0.4256628462,"26":0.4256628462,"27":0.4259410406,"28":0.4267114539,"29":0.4277039868,"30":0.4284604203,"31":0.4284604203,"32":0.4302800694,"33":0.4322460778,"34":0.4346705172,"35":0.4346705172,"36":0.4371808068,"37":0.4392193531,"38":0.4419787566,"39":0.44394467,"40":0.4455386315,"41":0.4455386315,"42":0.4484341572,"43":0.4507840657,"44":0.4507840657,"45":0.4532244633,"46":0.4549927733,"47":0.4576848292,"48":0.4610286743,"49":0.4663468167},"y":{"0":0.2433640871,"1":0.2433817587,"2":0.243515473,"3":0.243515473,"4":0.243330775,"5":0.2433764023,"6":0.2433758396,"7":0.2433758396,"8":0.2436249834,"9":0.2434208001,"10":0.2431829586,"11":0.243519011,"12":0.243519011,"13":0.2435338798,"14":0.2435338798,"15":0.2427958052,"16":0.2427958052,"17":0.2434832522,"18":0.2434832522,"19":0.243382383,"20":0.2433153482,"21":0.2433153482,"22":0.2434281222,"23":0.2436008387,"24":0.2429868484,"25":0.2437683391,"26":0.2437683391,"27":0.2439072948,"28":0.242919792,"29":0.2433073901,"30":0.2428429508,"31":0.2428429508,"32":0.2436557076,"33":0.2433159762,"34":0.2428919038,"35":0.2428919038,"36":0.2435177615,"37":0.2428567016,"38":0.2434209507,"39":0.2434055484,"40":0.2434657139,"41":0.2434657139,"42":0.2440847695,"43":0.2442286093,"44":0.2442286093,"45":0.2448578754,"46":0.2445213732,"47":0.2448515841,"48":0.2466578652,"49":0.2475578949},"z":{"0":0.9763806256,"1":0.976541671,"2":0.9766390753,"3":0.9766390753,"4":0.9761048068,"5":0.9765859558,"6":0.9765303357,"7":0.9765303357,"8":0.9765715424,"9":0.9762428674,"10":0.9767105624,"11":0.9763704237,"12":0.9763704237,"13":0.9764624393,"14":0.9764624393,"15":0.9762103707,"16":0.9762103707,"17":0.9764087797,"18":0.9764087797,"19":0.976436962,"20":0.9764482037,"21":0.9764482037,"22":0.9764192093,"23":0.9767144461,"24":0.9764186015,"25":0.9765317889,"26":0.9765317889,"27":0.9763026984,"28":0.9767263621,"29":0.9761456476,"30":0.9767367686,"31":0.9767367686,"32":0.976554542,"33":0.9760865449,"34":0.9762832482,"35":0.9762832482,"36":0.9763611054,"37":0.9761762628,"38":0.9762820997,"39":0.9757640754,"40":0.9758159129,"41":0.9758159129,"42":0.9757864022,"43":0.975320887,"44":0.975320887,"45":0.9757195712,"46":0.9755819628,"47":0.9758874947,"48":0.9760461699,"49":0.9754331639}}')

# Preprocess
X_df = pd.DataFrame(data_dict)
X_df_scaled = MinMaxScaler(feature_range=(0, 1)).fit_transform(X_df)

# Segmentation
hidalgo = HidalgoSegmenter(K=len(labels), q=3, n_iter=2000, burn_in=0.8)
cps = hidalgo.fit_predict(X_df_scaled, axis=0)
print("Found change points:", cps)

Expected results

No error is thrown

Actual results

[/home/user/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py:176](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py#line=175): RuntimeWarning: divide by zero encountered in divide
  mu = np.divide(distances[:, 2], distances[:, 1])

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[28], line 1
----> 1 cps = hidalgo.fit_predict(X_reduced_scaled, axis=0)
      2 print("Found change points:", cps)

File [~/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/base.py:160](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/base.py#line=159), in BaseSegmenter.fit_predict(self, X, y, axis)
    157 """Fit segmentation to data and return it."""
    158 # Non-optimized default implementation; override when a better
    159 # method is possible for a given algorithm.
--> 160 self.fit(X, y, axis=axis)
    161 return self.predict(X, axis=axis)

File [~/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/base.py:122](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/base.py#line=121), in BaseSegmenter.fit(self, X, y, axis)
    120 if y is not None:
    121     y = self._check_y(y)
--> 122 self._fit(X=X, y=y)
    123 self.is_fitted = True
    124 return self

File [~/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py:607](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py#line=606), in HidalgoSegmenter._fit(self, X, y)
    604 maxlik = -1e10
    606 for _ in range(n_replicas):
--> 607     sampling = self._gibbs_sampling(
    608         N,
    609         mu,
    610         Iin,
    611         Iout,
    612         Iout_count,
    613         Iout_track,
    614         V,
    615         NN,
    616         a1,
    617         b1,
    618         c1,
    619         Z,
    620         f1,
    621         N_in,
    622         _rng,
    623     )
    624     sampling = np.reshape(sampling, (n_iter, Npar))
    626     idx = [
    627         it
    628         for it in range(n_iter)
    629         if it % sampling_rate == 0 and it >= n_iter * burn_in
    630     ]

File [~/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py:514](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py#line=513), in HidalgoSegmenter._gibbs_sampling(self, N, mu, Iin, Iout, Iout_count, Iout_track, V, NN, a1, b1, c1, Z, f1, N_in, _rng)
    511     return lik0, lik1
    513 for it in range(n_iter):
--> 514     d = sample_d(K, a1, b1, _rng)
    515     sampling = np.append(sampling, d)
    517     (p, pp) = sample_p(K, p, pp, c1, _rng)

File [~/Projects/segmentation-baselines/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py:343](http://localhost:8889/lab/tree/venv/lib64/python3.11/site-packages/aeon/segmentation/_hidalgo.py#line=342), in HidalgoSegmenter._gibbs_sampling.<locals>.sample_d(K, a1, b1, _rng)
    340 rmax = (a1[k] - 1) [/](http://localhost:8889/) b1[k]
    342 if a1[k] - 1 > 0:
--> 343     assert rmax > 0
    344     frac = np.exp(
    345         -b1[k] * (r1 - rmax)
    346         - (a1[k] - 1) * (np.log(rmax) - np.log(r1))
    347     )
    348 else:

AssertionError:

Versions


System:
    python: 3.11.13 (main, Jun 09 2025, 17:26:24) [GCC]
executable: /home/user/Projects/segmentation-baselines/venv/bin/python3.11
   machine: Linux-6.15.8-1-default-x86_64-with-glibc2.41
Python dependencies:
         aeon: 1.2.0
          pip: 25.2
   setuptools: 65.5.0
 scikit-learn: 1.6.1
        numpy: 2.2.6
        numba: 0.61.2
        scipy: 1.15.3
       pandas: 2.3.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsegmentationSegmentation package

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions