fgivenx icon indicating copy to clipboard operation
fgivenx copied to clipboard

Test incompatible with matplotlib 3.8.0

Open duncanmmacleod opened this issue 1 year ago • 0 comments

Describe the bug

The test/test_drivers.py::test_plotting test is incompatible with matploitlib >= 3.8.0 resulting in an AttributeError:

================================== FAILURES ===================================
________________________________ test_plotting ________________________________

    def test_plotting():
        # Model definitions
        # =================
        # Define a simple straight line function, parameters theta=(m,c)
        def f(x, theta):
            m, c = theta
            return m * x + c

        numpy.random.seed(1)

        # Posterior samples
        nsamples = 1000
        ms = numpy.random.normal(loc=-5, scale=1, size=nsamples)
        cs = numpy.random.normal(loc=2, scale=1, size=nsamples)
        samples = numpy.array([(m, c) for m, c in zip(ms, cs)]).copy()

        # Prior samples
        ms = numpy.random.normal(loc=0, scale=5, size=nsamples)
        cs = numpy.random.normal(loc=0, scale=5, size=nsamples)
        prior_samples = numpy.array([(m, c) for m, c in zip(ms, cs)]).copy()

        # Examine the function over a range of x's
        xmin, xmax = -2, 2
        nx = 100
        x = numpy.linspace(xmin, xmax, nx)

        # Set the cache
        for cache in [None, 'cache/test']:
            if cache is not None:
                prior_cache = cache + '_prior'
            else:
                prior_cache = None

            # Plotting
            # ========
            fig, axes = plt.subplots(2, 2)

            # Sample plot
            # -----------
            ax_samples = axes[0, 0]
            ax_samples.set_ylabel(r'$c$')
            ax_samples.set_xlabel(r'$m$')
            ax_samples.plot(prior_samples.T[0], prior_samples.T[1], 'b.')
            ax_samples.plot(samples.T[0], samples.T[1], 'r.')

            # Line plot
            # ---------
            ax_lines = axes[0, 1]
            ax_lines.set_ylabel(r'$y = m x + c$')
            ax_lines.set_xlabel(r'$x$')
            plot_lines(f, x, prior_samples, ax_lines, color='b', cache=prior_cache)
            plot_lines(f, x, samples, ax_lines, color='r', cache=cache)

            # Predictive posterior plot
            # -------------------------
            ax_fgivenx = axes[1, 1]
            ax_fgivenx.set_ylabel(r'$P(y|x)$')
            ax_fgivenx.set_xlabel(r'$x$')
            plot_contours(f, x, prior_samples, ax_fgivenx,
                          colors=plt.cm.Blues_r, lines=False,
                          cache=prior_cache)
            plot_contours(f, x, samples, ax_fgivenx, cache=cache)

            # DKL plot
            # --------
            ax_dkl = axes[1, 0]
            ax_dkl.set_ylabel(r'$D_\mathrm{KL}$')
            ax_dkl.set_xlabel(r'$x$')
            ax_dkl.set_ylim(bottom=0)
            plot_dkl(f, x, samples, prior_samples, ax_dkl,
                     cache=cache, prior_cache=prior_cache)

>           ax_lines.get_shared_x_axes().join(ax_lines, ax_fgivenx, ax_samples)
E           AttributeError: 'GrouperView' object has no attribute 'join'

To Reproduce Steps to reproduce the behavior:

conda create --name fgivenx python=3.11 fgivenx matplotlib-base=3.8.0 pytest
conda activate fgivenx
python3 -m pytest --pyargs fgivenx

Expected behavior

The test doesn't fail.

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Linux

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context Add any other context about the problem here.

duncanmmacleod avatar Jan 16 '24 12:01 duncanmmacleod