spaCy/spacy/pipeline/_parser_internals
kadarakos 1bb87f35bc
Detect cycle during projectivize (#10877)
* detect cycle during projectivize

* not complete test to detect cycle in projectivize

* boolean to int type to propagate error

* use unordered_set instead of set

* moved error message to errors

* removed cycle from test case

* use find instead of count

* cycle check: only perform one lookup

* Return bool again from _has_head_as_ancestor

Communicate presence of cycles through an output argument.

* Switch to returning std::pair to encode presence of a cycle

The has_cycle pointer is too easy to misuse. Ideally, we would have a
sum type like Rust's `Result` here, but C++ is not there yet.

* _is_non_proj_arc: clarify what we are returning

* _has_head_as_ancestor: remove count

We are now explicitly checking for cycles, so the algorithm must always
terminate. Either we encounter the head, we find a root, or a cycle.

* _is_nonproj_arc: simplify condition

* Another refactor using C++ exceptions

* Remove unused error code

* Print graph with cycle on exception

* Include .hh files in source package

* Add FIXME comment

* cycle detection test

* find cycle when starting from problematic vertex

Co-authored-by: Daniël de Kok <me@danieldk.eu>
2022-06-08 19:34:11 +02:00
..
__init__.pxd Add beam_parser and beam_ner components for v3 (#6369) 2020-12-13 09:08:32 +08:00
__init__.py The Parser is now a Pipe (2) (#5844) 2020-07-30 23:30:54 +02:00
_beam_utils.pxd Add beam_parser and beam_ner components for v3 (#6369) 2020-12-13 09:08:32 +08:00
_beam_utils.pyx Getting scores out of beam_ner (#6575) 2021-01-06 12:02:32 +01:00
_state.pxd Use constant-time head lookups in StateC::{L,R} 2022-01-13 12:08:46 +01:00
_state.pyx The Parser is now a Pipe (2) (#5844) 2020-07-30 23:30:54 +02:00
arc_eager.pxd Getting scores out of beam_parser (#6684) 2021-01-07 16:28:27 +11:00
arc_eager.pyx Refactor error messages to remove hardcoded strings (#10729) 2022-05-02 13:38:46 +02:00
ner.pxd The Parser is now a Pipe (2) (#5844) 2020-07-30 23:30:54 +02:00
ner.pyx Support negative examples in partial NER annotations (#8106) 2021-06-17 17:33:00 +10:00
nonproj.hh Detect cycle during projectivize (#10877) 2022-06-08 19:34:11 +02:00
nonproj.pxd Detect cycle during projectivize (#10877) 2022-06-08 19:34:11 +02:00
nonproj.pyx Detect cycle during projectivize (#10877) 2022-06-08 19:34:11 +02:00
stateclass.pxd Add beam_parser and beam_ner components for v3 (#6369) 2020-12-13 09:08:32 +08:00
stateclass.pyx Add beam_parser and beam_ner components for v3 (#6369) 2020-12-13 09:08:32 +08:00
transition_system.pxd Support negative examples in partial NER annotations (#8106) 2021-06-17 17:33:00 +10:00
transition_system.pyx Support negative examples in partial NER annotations (#8106) 2021-06-17 17:33:00 +10:00