@@ -1514,7 +1514,7 @@ def is_tree(self, certificate=False, output='vertex'):
1514
1514
sage: G.is_tree(certificate=True)
1515
1515
(False, [1, 2])
1516
1516
sage: G.is_tree(certificate=True, output='edge')
1517
- (False, [(1, 2, 'a '), (2, 1, 'b ')])
1517
+ (False, [(1, 2, 'b '), (2, 1, 'a ')])
1518
1518
1519
1519
TESTS:
1520
1520
@@ -1542,6 +1542,16 @@ def is_tree(self, certificate=False, output='vertex'):
1542
1542
(False, [0])
1543
1543
sage: G.is_tree(certificate=True, output='edge')
1544
1544
(False, [(0, 0, None)])
1545
+
1546
+ Case of edges with incomparable types::
1547
+
1548
+ sage: G = Graph(multiedges=True)
1549
+ sage: G.add_cycle(['A', 1, 2, 3])
1550
+ sage: G.add_cycle(['A', 1, 2, 3])
1551
+ sage: G.is_tree(certificate=True, output='vertex')
1552
+ (False, ['A', 1])
1553
+ sage: G.is_tree(certificate=True, output='edge')
1554
+ (False, [('A', 1, None), (1, 'A', None)])
1545
1555
"""
1546
1556
if output not in ['vertex' , 'edge' ]:
1547
1557
raise ValueError ('output must be either vertex or edge' )
@@ -1559,12 +1569,18 @@ def is_tree(self, certificate=False, output='vertex'):
1559
1569
return False , L [:1 ]
1560
1570
1561
1571
if self .has_multiple_edges ():
1572
+ multiple_edges = self .multiple_edges (sort = False )
1562
1573
if output == 'vertex' :
1563
- return (False , list (self .multiple_edges (sort = True )[0 ][:2 ]))
1564
- edge1 , edge2 = self .multiple_edges (sort = True )[:2 ]
1565
- if edge1 [0 ] != edge2 [0 ]:
1566
- return (False , [edge1 , edge2 ])
1567
- return (False , [edge1 , (edge2 [1 ], edge2 [0 ], edge2 [2 ])])
1574
+ return (False , list (multiple_edges [0 ][:2 ]))
1575
+ # Search for 2 edges between u and v.
1576
+ # We do this way to handle the case of edges with incomparable
1577
+ # types
1578
+ u1 , v1 , w1 = multiple_edges [0 ]
1579
+ for u2 , v2 , w2 in multiple_edges [1 :]:
1580
+ if u1 == u2 and v1 == v2 :
1581
+ return (False , [(u1 , v1 , w1 ), (v2 , u2 , w2 )])
1582
+ elif u1 == v2 and v1 == u2 :
1583
+ return (False , [(u1 , v1 , w1 ), (u2 , v2 , w2 )])
1568
1584
1569
1585
if output == 'edge' :
1570
1586
if self .allows_multiple_edges ():
0 commit comments