Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gtda/mapper/tests/test_visualization.py tests failed #661

Open
beew opened this issue Feb 26, 2023 · 6 comments
Open

gtda/mapper/tests/test_visualization.py tests failed #661

beew opened this issue Feb 26, 2023 · 6 comments
Labels
bug Something isn't working

Comments

@beew
Copy link

beew commented Feb 26, 2023

Running pytest gtda produces two failed tests.

FAILED gtda/mapper/tests/test_visualization.py::test_pipeline_cloned[False] - AssertionError
FAILED gtda/mapper/tests/test_visualization.py::test_pipeline_cloned[True] - AssertionError

More detailed outputs

==================================================================================================== FAILURES =====================================================================================================
___________________________________________________________________________________________ test_pipeline_cloned[False] ___________________________________________________________________________________________

clone_pipeline = False

    @pytest.mark.parametrize("clone_pipeline", [False, True])
    def test_pipeline_cloned(clone_pipeline):
        """Verify that the pipeline is changed on interaction if and only if
        `clone_pipeline` is False."""
        # TODO: Monitor development of the ipytest project to convert these into
        # true notebook tests integrated with pytest
        params = {
            "cover": {
                "initial": {"n_intervals": 10, "kind": "uniform",
                            "overlap_frac": 0.1},
                "new": {"n_intervals": 15, "kind": "balanced", "overlap_frac": 0.2}
                },
            "clusterer": {
                "initial": {"affinity": "euclidean"},
                "new": {"affinity": "manhattan"}
                },
            "contract_nodes": {"initial": True, "new": False},
            "min_intersection": {"initial": 4, "new": 1},
            }
    
        pipe = make_mapper_pipeline(
            cover=CubicalCover(**params["cover"]["initial"]),
            clusterer=FirstSimpleGap(**params["clusterer"]["initial"]),
            contract_nodes=params["contract_nodes"]["initial"],
            min_intersection=params["min_intersection"]["initial"]
            )
        fig = plot_interactive_mapper_graph(pipe, X_arr,
                                            clone_pipeline=clone_pipeline)
    
        # Get relevant widgets and change their states, then check final values
        for step, values in params.items():
            if step in ["cover", "clusterer"]:
                for param_name, initial_param_value in values["initial"].items():
                    new_param_value = values["new"][param_name]
>                   widgets = _get_widgets_by_trait(fig, "description", param_name)

