Skip to content

[Bug]: Doc build is broken #29802

Closed
Closed
@timhoffm

Description

@timhoffm

Bug summary

UserWarning: Could not render math expression \sum_{\substack{1\leq i\leq 3\\ 1\leq j\leq 5}}

e.g. in #29801.

I suspect this may be a bug in pyparsing 3.2.2, which was released today. Ping @ptmcg

Code for reproduction

I've not yet created a minimal example from the docs, but can do so if additional insight is needed.

Actual outcome

    Traceback (most recent call last):
      File "/home/circleci/project/lib/matplotlib/sphinxext/mathmpl.py", line 134, in latex2png
        depth = mathtext.math_to_image(
                ^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/mathtext.py", line 134, in math_to_image
        width, height, depth, _, _ = parser.parse(s, dpi=72, prop=prop)
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/mathtext.py", line 86, in parse
        return self._parse_cached(s, dpi, prop, antialiased, load_glyph_flags)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/mathtext.py", line 100, in _parse_cached
        box = self._parser.parse(s, fontset, fontsize, dpi)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/_mathtext.py", line 2170, in parse
        result = self._expression.parseString(s)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/util.py", line 417, in _inner
        return fn(self, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 1207, in parse_string
        loc, tokens = self._parse(instring, 0)
                      ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4197, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5232, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5131, in parseImpl
        loc, tokens = self_expr_parse(instring, loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4175, in parseImpl
        loc, resultlist = self.exprs[0]._parse(
                          ^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 892, in _parseNoCache
        tokens = fn(instring, tokens_start, ret_tokens)  # type: ignore [call-arg, arg-type]
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 280, in wrapper
        return func(*args[limit:])
               ^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/_mathtext.py", line 2197, in math_string
        return self._math_expression.parseString(toks[0][1:-1], parseAll=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/util.py", line 417, in _inner
        return fn(self, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 1207, in parse_string
        loc, tokens = self._parse(instring, 0)
                      ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5131, in parseImpl
        loc, tokens = self_expr_parse(instring, loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5666, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4197, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5131, in parseImpl
        loc, tokens = self_expr_parse(instring, loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4186, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5666, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4197, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5232, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5131, in parseImpl
        loc, tokens = self_expr_parse(instring, loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5666, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4175, in parseImpl
        loc, resultlist = self.exprs[0]._parse(
                          ^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5366, in parseImpl
        loc, tokens = self_expr._parse(
                      ^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5666, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4186, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5666, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4703, in parseImpl
        return self.expr._parse(instring, loc, do_actions, callPreParse=False)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4197, in parseImpl
        loc, exprtokens = e._parse(instring, loc, do_actions)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5232, in parseImpl
        return super().parseImpl(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 5131, in parseImpl
        loc, tokens = self_expr_parse(instring, loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 853, in _parseNoCache
        loc, tokens = self.parseImpl(instring, pre_loc, do_actions)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 4431, in parseImpl
        return e._parse(instring, loc, do_actions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 991, in _parseCache
        value = self._parseNoCache(instring, loc, do_actions, callPreParse)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 892, in _parseNoCache
        tokens = fn(instring, tokens_start, ret_tokens)  # type: ignore [call-arg, arg-type]
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/core.py", line 283, in wrapper
        ret = func(*args[limit:])
              ^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/pyparsing/helpers.py", line 549, in <lambda>
        lambda t: t[0].strip(ParserElement.DEFAULT_WHITE_CHARS)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: 'str' object is not callable
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/circleci/.local/lib/python3.12/site-packages/sphinx/util/parallel.py", line 83, in _process
        ret = func(arg)  # type: ignore[call-arg]
              ^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 774, in write_process
        self.write_doc(docname, doctree)
      File "/home/circleci/.local/lib/python3.12/site-packages/sphinx/builders/html/__init__.py", line 670, in write_doc
        self.docwriter.write(doctree, destination)
      File "/home/circleci/.local/lib/python3.12/site-packages/docutils/writers/__init__.py", line 80, in write
        self.translate()
      File "/home/circleci/.local/lib/python3.12/site-packages/sphinx/writers/html.py", line 36, in translate
        self.document.walkabout(visitor)
      File "/home/circleci/.local/lib/python3.12/site-packages/docutils/nodes.py", line 186, in walkabout
        if child.walkabout(visitor):
           ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/docutils/nodes.py", line 186, in walkabout
        if child.walkabout(visitor):
           ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/.local/lib/python3.12/site-packages/docutils/nodes.py", line 186, in walkabout
        if child.walkabout(visitor):
           ^^^^^^^^^^^^^^^^^^^^^^^^
      [Previous line repeated 1 more time]
      File "/home/circleci/.local/lib/python3.12/site-packages/docutils/nodes.py", line 178, in walkabout
        visitor.dispatch_visit(self)
      File "/home/circleci/.local/lib/python3.12/site-packages/sphinx/util/docutils.py", line 767, in dispatch_visit
        method(node)
      File "/home/circleci/project/lib/matplotlib/sphinxext/mathmpl.py", line 214, in visit_latex_math_html
        self.body.append(latex2html(node, source))
                         ^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/sphinxext/mathmpl.py", line 158, in latex2html
        depth = latex2png(latex, dest, fontset, fontsize=fontsize)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/circleci/project/lib/matplotlib/sphinxext/mathmpl.py", line 137, in latex2png
        _api.warn_external(f"Could not render math expression {latex}")
      File "/home/circleci/project/lib/matplotlib/_api/__init__.py", line 391, in warn_external
        warnings.warn(message, category, **kwargs)
    UserWarning: Could not render math expression \sum_{\substack{1\leq i\leq 3\\ 1\leq j\leq 5}}

Expected outcome

No error.

Additional information

No response

Operating system

No response

Matplotlib Version

main

Matplotlib Backend

No response

Python version

No response

Jupyter version

No response

Installation

None

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions