@@ -140,7 +140,7 @@ def build_atom(text: str, *parts: str) -> Atom:
140140 return Atom ((atom ,))
141141
142142
143- class Hyperedge (tuple ):
143+ class Hyperedge (tuple ): # type: ignore[type-arg]
144144 """Non-atomic hyperedge."""
145145 def __new__ (cls , edges : Iterable [Hyperedge | None ]) -> Hyperedge :
146146 return super (Hyperedge , cls ).__new__ (cls , tuple (edges ))
@@ -206,7 +206,7 @@ def label(self) -> str:
206206 """Generate human-readable label for edge."""
207207 conn_atom = self .connector_atom ()
208208 if len (self ) == 2 :
209- edge = self
209+ edge : tuple [ Any , ...] = self
210210 elif conn_atom is not None and conn_atom .parts ()[- 1 ] == '.' :
211211 edge = self [1 :]
212212 else :
@@ -231,7 +231,7 @@ def inner_atom(self) -> Atom:
231231
232232 The inner atom of an atom is itself.
233233 """
234- return self [1 ].inner_atom ()
234+ return self [1 ].inner_atom () # type: ignore[no-any-return]
235235
236236 def connector_atom (self ) -> Atom | None :
237237 """The inner atom of the connector.
@@ -243,7 +243,7 @@ def connector_atom(self) -> Atom | None:
243243
244244 The connector atom of an atom is None.
245245 """
246- return self [0 ].inner_atom ()
246+ return self [0 ].inner_atom () # type: ignore[no-any-return]
247247
248248 def atoms (self ) -> set [Atom ]:
249249 """Returns the set of atoms contained in the edge.
@@ -408,15 +408,15 @@ def type(self) -> str:
408408 elif ptype [0 ] == 'M' :
409409 if len (self ) < 2 :
410410 raise RuntimeError ('Edge is malformed, type cannot be determined: {}' .format (str (self )))
411- return self [1 ].type ()
411+ return self [1 ].type () # type: ignore[no-any-return]
412412 elif ptype [0 ] == 'T' :
413413 outter_type = 'S'
414414 elif ptype [0 ] == 'B' :
415415 outter_type = 'C'
416416 elif ptype [0 ] == 'J' :
417417 if len (self ) < 2 :
418418 raise RuntimeError ('Edge is malformed, type cannot be determined: {}' .format (str (self )))
419- return self [1 ].mtype ()
419+ return self [1 ].mtype () # type: ignore[no-any-return]
420420 else :
421421 raise RuntimeError ('Edge is malformed, type cannot be determined: {}' .format (str (self )))
422422
@@ -427,7 +427,7 @@ def connector_type(self) -> str | None:
427427 If the edge has no connector (i.e. it's an atom), then None is
428428 returned.
429429 """
430- return self [0 ].type ()
430+ return self [0 ].type () # type: ignore[no-any-return]
431431
432432 def mtype (self ) -> str :
433433 """Returns the main type of this edge as a string of one character.
@@ -458,7 +458,7 @@ def atom_with_type(self, atom_type: str) -> Atom | None:
458458 b/Cp
459459 """
460460 for item in self :
461- atom = item .atom_with_type (atom_type )
461+ atom : Atom | None = item .atom_with_type (atom_type )
462462 if atom :
463463 return atom
464464 return None
@@ -488,10 +488,10 @@ def argroles(self) -> str:
488488 """
489489 et = self .mtype ()
490490 if et in {'R' , 'C' } and self [0 ].mtype () in {'B' , 'P' }:
491- return self [0 ].argroles ()
491+ return self [0 ].argroles () # type: ignore[no-any-return]
492492 if et not in {'B' , 'P' }:
493493 return ''
494- return self [1 ].argroles ()
494+ return self [1 ].argroles () # type: ignore[no-any-return]
495495
496496 def has_argroles (self ) -> bool :
497497 """Returns True if the edge has argroles, False otherwise."""
@@ -531,8 +531,8 @@ def insert_edge_with_argrole(self, edge: Hyperedge, argrole: str, pos: int) -> H
531531 """Returns a new edge with the provided edge and its argroles inserted
532532 at the specified position."""
533533 new_edge = self .insert_argrole (argrole , pos )
534- new_edge = new_edge [:pos + 1 ] + (edge ,) + new_edge [pos + 1 :]
535- return Hyperedge (new_edge )
534+ combined = tuple ( new_edge [:pos + 1 ]) + (edge ,) + tuple ( new_edge [pos + 1 :])
535+ return Hyperedge (combined )
536536
537537 def edges_with_argrole (self , argrole : str ) -> list [Hyperedge ]:
538538 """Returns the list of edges with the given argument role."""
@@ -665,26 +665,26 @@ def check_correctness(self) -> dict[Hyperedge, list[tuple[str, str]]]:
665665 return output
666666
667667 def normalized (self ) -> Hyperedge | None :
668- edge = self
668+ edge : Hyperedge = self
669669 conn = edge [0 ]
670670 ar = conn .argroles ()
671671 if ar != '' :
672672 if ar [0 ] == '{' :
673673 ar = ar [1 :- 1 ]
674- roles_edges = zip (ar , edge [1 :])
675- roles_edges = sorted (roles_edges , key = lambda role_edge : argrole_order [role_edge [0 ]])
676- edge = hedge ([conn ] + list (role_edge [1 ] for role_edge in roles_edges ))
677- if not edge :
674+ roles_edges_sorted = sorted (zip (ar , edge [1 :]), key = lambda role_edge : argrole_order [role_edge [0 ]])
675+ new_edge = hedge ([conn ] + list (role_edge [1 ] for role_edge in roles_edges_sorted ))
676+ if not new_edge :
678677 return None
678+ edge = new_edge
679679 return hedge ([subedge .normalized () for subedge in edge ])
680680
681- def __add__ (self , other ) -> Hyperedge :
682- if type (other ) in { tuple , list } :
683- return Hyperedge (super ( Hyperedge , self ). __add__ (other ))
684- elif other .atom :
685- return Hyperedge (super ( Hyperedge , self ) .__add__ ((other ,)))
681+ def __add__ (self , other : Hyperedge | tuple [ Any , ...] | list [ Any ] ) -> Hyperedge :
682+ if isinstance (other , ( list , tuple )) and not isinstance ( other , Hyperedge ) :
683+ return Hyperedge (tuple . __add__ ( self , tuple (other ) ))
684+ elif isinstance ( other , Hyperedge ) and other .atom :
685+ return Hyperedge (tuple .__add__ (self , (other ,)))
686686 else :
687- return Hyperedge (super ( Hyperedge , self ). __add__ (other ))
687+ return Hyperedge (tuple . __add__ ( self , tuple (other ) ))
688688
689689 def __str__ (self ) -> str :
690690 return self .to_str ()
@@ -730,7 +730,7 @@ def is_atom(self) -> bool:
730730
731731 def parts (self ) -> list [str ]:
732732 """Splits atom into its parts."""
733- return self [0 ].split ('/' )
733+ return self [0 ].split ('/' ) # type: ignore[no-any-return]
734734
735735 def root (self ) -> str :
736736 """Extracts the root of an atom
@@ -847,7 +847,7 @@ def contains(self, needle: str, deep: bool = False) -> bool:
847847
848848 Keyword argument:
849849 deep -- search recursively (default: False)"""
850- return self [0 ] == needle
850+ return self [0 ] == needle # type: ignore[no-any-return]
851851
852852 def subedges (self ) -> set [Hyperedge ]:
853853 """Returns all the subedges contained in the edge, including atoms
@@ -905,7 +905,7 @@ def role(self) -> list[str]:
905905
906906 ['J'].
907907 """
908- parts = self [0 ].split ('/' )
908+ parts : list [ str ] = self [0 ].split ('/' )
909909 if len (parts ) < 2 :
910910 return list ('J' )
911911 else :
@@ -1087,13 +1087,13 @@ def normalized(self) -> Atom:
10871087 return self .replace_argroles (ar )
10881088 return self
10891089
1090- def __add__ (self , other ) -> Hyperedge :
1091- if type (other ) in { tuple , list } :
1092- return Hyperedge (( self ,) + other )
1093- elif other .atom :
1090+ def __add__ (self , other : Hyperedge | tuple [ Any , ...] | list [ Any ] ) -> Hyperedge :
1091+ if isinstance (other , ( list , tuple )) and not isinstance ( other , Hyperedge ) :
1092+ return Hyperedge (tuple . __add__ (( self ,), tuple ( other )) )
1093+ elif isinstance ( other , Hyperedge ) and other .atom :
10941094 return Hyperedge ((self , other ))
10951095 else :
1096- return Hyperedge (( self ,) + other )
1096+ return Hyperedge (tuple . __add__ (( self ,), tuple ( other )) )
10971097
10981098
10991099class UniqueAtom (Atom ):
@@ -1112,7 +1112,7 @@ def unique(edge: Hyperedge) -> Hyperedge | None:
11121112 if type (edge ) == UniqueAtom :
11131113 return edge
11141114 else :
1115- return UniqueAtom (edge )
1115+ return UniqueAtom (edge ) # type: ignore[arg-type]
11161116 else :
11171117 return hedge ([unique (subedge ) for subedge in edge ])
11181118
0 commit comments