gtda/mapper/tests/test_visualization.py:432: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
gtda/mapper/tests/test_visualization.py:336: in _get_widgets_by_trait
    for k, v in getattr(fig, widgets_attr).items():
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <ipywidgets.widgets.widget._staticproperty object at 0x7f8810bfd780>
owner_self = VBox(children=(HBox(children=(VBox(children=(HTML(value='<b>Cover parameters</b>'), Text(value='uniform', continuous_u...escriptionStyle(description_width='100px')), Checkbox(value=False, description='Show logs: ', indent=False), Output()))
owner_cls = <class 'ipywidgets.widgets.widget_box.VBox'>

    def __get__(self, owner_self, owner_cls):
>       assert owner_self is None
E       AssertionError

../../opt/python310/lib/python3.10/site-packages/ipywidgets/widgets/widget.py:295: AssertionError
___________________________________________________________________________________________ test_pipeline_cloned[True] ____________________________________________________________________________________________

clone_pipeline = True

    @pytest.mark.parametrize("clone_pipeline", [False, True])
    def test_pipeline_cloned(clone_pipeline):
        """Verify that the pipeline is changed on interaction if and only if
        `clone_pipeline` is False."""
        # TODO: Monitor development of the ipytest project to convert these into
        # true notebook tests integrated with pytest
        params = {
            "cover": {
                "initial": {"n_intervals": 10, "kind": "uniform",
                            "overlap_frac": 0.1},
                "new": {"n_intervals": 15, "kind": "balanced", "overlap_frac": 0.2}
                },
            "clusterer": {
                "initial": {"affinity": "euclidean"},
                "new": {"affinity": "manhattan"}
                },
            "contract_nodes": {"initial": True, "new": False},
            "min_intersection": {"initial": 4, "new": 1},
            }
    
        pipe = make_mapper_pipeline(
            cover=CubicalCover(**params["cover"]["initial"]),
            clusterer=FirstSimpleGap(**params["clusterer"]["initial"]),
            contract_nodes=params["contract_nodes"]["initial"],
            min_intersection=params["min_intersection"]["initial"]
            )
        fig = plot_interactive_mapper_graph(pipe, X_arr,
                                            clone_pipeline=clone_pipeline)
    
        # Get relevant widgets and change their states, then check final values
        for step, values in params.items():
            if step in ["cover", "clusterer"]:
                for param_name, initial_param_value in values["initial"].items():
                    new_param_value = values["new"][param_name]
>                   widgets = _get_widgets_by_trait(fig, "description", param_name)

gtda/mapper/tests/test_visualization.py:432: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
gtda/mapper/tests/test_visualization.py:336: in _get_widgets_by_trait
    for k, v in getattr(fig, widgets_attr).items():
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <ipywidgets.widgets.widget._staticproperty object at 0x7f8810bfd780>
owner_self = VBox(children=(HBox(children=(VBox(children=(HTML(value='<b>Cover parameters</b>'), Text(value='uniform', continuous_u...escriptionStyle(description_width='100px')), Checkbox(value=False, description='Show logs: ', indent=False), Output()))
owner_cls = <class 'ipywidgets.widgets.widget_box.VBox'>

    def __get__(self, owner_self, owner_cls):
>       assert owner_self is None
E       AssertionError

../../opt/python310/lib/python3.10/site-packages/ipywidgets/widgets/widget.py:295: AssertionError

import platform; print(platform.platform())
Linux-5.15.0-60-generic-x86_64-with-glibc2.35

import sys; print("Python", sys.version)
Python 3.10.9 (main, Feb 7 2023, 22:43:20) [GCC 11.3.0]

import numpy; print("NumPy", numpy.version)
NumPy 1.23.5

import scipy; print("SciPy", scipy.version)
SciPy 1.10.0

import joblib; print("Joblib", joblib.version)
Joblib 1.2.0

import sklearn; print("Scikit-learn", sklearn.version)
Scikit-learn 1.2.1

import gtda; print("Giotto-tda", gtda.version)
Giotto-tda 0.6.0

@beew beew added the bug Something isn't working label Feb 26, 2023
@beew
Copy link
Author

beew commented Feb 26, 2023

I think it is because of this that plot doesn't work.

@ulupo
Copy link
Collaborator

ulupo commented Feb 27, 2023

Thank you @beew. I'm looking into the CI to see if I can reproduce there. Meanwhile, besides unit tests issues, could you clarify what you mean by

plot doesn't work

? Namely, could you provide another code example that seems to fail?

@beew
Copy link
Author

beew commented Feb 27, 2023

Hi,

I just tried the code from https://giotto-ai.github.io/gtda-docs/0.5.1/notebooks/plotting_api.html
to test the installation.

and also this one

import sys

sys.path.append("/home/beew/opt/python310/giotto-tda/examples/data")
from generate_datasets import make_point_clouds

n_samples_per_class = 10
point_clouds, labels = make_point_clouds(n_samples_per_class, 10, 0.1)
point_clouds.shape
print(f"There are {point_clouds.shape[0]} point clouds in {point_clouds.shape[2]} dimensions, "
      f"each with {point_clouds.shape[1]} points.")


from gtda.homology import VietorisRipsPersistence

VR = VietorisRipsPersistence(homology_dimensions=[0, 1, 2])  # Parameter explained in the text
diagrams = VR.fit_transform(point_clouds)
diagrams.shape

from gtda.plotting import plot_diagram

i = 0
plot_diagram(diagrams[i])

No plot shows up.

@beew
Copy link
Author

beew commented Mar 7, 2023

Any update?

@beew
Copy link
Author

beew commented May 8, 2023

Actually the code above does produce plot in jupyter notebook, I was running it in spyder.

@matteocao
Copy link
Contributor

dear @beew ,

I also noticed those tests failing and I could not figure out the cause. They are deactivated for now: if you ahve any idea on how to fix the issue, we would happily review your PR!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants