SerializationError: circular reference

I’m trying to write an html file with

bokeh.embed.file_html()

, but I’m running into this error:

SerializationError                        Traceback (most recent call last)
Cell In[1], line 361
    358     tab_settings = bk.TabPanel(child=settings_layout, title="Settings")
    359     my_layout = bk.Tabs(tabs=[tab_layout, tab_settings])
--> 361 html = bk.file_html(
    362     models=my_layout,
    363     resources=bk.CDN,
    364     title=q_original["html_title"],
    365     template=mdl.template,
    366 )
    367 with open(q["webpage_name"], "wt") as _:
    368     _.write(html)

File d:\ProgramData\Anaconda3\envs\default\Lib\site-packages\bokeh\core\serialization.py:247, in Serializer.encode(self, obj)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=244'>245</a> ident = id(obj)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=245'>246</a> if ident in self._circular:
--> <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=246'>247</a>     self.error("circular reference")
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=247'>248</a>     # warn("circular reference", BokehUserWarning)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=248'>249</a>     # return self._encode(obj)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=250'>251</a> self._circular[ident] = obj

File d:\ProgramData\Anaconda3\envs\default\Lib\site-packages\bokeh\core\serialization.py:470, in Serializer.error(self, message)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=468'>469</a> def error(self, message: str) -> NoReturn:
--> <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=469'>470</a>     raise SerializationError(message)

File d:\ProgramData\Anaconda3\envs\default\Lib\site-packages\bokeh\core\serialization.py:470, in Serializer.error(self, message)
    <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=468'>469</a> def error(self, message: str) -> NoReturn:
--> <a href='file:///d%3A/ProgramData/Anaconda3/envs/default/Lib/site-packages/bokeh/core/serialization.py?line=469'>470</a>     raise SerializationError(message)

SerializationError: circular reference

Looking at the code in bokeh\core\serialization.py

    def encode(self, obj: Any) -> AnyRep:
        ref = self.get_ref(obj)
        if ref is not None:
            return ref

        ident = id(obj)
        if ident in self._circular:
            self.error("circular reference")

I’m guessing the problem is that my bokeh.layout object references the same object multiple times, maybe once in the plot and once in a callback.

However, if I comment out the line raising the error, then the html file writes successfully with no apparent issues. This was also not an issue when I was using Bokeh 2.4.3. Does anyone have any general insight onto why this error occurs, and whether it is needed?

@schen70 It’s not really possible to speculate at all without a complete Minimal Reproducible Example.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.