Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo


#1178 Cycle Check doesn't work

Nomi Harris
OBO-Edit (934)
Nomi Harris

The Cycle Check verification check doesn't find cycles. Try the attached file, which has both a tight and a loose cycle; neither is identified by Cycle Check.

Tests on OBO-Edit versions as far back as 2.0 have not turned up any version in which this worked. Perhaps it worked at some point before release 2.0.


  • Nomi Harris
    Nomi Harris

    Small test ontology with two cycles (one tight, one loose)

  • Ramona Walls
    Ramona Walls

    It would be a great help to have this working. I never even knew it was there, because I hasn't worked since I started using OE. I would make this a priority 8.

    po_cycle_simple.obo has a simple cycle:
    plant embryo participates_in plant embryo stage
    plant embryo stage intersection_of: has_participant plant embryo.

    This cycle only shows up when the reasoner is on, because the second relation is part of an intersection_of statement.

    po_cycle_complex.obo has a more compex cycle:
    gametophore bud has_part gametophore meristematic apical cell
    gametophore meristematic apical cell part_of gametophore
    gametophore develops_from gametophore bud

    This only shows up with the pre-reasoned version or with the reasoner on, because gametophore meristematic apical cell is logically defined as a shoot meristematic apical cell that is part of a gematophore. The reasoner asserts the intersection_of relations, which lead to the loop.
    Actually, this one is tricky, because if you use the asserted implied relations panel in OE, it does not assert intersection_of relations, and the loop doesn't show up after you turn off the reasoner, but if you use Oort, it does assert interseciton_of relations and the loop persists.

    I will try to upload the files, but if they are too large, I will email them to Nomi.

  • Nomi Harris
    Nomi Harris

    New cycle check method finds (possibly mixed-relationship) cycles by checking for objects that are descendants of one of their own children.
    The check works whether or not you have the reasoner on, but it doesn't find cycles that involve implied links found by the reasoner (that will be a separate feature request).
    The new cycle check is set by default to run on save and on manual verification; other times (e.g., on reasoner change) can be added by the user via the Verification Manager configuration panel.

  • Nomi Harris
    Nomi Harris

    • assigned_to: nobody --> nomi
    • status: open --> closed-fixed