Skip to content

pydot error for part tables: '<tablename> is not a valid node name while using pydot' #1035

@iamamutt

Description

@iamamutt

Bug Report

Description

pydot fails given part table naming.

Reproducibility

Include:

  • OS: MACOS
  • Python Version: 3.10.4
  • MySQL Version: 5.7
  • MySQL Deployment Strategy: local-docker
  • DataJoint Version: 0.13.6
  • pydot Version: 1.4.2

Expected Behavior

Draw a diagram.

Minimum number of steps to reliably reproduce the issue

Make a part table.

import datajoint as dj

schema = dj.Schema("my_pipeline")


@schema
class Tabl1(dj.Manual):
    definition = """
    x: varchar(8)
    """

    class Tabl2(dj.Part):
        definition = """
        -> Tabl1
        y: varchar(8)
        """


dj.Diagram(schema)

Complete error stack as a result of evaluating the above steps

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File ~/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py:343, in BaseFormatter.__call__(self, obj)
    [341](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py?line=340)     method = get_real_method(obj, self.print_method)
    [342](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py?line=341)     if method is not None:
--> [343](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py?line=342)         return method()
    [344](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py?line=343)     return None
    [345](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/IPython/core/formatters.py?line=344) else:

File ~/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py:440, in Diagram._repr_svg_(self)
    [439](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=438) def _repr_svg_(self):
--> [440](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=439)     return self.make_svg()._repr_svg_()

File ~/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py:428, in Diagram.make_svg(self)
    [425](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=424) def make_svg(self):
    [426](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=425)     from IPython.display import SVG
--> [428](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=427)     return SVG(self.make_dot().create_svg())

File ~/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py:373, in Diagram.make_dot(self)
    [310](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=309) label_props = {  # http://matplotlib.org/examples/color/named_colors.html
    [311](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=310)     None: dict(
    [312](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=311)         shape="circle",
   (...)
    [366](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=365)     ),
    [367](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=366) }
    [368](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=367) node_props = {
    [369](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=368)     node: label_props[d["node_type"]]
    [370](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=369)     for node, d in dict(graph.nodes(data=True)).items()
    [371](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=370) }
--> [373](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=372) dot = nx.drawing.nx_pydot.to_pydot(graph)
    [374](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=373) for node in dot.get_nodes():
    [375](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/datajoint/diagram.py?line=374)     node.set_shape("circle")

File ~/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py:220, in to_pydot(N)
    [218](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=217)     # Explicitly catch all node name parsing errors
    [219](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=218)     if len(str(n)) != len(p.get_name()):
--> [220](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=219)         raise ValueError(
    [221](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=220)             f"{str(n)} is not a valid node name while using pydot. Please refer https://github.com/pydot/pydot/issues/258"
    [222](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=221)         )
    [223](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=222)     P.add_node(p)
    [225](file:///Users/joseph/opt/conda/envs/element_data_model/lib/python3.10/site-packages/networkx/drawing/nx_pydot.py?line=224) if N.is_multigraph():

ValueError: Tabl1.Tabl2 is not a valid node name while using pydot. Please refer https://github.com/pydot/pydot/issues/258
<datajoint.diagram.Diagram at 0x127677790>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIndicates an unexpected problem or unintended behavior

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions