etna icon indicating copy to clipboard operation
etna copied to clipboard

[BUG] Method `to_dict` doesn't capture parameters of classes from external libraries

Open Mr-Geekman opened this issue 1 year ago • 0 comments

🐛 Bug Report

We want to distinguish between transforms

transform_1 = ChangePointsTrendTransform(
    in_column="target",
    change_points_model=RupturesChangePointsModel(
        change_points_model=Binseg(model="ar"),
        n_bkps=5,
    ),
)
transform_2 = ChangePointsTrendTransform(
    in_column="target",
    change_points_model=RupturesChangePointsModel(
        change_points_model=Binseg(model="l1"),
        n_bkps=5,
    )
)

But currently they have the same to_dict, because Binseg isn't etna class.

We can have a similar problem with other external classes too, we should try to create a general solution for all such cases.

Expected behavior

We should learn how to handle external classes correctly.

How To Reproduce

from ruptures import Binseg

from etna.transforms.decomposition import RupturesChangePointsModel
from etna.transforms import ChangePointsTrendTransform


def main():
    transform_1 = ChangePointsTrendTransform(
        in_column="target",
        change_points_model=RupturesChangePointsModel(
            change_points_model=Binseg(model="ar"),
            n_bkps=5,
        ),
    )
    transform_2 = ChangePointsTrendTransform(
        in_column="target",
        change_points_model=RupturesChangePointsModel(
            change_points_model=Binseg(model="l1"),
            n_bkps=5,
        )
    )

    assert transform_1.to_dict() != transform_2.to_dict()


if __name__ == "__main__":
    main()

Environment

No response

Additional context

No response

Checklist

  • [X] Bug appears at the latest library version

Mr-Geekman avatar May 03 '23 13:05 Mr-Geekman