Generated by Cython 0.26

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: disambiguation.cpp

+0001: """Disambiguate parse forests with various methods for parse selection.
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0002: 
 0003: Use as follows:
 0004: 
 0005: >>> getderivations(chart, 1000)  # doctest: +SKIP
 0006: >>> parses, msg = marginalize('mpp', chart)  # doctest: +SKIP
 0007: """
 0008: 
 0009: from __future__ import print_function
+0010: import re
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_re, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_5) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0011: from heapq import nlargest
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_nlargest);
  __Pyx_GIVEREF(__pyx_n_s_nlargest);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_nlargest);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_heapq, __pyx_t_5, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_nlargest); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_nlargest, __pyx_t_5) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0012: from math import exp, log, isinf, fsum
  __pyx_t_6 = PyList_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_exp);
  __Pyx_GIVEREF(__pyx_n_s_exp);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_exp);
  __Pyx_INCREF(__pyx_n_s_log);
  __Pyx_GIVEREF(__pyx_n_s_log);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_log);
  __Pyx_INCREF(__pyx_n_s_isinf);
  __Pyx_GIVEREF(__pyx_n_s_isinf);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_n_s_isinf);
  __Pyx_INCREF(__pyx_n_s_fsum);
  __Pyx_GIVEREF(__pyx_n_s_fsum);
  PyList_SET_ITEM(__pyx_t_6, 3, __pyx_n_s_fsum);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_math, __pyx_t_6, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_exp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_exp, __pyx_t_6) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_log); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_log, __pyx_t_6) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_isinf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_isinf, __pyx_t_6) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_fsum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fsum, __pyx_t_6) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0013: from random import random
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_random);
  __Pyx_GIVEREF(__pyx_n_s_random);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_random);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_random, __pyx_t_5, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_5) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0014: from bisect import bisect_right
  __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_bisect_right);
  __Pyx_GIVEREF(__pyx_n_s_bisect_right);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_bisect_right);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_bisect, __pyx_t_6, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_bisect_right); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bisect_right, __pyx_t_6) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0015: from operator import itemgetter, attrgetter
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_itemgetter);
  __Pyx_GIVEREF(__pyx_n_s_itemgetter);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_itemgetter);
  __Pyx_INCREF(__pyx_n_s_attrgetter);
  __Pyx_GIVEREF(__pyx_n_s_attrgetter);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_attrgetter);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_operator, __pyx_t_5, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_itemgetter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_itemgetter, __pyx_t_5) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_attrgetter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_attrgetter, __pyx_t_5) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0016: from itertools import count
  __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_count);
  __Pyx_GIVEREF(__pyx_n_s_count);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_count);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_6, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_count, __pyx_t_6) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0017: from functools import partial
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_partial);
  __Pyx_GIVEREF(__pyx_n_s_partial);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_partial);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_5, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_partial); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_partial, __pyx_t_5) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0018: from collections import defaultdict
  __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_defaultdict);
  __Pyx_GIVEREF(__pyx_n_s_defaultdict);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_defaultdict);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_6, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_defaultdict, __pyx_t_6) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0019: from . import plcfrs, _fragments
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_plcfrs);
  __Pyx_GIVEREF(__pyx_n_s_plcfrs);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_plcfrs);
  __Pyx_INCREF(__pyx_n_s_fragments);
  __Pyx_GIVEREF(__pyx_n_s_fragments);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_fragments);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s__3, __pyx_t_5, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_plcfrs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_plcfrs, __pyx_t_5) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_fragments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fragments, __pyx_t_5) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0020: from .tree import Tree, ParentedTree, writediscbrackettree, brackettree
  __pyx_t_6 = PyList_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_Tree);
  __Pyx_GIVEREF(__pyx_n_s_Tree);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_Tree);
  __Pyx_INCREF(__pyx_n_s_ParentedTree);
  __Pyx_GIVEREF(__pyx_n_s_ParentedTree);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_ParentedTree);
  __Pyx_INCREF(__pyx_n_s_writediscbrackettree);
  __Pyx_GIVEREF(__pyx_n_s_writediscbrackettree);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_n_s_writediscbrackettree);
  __Pyx_INCREF(__pyx_n_s_brackettree);
  __Pyx_GIVEREF(__pyx_n_s_brackettree);
  PyList_SET_ITEM(__pyx_t_6, 3, __pyx_n_s_brackettree);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_tree, __pyx_t_6, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_Tree); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tree, __pyx_t_6) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_ParentedTree); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ParentedTree, __pyx_t_6) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_writediscbrackettree); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_writediscbrackettree, __pyx_t_6) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_brackettree); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_brackettree, __pyx_t_6) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0021: from .kbest import lazykbest
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_lazykbest);
  __Pyx_GIVEREF(__pyx_n_s_lazykbest);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_lazykbest);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_kbest, __pyx_t_5, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_lazykbest); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lazykbest, __pyx_t_5) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0022: from .kbest cimport getderiv
+0023: from .grammar import lcfrsproductions, spinal, REMOVEDEC
  __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_lcfrsproductions);
  __Pyx_GIVEREF(__pyx_n_s_lcfrsproductions);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_lcfrsproductions);
  __Pyx_INCREF(__pyx_n_s_spinal);
  __Pyx_GIVEREF(__pyx_n_s_spinal);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_spinal);
  __Pyx_INCREF(__pyx_n_s_REMOVEDEC);
  __Pyx_GIVEREF(__pyx_n_s_REMOVEDEC);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_n_s_REMOVEDEC);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_grammar, __pyx_t_6, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_lcfrsproductions); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lcfrsproductions, __pyx_t_6) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_spinal); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_spinal, __pyx_t_6) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_REMOVEDEC); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REMOVEDEC, __pyx_t_6) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0024: from .treetransforms import addbitsets, unbinarize, canonicalize, \
  __pyx_t_5 = PyList_New(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_s_addbitsets);
  __Pyx_GIVEREF(__pyx_n_s_addbitsets);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_addbitsets);
  __Pyx_INCREF(__pyx_n_s_unbinarize);
  __Pyx_GIVEREF(__pyx_n_s_unbinarize);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_unbinarize);
  __Pyx_INCREF(__pyx_n_s_canonicalize);
  __Pyx_GIVEREF(__pyx_n_s_canonicalize);
  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_n_s_canonicalize);
  __Pyx_INCREF(__pyx_n_s_collapseunary);
  __Pyx_GIVEREF(__pyx_n_s_collapseunary);
  PyList_SET_ITEM(__pyx_t_5, 3, __pyx_n_s_collapseunary);
  __Pyx_INCREF(__pyx_n_s_mergediscnodes);
  __Pyx_GIVEREF(__pyx_n_s_mergediscnodes);
  PyList_SET_ITEM(__pyx_t_5, 4, __pyx_n_s_mergediscnodes);
  __Pyx_INCREF(__pyx_n_s_binarize);
  __Pyx_GIVEREF(__pyx_n_s_binarize);
  PyList_SET_ITEM(__pyx_t_5, 5, __pyx_n_s_binarize);
  __pyx_t_6 = __Pyx_Import(__pyx_n_s_treetransforms, __pyx_t_5, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_addbitsets); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_addbitsets, __pyx_t_5) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_unbinarize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unbinarize, __pyx_t_5) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_canonicalize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_canonicalize, __pyx_t_5) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_collapseunary); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_collapseunary, __pyx_t_5) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_mergediscnodes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mergediscnodes, __pyx_t_5) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_6, __pyx_n_s_binarize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_binarize, __pyx_t_5) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0025: 		collapseunary, mergediscnodes, binarize
+0026: from .bit import pyintnextset, pyintbitcount
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_s_pyintnextset);
  __Pyx_GIVEREF(__pyx_n_s_pyintnextset);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_pyintnextset);
  __Pyx_INCREF(__pyx_n_s_pyintbitcount);
  __Pyx_GIVEREF(__pyx_n_s_pyintbitcount);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_pyintbitcount);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_bit, __pyx_t_6, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_pyintnextset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyintnextset, __pyx_t_6) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_pyintbitcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyintbitcount, __pyx_t_6) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0027: 
 0028: cimport cython
 0029: from cython.operator cimport dereference
 0030: from libc.string cimport memset
 0031: from libc.stdint cimport uint64_t
 0032: from libc.math cimport HUGE_VAL as INFINITY
 0033: from libcpp.string cimport string
 0034: from libcpp.vector cimport vector
 0035: from libcpp.utility cimport pair
 0036: from .bit cimport abitcount
 0037: from .containers cimport Prob, Grammar, ProbRule, LexicalRule, Chart, \
 0038: 		SmallChartItem, FatChartItem, Edge, RankedEdge, Whitelist, \
 0039: 		sparse_hash_map, logprobadd, logprobsum, yieldranges
 0040: 
 0041: 
 0042: cdef extern from "macros.h":
 0043: 	uint64_t TESTBIT(uint64_t a[], int b)
 0044: 	void SETBIT(uint64_t a[], int b)
 0045: 	void CLEARBIT(uint64_t a[], int b)
 0046: 	int BITNSLOTS(int nb)
 0047: 
 0048: include "constants.pxi"
 0049: 
+0050: REMOVEIDS = re.compile('@[-0-9]+')
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_compile); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REMOVEIDS, __pyx_t_5) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_u_0_9); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
+0051: REMOVEWORDTAGS = re.compile('@[^ )]+')
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_compile); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REMOVEWORDTAGS, __pyx_t_5) < 0) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_u__46); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
+0052: cdef str NONCONSTLABEL = ''
  __Pyx_INCREF(__pyx_kp_u__3);
  __Pyx_XGOTREF(__pyx_v_8discodop_14disambiguation_NONCONSTLABEL);
  __Pyx_DECREF_SET(__pyx_v_8discodop_14disambiguation_NONCONSTLABEL, __pyx_kp_u__3);
  __Pyx_GIVEREF(__pyx_kp_u__3);
+0053: cdef str NEGATIVECONSTLABEL = '-#-'
  __Pyx_INCREF(__pyx_kp_u__48);
  __Pyx_XGOTREF(__pyx_v_8discodop_14disambiguation_NEGATIVECONSTLABEL);
  __Pyx_DECREF_SET(__pyx_v_8discodop_14disambiguation_NEGATIVECONSTLABEL, __pyx_kp_u__48);
  __Pyx_GIVEREF(__pyx_kp_u__48);
 0054: 
+0055: cpdef getderivations(Chart chart, int k, derivstrings=True):
static PyObject *__pyx_pw_8discodop_14disambiguation_1getderivations(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_14disambiguation_getderivations(struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, int __pyx_v_k, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8discodop_14disambiguation_getderivations *__pyx_optional_args) {
  PyObject *__pyx_v_derivstrings = ((PyObject *)Py_True);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getderivations", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_derivstrings = __pyx_optional_args->derivstrings;
    }
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("discodop.disambiguation.getderivations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_1getderivations(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_getderivations[] = "getderivations(Chart chart, int k, derivstrings=True)\nGet *k*-best derivations from chart.\n\n\t:param k: number of derivations to extract from chart\n\t:param derivstrings: whether to create derivations as strings\n\t:returns: ``None``. Modifies ``chart.derivations`` and\n\t\t``chart.rankededges`` in-place.\n\n\t\t:chart.derivations: list of tuples ``(deriv, logprob)`` where ``deriv``\n\t\t\tis a string; or list of ``None`` if ``derivstrings==False``\n\t\t:chart.rankededges[chart.root()]: corresponding list of RankedEdge\n\t\t\tobjects for the derivations in ``chart.derivations``.\n\t";
static PyObject *__pyx_pw_8discodop_14disambiguation_1getderivations(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart = 0;
  int __pyx_v_k;
  PyObject *__pyx_v_derivstrings = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getderivations (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_chart,&__pyx_n_s_k,&__pyx_n_s_derivstrings,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chart)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getderivations", 0, 2, 3, 1); __PYX_ERR(0, 55, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_derivstrings);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getderivations") < 0)) __PYX_ERR(0, 55, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_chart = ((struct __pyx_obj_8discodop_10containers_Chart *)values[0]);
    __pyx_v_k = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error)
    __pyx_v_derivstrings = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getderivations", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 55, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.disambiguation.getderivations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chart), __pyx_ptype_8discodop_10containers_Chart, 1, "chart", 0))) __PYX_ERR(0, 55, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_14disambiguation_getderivations(__pyx_self, __pyx_v_chart, __pyx_v_k, __pyx_v_derivstrings);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_getderivations(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, int __pyx_v_k, PyObject *__pyx_v_derivstrings) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getderivations", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.derivstrings = __pyx_v_derivstrings;
  __pyx_t_1 = __pyx_f_8discodop_14disambiguation_getderivations(__pyx_v_chart, __pyx_v_k, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("discodop.disambiguation.getderivations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_8discodop_14disambiguation_getderivations {
  int __pyx_n;
  PyObject *derivstrings;
};
 0056: 	"""Get *k*-best derivations from chart.
 0057: 
 0058: 	:param k: number of derivations to extract from chart
 0059: 	:param derivstrings: whether to create derivations as strings
 0060: 	:returns: ``None``. Modifies ``chart.derivations`` and
 0061: 		``chart.rankededges`` in-place.
 0062: 
 0063: 		:chart.derivations: list of tuples ``(deriv, logprob)`` where ``deriv``
 0064: 			is a string; or list of ``None`` if ``derivstrings==False``
 0065: 		:chart.rankededges[chart.root()]: corresponding list of RankedEdge
 0066: 			objects for the derivations in ``chart.derivations``.
 0067: 	"""
+0068: 	chart.rankededges.clear()
  __pyx_v_chart->rankededges.clear();
+0069: 	chart.derivations = lazykbest(chart, k, derivs=derivstrings)
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lazykbest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_k); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_chart));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_chart));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_derivs, __pyx_v_derivstrings) < 0) __PYX_ERR(0, 69, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_chart->derivations);
  __Pyx_DECREF(__pyx_v_chart->derivations);
  __pyx_v_chart->derivations = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 0070: 
 0071: 
+0072: cpdef marginalize(method, Chart chart,
static PyObject *__pyx_pw_8discodop_14disambiguation_3marginalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_14disambiguation_marginalize(PyObject *__pyx_v_method, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8discodop_14disambiguation_marginalize *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_32);
  __Pyx_XDECREF(__pyx_t_33);
  __Pyx_AddTraceback("discodop.disambiguation.marginalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mpdtrees);
  __Pyx_XDECREF(__pyx_v_derivlen);
  __Pyx_XDECREF(__pyx_v_derivs);
  __Pyx_XDECREF(__pyx_v_treestr);
  __Pyx_XDECREF(__pyx_v_deriv);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_newprob);
  __Pyx_XDECREF(__pyx_v_score);
  __Pyx_XDECREF(__pyx_v_oldscore);
  __Pyx_XDECREF(__pyx_v_results);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_3marginalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_2marginalize[] = "marginalize(method, Chart chart, list backtransform=None, list sent=None, list tags=None, int k=1000, int sldop_n=7, double mcplambda=1.0, set mcplabels=None, bool ostag=False)\nTake a list of derivations and optimizes a given objective function.\n\n\t1. Rewrites derivations into the intended parse trees.\n\t2. Marginalizes (sum / combine) weights of derivations for same parse tree.\n\t3. Applies objective function (scoring criterion) for ranking parse trees.\n\n\t:param method:\n\t\tAvailable objective functions:\n\n\t\t:'mpp': Most Probable Parse\n\t\t:'mpd': Most Probable Derivation\n\t\t:'shortest': Most Probable Shortest Derivation\n\t\t:'sl-dop': Simplicity-Likelihood DOP; select most likely parse from the\n\t\t\t``sldop_n`` parse trees with the shortest derivations.\n\t\t:'sl-dop-simple': Approximation of Simplicity-Likelihood DOP\n\t:param backtransform:\n\t\tDependending on the value of this parameter, one of two ways is\n\t\temployed to turn derivations into parse trees:\n\n\t\t:``None``: assume derivations are from DOP reduction and strip\n\t\t\tannotations of the form ``@123`` from labels. This option is also\n\t\t\tapplicable when the grammar is not a TSG and derivations already\n\t\t\tcoincide with parse trees.\n\t\t:list of strings: assume Double-DOP and recover derivations by\n\t\t\tsubstituting fragments in this list for flattened rules in\n\t\t\tderivations.\n\t:param k: when ``method='sl-dop``, number of derivations to consider.\n\t:returns:\n\t\t``(parses, msg)``.\n\n\t\t:parses: a list of tuples ``(parsetree, probability, fragments)``\n\t\t\twhere ``parsetree`` is a string, ``probability`` is a float\n\t\t\t(0 < p <= 1), or a tuple ``(numfrags, p)`` for shortest derivation\n\t\t\tparsing, and ``fragments`` is a list of fragments in the most\n\t\t\tprobable derivation for this parse.\n\t\t:msg: a message reporting the number of derivations / parses.\n\t";
static PyObject *__pyx_pw_8discodop_14disambiguation_3marginalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_method = 0;
  struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart = 0;
  PyObject *__pyx_v_backtransform = 0;
  PyObject *__pyx_v_sent = 0;
  PyObject *__pyx_v_tags = 0;
  int __pyx_v_k;
  int __pyx_v_sldop_n;
  double __pyx_v_mcplambda;
  PyObject *__pyx_v_mcplabels = 0;
  int __pyx_v_ostag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("marginalize (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_chart,&__pyx_n_s_backtransform,&__pyx_n_s_sent,&__pyx_n_s_tags,&__pyx_n_s_k,&__pyx_n_s_sldop_n,&__pyx_n_s_mcplambda,&__pyx_n_s_mcplabels,&__pyx_n_s_ostag,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_2marginalize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_method, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, int __pyx_v_k, int __pyx_v_sldop_n, double __pyx_v_mcplambda, PyObject *__pyx_v_mcplabels, int __pyx_v_ostag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("marginalize", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 8;
  __pyx_t_2.backtransform = __pyx_v_backtransform;
  __pyx_t_2.sent = __pyx_v_sent;
  __pyx_t_2.tags = __pyx_v_tags;
  __pyx_t_2.k = __pyx_v_k;
  __pyx_t_2.sldop_n = __pyx_v_sldop_n;
  __pyx_t_2.mcplambda = __pyx_v_mcplambda;
  __pyx_t_2.mcplabels = __pyx_v_mcplabels;
  __pyx_t_2.ostag = __pyx_v_ostag;
  __pyx_t_1 = __pyx_f_8discodop_14disambiguation_marginalize(__pyx_v_method, __pyx_v_chart, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("discodop.disambiguation.marginalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_8discodop_14disambiguation_marginalize {
  int __pyx_n;
  PyObject *backtransform;
  PyObject *sent;
  PyObject *tags;
  int k;
  int sldop_n;
  double mcplambda;
  PyObject *mcplabels;
  int ostag;
};
+0073: 		list backtransform=None, list sent=None, list tags=None,
  PyObject *__pyx_v_backtransform = ((PyObject*)Py_None);
  PyObject *__pyx_v_sent = ((PyObject*)Py_None);
  PyObject *__pyx_v_tags = ((PyObject*)Py_None);
  int __pyx_v_k = ((int)0x3E8);
  int __pyx_v_sldop_n = ((int)7);
  double __pyx_v_mcplambda = ((double)1.0);
/* … */
    values[2] = ((PyObject*)Py_None);
    values[3] = ((PyObject*)Py_None);
    values[4] = ((PyObject*)Py_None);
+0074: 		int k=1000, int sldop_n=7, double mcplambda=1.0, set mcplabels=None,
  PyObject *__pyx_v_mcplabels = ((PyObject*)Py_None);
/* … */
    values[8] = ((PyObject*)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chart)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("marginalize", 0, 2, 10, 1); __PYX_ERR(0, 72, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_backtransform);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tags);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sldop_n);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mcplambda);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mcplabels);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ostag);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "marginalize") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_method = values[0];
    __pyx_v_chart = ((struct __pyx_obj_8discodop_10containers_Chart *)values[1]);
    __pyx_v_backtransform = ((PyObject*)values[2]);
    __pyx_v_sent = ((PyObject*)values[3]);
    __pyx_v_tags = ((PyObject*)values[4]);
    if (values[5]) {
      __pyx_v_k = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    } else {
      __pyx_v_k = ((int)0x3E8);
    }
    if (values[6]) {
      __pyx_v_sldop_n = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_sldop_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    } else {
      __pyx_v_sldop_n = ((int)7);
    }
    if (values[7]) {
      __pyx_v_mcplambda = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_mcplambda == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
    } else {
      __pyx_v_mcplambda = ((double)1.0);
    }
    __pyx_v_mcplabels = ((PyObject*)values[8]);
    if (values[9]) {
      __pyx_v_ostag = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_ostag == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 75, __pyx_L3_error)
    } else {
+0075: 		bint ostag=False):
  int __pyx_v_ostag = ((int)0);
  int __pyx_v_mpd;
  int __pyx_v_shortest;
  int __pyx_v_dopreduction;
  std::pair<RankedEdge,Prob>  __pyx_v_entry;
  std::vector<std::pair<RankedEdge,Prob> >  __pyx_v_entries;
  spp::sparse_hash_map<std::string,std::vector<Prob> >  __pyx_v_mpptrees;
  PyObject *__pyx_v_mpdtrees = 0;
  PyObject *__pyx_v_derivlen = 0;
  PyObject *__pyx_v_derivs = 0;
  PyObject *__pyx_v_treestr = 0;
  PyObject *__pyx_v_deriv = 0;
  Prob __pyx_v_prob;
  Prob __pyx_v_maxprob;
  size_t __pyx_v_n;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_newprob = NULL;
  PyObject *__pyx_v_score = NULL;
  PyObject *__pyx_v_oldscore = NULL;
  PyObject *__pyx_v_results = NULL;
  std::pair<std::string,std::vector<Prob> >  __pyx_v_it;
  std::vector<Prob>  __pyx_v_probs;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("marginalize", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_backtransform = __pyx_optional_args->backtransform;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_sent = __pyx_optional_args->sent;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_tags = __pyx_optional_args->tags;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_k = __pyx_optional_args->k;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_sldop_n = __pyx_optional_args->sldop_n;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_mcplambda = __pyx_optional_args->mcplambda;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_mcplabels = __pyx_optional_args->mcplabels;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_ostag = __pyx_optional_args->ostag;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
/* … */
      __pyx_v_ostag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("marginalize", 0, 2, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.disambiguation.marginalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chart), __pyx_ptype_8discodop_10containers_Chart, 1, "chart", 0))) __PYX_ERR(0, 72, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_backtransform), (&PyList_Type), 1, "backtransform", 1))) __PYX_ERR(0, 73, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 73, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tags), (&PyList_Type), 1, "tags", 1))) __PYX_ERR(0, 73, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mcplabels), (&PySet_Type), 1, "mcplabels", 1))) __PYX_ERR(0, 74, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_14disambiguation_2marginalize(__pyx_self, __pyx_v_method, __pyx_v_chart, __pyx_v_backtransform, __pyx_v_sent, __pyx_v_tags, __pyx_v_k, __pyx_v_sldop_n, __pyx_v_mcplambda, __pyx_v_mcplabels, __pyx_v_ostag);
 0076: 	"""Take a list of derivations and optimizes a given objective function.
 0077: 
 0078: 	1. Rewrites derivations into the intended parse trees.
 0079: 	2. Marginalizes (sum / combine) weights of derivations for same parse tree.
 0080: 	3. Applies objective function (scoring criterion) for ranking parse trees.
 0081: 
 0082: 	:param method:
 0083: 		Available objective functions:
 0084: 
 0085: 		:'mpp': Most Probable Parse
 0086: 		:'mpd': Most Probable Derivation
 0087: 		:'shortest': Most Probable Shortest Derivation
 0088: 		:'sl-dop': Simplicity-Likelihood DOP; select most likely parse from the
 0089: 			``sldop_n`` parse trees with the shortest derivations.
 0090: 		:'sl-dop-simple': Approximation of Simplicity-Likelihood DOP
 0091: 	:param backtransform:
 0092: 		Dependending on the value of this parameter, one of two ways is
 0093: 		employed to turn derivations into parse trees:
 0094: 
 0095: 		:``None``: assume derivations are from DOP reduction and strip
 0096: 			annotations of the form ``@123`` from labels. This option is also
 0097: 			applicable when the grammar is not a TSG and derivations already
 0098: 			coincide with parse trees.
 0099: 		:list of strings: assume Double-DOP and recover derivations by
 0100: 			substituting fragments in this list for flattened rules in
 0101: 			derivations.
 0102: 	:param k: when ``method='sl-dop``, number of derivations to consider.
 0103: 	:returns:
 0104: 		``(parses, msg)``.
 0105: 
 0106: 		:parses: a list of tuples ``(parsetree, probability, fragments)``
 0107: 			where ``parsetree`` is a string, ``probability`` is a float
 0108: 			(0 < p <= 1), or a tuple ``(numfrags, p)`` for shortest derivation
 0109: 			parsing, and ``fragments`` is a list of fragments in the most
 0110: 			probable derivation for this parse.
 0111: 		:msg: a message reporting the number of derivations / parses.
 0112: 	"""
+0113: 	cdef bint mpd = method == 'mpd'
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_method, __pyx_n_u_mpd, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_mpd = __pyx_t_2;
+0114: 	cdef bint shortest = method == 'shortest'
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_method, __pyx_n_u_shortest, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_shortest = __pyx_t_2;
+0115: 	cdef bint dopreduction = backtransform is None
  __pyx_t_2 = (__pyx_v_backtransform == ((PyObject*)Py_None));
  __pyx_v_dopreduction = __pyx_t_2;
 0116: 	cdef pair[RankedEdge, Prob] entry
 0117: 	cdef vector[pair[RankedEdge, Prob]] entries
 0118: 	cdef sparse_hash_map[string, vector[Prob]] mpptrees
+0119: 	cdef dict mpdtrees = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mpdtrees = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0120: 	cdef dict derivlen = {}  # parsetree => (derivlen, derivprob)
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivlen = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0121: 	cdef dict derivs = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0122: 	cdef str treestr, deriv
 0123: 	cdef Prob prob, maxprob
 0124: 	cdef size_t n
 0125: 
+0126: 	if method == 'sl-dop':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_method, __pyx_kp_u_sl_dop, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 126, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+0127: 		return sldop(chart, sent, tags, k, sldop_n, backtransform)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_8discodop_14disambiguation_sldop(__pyx_v_chart, __pyx_v_sent, __pyx_v_tags, __pyx_v_k, __pyx_v_sldop_n, __pyx_v_backtransform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+0128: 	elif method == 'sl-dop-simple':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_method, __pyx_kp_u_sl_dop_simple, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 128, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+0129: 		return sldop_simple(sldop_n, chart, backtransform)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_8discodop_14disambiguation_sldop_simple(__pyx_v_sldop_n, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+0130: 	elif method == 'mcp':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_method, __pyx_n_u_mcp, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 130, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+0131: 		return maxconstituentsparse(
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.labels = __pyx_v_mcplabels;
    __pyx_t_1 = __pyx_f_8discodop_14disambiguation_maxconstituentsparse(__pyx_v_chart, __pyx_v_backtransform, __pyx_v_mcplambda, &__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 0132: 				chart, backtransform, mcplambda, mcplabels)
+0133: 	elif method == 'shortest':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_method, __pyx_n_u_shortest, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 133, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
 0134: 		# filter out all derivations which are not shortest
+0135: 		if not dopreduction:
    __pyx_t_2 = ((!(__pyx_v_dopreduction != 0)) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+0136: 			maxprob = INFINITY
      __pyx_v_maxprob = HUGE_VAL;
+0137: 			for entry in chart.rankededges[chart.root()]:
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (__pyx_t_5) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = &(__pyx_v_chart->rankededges[__pyx_t_6]);
      __pyx_t_7 = __pyx_t_8->begin();
      for (;;) {
        if (!(__pyx_t_7 != __pyx_t_8->end())) break;
        __pyx_t_9 = *__pyx_t_7;
        ++__pyx_t_7;
        __pyx_v_entry = __pyx_t_9;
/* … */
      }
+0138: 				if entry.second < maxprob:
        __pyx_t_2 = ((__pyx_v_entry.second < __pyx_v_maxprob) != 0);
        if (__pyx_t_2) {
/* … */
        }
+0139: 					maxprob = entry.second
          __pyx_t_10 = __pyx_v_entry.second;
          __pyx_v_maxprob = __pyx_t_10;
+0140: 			for entry in chart.rankededges[chart.root()]:
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (__pyx_t_5) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 140, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = &(__pyx_v_chart->rankededges[__pyx_t_6]);
      __pyx_t_7 = __pyx_t_8->begin();
      for (;;) {
        if (!(__pyx_t_7 != __pyx_t_8->end())) break;
        __pyx_t_9 = *__pyx_t_7;
        ++__pyx_t_7;
        __pyx_v_entry = __pyx_t_9;
/* … */
      }
+0141: 				if entry.second == maxprob:
        __pyx_t_2 = ((__pyx_v_entry.second == __pyx_v_maxprob) != 0);
        if (__pyx_t_2) {
/* … */
        }
+0142: 					entries.push_back(entry)
          try {
            __pyx_v_entries.push_back(__pyx_v_entry);
          } catch(...) {
            __Pyx_CppExn2PyErr();
            __PYX_ERR(0, 142, __pyx_L1_error)
          }
+0143: 			chart.rankededges[chart.root()] = entries
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (__pyx_t_5) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      (__pyx_v_chart->rankededges[__pyx_t_6]) = __pyx_v_entries;
+0144: 		elif chart.derivations:
    __pyx_t_2 = (__pyx_v_chart->derivations != Py_None) && (PyList_GET_SIZE(__pyx_v_chart->derivations) != 0);
    if (__pyx_t_2) {
/* … */
    }
    __pyx_L4:;
+0145: 			_, maxprob = min(chart.derivations, key=itemgetter(1))
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_chart->derivations);
      __Pyx_GIVEREF(__pyx_v_chart->derivations);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chart->derivations);
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_itemgetter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_key, __pyx_t_11) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
        PyObject* sequence = __pyx_t_11;
        #if !CYTHON_COMPILING_IN_PYPY
        Py_ssize_t size = Py_SIZE(sequence);
        #else
        Py_ssize_t size = PySequence_Size(sequence);
        #endif
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 145, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_5 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_5)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_12(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_1);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_5), 2) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L12_unpacking_done;
        __pyx_L11_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 145, __pyx_L1_error)
        __pyx_L12_unpacking_done:;
      }
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_10 == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v__ = __pyx_t_4;
      __pyx_t_4 = 0;
      __pyx_v_maxprob = __pyx_t_10;
/* … */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);
+0146: 			chart.derivations = [(deriv, prob)
      { /* enter inner scope */
        PyObject *__pyx_7genexpr__pyx_v_deriv = NULL;
        Prob __pyx_7genexpr__pyx_v_prob;
        __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 146, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_11);
/* … */
            __pyx_t_4 = PyFloat_FromDouble(__pyx_7genexpr__pyx_v_prob); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 146, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 146, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_INCREF(__pyx_7genexpr__pyx_v_deriv);
            __Pyx_GIVEREF(__pyx_7genexpr__pyx_v_deriv);
            PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_7genexpr__pyx_v_deriv);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_4);
            __pyx_t_4 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_14))) __PYX_ERR(0, 146, __pyx_L15_error)
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
      __Pyx_GIVEREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_v_chart->derivations);
      __Pyx_DECREF(__pyx_v_chart->derivations);
      __pyx_v_chart->derivations = ((PyObject*)__pyx_t_11);
      __pyx_t_11 = 0;
+0147: 					for deriv, prob in chart.derivations
        if (unlikely(__pyx_v_chart->derivations == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 147, __pyx_L15_error)
        }
        __pyx_t_1 = __pyx_v_chart->derivations; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0;
        for (;;) {
          if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 147, __pyx_L15_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
          if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
            PyObject* sequence = __pyx_t_4;
            #if !CYTHON_COMPILING_IN_PYPY
            Py_ssize_t size = Py_SIZE(sequence);
            #else
            Py_ssize_t size = PySequence_Size(sequence);
            #endif
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 147, __pyx_L15_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_14);
            #else
            __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 147, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_14);
            #endif
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_15 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 147, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_12 = Py_TYPE(__pyx_t_15)->tp_iternext;
            index = 0; __pyx_t_5 = __pyx_t_12(__pyx_t_15); if (unlikely(!__pyx_t_5)) goto __pyx_L18_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_5);
            index = 1; __pyx_t_14 = __pyx_t_12(__pyx_t_15); if (unlikely(!__pyx_t_14)) goto __pyx_L18_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_14);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_15), 2) < 0) __PYX_ERR(0, 147, __pyx_L15_error)
            __pyx_t_12 = NULL;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            goto __pyx_L19_unpacking_done;
            __pyx_L18_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_12 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 147, __pyx_L15_error)
            __pyx_L19_unpacking_done:;
          }
          if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 147, __pyx_L15_error)
          __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_14); if (unlikely((__pyx_t_10 == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 147, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_deriv, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;
          __pyx_7genexpr__pyx_v_prob = __pyx_t_10;
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_deriv);
        goto __pyx_L21_exit_scope;
        __pyx_L15_error:;
        __Pyx_XDECREF(__pyx_7genexpr__pyx_v_deriv);
        goto __pyx_L1_error;
        __pyx_L21_exit_scope:;
      } /* exit inner scope */
+0148: 					if prob == maxprob]
          __pyx_t_2 = ((__pyx_7genexpr__pyx_v_prob == __pyx_v_maxprob) != 0);
          if (__pyx_t_2) {
/* … */
          }
 0149: 
+0150: 	if not dopreduction:  # Double-DOP
  __pyx_t_2 = ((!(__pyx_v_dopreduction != 0)) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L22;
  }
+0151: 		for n in range(chart.rankededges[chart.root()].size()):
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    if (__pyx_t_14) {
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 151, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else {
      __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 151, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_11); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_16 = (__pyx_v_chart->rankededges[__pyx_t_6]).size();
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_n = __pyx_t_17;
+0152: 			entry = chart.rankededges[chart.root()][n]
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      if (__pyx_t_14) {
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 152, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      } else {
        __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 152, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_11); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_v_entry = ((__pyx_v_chart->rankededges[__pyx_t_6])[__pyx_v_n]);
+0153: 			prob = entry.second
      __pyx_t_10 = __pyx_v_entry.second;
      __pyx_v_prob = __pyx_t_10;
+0154: 			try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        goto __pyx_L32_try_end;
        __pyx_L25_error:;
        __Pyx_PyThreadState_assign
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
        __Pyx_PyThreadState_assign
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        goto __pyx_L1_error;
        __pyx_L31_try_continue:;
        __Pyx_PyThreadState_assign
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        goto __pyx_L23_continue;
        __pyx_L32_try_end:;
      }
+0155: 				treestr = recoverfragments_re(
          __pyx_t_11 = __pyx_f_8discodop_14disambiguation_recoverfragments_re(__pyx_v_entry.first, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 155, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_11));
          __pyx_t_11 = 0;
 0156: 						entry.first, chart, backtransform)
+0157: 			except:
        /*except:*/ {
          __Pyx_AddTraceback("discodop.disambiguation.marginalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_1, &__pyx_t_14) < 0) __PYX_ERR(0, 157, __pyx_L27_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_14);
+0158: 				continue
          goto __pyx_L34_except_continue;
          __pyx_L34_except_continue:;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L31_try_continue;
        }
        __pyx_L27_except_error:;
+0159: 			if shortest:
      __pyx_t_2 = (__pyx_v_shortest != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L35;
      }
 0160: 				# for purposes of tie breaking, calculate the derivation
 0161: 				# probability in a different model.
+0162: 				newprob = exp(-getderivprob(entry.first, chart, sent))
        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_11 = PyFloat_FromDouble((-__pyx_f_8discodop_14disambiguation_getderivprob(__pyx_v_entry.first, __pyx_v_chart, __pyx_v_sent))); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 162, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        if (!__pyx_t_4) {
          __pyx_t_14 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 162, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_14);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_11};
            __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 162, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_11};
            __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 162, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 162, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
            __Pyx_GIVEREF(__pyx_t_11);
            PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_11);
            __pyx_t_11 = 0;
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 162, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF_SET(__pyx_v_newprob, __pyx_t_14);
        __pyx_t_14 = 0;
+0163: 				score = (int(prob / log(0.5)), newprob)
        __pyx_t_14 = PyFloat_FromDouble(__pyx_v_prob); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_14, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
        __Pyx_INCREF(__pyx_v_newprob);
        __Pyx_GIVEREF(__pyx_v_newprob);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_newprob);
        __pyx_t_5 = 0;
        __Pyx_XDECREF_SET(__pyx_v_score, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
/* … */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_float_0_5); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);
+0164: 				if treestr not in derivlen or score > derivlen[treestr]:
        __pyx_t_21 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_derivlen, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 164, __pyx_L1_error)
        __pyx_t_22 = (__pyx_t_21 != 0);
        if (!__pyx_t_22) {
        } else {
          __pyx_t_2 = __pyx_t_22;
          goto __pyx_L37_bool_binop_done;
        }
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_derivlen, __pyx_v_treestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = PyObject_RichCompare(__pyx_v_score, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 164, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 164, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_2 = __pyx_t_22;
        __pyx_L37_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
        }
+0165: 					derivlen[treestr] = score
          if (unlikely(PyDict_SetItem(__pyx_v_derivlen, __pyx_v_treestr, __pyx_v_score) < 0)) __PYX_ERR(0, 165, __pyx_L1_error)
+0166: 					derivs[treestr] = n
          __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 166, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_t_5) < 0)) __PYX_ERR(0, 166, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0167: 			elif mpd:
      __pyx_t_2 = (__pyx_v_mpd != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L35;
      }
+0168: 				if (treestr not in mpdtrees
        __pyx_t_21 = (__pyx_t_22 != 0);
        if (!__pyx_t_21) {
        } else {
          __pyx_t_2 = __pyx_t_21;
          goto __pyx_L40_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+0169: 							or -prob > mpdtrees[treestr]):
        __pyx_t_22 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_mpdtrees, Py_NE)); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 168, __pyx_L1_error)
/* … */
        __pyx_t_5 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_mpdtrees, __pyx_v_treestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_14 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_14); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 169, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 169, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_2 = __pyx_t_21;
        __pyx_L40_bool_binop_done:;
+0170: 					mpdtrees[treestr] = -prob
          __pyx_t_14 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 170, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          if (unlikely(PyDict_SetItem(__pyx_v_mpdtrees, __pyx_v_treestr, __pyx_t_14) < 0)) __PYX_ERR(0, 170, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0171: 					derivs[treestr] = n
          __pyx_t_14 = __Pyx_PyInt_FromSize_t(__pyx_v_n); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 171, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_t_14) < 0)) __PYX_ERR(0, 171, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 0172: 			else:
+0173: 				mpptrees[<string>treestr.encode('utf8')].push_back(-prob)
      /*else*/ {
        if (unlikely(__pyx_v_treestr == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
          __PYX_ERR(0, 173, __pyx_L1_error)
        }
        __pyx_t_14 = PyUnicode_AsUTF8String(__pyx_v_treestr); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_23 = __pyx_convert_string_from_py_std__in_string(__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        try {
          (__pyx_v_mpptrees[((std::string)__pyx_t_23)]).push_back((-__pyx_v_prob));
        } catch(...) {
          __Pyx_CppExn2PyErr();
          __PYX_ERR(0, 173, __pyx_L1_error)
        }
+0174: 				if treestr not in derivs:
        __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_derivs, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 174, __pyx_L1_error)
        __pyx_t_21 = (__pyx_t_2 != 0);
        if (__pyx_t_21) {
/* … */
        }
      }
      __pyx_L35:;
      __pyx_L23_continue:;
    }
+0175: 					derivs[treestr] = n
          __pyx_t_14 = __Pyx_PyInt_FromSize_t(__pyx_v_n); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 175, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_t_14) < 0)) __PYX_ERR(0, 175, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 0176: 	else:  # DOP reduction
+0177: 		for n, (deriv, prob) in enumerate(chart.derivations):
  /*else*/ {
    __pyx_t_17 = 0;
    __pyx_t_14 = __pyx_v_chart->derivations; __Pyx_INCREF(__pyx_t_14); __pyx_t_13 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_14)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 177, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_14, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
        PyObject* sequence = __pyx_t_1;
        #if !CYTHON_COMPILING_IN_PYPY
        Py_ssize_t size = Py_SIZE(sequence);
        #else
        Py_ssize_t size = PySequence_Size(sequence);
        #endif
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 177, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_11);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_4)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L45_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_11)) goto __pyx_L45_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_4), 2) < 0) __PYX_ERR(0, 177, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L46_unpacking_done;
        __pyx_L45_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 177, __pyx_L1_error)
        __pyx_L46_unpacking_done:;
      }
      if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 177, __pyx_L1_error)
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_11); if (unlikely((__pyx_t_10 == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF_SET(__pyx_v_deriv, ((PyObject*)__pyx_t_5));
      __pyx_t_5 = 0;
      __pyx_v_prob = __pyx_t_10;
      __pyx_v_n = __pyx_t_17;
      __pyx_t_17 = (__pyx_t_17 + 1);
/* … */
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __pyx_L22:;
+0178: 			entry = chart.rankededges[chart.root()][n]
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      if (__pyx_t_5) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_entry = ((__pyx_v_chart->rankededges[__pyx_t_6])[__pyx_v_n]);
+0179: 			if ostag:
      __pyx_t_21 = (__pyx_v_ostag != 0);
      if (__pyx_t_21) {
/* … */
        goto __pyx_L47;
      }
+0180: 				deriv = removeadjunaries(deriv)
        __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_removeadjunaries); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 180, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
          }
        }
        if (!__pyx_t_5) {
          __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_11)) {
            PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_deriv};
            __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
            PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_deriv};
            __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else
          #endif
          {
            __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 180, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
            __Pyx_INCREF(__pyx_v_deriv);
            __Pyx_GIVEREF(__pyx_v_deriv);
            PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_deriv);
            __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 180, __pyx_L1_error)
        __Pyx_DECREF_SET(__pyx_v_deriv, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
+0181: 				treestr = REMOVEDEC.sub('@1' if mpd or shortest else '', deriv)
        __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEDEC); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 181, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sub); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_2 = (__pyx_v_mpd != 0);
        if (!__pyx_t_2) {
        } else {
          __pyx_t_21 = __pyx_t_2;
          goto __pyx_L48_bool_binop_done;
        }
        __pyx_t_2 = (__pyx_v_shortest != 0);
        __pyx_t_21 = __pyx_t_2;
        __pyx_L48_bool_binop_done:;
        if (__pyx_t_21) {
          __Pyx_INCREF(__pyx_kp_u_1);
          __pyx_t_11 = __pyx_kp_u_1;
        } else {
          __Pyx_INCREF(__pyx_kp_u__3);
          __pyx_t_11 = __pyx_kp_u__3;
        }
        __pyx_t_5 = NULL;
        __pyx_t_24 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_24 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_11, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_11, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        {
          __pyx_t_15 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 181, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_24, __pyx_t_11);
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_24, __pyx_v_deriv);
          __pyx_t_11 = 0;
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 181, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
+0182: 			elif dopreduction:
      __pyx_t_21 = (__pyx_v_dopreduction != 0);
      if (__pyx_t_21) {
/* … */
        goto __pyx_L47;
      }
+0183: 				treestr = REMOVEIDS.sub('@1' if mpd or shortest else '', deriv)
        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sub); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 183, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_2 = (__pyx_v_mpd != 0);
        if (!__pyx_t_2) {
        } else {
          __pyx_t_21 = __pyx_t_2;
          goto __pyx_L50_bool_binop_done;
        }
        __pyx_t_2 = (__pyx_v_shortest != 0);
        __pyx_t_21 = __pyx_t_2;
        __pyx_L50_bool_binop_done:;
        if (__pyx_t_21) {
          __Pyx_INCREF(__pyx_kp_u_1);
          __pyx_t_4 = __pyx_kp_u_1;
        } else {
          __Pyx_INCREF(__pyx_kp_u__3);
          __pyx_t_4 = __pyx_kp_u__3;
        }
        __pyx_t_11 = NULL;
        __pyx_t_24 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
            __pyx_t_24 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_15)) {
          PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_4, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
          PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_4, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else
        #endif
        {
          __pyx_t_5 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 183, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (__pyx_t_11) {
            __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_11); __pyx_t_11 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_24, __pyx_t_4);
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_24, __pyx_v_deriv);
          __pyx_t_4 = 0;
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 183, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
 0184: 			else:
+0185: 				raise ValueError
      /*else*/ {
        __Pyx_Raise(__pyx_builtin_ValueError, 0, 0, 0);
        __PYX_ERR(0, 185, __pyx_L1_error)
      }
      __pyx_L47:;
+0186: 			if shortest:
      __pyx_t_21 = (__pyx_v_shortest != 0);
      if (__pyx_t_21) {
/* … */
        goto __pyx_L52;
      }
+0187: 				newprob = getderivprob(entry.first, chart, sent)
        __pyx_t_1 = PyFloat_FromDouble(__pyx_f_8discodop_14disambiguation_getderivprob(__pyx_v_entry.first, __pyx_v_chart, __pyx_v_sent)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_v_newprob, __pyx_t_1);
        __pyx_t_1 = 0;
+0188: 				score = (int(prob / log(0.5)), exp(-newprob))
        __pyx_t_1 = PyFloat_FromDouble(__pyx_v_prob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_log); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = PyNumber_Negative(__pyx_v_newprob); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        if (!__pyx_t_11) {
          __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_15);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_4};
            __pyx_t_15 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_4};
            __pyx_t_15 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else
          #endif
          {
            __pyx_t_25 = PyTuple_New(1+1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 188, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_25);
            __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_11); __pyx_t_11 = NULL;
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_25, 0+1, __pyx_t_4);
            __pyx_t_4 = 0;
            __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_25, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 188, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_15);
        __pyx_t_5 = 0;
        __pyx_t_15 = 0;
        __Pyx_XDECREF_SET(__pyx_v_score, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
/* … */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_float_0_5); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
+0189: 				if treestr not in derivlen or (not dopreduction
        __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_derivlen, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 189, __pyx_L1_error)
        __pyx_t_22 = (__pyx_t_2 != 0);
        if (!__pyx_t_22) {
        } else {
          __pyx_t_21 = __pyx_t_22;
          goto __pyx_L54_bool_binop_done;
        }
/* … */
        __pyx_t_22 = ((!(__pyx_v_dopreduction != 0)) != 0);
        if (__pyx_t_22) {
        } else {
          __pyx_t_21 = __pyx_t_22;
          goto __pyx_L54_bool_binop_done;
        }
/* … */
        if (__pyx_t_21) {
/* … */
          goto __pyx_L53;
        }
+0190: 						and score > derivlen[treestr]):
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_derivlen, __pyx_v_treestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_15 = PyObject_RichCompare(__pyx_v_score, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 190, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 190, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_21 = __pyx_t_22;
        __pyx_L54_bool_binop_done:;
+0191: 					derivlen[treestr] = score
          if (unlikely(PyDict_SetItem(__pyx_v_derivlen, __pyx_v_treestr, __pyx_v_score) < 0)) __PYX_ERR(0, 191, __pyx_L1_error)
+0192: 					derivs[treestr] = deriv
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_v_deriv) < 0)) __PYX_ERR(0, 192, __pyx_L1_error)
+0193: 				elif dopreduction:
        __pyx_t_21 = (__pyx_v_dopreduction != 0);
        if (__pyx_t_21) {
/* … */
        }
        __pyx_L53:;
+0194: 					oldscore = derivlen[treestr]
          __pyx_t_15 = __Pyx_PyDict_GetItem(__pyx_v_derivlen, __pyx_v_treestr); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 194, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_XDECREF_SET(__pyx_v_oldscore, __pyx_t_15);
          __pyx_t_15 = 0;
+0195: 					derivlen[treestr] = oldscore[0], oldscore[1] + score[1]
          __pyx_t_15 = __Pyx_GetItemInt(__pyx_v_oldscore, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 195, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_oldscore, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_5 = PyNumber_Add(__pyx_t_1, PyTuple_GET_ITEM(__pyx_v_score, 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 195, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_15);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
          __pyx_t_15 = 0;
          __pyx_t_5 = 0;
          if (unlikely(PyDict_SetItem(__pyx_v_derivlen, __pyx_v_treestr, __pyx_t_1) < 0)) __PYX_ERR(0, 195, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0196: 			elif mpd:
      __pyx_t_21 = (__pyx_v_mpd != 0);
      if (__pyx_t_21) {
/* … */
        goto __pyx_L52;
      }
+0197: 				if (treestr not in mpdtrees or
        __pyx_t_22 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_mpdtrees, Py_NE)); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 197, __pyx_L1_error)
        __pyx_t_2 = (__pyx_t_22 != 0);
        if (!__pyx_t_2) {
        } else {
          __pyx_t_21 = __pyx_t_2;
          goto __pyx_L58_bool_binop_done;
        }
/* … */
        if (__pyx_t_21) {
/* … */
        }
+0198: 						-prob > mpdtrees[treestr]):
        __pyx_t_1 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_mpdtrees, __pyx_v_treestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_15 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_21 = __pyx_t_2;
        __pyx_L58_bool_binop_done:;
+0199: 					mpdtrees[treestr] = -prob
          __pyx_t_15 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (unlikely(PyDict_SetItem(__pyx_v_mpdtrees, __pyx_v_treestr, __pyx_t_15) < 0)) __PYX_ERR(0, 199, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+0200: 					derivs[treestr] = deriv
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_v_deriv) < 0)) __PYX_ERR(0, 200, __pyx_L1_error)
 0201: 			else:
+0202: 				mpptrees[<string>treestr.encode('utf8')].push_back(-prob)
      /*else*/ {
        if (unlikely(__pyx_v_treestr == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
          __PYX_ERR(0, 202, __pyx_L1_error)
        }
        __pyx_t_15 = PyUnicode_AsUTF8String(__pyx_v_treestr); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 202, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_23 = __pyx_convert_string_from_py_std__in_string(__pyx_t_15); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 202, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        try {
          (__pyx_v_mpptrees[((std::string)__pyx_t_23)]).push_back((-__pyx_v_prob));
        } catch(...) {
          __Pyx_CppExn2PyErr();
          __PYX_ERR(0, 202, __pyx_L1_error)
        }
+0203: 				if treestr not in derivs:
        __pyx_t_21 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_derivs, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 203, __pyx_L1_error)
        __pyx_t_2 = (__pyx_t_21 != 0);
        if (__pyx_t_2) {
/* … */
        }
      }
      __pyx_L52:;
+0204: 					derivs[treestr] = deriv
          if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_v_deriv) < 0)) __PYX_ERR(0, 204, __pyx_L1_error)
 0205: 
+0206: 	if ostag:
  __pyx_t_2 = (__pyx_v_ostag != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L61;
  }
+0207: 		results = []
    __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_v_results = ((PyObject*)__pyx_t_14);
    __pyx_t_14 = 0;
+0208: 		for it in mpptrees:
    __pyx_t_26 = __pyx_v_mpptrees.begin();
    for (;;) {
      if (!(__pyx_t_26 != __pyx_v_mpptrees.end())) break;
      __pyx_t_27 = *__pyx_t_26;
      ++__pyx_t_26;
      __pyx_v_it = __pyx_t_27;
/* … */
    }
+0209: 			treestr = REMOVEDEC.sub('', it.first.decode('utf8'))
      __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEDEC); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_sub); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = __Pyx_decode_cpp_string(__pyx_v_it.first, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_1 = NULL;
      __pyx_t_24 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_24 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u__3, __pyx_t_15};
        __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_u__3, __pyx_t_15};
        __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      } else
      #endif
      {
        __pyx_t_25 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_25, 0+__pyx_t_24, __pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_25, 1+__pyx_t_24, __pyx_t_15);
        __pyx_t_15 = 0;
        __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_25, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!(likely(PyUnicode_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_14)->tp_name), 0))) __PYX_ERR(0, 209, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_14));
      __pyx_t_14 = 0;
+0210: 			probs = it.second
      __pyx_t_28 = __pyx_v_it.second;
      __pyx_v_probs = __pyx_t_28;
+0211: 			results.append((treestr, logprobsum(probs),
      __pyx_t_14 = PyFloat_FromDouble(__pyx_f_8discodop_10containers_logprobsum(__pyx_v_probs)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
/* … */
      __pyx_t_25 = PyTuple_New(3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_INCREF(__pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_v_treestr);
      PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_25, 2, __pyx_t_5);
      __pyx_t_14 = 0;
      __pyx_t_5 = 0;
      __pyx_t_29 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_25); if (unlikely(__pyx_t_29 == -1)) __PYX_ERR(0, 211, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+0212: 					ostagderivation(derivs[treestr], chart.sent)))
      __pyx_t_25 = __Pyx_GetModuleGlobalName(__pyx_n_s_ostagderivation); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_15 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_v_treestr); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_1 = NULL;
      __pyx_t_24 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_25))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_25);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_25, function);
          __pyx_t_24 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_25)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_15, __pyx_v_chart->sent};
        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_25, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_25)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_15, __pyx_v_chart->sent};
        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_25, __pyx_temp+1-__pyx_t_24, 2+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      } else
      #endif
      {
        __pyx_t_4 = PyTuple_New(2+__pyx_t_24); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 212, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_24, __pyx_t_15);
        __Pyx_INCREF(__pyx_v_chart->sent);
        __Pyx_GIVEREF(__pyx_v_chart->sent);
        PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_24, __pyx_v_chart->sent);
        __pyx_t_15 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_25, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 212, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+0213: 	elif shortest:
  __pyx_t_2 = (__pyx_v_shortest != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L61;
  }
+0214: 		if dopreduction:
    __pyx_t_2 = (__pyx_v_dopreduction != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L64;
    }
+0215: 			results = [(REMOVEIDS.sub('', treestr), (-a, b),
      { /* enter inner scope */
        PyObject *__pyx_8genexpr1__pyx_v_treestr = NULL;
        PyObject *__pyx_8genexpr1__pyx_v_a = NULL;
        PyObject *__pyx_8genexpr1__pyx_v_b = NULL;
        __pyx_t_25 = PyList_New(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 215, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_25);
/* … */
          __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_sub); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          __pyx_t_31 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_14, function);
              __pyx_t_31 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_14)) {
            PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_kp_u__3, __pyx_8genexpr1__pyx_v_treestr};
            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_31, 2+__pyx_t_31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L67_error)
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_GOTREF(__pyx_t_4);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
            PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_kp_u__3, __pyx_8genexpr1__pyx_v_treestr};
            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_31, 2+__pyx_t_31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L67_error)
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_GOTREF(__pyx_t_4);
          } else
          #endif
          {
            __pyx_t_1 = PyTuple_New(2+__pyx_t_31); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (__pyx_t_15) {
              __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15); __pyx_t_15 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u__3);
            __Pyx_GIVEREF(__pyx_kp_u__3);
            PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_31, __pyx_kp_u__3);
            __Pyx_INCREF(__pyx_8genexpr1__pyx_v_treestr);
            __Pyx_GIVEREF(__pyx_8genexpr1__pyx_v_treestr);
            PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_31, __pyx_8genexpr1__pyx_v_treestr);
            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_14 = PyNumber_Negative(__pyx_8genexpr1__pyx_v_a); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_14);
          __Pyx_INCREF(__pyx_8genexpr1__pyx_v_b);
          __Pyx_GIVEREF(__pyx_8genexpr1__pyx_v_b);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_8genexpr1__pyx_v_b);
          __pyx_t_14 = 0;
/* … */
          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_14);
          __pyx_t_4 = 0;
          __pyx_t_1 = 0;
          __pyx_t_14 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_25, (PyObject*)__pyx_t_15))) __PYX_ERR(0, 215, __pyx_L67_error)
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_treestr);
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_a);
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_b);
        goto __pyx_L72_exit_scope;
        __pyx_L67_error:;
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_treestr);
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_a);
        __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_b);
        goto __pyx_L1_error;
        __pyx_L72_exit_scope:;
      } /* exit inner scope */
      __pyx_v_results = ((PyObject*)__pyx_t_25);
      __pyx_t_25 = 0;
+0216: 					fragmentsinderiv_str(derivs[treestr], chart, backtransform))
          __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragmentsinderiv_str); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 216, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_8genexpr1__pyx_v_treestr); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 216, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_32 = NULL;
          __pyx_t_31 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_32 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_32)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_32);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
              __pyx_t_31 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[4] = {__pyx_t_32, __pyx_t_11, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
            __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_31, 3+__pyx_t_31); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 216, __pyx_L67_error)
            __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[4] = {__pyx_t_32, __pyx_t_11, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
            __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_31, 3+__pyx_t_31); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 216, __pyx_L67_error)
            __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          {
            __pyx_t_33 = PyTuple_New(3+__pyx_t_31); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 216, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_33);
            if (__pyx_t_32) {
              __Pyx_GIVEREF(__pyx_t_32); PyTuple_SET_ITEM(__pyx_t_33, 0, __pyx_t_32); __pyx_t_32 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_11);
            PyTuple_SET_ITEM(__pyx_t_33, 0+__pyx_t_31, __pyx_t_11);
            __Pyx_INCREF(((PyObject *)__pyx_v_chart));
            __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
            PyTuple_SET_ITEM(__pyx_t_33, 1+__pyx_t_31, ((PyObject *)__pyx_v_chart));
            __Pyx_INCREF(__pyx_v_backtransform);
            __Pyx_GIVEREF(__pyx_v_backtransform);
            PyTuple_SET_ITEM(__pyx_t_33, 2+__pyx_t_31, __pyx_v_backtransform);
            __pyx_t_11 = 0;
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_33, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 216, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
          }
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+0217: 					for treestr, (a, b) in derivlen.items()]
        __pyx_t_13 = 0;
        __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_derivlen, 1, __pyx_n_s_items, (&__pyx_t_30), (&__pyx_t_24)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 217, __pyx_L67_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_XDECREF(__pyx_t_5);
        __pyx_t_5 = __pyx_t_14;
        __pyx_t_14 = 0;
        while (1) {
          __pyx_t_31 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_30, &__pyx_t_13, &__pyx_t_14, &__pyx_t_4, NULL, __pyx_t_24);
          if (unlikely(__pyx_t_31 == 0)) break;
          if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 217, __pyx_L67_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GOTREF(__pyx_t_4);
          if (!(likely(PyUnicode_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_14)->tp_name), 0))) __PYX_ERR(0, 217, __pyx_L67_error)
          __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_treestr, ((PyObject*)__pyx_t_14));
          __pyx_t_14 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
            PyObject* sequence = __pyx_t_4;
            #if !CYTHON_COMPILING_IN_PYPY
            Py_ssize_t size = Py_SIZE(sequence);
            #else
            Py_ssize_t size = PySequence_Size(sequence);
            #endif
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 217, __pyx_L67_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_14 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_15 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_15);
            #else
            __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 217, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 217, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_15);
            #endif
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L67_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext;
            index = 0; __pyx_t_14 = __pyx_t_12(__pyx_t_1); if (unlikely(!__pyx_t_14)) goto __pyx_L70_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_14);
            index = 1; __pyx_t_15 = __pyx_t_12(__pyx_t_1); if (unlikely(!__pyx_t_15)) goto __pyx_L70_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_15);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_1), 2) < 0) __PYX_ERR(0, 217, __pyx_L67_error)
            __pyx_t_12 = NULL;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            goto __pyx_L71_unpacking_done;
            __pyx_L70_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_12 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 217, __pyx_L67_error)
            __pyx_L71_unpacking_done:;
          }
          __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_a, __pyx_t_14);
          __pyx_t_14 = 0;
          __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_b, __pyx_t_15);
          __pyx_t_15 = 0;
 0218: 		else:
+0219: 			results = [(treestr, (-a, b),
    /*else*/ {
      { /* enter inner scope */
        PyObject *__pyx_8genexpr2__pyx_v_treestr = NULL;
        PyObject *__pyx_8genexpr2__pyx_v_a = NULL;
        PyObject *__pyx_8genexpr2__pyx_v_b = NULL;
        __pyx_t_25 = PyList_New(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 219, __pyx_L75_error)
        __Pyx_GOTREF(__pyx_t_25);
/* … */
          __pyx_t_14 = PyNumber_Negative(__pyx_8genexpr2__pyx_v_a); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 219, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_14);
          __Pyx_INCREF(__pyx_8genexpr2__pyx_v_b);
          __Pyx_GIVEREF(__pyx_8genexpr2__pyx_v_b);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_8genexpr2__pyx_v_b);
          __pyx_t_14 = 0;
/* … */
          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 219, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_INCREF(__pyx_8genexpr2__pyx_v_treestr);
          __Pyx_GIVEREF(__pyx_8genexpr2__pyx_v_treestr);
          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_8genexpr2__pyx_v_treestr);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_14);
          __pyx_t_1 = 0;
          __pyx_t_14 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_25, (PyObject*)__pyx_t_15))) __PYX_ERR(0, 219, __pyx_L75_error)
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_treestr);
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_a);
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_b);
        goto __pyx_L80_exit_scope;
        __pyx_L75_error:;
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_treestr);
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_a);
        __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_b);
        goto __pyx_L1_error;
        __pyx_L80_exit_scope:;
      } /* exit inner scope */
      __pyx_v_results = ((PyObject*)__pyx_t_25);
      __pyx_t_25 = 0;
    }
    __pyx_L64:;
+0220: 					fragmentsinderiv_re(
          __pyx_t_14 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(((__pyx_v_chart->rankededges[__pyx_t_6])[__pyx_t_34]).first, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 220, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_14);
+0221: 						chart.rankededges[chart.root()][derivs[treestr]].first,
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 221, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_4 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          if (__pyx_t_4) {
            __pyx_t_14 = __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 221, __pyx_L75_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          } else {
            __pyx_t_14 = __Pyx_PyObject_CallNoArg(__pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 221, __pyx_L75_error)
          }
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_14); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 221, __pyx_L75_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_8genexpr2__pyx_v_treestr); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 221, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_34 = __Pyx_PyInt_As_size_t(__pyx_t_14); if (unlikely((__pyx_t_34 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 221, __pyx_L75_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 0222: 						chart, backtransform))
+0223: 					for treestr, (a, b) in derivlen.items()]
        __pyx_t_30 = 0;
        __pyx_t_15 = __Pyx_dict_iterator(__pyx_v_derivlen, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_24)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 223, __pyx_L75_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_XDECREF(__pyx_t_5);
        __pyx_t_5 = __pyx_t_15;
        __pyx_t_15 = 0;
        while (1) {
          __pyx_t_31 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_13, &__pyx_t_30, &__pyx_t_15, &__pyx_t_14, NULL, __pyx_t_24);
          if (unlikely(__pyx_t_31 == 0)) break;
          if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 223, __pyx_L75_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GOTREF(__pyx_t_14);
          if (!(likely(PyUnicode_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_15)->tp_name), 0))) __PYX_ERR(0, 223, __pyx_L75_error)
          __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_treestr, ((PyObject*)__pyx_t_15));
          __pyx_t_15 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) {
            PyObject* sequence = __pyx_t_14;
            #if !CYTHON_COMPILING_IN_PYPY
            Py_ssize_t size = Py_SIZE(sequence);
            #else
            Py_ssize_t size = PySequence_Size(sequence);
            #endif
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 223, __pyx_L75_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_1);
            #else
            __pyx_t_15 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 223, __pyx_L75_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L75_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_4 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L75_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_12 = Py_TYPE(__pyx_t_4)->tp_iternext;
            index = 0; __pyx_t_15 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_15)) goto __pyx_L78_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_15);
            index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L78_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_1);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_4), 2) < 0) __PYX_ERR(0, 223, __pyx_L75_error)
            __pyx_t_12 = NULL;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            goto __pyx_L79_unpacking_done;
            __pyx_L78_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_12 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 223, __pyx_L75_error)
            __pyx_L79_unpacking_done:;
          }
          __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_a, __pyx_t_15);
          __pyx_t_15 = 0;
          __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_b, __pyx_t_1);
          __pyx_t_1 = 0;
+0224: 	elif mpd:
  __pyx_t_2 = (__pyx_v_mpd != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L61;
  }
+0225: 		if dopreduction:
    __pyx_t_2 = (__pyx_v_dopreduction != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L81;
    }
+0226: 			results = [(REMOVEIDS.sub('', treestr), exp(prob),
      { /* enter inner scope */
        PyObject *__pyx_8genexpr3__pyx_v_treestr = NULL;
        Prob __pyx_8genexpr3__pyx_v_prob;
        __pyx_t_25 = PyList_New(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 226, __pyx_L84_error)
        __Pyx_GOTREF(__pyx_t_25);
/* … */
          __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_sub); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          __pyx_t_31 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_31 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_kp_u__3, __pyx_8genexpr3__pyx_v_treestr};
            __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_31, 2+__pyx_t_31); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 226, __pyx_L84_error)
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_GOTREF(__pyx_t_14);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
            PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_kp_u__3, __pyx_8genexpr3__pyx_v_treestr};
            __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_31, 2+__pyx_t_31); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 226, __pyx_L84_error)
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_GOTREF(__pyx_t_14);
          } else
          #endif
          {
            __pyx_t_4 = PyTuple_New(2+__pyx_t_31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 226, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_4);
            if (__pyx_t_15) {
              __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_15); __pyx_t_15 = NULL;
            }
            __Pyx_INCREF(__pyx_kp_u__3);
            __Pyx_GIVEREF(__pyx_kp_u__3);
            PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_31, __pyx_kp_u__3);
            __Pyx_INCREF(__pyx_8genexpr3__pyx_v_treestr);
            __Pyx_GIVEREF(__pyx_8genexpr3__pyx_v_treestr);
            PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_31, __pyx_8genexpr3__pyx_v_treestr);
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 226, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_15 = PyFloat_FromDouble(__pyx_8genexpr3__pyx_v_prob); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_33 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_33)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_33);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          if (!__pyx_t_33) {
            __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L84_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_GOTREF(__pyx_t_1);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_4)) {
              PyObject *__pyx_temp[2] = {__pyx_t_33, __pyx_t_15};
              __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L84_error)
              __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
              PyObject *__pyx_temp[2] = {__pyx_t_33, __pyx_t_15};
              __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L84_error)
              __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            } else
            #endif
            {
              __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 226, __pyx_L84_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_GIVEREF(__pyx_t_33); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_33); __pyx_t_33 = NULL;
              __Pyx_GIVEREF(__pyx_t_15);
              PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_t_15);
              __pyx_t_15 = 0;
              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L84_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
          __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_14);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_4);
          __pyx_t_14 = 0;
          __pyx_t_1 = 0;
          __pyx_t_4 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_25, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 226, __pyx_L84_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_treestr);
        goto __pyx_L87_exit_scope;
        __pyx_L84_error:;
        __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_treestr);
        goto __pyx_L1_error;
        __pyx_L87_exit_scope:;
      } /* exit inner scope */
      __pyx_v_results = ((PyObject*)__pyx_t_25);
      __pyx_t_25 = 0;
+0227: 					fragmentsinderiv_str(derivs[treestr], chart, backtransform))
          __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragmentsinderiv_str); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 227, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_15 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_8genexpr3__pyx_v_treestr); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 227, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_33 = NULL;
          __pyx_t_31 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_33)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_33);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
              __pyx_t_31 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_11)) {
            PyObject *__pyx_temp[4] = {__pyx_t_33, __pyx_t_15, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_31, 3+__pyx_t_31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L84_error)
            __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
            PyObject *__pyx_temp[4] = {__pyx_t_33, __pyx_t_15, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_31, 3+__pyx_t_31); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L84_error)
            __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          } else
          #endif
          {
            __pyx_t_32 = PyTuple_New(3+__pyx_t_31); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 227, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_32);
            if (__pyx_t_33) {
              __Pyx_GIVEREF(__pyx_t_33); PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_33); __pyx_t_33 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_15);
            PyTuple_SET_ITEM(__pyx_t_32, 0+__pyx_t_31, __pyx_t_15);
            __Pyx_INCREF(((PyObject *)__pyx_v_chart));
            __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
            PyTuple_SET_ITEM(__pyx_t_32, 1+__pyx_t_31, ((PyObject *)__pyx_v_chart));
            __Pyx_INCREF(__pyx_v_backtransform);
            __Pyx_GIVEREF(__pyx_v_backtransform);
            PyTuple_SET_ITEM(__pyx_t_32, 2+__pyx_t_31, __pyx_v_backtransform);
            __pyx_t_15 = 0;
            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_32, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 227, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          }
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0228: 					for treestr, prob in mpdtrees.items()]
        __pyx_t_13 = 0;
        __pyx_t_15 = __Pyx_dict_iterator(__pyx_v_mpdtrees, 1, __pyx_n_s_items, (&__pyx_t_30), (&__pyx_t_24)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 228, __pyx_L84_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_XDECREF(__pyx_t_5);
        __pyx_t_5 = __pyx_t_15;
        __pyx_t_15 = 0;
        while (1) {
          __pyx_t_31 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_30, &__pyx_t_13, &__pyx_t_15, &__pyx_t_14, NULL, __pyx_t_24);
          if (unlikely(__pyx_t_31 == 0)) break;
          if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 228, __pyx_L84_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GOTREF(__pyx_t_14);
          if (!(likely(PyUnicode_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_15)->tp_name), 0))) __PYX_ERR(0, 228, __pyx_L84_error)
          __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_14); if (unlikely((__pyx_t_10 == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 228, __pyx_L84_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_treestr, ((PyObject*)__pyx_t_15));
          __pyx_t_15 = 0;
          __pyx_8genexpr3__pyx_v_prob = __pyx_t_10;
 0229: 		else:
+0230: 			results = [(treestr, exp(prob),
    /*else*/ {
      { /* enter inner scope */
        PyObject *__pyx_8genexpr4__pyx_v_treestr = NULL;
        Prob __pyx_8genexpr4__pyx_v_prob;
        __pyx_t_25 = PyList_New(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 230, __pyx_L90_error)
        __Pyx_GOTREF(__pyx_t_25);
/* … */
          __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 230, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_1 = PyFloat_FromDouble(__pyx_8genexpr4__pyx_v_prob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_14 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_14)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_14);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          if (!__pyx_t_14) {
            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L90_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_GOTREF(__pyx_t_4);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_1};
              __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L90_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_1};
              __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L90_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } else
            #endif
            {
              __pyx_t_32 = PyTuple_New(1+1); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 230, __pyx_L90_error)
              __Pyx_GOTREF(__pyx_t_32);
              __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_14); __pyx_t_14 = NULL;
              __Pyx_GIVEREF(__pyx_t_1);
              PyTuple_SET_ITEM(__pyx_t_32, 0+1, __pyx_t_1);
              __pyx_t_1 = 0;
              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_32, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L90_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
          __pyx_t_32 = PyTuple_New(3); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 230, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_32);
          __Pyx_INCREF(__pyx_8genexpr4__pyx_v_treestr);
          __Pyx_GIVEREF(__pyx_8genexpr4__pyx_v_treestr);
          PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_8genexpr4__pyx_v_treestr);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_32, 2, __pyx_t_11);
          __pyx_t_4 = 0;
          __pyx_t_11 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_25, (PyObject*)__pyx_t_32))) __PYX_ERR(0, 230, __pyx_L90_error)
          __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_treestr);
        goto __pyx_L93_exit_scope;
        __pyx_L90_error:;
        __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_treestr);
        goto __pyx_L1_error;
        __pyx_L93_exit_scope:;
      } /* exit inner scope */
      __pyx_v_results = ((PyObject*)__pyx_t_25);
      __pyx_t_25 = 0;
    }
    __pyx_L81:;
+0231: 					fragmentsinderiv_re(
          __pyx_t_11 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(((__pyx_v_chart->rankededges[__pyx_t_6])[__pyx_t_34]).first, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 231, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_11);
+0232: 						chart.rankededges[chart.root()][derivs[treestr]].first,
          __pyx_t_32 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 232, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_32);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_32))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_32);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_32);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_32, function);
            }
          }
          if (__pyx_t_1) {
            __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_32, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L90_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else {
            __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_32); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L90_error)
          }
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_11); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L90_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_8genexpr4__pyx_v_treestr); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_34 = __Pyx_PyInt_As_size_t(__pyx_t_11); if (unlikely((__pyx_t_34 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L90_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 0233: 						chart, backtransform))
+0234: 					for treestr, prob in mpdtrees.items()]
        __pyx_t_30 = 0;
        __pyx_t_11 = __Pyx_dict_iterator(__pyx_v_mpdtrees, 1, __pyx_n_s_items, (&__pyx_t_13), (&__pyx_t_24)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 234, __pyx_L90_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_5);
        __pyx_t_5 = __pyx_t_11;
        __pyx_t_11 = 0;
        while (1) {
          __pyx_t_31 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_13, &__pyx_t_30, &__pyx_t_11, &__pyx_t_4, NULL, __pyx_t_24);
          if (unlikely(__pyx_t_31 == 0)) break;
          if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 234, __pyx_L90_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GOTREF(__pyx_t_4);
          if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 234, __pyx_L90_error)
          __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 234, __pyx_L90_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_treestr, ((PyObject*)__pyx_t_11));
          __pyx_t_11 = 0;
          __pyx_8genexpr4__pyx_v_prob = __pyx_t_10;
+0235: 	elif dopreduction:
  __pyx_t_2 = (__pyx_v_dopreduction != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L61;
  }
+0236: 		results = []
    __pyx_t_25 = PyList_New(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_v_results = ((PyObject*)__pyx_t_25);
    __pyx_t_25 = 0;
+0237: 		for it in mpptrees:
    __pyx_t_26 = __pyx_v_mpptrees.begin();
    for (;;) {
      if (!(__pyx_t_26 != __pyx_v_mpptrees.end())) break;
      __pyx_t_27 = *__pyx_t_26;
      ++__pyx_t_26;
      __pyx_v_it = __pyx_t_27;
/* … */
    }
+0238: 			treestr = it.first.decode('utf8')
      __pyx_t_25 = __Pyx_decode_cpp_string(__pyx_v_it.first, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 238, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_25))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_25)->tp_name), 0))) __PYX_ERR(0, 238, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_25));
      __pyx_t_25 = 0;
+0239: 			probs = it.second
      __pyx_t_28 = __pyx_v_it.second;
      __pyx_v_probs = __pyx_t_28;
+0240: 			results.append((treestr, logprobsum(probs),
      __pyx_t_25 = PyFloat_FromDouble(__pyx_f_8discodop_10containers_logprobsum(__pyx_v_probs)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
/* … */
      __pyx_t_32 = PyTuple_New(3); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_32);
      __Pyx_INCREF(__pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_v_treestr);
      PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_25);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_32, 2, __pyx_t_5);
      __pyx_t_25 = 0;
      __pyx_t_5 = 0;
      __pyx_t_29 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_32); if (unlikely(__pyx_t_29 == -1)) __PYX_ERR(0, 240, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
+0241: 					fragmentsinderiv_str(derivs[treestr], chart, backtransform)))
      __pyx_t_32 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragmentsinderiv_str); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 241, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_32);
      __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_v_treestr); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 241, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = NULL;
      __pyx_t_24 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_32))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_32);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_32);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_32, function);
          __pyx_t_24 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_32)) {
        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_11, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_32, __pyx_temp+1-__pyx_t_24, 3+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_32)) {
        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_11, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_32, __pyx_temp+1-__pyx_t_24, 3+__pyx_t_24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(3+__pyx_t_24); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_24, __pyx_t_11);
        __Pyx_INCREF(((PyObject *)__pyx_v_chart));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_24, ((PyObject *)__pyx_v_chart));
        __Pyx_INCREF(__pyx_v_backtransform);
        __Pyx_GIVEREF(__pyx_v_backtransform);
        PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_24, __pyx_v_backtransform);
        __pyx_t_11 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_32, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
 0242: 	else:
+0243: 		results = []
  /*else*/ {
    __pyx_t_32 = PyList_New(0); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_32);
    __pyx_v_results = ((PyObject*)__pyx_t_32);
    __pyx_t_32 = 0;
+0244: 		for it in mpptrees:
    __pyx_t_26 = __pyx_v_mpptrees.begin();
    for (;;) {
      if (!(__pyx_t_26 != __pyx_v_mpptrees.end())) break;
      __pyx_t_27 = *__pyx_t_26;
      ++__pyx_t_26;
      __pyx_v_it = __pyx_t_27;
/* … */
    }
  }
  __pyx_L61:;
+0245: 			treestr = it.first.decode('utf8')
      __pyx_t_32 = __Pyx_decode_cpp_string(__pyx_v_it.first, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 245, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_32);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_32))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_32)->tp_name), 0))) __PYX_ERR(0, 245, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_treestr, ((PyObject*)__pyx_t_32));
      __pyx_t_32 = 0;
+0246: 			probs = it.second
      __pyx_t_28 = __pyx_v_it.second;
      __pyx_v_probs = __pyx_t_28;
+0247: 			results.append((treestr, logprobsum(probs),
      __pyx_t_32 = PyFloat_FromDouble(__pyx_f_8discodop_10containers_logprobsum(__pyx_v_probs)); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_32);
/* … */
      __pyx_t_25 = PyTuple_New(3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_INCREF(__pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_v_treestr);
      PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_t_32);
      PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_32);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_25, 2, __pyx_t_5);
      __pyx_t_32 = 0;
      __pyx_t_5 = 0;
      __pyx_t_29 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_25); if (unlikely(__pyx_t_29 == -1)) __PYX_ERR(0, 247, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+0248: 					fragmentsinderiv_re(
      __pyx_t_5 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(((__pyx_v_chart->rankededges[__pyx_t_6])[__pyx_t_34]).first, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 248, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+0249: 						chart.rankededges[chart.root()][derivs[treestr]].first,
      __pyx_t_25 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 249, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_25))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_25);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_25, function);
        }
      }
      if (__pyx_t_1) {
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_25, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else {
        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_25); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_v_treestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_34 = __Pyx_PyInt_As_size_t(__pyx_t_5); if (unlikely((__pyx_t_34 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0250: 						chart, backtransform)))
 0251: 
+0252: 	msg = '%d derivations, %d parsetrees' % (
  __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_d_derivations_d_parsetrees, __pyx_t_32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
  __pyx_v_msg = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+0253: 			len(chart.derivations) if dopreduction
    __pyx_t_5 = __pyx_v_chart->derivations;
    __Pyx_INCREF(__pyx_t_5);
    if (unlikely(__pyx_t_5 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 253, __pyx_L1_error)
    }
    __pyx_t_13 = PyList_GET_SIZE(__pyx_t_5); if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_25 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
/* … */
  __pyx_t_32 = PyTuple_New(2); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_32, 0, __pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_32, 1, __pyx_t_5);
  __pyx_t_25 = 0;
  __pyx_t_5 = 0;
+0254: 				else chart.rankededges[chart.root()].size(),
  if ((__pyx_v_dopreduction != 0)) {
/* … */
    __pyx_t_32 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_32);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_32))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_32);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_32);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_32, function);
      }
    }
    if (__pyx_t_1) {
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_32, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 254, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
    __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_FromSize_t((__pyx_v_chart->rankededges[__pyx_t_6]).size()); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_25 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
+0255: 			len(mpdtrees) or len(derivlen) or mpptrees.size())
  __pyx_t_13 = PyDict_Size(__pyx_v_mpdtrees); if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 255, __pyx_L1_error)
  if (!__pyx_t_13) {
  } else {
    __pyx_t_32 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_32);
    __pyx_t_5 = __pyx_t_32;
    __pyx_t_32 = 0;
    goto __pyx_L98_bool_binop_done;
  }
  __pyx_t_13 = PyDict_Size(__pyx_v_derivlen); if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 255, __pyx_L1_error)
  if (!__pyx_t_13) {
  } else {
    __pyx_t_32 = PyInt_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_32);
    __pyx_t_5 = __pyx_t_32;
    __pyx_t_32 = 0;
    goto __pyx_L98_bool_binop_done;
  }
  __pyx_t_35 = __pyx_v_mpptrees.size();
  __pyx_t_32 = __Pyx_PyInt_From_uint64_t(__pyx_t_35); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_32);
  __pyx_t_5 = __pyx_t_32;
  __pyx_t_32 = 0;
  __pyx_L98_bool_binop_done:;
+0256: 	return results, msg
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_results);
  __Pyx_GIVEREF(__pyx_v_results);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_results);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_msg);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 0257: 
 0258: 
+0259: cdef maxconstituentsparse(Chart chart,
static PyObject *__pyx_f_8discodop_14disambiguation_maxconstituentsparse(struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform, double __pyx_v_labda, struct __pyx_opt_args_8discodop_14disambiguation_maxconstituentsparse *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_AddTraceback("discodop.disambiguation.maxconstituentsparse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_span);
  __Pyx_XDECREF(__pyx_v_leftspan);
  __Pyx_XDECREF(__pyx_v_rightspan);
  __Pyx_XDECREF(__pyx_v_maxleft);
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF(__pyx_v_tree);
  __Pyx_XDECREF(__pyx_v_deriv);
  __Pyx_XDECREF(__pyx_v_treestr);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_tablecell);
  __Pyx_XDECREF(__pyx_v_cells);
  __Pyx_XDECREF(__pyx_v_maxlabel);
  __Pyx_XDECREF(__pyx_v_spans);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_8discodop_14disambiguation_maxconstituentsparse {
  int __pyx_n;
  PyObject *labels;
};
+0260: 		list backtransform, double labda, set labels=None):
  PyObject *__pyx_v_labels = ((PyObject*)Py_None);
  double __pyx_v_sentprob;
  double __pyx_v_maxscore;
  double __pyx_v_prob;
  double __pyx_v_score;
  double __pyx_v_maxcombscore;
  double __pyx_v_contribution;
  short __pyx_v_start;
  short __pyx_v_spanlen;
  PyObject *__pyx_v_span = 0;
  PyObject *__pyx_v_leftspan = 0;
  PyObject *__pyx_v_rightspan = 0;
  PyObject *__pyx_v_maxleft = 0;
  PyObject *__pyx_v_table = NULL;
  PyObject *__pyx_v_tree = NULL;
  PyObject *__pyx_v_deriv = NULL;
  PyObject *__pyx_v_treestr = NULL;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_tablecell = NULL;
  PyObject *__pyx_v_cells = NULL;
  PyObject *__pyx_v_maxlabel = NULL;
  PyObject *__pyx_v_spans = NULL;
  PyObject *__pyx_v_tmp = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("maxconstituentsparse", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_labels = __pyx_optional_args->labels;
    }
  }
 0261: 	"""Approximate the Max Constituents Parse (MCP) parse from k-best list.
 0262: 
 0263: 	Also known as Most Constituents Correct.
 0264: 	:param derivations: list of derivations as strings
 0265: 	:param chart: the chart
 0266: 	:param backtransform: table of rules mapped to fragments
 0267: 	:param labda:
 0268: 		weight to assign to recall rate vs. the mistake rate;
 0269: 		1.0 assigns equal weight to both.
 0270: 	:param labels:
 0271: 		if given, the set of labels to optimize for;
 0272: 		by default, all labels are optimized.
 0273: 	"""
 0274: 	# Cannot maximize this objective directly from chart because
 0275: 	# derivations need to be expanded first.
 0276: 	# NB: this requires derivation strings not entries.
+0277: 	cdef double sentprob = 0.0, maxscore = 0.0
  __pyx_v_sentprob = 0.0;
  __pyx_v_maxscore = 0.0;
 0278: 	cdef double prob, score, maxcombscore, contribution
 0279: 	cdef short start, spanlen
 0280: 	cdef object span, leftspan, rightspan, maxleft  # bitsets as Python ints
 0281: 	# FIXME: optimize datastructures
 0282: 	# table[start][spanlen][span][label] = prob
+0283: 	table = [[defaultdict(dict)
  { /* enter inner scope */
    Py_ssize_t __pyx_8genexpr5__pyx_v_n;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
          __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 283, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_8, function);
            }
          }
          if (!__pyx_t_9) {
            __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_8, ((PyObject *)(&PyDict_Type))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_8)) {
              PyObject *__pyx_temp[2] = {__pyx_t_9, ((PyObject *)(&PyDict_Type))};
              __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_5);
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
              PyObject *__pyx_temp[2] = {__pyx_t_9, ((PyObject *)(&PyDict_Type))};
              __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_GOTREF(__pyx_t_5);
            } else
            #endif
            {
              __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 283, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
              __Pyx_INCREF(((PyObject *)(&PyDict_Type)));
              __Pyx_GIVEREF(((PyObject *)(&PyDict_Type)));
              PyTuple_SET_ITEM(__pyx_t_10, 0+1, ((PyObject *)(&PyDict_Type)));
              __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 283, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
      } /* exit inner scope */
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 283, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
  } /* exit inner scope */
  __pyx_v_table = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0284: 				for _ in range(len(chart.sent) - n + 1)]
        __pyx_t_5 = __pyx_v_chart->sent;
        __Pyx_INCREF(__pyx_t_5);
        if (unlikely(__pyx_t_5 == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(0, 284, __pyx_L1_error)
        }
        __pyx_t_6 = PyList_GET_SIZE(__pyx_t_5); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 284, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_7 = ((__pyx_t_6 - __pyx_8genexpr5__pyx_v_n) + 1);
        for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_7; __pyx_t_6+=1) {
          __pyx_8genexpr6__pyx_8genexpr5__pyx_v__ = __pyx_t_6;
+0285: 			for n in range(len(chart.sent) + 1)]
    __pyx_t_2 = __pyx_v_chart->sent;
    __Pyx_INCREF(__pyx_t_2);
    if (unlikely(__pyx_t_2 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 285, __pyx_L1_error)
    }
    __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 285, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = (__pyx_t_3 + 1);
    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_4; __pyx_t_3+=1) {
      __pyx_8genexpr5__pyx_v_n = __pyx_t_3;
      { /* enter inner scope */
        CYTHON_UNUSED Py_ssize_t __pyx_8genexpr6__pyx_8genexpr5__pyx_v__;
+0286: 	tree = None
  __Pyx_INCREF(Py_None);
  __pyx_v_tree = Py_None;
 0287: 	# get marginal probabilities
+0288: 	for deriv, prob in chart.derivations:
  if (unlikely(__pyx_v_chart->derivations == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 288, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_chart->derivations; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 288, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 288, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 288, __pyx_L1_error)
      __pyx_t_11 = NULL;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L10_unpacking_done;
      __pyx_L9_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_11 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 288, __pyx_L1_error)
      __pyx_L10_unpacking_done:;
    }
    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_v_prob = __pyx_t_12;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0289: 		if backtransform is None:
    __pyx_t_13 = (__pyx_v_backtransform == ((PyObject*)Py_None));
    __pyx_t_14 = (__pyx_t_13 != 0);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L11;
    }
+0290: 			treestr = REMOVEIDS.sub('', deriv)
      __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sub); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else
      #endif
      {
        __pyx_t_10 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (__pyx_t_8) {
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_15, __pyx_kp_u__3);
        __Pyx_INCREF(__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_15, __pyx_v_deriv);
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_treestr, __pyx_t_2);
      __pyx_t_2 = 0;
 0291: 		else:
+0292: 			treestr = recoverfragments_str(deriv, chart, backtransform)
    /*else*/ {
      if (!(likely(PyUnicode_CheckExact(__pyx_v_deriv))||((__pyx_v_deriv) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_deriv)->tp_name), 0))) __PYX_ERR(0, 292, __pyx_L1_error)
      __pyx_t_2 = __pyx_f_8discodop_14disambiguation_recoverfragments_str(((PyObject*)__pyx_v_deriv), __pyx_v_chart, __pyx_v_backtransform, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 292, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_treestr, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L11:;
 0293: 		# Rebinarize because we optimize only for constituents in the tree as
 0294: 		# it will be evaluated. Collapse unaries because we only select the
 0295: 		# single best label in each cell.
+0296: 		tree = addbitsets(binarize(
    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_addbitsets); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_binarize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+0297: 				collapseunary(
    __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_collapseunary); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
/* … */
    __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_GIVEREF(__pyx_t_21);
    PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_21);
    __pyx_t_21 = 0;
/* … */
    __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_17, __pyx_t_21); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __pyx_t_21 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_21)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_21);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    if (!__pyx_t_21) {
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_18); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 296, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_GOTREF(__pyx_t_10);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[2] = {__pyx_t_21, __pyx_t_18};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[2] = {__pyx_t_21, __pyx_t_18};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      } else
      #endif
      {
        __pyx_t_17 = PyTuple_New(1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_21); __pyx_t_21 = NULL;
        __Pyx_GIVEREF(__pyx_t_18);
        PyTuple_SET_ITEM(__pyx_t_17, 0+1, __pyx_t_18);
        __pyx_t_18 = 0;
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_17, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    if (!__pyx_t_8) {
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      {
        __pyx_t_17 = PyTuple_New(1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_8); __pyx_t_8 = NULL;
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_17, 0+1, __pyx_t_10);
        __pyx_t_10 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_tree, __pyx_t_2);
    __pyx_t_2 = 0;
+0298: 					unbinarize(
    __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s_unbinarize); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
/* … */
    __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17);
    __pyx_t_17 = 0;
/* … */
    __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_18, __pyx_t_17); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+0299: 						mergediscnodes(unbinarize(
    __pyx_t_18 = __Pyx_GetModuleGlobalName(__pyx_n_s_mergediscnodes); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __pyx_t_19 = __Pyx_GetModuleGlobalName(__pyx_n_s_unbinarize); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
/* … */
    __pyx_t_21 = PyTuple_New(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_20);
    __pyx_t_20 = 0;
/* … */
    __pyx_t_23 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_21, __pyx_t_20); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_23);
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __pyx_t_20 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) {
      __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_18);
      if (likely(__pyx_t_20)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
        __Pyx_INCREF(__pyx_t_20);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_18, function);
      }
    }
    if (!__pyx_t_20) {
      __pyx_t_17 = __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_23); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 299, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_GOTREF(__pyx_t_17);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_18)) {
        PyObject *__pyx_temp[2] = {__pyx_t_20, __pyx_t_23};
        __pyx_t_17 = __Pyx_PyFunction_FastCall(__pyx_t_18, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 299, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_18)) {
        PyObject *__pyx_temp[2] = {__pyx_t_20, __pyx_t_23};
        __pyx_t_17 = __Pyx_PyCFunction_FastCall(__pyx_t_18, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 299, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      } else
      #endif
      {
        __pyx_t_21 = PyTuple_New(1+1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 299, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_20); __pyx_t_20 = NULL;
        __Pyx_GIVEREF(__pyx_t_23);
        PyTuple_SET_ITEM(__pyx_t_21, 0+1, __pyx_t_23);
        __pyx_t_23 = 0;
        __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_t_21, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 299, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0300: 							Tree(treestr),
    __pyx_t_21 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    __pyx_t_22 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_21))) {
      __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_21);
      if (likely(__pyx_t_22)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
        __Pyx_INCREF(__pyx_t_22);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_21, function);
      }
    }
    if (!__pyx_t_22) {
      __pyx_t_20 = __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_v_treestr); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_21)) {
        PyObject *__pyx_temp[2] = {__pyx_t_22, __pyx_v_treestr};
        __pyx_t_20 = __Pyx_PyFunction_FastCall(__pyx_t_21, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 300, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_GOTREF(__pyx_t_20);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_21)) {
        PyObject *__pyx_temp[2] = {__pyx_t_22, __pyx_v_treestr};
        __pyx_t_20 = __Pyx_PyCFunction_FastCall(__pyx_t_21, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 300, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_GOTREF(__pyx_t_20);
      } else
      #endif
      {
        __pyx_t_23 = PyTuple_New(1+1); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 300, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_GIVEREF(__pyx_t_22); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_22); __pyx_t_22 = NULL;
        __Pyx_INCREF(__pyx_v_treestr);
        __Pyx_GIVEREF(__pyx_v_treestr);
        PyTuple_SET_ITEM(__pyx_t_23, 0+1, __pyx_v_treestr);
        __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_21, __pyx_t_23, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 300, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+0301: 							childchar=':', expandunary=False)),
    __pyx_t_20 = PyDict_New(); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_childchar, __pyx_kp_u__5) < 0) __PYX_ERR(0, 301, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_expandunary, Py_False) < 0) __PYX_ERR(0, 301, __pyx_L1_error)
+0302: 						expandunary=False),
    __pyx_t_17 = PyDict_New(); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    if (PyDict_SetItem(__pyx_t_17, __pyx_n_s_expandunary, Py_False) < 0) __PYX_ERR(0, 302, __pyx_L1_error)
+0303: 					joinchar='+',
    __pyx_t_21 = PyDict_New(); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    if (PyDict_SetItem(__pyx_t_21, __pyx_n_s_joinchar, __pyx_kp_u__6) < 0) __PYX_ERR(0, 303, __pyx_L1_error)
+0304: 					collapsepos=True,
    if (PyDict_SetItem(__pyx_t_21, __pyx_n_s_collapsepos, Py_True) < 0) __PYX_ERR(0, 303, __pyx_L1_error)
+0305: 					collapseroot=True)))
    if (PyDict_SetItem(__pyx_t_21, __pyx_n_s_collapseroot, Py_True) < 0) __PYX_ERR(0, 303, __pyx_L1_error)
+0306: 		sentprob += exp(-prob)
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_sentprob); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_10 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_17);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_17, function);
      }
    }
    if (!__pyx_t_8) {
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_17)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      {
        __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 306, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_8); __pyx_t_8 = NULL;
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_t_10);
        __pyx_t_10 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_17 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_17); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_v_sentprob = __pyx_t_12;
+0307: 		for t in tree.subtrees():
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    if (__pyx_t_2) {
      __pyx_t_17 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __pyx_t_17 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (likely(PyList_CheckExact(__pyx_t_17)) || PyTuple_CheckExact(__pyx_t_17)) {
      __pyx_t_5 = __pyx_t_17; __Pyx_INCREF(__pyx_t_5); __pyx_t_3 = 0;
      __pyx_t_24 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 307, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_24 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 307, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    for (;;) {
      if (likely(!__pyx_t_24)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_17 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_17); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 307, __pyx_L1_error)
          #else
          __pyx_t_17 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_17 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_17); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 307, __pyx_L1_error)
          #else
          __pyx_t_17 = PySequence_ITEM(__pyx_t_5, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 307, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          #endif
        }
      } else {
        __pyx_t_17 = __pyx_t_24(__pyx_t_5);
        if (unlikely(!__pyx_t_17)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 307, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_17);
      }
      __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_17);
      __pyx_t_17 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0308: 			span = t.bitset
      __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_bitset); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 308, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_XDECREF_SET(__pyx_v_span, __pyx_t_17);
      __pyx_t_17 = 0;
+0309: 			start = pyintnextset(span, 0)
      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_pyintnextset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_18 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_18)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_18);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_18, __pyx_v_span, __pyx_int_0};
        __pyx_t_17 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 309, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_GOTREF(__pyx_t_17);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_18, __pyx_v_span, __pyx_int_0};
        __pyx_t_17 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 309, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_GOTREF(__pyx_t_17);
      } else
      #endif
      {
        __pyx_t_10 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 309, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (__pyx_t_18) {
          __Pyx_GIVEREF(__pyx_t_18); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_18); __pyx_t_18 = NULL;
        }
        __Pyx_INCREF(__pyx_v_span);
        __Pyx_GIVEREF(__pyx_v_span);
        PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_15, __pyx_v_span);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_15, __pyx_int_0);
        __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 309, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_25 = __Pyx_PyInt_As_short(__pyx_t_17); if (unlikely((__pyx_t_25 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 309, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __pyx_v_start = __pyx_t_25;
+0310: 			spanlen = pyintbitcount(span)
      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_pyintbitcount); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 310, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (!__pyx_t_10) {
        __pyx_t_17 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_span); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 310, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_span};
          __pyx_t_17 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 310, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_17);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_span};
          __pyx_t_17 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 310, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_17);
        } else
        #endif
        {
          __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 310, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_10); __pyx_t_10 = NULL;
          __Pyx_INCREF(__pyx_v_span);
          __Pyx_GIVEREF(__pyx_v_span);
          PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_v_span);
          __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_18, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 310, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_25 = __Pyx_PyInt_As_short(__pyx_t_17); if (unlikely((__pyx_t_25 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 310, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __pyx_v_spanlen = __pyx_t_25;
+0311: 			tablecell = table[start][spanlen][span]
      __pyx_t_17 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_table, __pyx_v_start), __pyx_v_spanlen, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_2 = PyObject_GetItem(__pyx_t_17, __pyx_v_span); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF_SET(__pyx_v_tablecell, __pyx_t_2);
      __pyx_t_2 = 0;
+0312: 			tablecell.setdefault(t.label, 0.0)
      __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_tablecell, __pyx_n_s_setdefault); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 312, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_label); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 312, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_10 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_17);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_17, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_17)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_18, __pyx_float_0_0};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_18, __pyx_float_0_0};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 312, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_10) {
          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_18);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_15, __pyx_t_18);
        __Pyx_INCREF(__pyx_float_0_0);
        __Pyx_GIVEREF(__pyx_float_0_0);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_15, __pyx_float_0_0);
        __pyx_t_18 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0313: 			if '|<' not in t.label and (labels is None or t.label in labels):
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_13 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__7, __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_26 = (__pyx_t_13 != 0);
      if (__pyx_t_26) {
      } else {
        __pyx_t_14 = __pyx_t_26;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_26 = (__pyx_v_labels == ((PyObject*)Py_None));
      __pyx_t_13 = (__pyx_t_26 != 0);
      if (!__pyx_t_13) {
      } else {
        __pyx_t_14 = __pyx_t_13;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_13 = (__Pyx_PySequence_ContainsTF(__pyx_t_2, __pyx_v_labels, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_26 = (__pyx_t_13 != 0);
      __pyx_t_14 = __pyx_t_26;
      __pyx_L15_bool_binop_done:;
      if (__pyx_t_14) {
/* … */
      }
+0314: 				tablecell[t.label] += exp(-prob)
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_17 = PyObject_GetItem(__pyx_v_tablecell, __pyx_t_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_18 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_10 = PyFloat_FromDouble((-__pyx_v_prob)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_21 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) {
          __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_18);
          if (likely(__pyx_t_21)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
            __Pyx_INCREF(__pyx_t_21);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_18, function);
          }
        }
        if (!__pyx_t_21) {
          __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_8);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_18)) {
            PyObject *__pyx_temp[2] = {__pyx_t_21, __pyx_t_10};
            __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_18, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_18)) {
            PyObject *__pyx_temp[2] = {__pyx_t_21, __pyx_t_10};
            __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_18, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          } else
          #endif
          {
            __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 314, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_21); __pyx_t_21 = NULL;
            __Pyx_GIVEREF(__pyx_t_10);
            PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = PyNumber_InPlaceAdd(__pyx_t_17, __pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(PyObject_SetItem(__pyx_v_tablecell, __pyx_t_2, __pyx_t_18) < 0)) __PYX_ERR(0, 314, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0315: 
+0316: 	cells = defaultdict(dict)  # cells[span] = (label, score, leftspan)
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  if (!__pyx_t_2) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PyDict_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_2, ((PyObject *)(&PyDict_Type))};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_2, ((PyObject *)(&PyDict_Type))};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 316, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_2); __pyx_t_2 = NULL;
      __Pyx_INCREF(((PyObject *)(&PyDict_Type)));
      __Pyx_GIVEREF(((PyObject *)(&PyDict_Type)));
      PyTuple_SET_ITEM(__pyx_t_18, 0+1, ((PyObject *)(&PyDict_Type)));
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_cells = __pyx_t_1;
  __pyx_t_1 = 0;
 0317: 	# select best derivation
+0318: 	for spanlen in range(1, len(chart.sent) + 1):
  __pyx_t_1 = __pyx_v_chart->sent;
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 318, __pyx_L1_error)
  }
  __pyx_t_4 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_4 + 1);
  for (__pyx_t_25 = 1; __pyx_t_25 < __pyx_t_3; __pyx_t_25+=1) {
    __pyx_v_spanlen = __pyx_t_25;
+0319: 		for start in range(len(chart.sent) - spanlen + 1):
    __pyx_t_1 = __pyx_v_chart->sent;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 319, __pyx_L1_error)
    }
    __pyx_t_4 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 319, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = ((__pyx_t_4 - __pyx_v_spanlen) + 1);
    for (__pyx_t_27 = 0; __pyx_t_27 < __pyx_t_7; __pyx_t_27+=1) {
      __pyx_v_start = __pyx_t_27;
+0320: 			for span, tablecell in table[start][spanlen].items():
      __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_table, __pyx_v_start), __pyx_v_spanlen, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__pyx_t_5 == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "items");
        __PYX_ERR(0, 320, __pyx_L1_error)
      }
      __pyx_t_18 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_items, (&__pyx_t_6), (&__pyx_t_15)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_18;
      __pyx_t_18 = 0;
      while (1) {
        __pyx_t_28 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_4, &__pyx_t_18, &__pyx_t_5, NULL, __pyx_t_15);
        if (unlikely(__pyx_t_28 == 0)) break;
        if (unlikely(__pyx_t_28 == -1)) __PYX_ERR(0, 320, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_XDECREF_SET(__pyx_v_span, __pyx_t_18);
        __pyx_t_18 = 0;
        __Pyx_XDECREF_SET(__pyx_v_tablecell, __pyx_t_5);
        __pyx_t_5 = 0;
+0321: 				maxlabel, maxscore = NONCONSTLABEL, 0.0
        __pyx_t_5 = __pyx_v_8discodop_14disambiguation_NONCONSTLABEL;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_12 = 0.0;
        __Pyx_XDECREF_SET(__pyx_v_maxlabel, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_v_maxscore = __pyx_t_12;
+0322: 				if tablecell:
        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_tablecell); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 322, __pyx_L1_error)
        if (__pyx_t_14) {
/* … */
        }
+0323: 					maxlabel, maxscore = max(tablecell.items(),
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_v_tablecell, __pyx_n_s_items); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 323, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_18))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_18);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_18, function);
            }
          }
          if (__pyx_t_2) {
            __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 323, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          } else {
            __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 323, __pyx_L1_error)
          }
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 323, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_5);
          __pyx_t_5 = 0;
/* … */
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_18, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 323, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
            PyObject* sequence = __pyx_t_8;
            #if !CYTHON_COMPILING_IN_PYPY
            Py_ssize_t size = Py_SIZE(sequence);
            #else
            Py_ssize_t size = PySequence_Size(sequence);
            #endif
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 323, __pyx_L1_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_18 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_18 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_18);
            #else
            __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 323, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_18 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 323, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
            #endif
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_2 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 323, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext;
            index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_2); if (unlikely(!__pyx_t_5)) goto __pyx_L25_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_5);
            index = 1; __pyx_t_18 = __pyx_t_11(__pyx_t_2); if (unlikely(!__pyx_t_18)) goto __pyx_L25_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_18);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_2), 2) < 0) __PYX_ERR(0, 323, __pyx_L1_error)
            __pyx_t_11 = NULL;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            goto __pyx_L26_unpacking_done;
            __pyx_L25_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_11 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 323, __pyx_L1_error)
            __pyx_L26_unpacking_done:;
          }
          __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_18); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF_SET(__pyx_v_maxlabel, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_v_maxscore = __pyx_t_12;
+0324: 							key=itemgetter(1))
          __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_itemgetter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_key, __pyx_t_8) < 0) __PYX_ERR(0, 324, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);
+0325: 				maxcombscore = 0.0
        __pyx_v_maxcombscore = 0.0;
+0326: 				maxleft = None
        __Pyx_INCREF(Py_None);
        __Pyx_XDECREF_SET(__pyx_v_maxleft, Py_None);
+0327: 				for spans in table[start][1:spanlen]:
        __pyx_t_8 = __Pyx_PyObject_GetSlice(PyList_GET_ITEM(__pyx_v_table, __pyx_v_start), 1, __pyx_v_spanlen, NULL, NULL, NULL, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
          __pyx_t_18 = __pyx_t_8; __Pyx_INCREF(__pyx_t_18); __pyx_t_29 = 0;
          __pyx_t_24 = NULL;
        } else {
          __pyx_t_29 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 327, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_24 = Py_TYPE(__pyx_t_18)->tp_iternext; if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 327, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        for (;;) {
          if (likely(!__pyx_t_24)) {
            if (likely(PyList_CheckExact(__pyx_t_18))) {
              if (__pyx_t_29 >= PyList_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_8 = PyList_GET_ITEM(__pyx_t_18, __pyx_t_29); __Pyx_INCREF(__pyx_t_8); __pyx_t_29++; if (unlikely(0 < 0)) __PYX_ERR(0, 327, __pyx_L1_error)
              #else
              __pyx_t_8 = PySequence_ITEM(__pyx_t_18, __pyx_t_29); __pyx_t_29++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_8);
              #endif
            } else {
              if (__pyx_t_29 >= PyTuple_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_29); __Pyx_INCREF(__pyx_t_8); __pyx_t_29++; if (unlikely(0 < 0)) __PYX_ERR(0, 327, __pyx_L1_error)
              #else
              __pyx_t_8 = PySequence_ITEM(__pyx_t_18, __pyx_t_29); __pyx_t_29++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 327, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_8);
              #endif
            }
          } else {
            __pyx_t_8 = __pyx_t_24(__pyx_t_18);
            if (unlikely(!__pyx_t_8)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 327, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_XDECREF_SET(__pyx_v_spans, __pyx_t_8);
          __pyx_t_8 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0328: 					for leftspan in spans:
          if (likely(PyList_CheckExact(__pyx_v_spans)) || PyTuple_CheckExact(__pyx_v_spans)) {
            __pyx_t_8 = __pyx_v_spans; __Pyx_INCREF(__pyx_t_8); __pyx_t_30 = 0;
            __pyx_t_31 = NULL;
          } else {
            __pyx_t_30 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_spans); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 328, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_31 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 328, __pyx_L1_error)
          }
          for (;;) {
            if (likely(!__pyx_t_31)) {
              if (likely(PyList_CheckExact(__pyx_t_8))) {
                if (__pyx_t_30 >= PyList_GET_SIZE(__pyx_t_8)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_30); __Pyx_INCREF(__pyx_t_5); __pyx_t_30++; if (unlikely(0 < 0)) __PYX_ERR(0, 328, __pyx_L1_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_30); __pyx_t_30++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 328, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              } else {
                if (__pyx_t_30 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_30); __Pyx_INCREF(__pyx_t_5); __pyx_t_30++; if (unlikely(0 < 0)) __PYX_ERR(0, 328, __pyx_L1_error)
                #else
                __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_30); __pyx_t_30++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 328, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_5);
                #endif
              }
            } else {
              __pyx_t_5 = __pyx_t_31(__pyx_t_8);
              if (unlikely(!__pyx_t_5)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 328, __pyx_L1_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_5);
            }
            __Pyx_XDECREF_SET(__pyx_v_leftspan, __pyx_t_5);
            __pyx_t_5 = 0;
/* … */
            __pyx_L29_continue:;
          }
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0329: 						if (span & leftspan != leftspan
            __pyx_t_5 = PyNumber_And(__pyx_v_span, __pyx_v_leftspan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 329, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
/* … */
            __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 329, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (!__pyx_t_26) {
            } else {
              __pyx_t_14 = __pyx_t_26;
              goto __pyx_L32_bool_binop_done;
            }
/* … */
            if (__pyx_t_14) {
/* … */
            }
+0330: 								or cells[leftspan][0] == NONCONSTLABEL):
            __pyx_t_2 = PyObject_RichCompare(__pyx_t_5, __pyx_v_leftspan, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
            __pyx_t_2 = PyObject_GetItem(__pyx_v_cells, __pyx_v_leftspan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 330, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 330, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_26 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_v_8discodop_14disambiguation_NONCONSTLABEL, Py_EQ)); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 330, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_14 = __pyx_t_26;
            __pyx_L32_bool_binop_done:;
+0331: 							continue
              goto __pyx_L29_continue;
+0332: 						rightspan = span & ~leftspan
            __pyx_t_5 = PyNumber_Invert(__pyx_v_leftspan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 332, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_2 = PyNumber_And(__pyx_v_span, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_XDECREF_SET(__pyx_v_rightspan, __pyx_t_2);
            __pyx_t_2 = 0;
+0333: 						if (rightspan in cells
            __pyx_t_13 = (__pyx_t_26 != 0);
            if (__pyx_t_13) {
            } else {
              __pyx_t_14 = __pyx_t_13;
              goto __pyx_L35_bool_binop_done;
            }
/* … */
            if (__pyx_t_14) {
/* … */
            }
+0334: 								and cells[rightspan][0] != NONCONSTLABEL):
            __pyx_t_26 = (__Pyx_PySequence_ContainsTF(__pyx_v_rightspan, __pyx_v_cells, Py_EQ)); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 333, __pyx_L1_error)
/* … */
            __pyx_t_2 = PyObject_GetItem(__pyx_v_cells, __pyx_v_rightspan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 334, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 334, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_13 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_v_8discodop_14disambiguation_NONCONSTLABEL, Py_NE)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 334, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_14 = __pyx_t_13;
            __pyx_L35_bool_binop_done:;
+0335: 							score = cells[leftspan][1] + cells[rightspan][1]
              __pyx_t_5 = PyObject_GetItem(__pyx_v_cells, __pyx_v_leftspan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyObject_GetItem(__pyx_v_cells, __pyx_v_rightspan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_5 = PyNumber_Add(__pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 335, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_v_score = __pyx_t_12;
+0336: 							if score > maxcombscore:
              __pyx_t_14 = ((__pyx_v_score > __pyx_v_maxcombscore) != 0);
              if (__pyx_t_14) {
/* … */
              }
+0337: 								maxcombscore = score
                __pyx_v_maxcombscore = __pyx_v_score;
+0338: 								maxleft = leftspan
                __Pyx_INCREF(__pyx_v_leftspan);
                __Pyx_DECREF_SET(__pyx_v_maxleft, __pyx_v_leftspan);
+0339: 				score = maxscore / sentprob
        __pyx_v_score = (__pyx_v_maxscore / __pyx_v_sentprob);
+0340: 				contribution = score - labda * (1 - score)
        __pyx_v_contribution = (__pyx_v_score - (__pyx_v_labda * (1.0 - __pyx_v_score)));
+0341: 				if contribution < 0:
        __pyx_t_14 = ((__pyx_v_contribution < 0.0) != 0);
        if (__pyx_t_14) {
/* … */
          goto __pyx_L38;
        }
+0342: 					cells[span] = (NEGATIVECONSTLABEL
          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
          __Pyx_INCREF(__pyx_v_maxleft);
          __Pyx_GIVEREF(__pyx_v_maxleft);
          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_maxleft);
          __pyx_t_18 = 0;
          __pyx_t_5 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_cells, __pyx_v_span, __pyx_t_8) < 0)) __PYX_ERR(0, 342, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0343: 							if 1 < pyintbitcount(span) < len(chart.sent)
          __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_pyintbitcount); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_17 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_17)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          if (!__pyx_t_17) {
            __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_span); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[2] = {__pyx_t_17, __pyx_v_span};
              __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_GOTREF(__pyx_t_8);
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
              PyObject *__pyx_temp[2] = {__pyx_t_17, __pyx_v_span};
              __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_GOTREF(__pyx_t_8);
            } else
            #endif
            {
              __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 343, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_17); __pyx_t_17 = NULL;
              __Pyx_INCREF(__pyx_v_span);
              __Pyx_GIVEREF(__pyx_v_span);
              PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_v_span);
              __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyObject_RichCompare(__pyx_int_1, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L1_error)
          if (__Pyx_PyObject_IsTrue(__pyx_t_5)) {
            __Pyx_DECREF(__pyx_t_5);
            __pyx_t_2 = __pyx_v_chart->sent;
            __Pyx_INCREF(__pyx_t_2);
            if (unlikely(__pyx_t_2 == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
              __PYX_ERR(0, 343, __pyx_L1_error)
            }
            __pyx_t_29 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_29 == -1)) __PYX_ERR(0, 343, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_29); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 343, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_5 = PyObject_RichCompare(__pyx_t_8, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 343, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (__pyx_t_14) {
            __Pyx_INCREF(__pyx_v_8discodop_14disambiguation_NEGATIVECONSTLABEL);
            __pyx_t_18 = __pyx_v_8discodop_14disambiguation_NEGATIVECONSTLABEL;
          } else {
+0344: 							else maxlabel,
            __Pyx_INCREF(__pyx_v_maxlabel);
            __pyx_t_18 = __pyx_v_maxlabel;
          }
+0345: 							maxcombscore, maxleft)
          __pyx_t_5 = PyFloat_FromDouble(__pyx_v_maxcombscore); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 345, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
 0346: 				else:
+0347: 					maxcombscore += contribution
        /*else*/ {
          __pyx_v_maxcombscore = (__pyx_v_maxcombscore + __pyx_v_contribution);
+0348: 					cells[span] = (maxlabel, maxcombscore, maxleft)
          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_maxcombscore); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 348, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_v_maxlabel);
          __Pyx_GIVEREF(__pyx_v_maxlabel);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_maxlabel);
          __Pyx_GIVEREF(__pyx_t_8);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
          __Pyx_INCREF(__pyx_v_maxleft);
          __Pyx_GIVEREF(__pyx_v_maxleft);
          PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_maxleft);
          __pyx_t_8 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_cells, __pyx_v_span, __pyx_t_5) < 0)) __PYX_ERR(0, 348, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __pyx_L38:;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
  }
 0349: 
 0350: 	# reconstruct tree
+0351: 	tmp = ''
  __Pyx_INCREF(__pyx_kp_u__3);
  __pyx_v_tmp = __pyx_kp_u__3;
+0352: 	try:
  {
    /*try:*/ {
/* … */
    }
/* … */
    __Pyx_PyThreadState_assign
    __Pyx_XGIVEREF(__pyx_t_32);
    __Pyx_XGIVEREF(__pyx_t_33);
    __Pyx_XGIVEREF(__pyx_t_34);
    __Pyx_ExceptionReset(__pyx_t_32, __pyx_t_33, __pyx_t_34);
    goto __pyx_L1_error;
    __pyx_L42_except_return:;
    __Pyx_PyThreadState_assign
    __Pyx_XGIVEREF(__pyx_t_32);
    __Pyx_XGIVEREF(__pyx_t_33);
    __Pyx_XGIVEREF(__pyx_t_34);
    __Pyx_ExceptionReset(__pyx_t_32, __pyx_t_33, __pyx_t_34);
    goto __pyx_L0;
  }
+0353: 		tmp = gettree(cells, tree.bitset)
      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_gettree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 353, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_bitset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 353, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_18 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_18)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_18);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_18, __pyx_v_cells, __pyx_t_8};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L39_error)
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_18, __pyx_v_cells, __pyx_t_8};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L39_error)
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      {
        __pyx_t_2 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (__pyx_t_18) {
          __Pyx_GIVEREF(__pyx_t_18); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_18); __pyx_t_18 = NULL;
        }
        __Pyx_INCREF(__pyx_v_cells);
        __Pyx_GIVEREF(__pyx_v_cells);
        PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_15, __pyx_v_cells);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_15, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_tmp, __pyx_t_1);
      __pyx_t_1 = 0;
+0354: 		result = unbinarize(Tree(tmp),
      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unbinarize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (!__pyx_t_8) {
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_tmp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_5);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_tmp};
          __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L39_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_5);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_tmp};
          __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L39_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_5);
        } else
        #endif
        {
          __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 354, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_8); __pyx_t_8 = NULL;
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_v_tmp);
          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
      __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 354, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_result = __pyx_t_18;
      __pyx_t_18 = 0;
+0355: 				childchar='NONE', unarychar='+', expandunary=True)
      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_childchar, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 355, __pyx_L39_error)
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_unarychar, __pyx_kp_u__6) < 0) __PYX_ERR(0, 355, __pyx_L39_error)
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_expandunary, Py_True) < 0) __PYX_ERR(0, 355, __pyx_L39_error)
+0356: 	except (ValueError, AttributeError):
    __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
    if (__pyx_t_15) {
      __Pyx_AddTraceback("discodop.disambiguation.maxconstituentsparse", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_18) < 0) __PYX_ERR(0, 356, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_18);
+0357: 		return [], 'MCP failed. %s' % tmp
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_MCP_failed_s, __pyx_v_tmp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 357, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 357, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_8);
      __pyx_t_2 = 0;
      __pyx_t_8 = 0;
      __pyx_r = __pyx_t_17;
      __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      goto __pyx_L42_except_return;
    }
    goto __pyx_L41_except_error;
    __pyx_L41_except_error:;
 0358: 	else:
+0359: 		return [(str(result), maxscore,
    /*else:*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_INCREF(__pyx_v_result);
      __Pyx_GIVEREF(__pyx_v_result);
      PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_v_result);
      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __pyx_t_18 = PyFloat_FromDouble(__pyx_v_maxscore); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_18);
/* … */
      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_18);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_18);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
      __pyx_t_5 = 0;
      __pyx_t_18 = 0;
/* … */
      __pyx_t_18 = PyList_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_18, 0, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_18);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
      __pyx_t_18 = 0;
      __pyx_t_5 = 0;
      __pyx_r = __pyx_t_1;
      __pyx_t_1 = 0;
      goto __pyx_L42_except_return;
    }
    __pyx_L39_error:;
    __Pyx_PyThreadState_assign
    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
+0360: 				None)], '%d derivations; sentprob: %g' % (
      __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_d_derivations_sentprob_g, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 360, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0361: 				len(chart.derivations), sentprob)
      __pyx_t_2 = __pyx_v_chart->derivations;
      __Pyx_INCREF(__pyx_t_2);
      if (unlikely(__pyx_t_2 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(0, 361, __pyx_L41_except_error)
      }
      __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 361, __pyx_L41_except_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_sentprob); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 361, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 361, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
      __pyx_t_2 = 0;
      __pyx_t_5 = 0;
 0362: 
 0363: 
+0364: def gettree(cells, span):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_5gettree(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_4gettree[] = "gettree(cells, span)\nExtract parse tree from most constituents correct table.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_5gettree = {"gettree", (PyCFunction)__pyx_pw_8discodop_14disambiguation_5gettree, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_4gettree};
static PyObject *__pyx_pw_8discodop_14disambiguation_5gettree(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_cells = 0;
  PyObject *__pyx_v_span = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gettree (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cells,&__pyx_n_s_span,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cells)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_span)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("gettree", 1, 2, 2, 1); __PYX_ERR(0, 364, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gettree") < 0)) __PYX_ERR(0, 364, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_cells = values[0];
    __pyx_v_span = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("gettree", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 364, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.disambiguation.gettree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8discodop_14disambiguation_4gettree(__pyx_self, __pyx_v_cells, __pyx_v_span);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_4gettree(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cells, PyObject *__pyx_v_span) {
  PyObject *__pyx_v_label = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_unused_score = NULL;
  PyObject *__pyx_v_leftspan = NULL;
  PyObject *__pyx_v_rightspan = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gettree", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("discodop.disambiguation.gettree", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_label);
  __Pyx_XDECREF(__pyx_v_unused_score);
  __Pyx_XDECREF(__pyx_v_leftspan);
  __Pyx_XDECREF(__pyx_v_rightspan);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__49 = PyTuple_Pack(6, __pyx_n_s_cells, __pyx_n_s_span, __pyx_n_s_label, __pyx_n_s_unused_score, __pyx_n_s_leftspan, __pyx_n_s_rightspan); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__49);
  __Pyx_GIVEREF(__pyx_tuple__49);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_5gettree, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gettree, __pyx_t_5) < 0) __PYX_ERR(0, 364, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_gettree, 364, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 364, __pyx_L1_error)
 0365: 	"""Extract parse tree from most constituents correct table."""
+0366: 	if span not in cells:
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_span, __pyx_v_cells, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 366, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0367: 		raise ValueError('MCP: span not in cell: %r' % bin(span))
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_span);
    __Pyx_GIVEREF(__pyx_v_span);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_span);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_bin, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_MCP_span_not_in_cell_r, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 367, __pyx_L1_error)
+0368: 	label, unused_score, leftspan = cells[span]
  __pyx_t_3 = PyObject_GetItem(__pyx_v_cells, __pyx_v_span); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 368, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
    index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 368, __pyx_L1_error)
    __pyx_t_8 = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L5_unpacking_done;
    __pyx_L4_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 368, __pyx_L1_error)
    __pyx_L5_unpacking_done:;
  }
  __pyx_v_label = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_unused_score = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_leftspan = __pyx_t_6;
  __pyx_t_6 = 0;
+0369: 	if leftspan not in cells:
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_leftspan, __pyx_v_cells, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 369, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
  }
+0370: 		return '(%s %d)' % (label, pyintnextset(span, 0))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_pyintnextset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_span, __pyx_int_0};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_span, __pyx_int_0};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_span);
      __Pyx_GIVEREF(__pyx_v_span);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_9, __pyx_v_span);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_9, __pyx_int_0);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_label);
    __Pyx_GIVEREF(__pyx_v_label);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_label);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s_d, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0371: 	rightspan = span & ~leftspan
  __pyx_t_3 = PyNumber_Invert(__pyx_v_leftspan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyNumber_And(__pyx_v_span, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_rightspan = __pyx_t_6;
  __pyx_t_6 = 0;
+0372: 	if label == NONCONSTLABEL or label == NEGATIVECONSTLABEL:
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_label, __pyx_v_8discodop_14disambiguation_NONCONSTLABEL, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 372, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_label, __pyx_v_8discodop_14disambiguation_NEGATIVECONSTLABEL, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 372, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0373: 		return '%s %s' % (gettree(cells, leftspan), gettree(cells, rightspan))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gettree); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_cells, __pyx_v_leftspan};
      __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_6);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_cells, __pyx_v_leftspan};
      __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_6);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_cells);
      __Pyx_GIVEREF(__pyx_v_cells);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_v_cells);
      __Pyx_INCREF(__pyx_v_leftspan);
      __Pyx_GIVEREF(__pyx_v_leftspan);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_v_leftspan);
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_gettree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_cells, __pyx_v_rightspan};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_cells, __pyx_v_rightspan};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_cells);
      __Pyx_GIVEREF(__pyx_v_cells);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_9, __pyx_v_cells);
      __Pyx_INCREF(__pyx_v_rightspan);
      __Pyx_GIVEREF(__pyx_v_rightspan);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_9, __pyx_v_rightspan);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s_s, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+0374: 	return '(%s %s %s)' % (label,
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_label);
  __Pyx_GIVEREF(__pyx_v_label);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_label);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5);
  __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_s_s_s, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
+0375: 			gettree(cells, leftspan), gettree(cells, rightspan))
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_gettree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cells, __pyx_v_leftspan};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cells, __pyx_v_leftspan};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_cells);
    __Pyx_GIVEREF(__pyx_v_cells);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_9, __pyx_v_cells);
    __Pyx_INCREF(__pyx_v_leftspan);
    __Pyx_GIVEREF(__pyx_v_leftspan);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_9, __pyx_v_leftspan);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_gettree); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cells, __pyx_v_rightspan};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_cells, __pyx_v_rightspan};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_cells);
    __Pyx_GIVEREF(__pyx_v_cells);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_9, __pyx_v_cells);
    __Pyx_INCREF(__pyx_v_rightspan);
    __Pyx_GIVEREF(__pyx_v_rightspan);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_9, __pyx_v_rightspan);
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0376: 
 0377: 
+0378: cdef sldop(Chart chart, list sent, list tags, int m, int sldop_n,
static PyObject *__pyx_f_8discodop_14disambiguation_sldop(struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, int __pyx_v_m, int __pyx_v_sldop_n, PyObject *__pyx_v_backtransform) {
  PyObject *__pyx_v_derivations = 0;
  PyObject *__pyx_v_derivs = 0;
  std::pair<RankedEdge,Prob>  __pyx_v_entry;
  struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart2 = 0;
  int __pyx_v_n;
  PyObject *__pyx_v_derivsfortree = NULL;
  PyObject *__pyx_v_deriv = NULL;
  PyObject *__pyx_v_parsetreeprob = NULL;
  PyObject *__pyx_v_nmostlikelytrees = NULL;
  PyObject *__pyx_v_model = NULL;
  PyObject *__pyx_v_shortestderivations = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_treestr = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sldop", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("discodop.disambiguation.sldop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_derivations);
  __Pyx_XDECREF(__pyx_v_derivs);
  __Pyx_XDECREF((PyObject *)__pyx_v_chart2);
  __Pyx_XDECREF(__pyx_v_derivsfortree);
  __Pyx_XDECREF(__pyx_v_deriv);
  __Pyx_XDECREF(__pyx_v_parsetreeprob);
  __Pyx_XDECREF(__pyx_v_nmostlikelytrees);
  __Pyx_XDECREF(__pyx_v_model);
  __Pyx_XDECREF(__pyx_v_shortestderivations);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_treestr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0379: 		list backtransform):
 0380: 	"""'Proper' method for sl-dop.
 0381: 
 0382: 	Parses sentence once more to find shortest derivations, pruning away any
 0383: 	chart item not occurring in the *n* most probable parse trees; we need to
 0384: 	parse again because we have to consider all derivations for the *n* most
 0385: 	likely trees.
 0386: 
 0387: 	:returns: the intersection of the most probable parse trees and their
 0388: 		shortest derivations, with probabilities of the form (subtrees, prob).
 0389: 
 0390: 	NB: doesn't seem to work so well, so may contain a subtle bug.
 0391: 		Does not support PCFG charts."""
+0392: 	cdef dict derivations = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0393: 	cdef dict derivs = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0394: 	cdef pair[RankedEdge, Prob] entry
 0395: 	cdef Chart chart2
 0396: 	cdef int n
 0397: 	# collect derivations for each parse tree
+0398: 	derivsfortree = defaultdict(set)
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (!__pyx_t_3) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PySet_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)(&PySet_Type))};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)(&PySet_Type))};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      __Pyx_INCREF(((PyObject *)(&PySet_Type)));
      __Pyx_GIVEREF(((PyObject *)(&PySet_Type)));
      PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)(&PySet_Type)));
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_derivsfortree = __pyx_t_1;
  __pyx_t_1 = 0;
+0399: 	if backtransform is None:
  __pyx_t_5 = (__pyx_v_backtransform == ((PyObject*)Py_None));
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+0400: 		derivations = dict(chart.derivations)
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_chart->derivations);
    __Pyx_GIVEREF(__pyx_v_chart->derivations);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chart->derivations);
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_derivations, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+0401: 		for deriv in derivations:
    __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_derivations, 1, ((PyObject *)NULL), (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_7, &__pyx_t_1, NULL, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_1);
      __pyx_t_1 = 0;
+0402: 			derivsfortree[REMOVEIDS.sub('', deriv)].add(deriv)
      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sub); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_12 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_10, __pyx_kp_u__3);
        __Pyx_INCREF(__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_10, __pyx_v_deriv);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyObject_GetItem(__pyx_v_derivsfortree, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_add); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (!__pyx_t_11) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 402, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_v_deriv);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0403: 	else:
+0404: 		for entry in chart.rankededges[chart.root()]:
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    if (__pyx_t_4) {
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 404, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_15 = &(__pyx_v_chart->rankededges[__pyx_t_13]);
    __pyx_t_14 = __pyx_t_15->begin();
    for (;;) {
      if (!(__pyx_t_14 != __pyx_t_15->end())) break;
      __pyx_t_16 = *__pyx_t_14;
      ++__pyx_t_14;
      __pyx_v_entry = __pyx_t_16;
/* … */
    }
  }
  __pyx_L3:;
+0405: 			deriv = <bytes>getderiv(chart.root(), entry.first, chart).decode('utf8')
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_17 = __Pyx_PyInt_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_17 == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_decode_cpp_string(__pyx_f_8discodop_5kbest_getderiv(__pyx_t_17, __pyx_v_entry.first, __pyx_v_chart), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_1);
      __pyx_t_1 = 0;
+0406: 			derivations[deriv] = entry.second
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_entry.second); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(PyDict_SetItem(__pyx_v_derivations, __pyx_v_deriv, __pyx_t_1) < 0)) __PYX_ERR(0, 406, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0407: 			derivsfortree[recoverfragments_re(entry.first, chart,
      __pyx_t_2 = __pyx_f_8discodop_14disambiguation_recoverfragments_re(__pyx_v_entry.first, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyObject_GetItem(__pyx_v_derivsfortree, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 407, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0408: 					backtransform)].add(deriv)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_add); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (!__pyx_t_4) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 408, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4); __pyx_t_4 = NULL;
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_v_deriv);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0409: 	# sum over probs of derivations to get probs of parse trees
+0410: 	parsetreeprob = {tree: logprobsum([-derivations[d] for d in ds])
  { /* enter inner scope */
    PyObject *__pyx_8genexpr7__pyx_v_tree = NULL;
    PyObject *__pyx_8genexpr7__pyx_v_ds = NULL;
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
      { /* enter inner scope */
        PyObject *__pyx_8genexpr8__pyx_8genexpr7__pyx_v_d = NULL;
        __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 410, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (likely(PyList_CheckExact(__pyx_8genexpr7__pyx_v_ds)) || PyTuple_CheckExact(__pyx_8genexpr7__pyx_v_ds)) {
          __pyx_t_12 = __pyx_8genexpr7__pyx_v_ds; __Pyx_INCREF(__pyx_t_12); __pyx_t_18 = 0;
          __pyx_t_19 = NULL;
        } else {
          __pyx_t_18 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_8genexpr7__pyx_v_ds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 410, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_19 = Py_TYPE(__pyx_t_12)->tp_iternext; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 410, __pyx_L15_error)
        }
        for (;;) {
          if (likely(!__pyx_t_19)) {
            if (likely(PyList_CheckExact(__pyx_t_12))) {
              if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_12)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_12, __pyx_t_18); __Pyx_INCREF(__pyx_t_11); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 410, __pyx_L15_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_12, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_12)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_18); __Pyx_INCREF(__pyx_t_11); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 410, __pyx_L15_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_12, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_19(__pyx_t_12);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 410, __pyx_L15_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_XDECREF_SET(__pyx_8genexpr8__pyx_8genexpr7__pyx_v_d, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_derivations, __pyx_8genexpr8__pyx_8genexpr7__pyx_v_d); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 410, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_3 = PyNumber_Negative(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 410, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 410, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_8genexpr8__pyx_8genexpr7__pyx_v_d);
        goto __pyx_L18_exit_scope;
        __pyx_L15_error:;
        __Pyx_XDECREF(__pyx_8genexpr8__pyx_8genexpr7__pyx_v_d);
        goto __pyx_L10_error;
        __pyx_L18_exit_scope:;
      } /* exit inner scope */
      __pyx_t_20 = __pyx_convert_vector_from_py_Prob(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 410, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyFloat_FromDouble(__pyx_f_8discodop_10containers_logprobsum(__pyx_t_20)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 410, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_8genexpr7__pyx_v_tree, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 410, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_tree);
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_ds);
    goto __pyx_L19_exit_scope;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_tree);
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_ds);
    goto __pyx_L1_error;
    __pyx_L19_exit_scope:;
  } /* exit inner scope */
  __pyx_v_parsetreeprob = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0411: 			for tree, ds in derivsfortree.items()}
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_derivsfortree == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "items");
      __PYX_ERR(0, 411, __pyx_L10_error)
    }
    __pyx_t_12 = __Pyx_dict_iterator(__pyx_v_derivsfortree, 0, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 411, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_12;
    __pyx_t_12 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_8, &__pyx_t_12, &__pyx_t_4, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 411, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_8genexpr7__pyx_v_tree, __pyx_t_12);
      __pyx_t_12 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr7__pyx_v_ds, __pyx_t_4);
      __pyx_t_4 = 0;
+0412: 	nmostlikelytrees = set(nlargest(sldop_n, parsetreeprob,
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_nlargest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_sldop_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_parsetreeprob);
  __Pyx_GIVEREF(__pyx_v_parsetreeprob);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_parsetreeprob);
  __pyx_t_2 = 0;
/* … */
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PySet_New(__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_nmostlikelytrees = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0413: 			key=parsetreeprob.get))
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_parsetreeprob, __pyx_n_s_get); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_key, __pyx_t_12) < 0) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 0414: 
+0415: 	model = chart.grammar.currentmodel
  __pyx_t_2 = __pyx_v_chart->grammar->currentmodel;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_model = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0416: 	chart.grammar.switch(u'shortest', logprob=True)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart->grammar), __pyx_n_s_switch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_logprob, Py_True) < 0) __PYX_ERR(0, 416, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__9, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_n_u_shortest); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
+0417: 	shortestderivations, msg, chart2 = treeparsing(
  __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_treeparsing); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
/* … */
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 417, __pyx_L1_error)
  __pyx_v_shortestderivations = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_msg = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_chart2 = ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_t_2);
  __pyx_t_2 = 0;
+0418: 			nmostlikelytrees, sent, chart.grammar, m, backtransform, tags)
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[7] = {__pyx_t_1, __pyx_v_nmostlikelytrees, __pyx_v_sent, ((PyObject *)__pyx_v_chart->grammar), __pyx_t_2, __pyx_v_backtransform, __pyx_v_tags};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[7] = {__pyx_t_1, __pyx_v_nmostlikelytrees, __pyx_v_sent, ((PyObject *)__pyx_v_chart->grammar), __pyx_t_2, __pyx_v_backtransform, __pyx_v_tags};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_nmostlikelytrees);
    __Pyx_GIVEREF(__pyx_v_nmostlikelytrees);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_v_nmostlikelytrees);
    __Pyx_INCREF(__pyx_v_sent);
    __Pyx_GIVEREF(__pyx_v_sent);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_v_sent);
    __Pyx_INCREF(((PyObject *)__pyx_v_chart->grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_chart->grammar));
    PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_9, ((PyObject *)__pyx_v_chart->grammar));
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_9, __pyx_t_2);
    __Pyx_INCREF(__pyx_v_backtransform);
    __Pyx_GIVEREF(__pyx_v_backtransform);
    PyTuple_SET_ITEM(__pyx_t_3, 4+__pyx_t_9, __pyx_v_backtransform);
    __Pyx_INCREF(__pyx_v_tags);
    __Pyx_GIVEREF(__pyx_v_tags);
    PyTuple_SET_ITEM(__pyx_t_3, 5+__pyx_t_9, __pyx_v_tags);
    __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 417, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_21 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_12 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_12)) goto __pyx_L20_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_12);
    index = 1; __pyx_t_3 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L20_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_2 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L20_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_1), 3) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
    __pyx_t_21 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L21_unpacking_done;
    __pyx_L20_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_21 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 417, __pyx_L1_error)
    __pyx_L21_unpacking_done:;
  }
+0419: 	if not chart2:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart2)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 419, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_6) != 0);
  if (__pyx_t_5) {
/* … */
  }
+0420: 		return [], 'SL-DOP couldn\'t find parse for tree'
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 420, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 420, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
    __Pyx_INCREF(__pyx_kp_u_SL_DOP_couldn_t_find_parse_for_t);
    __Pyx_GIVEREF(__pyx_kp_u_SL_DOP_couldn_t_find_parse_for_t);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u_SL_DOP_couldn_t_find_parse_for_t);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+0421: 	result = {}
  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_result = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0422: 	for n, (deriv, s) in enumerate(shortestderivations):
  __pyx_t_9 = 0;
  if (likely(PyList_CheckExact(__pyx_v_shortestderivations)) || PyTuple_CheckExact(__pyx_v_shortestderivations)) {
    __pyx_t_2 = __pyx_v_shortestderivations; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
    __pyx_t_19 = NULL;
  } else {
    __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_shortestderivations); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_19 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 422, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_19)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 422, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 422, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 422, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 422, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_19(__pyx_t_2);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 422, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
      PyObject* sequence = __pyx_t_4;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 422, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_12 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_12);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 422, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      #endif
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_21 = Py_TYPE(__pyx_t_1)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L25_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_12 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_12)) goto __pyx_L25_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_12);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_1), 2) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
      __pyx_t_21 = NULL;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L26_unpacking_done;
      __pyx_L25_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_21 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 422, __pyx_L1_error)
      __pyx_L26_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_v_n = __pyx_t_9;
    __pyx_t_9 = (__pyx_t_9 + 1);
/* … */
  }
  __pyx_L24_break:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0423: 		entry = chart2.rankededges[chart2.root()][n]
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart2), __pyx_n_s_root); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    if (__pyx_t_3) {
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_13 = __Pyx_PyInt_As_size_t(__pyx_t_4); if (unlikely((__pyx_t_13 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 423, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_entry = ((__pyx_v_chart2->rankededges[__pyx_t_13])[__pyx_v_n]);
+0424: 		if backtransform is None:
    __pyx_t_5 = (__pyx_v_backtransform == ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L27;
    }
+0425: 			treestr = REMOVEIDS.sub('', deriv)
      __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sub); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_12) {
          __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12); __pyx_t_12 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_kp_u__3);
        __Pyx_INCREF(__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_v_deriv);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_treestr, __pyx_t_4);
      __pyx_t_4 = 0;
 0426: 		else:
+0427: 			treestr = recoverfragments_re(entry.first, chart2, backtransform)
    /*else*/ {
      __pyx_t_4 = __pyx_f_8discodop_14disambiguation_recoverfragments_re(__pyx_v_entry.first, __pyx_v_chart2, __pyx_v_backtransform); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_v_treestr, __pyx_t_4);
      __pyx_t_4 = 0;
    }
    __pyx_L27:;
+0428: 		if treestr in nmostlikelytrees and treestr not in result:
    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_treestr, __pyx_v_nmostlikelytrees, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 428, __pyx_L1_error)
    __pyx_t_22 = (__pyx_t_5 != 0);
    if (__pyx_t_22) {
    } else {
      __pyx_t_6 = __pyx_t_22;
      goto __pyx_L29_bool_binop_done;
    }
    __pyx_t_22 = (__Pyx_PyDict_ContainsTF(__pyx_v_treestr, __pyx_v_result, Py_NE)); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 428, __pyx_L1_error)
    __pyx_t_5 = (__pyx_t_22 != 0);
    __pyx_t_6 = __pyx_t_5;
    __pyx_L29_bool_binop_done:;
    if (__pyx_t_6) {
/* … */
    }
+0429: 			result[treestr] = (-abs(int(s / log(0.5))), parsetreeprob[treestr])
      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_v_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Absolute(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_parsetreeprob, __pyx_v_treestr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
      if (unlikely(PyDict_SetItem(__pyx_v_result, __pyx_v_treestr, __pyx_t_1) < 0)) __PYX_ERR(0, 429, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_float_0_5); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);
+0430: 			if backtransform is None:
      __pyx_t_6 = (__pyx_v_backtransform == ((PyObject*)Py_None));
      __pyx_t_5 = (__pyx_t_6 != 0);
      if (__pyx_t_5) {
/* … */
        goto __pyx_L31;
      }
+0431: 				derivs[treestr] = fragmentsinderiv_str(
        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragmentsinderiv_str); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
/* … */
        if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_t_1) < 0)) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0432: 						deriv, chart2, backtransform)
        __pyx_t_3 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_10 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_deriv, ((PyObject *)__pyx_v_chart2), __pyx_v_backtransform};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_deriv, ((PyObject *)__pyx_v_chart2), __pyx_v_backtransform};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 431, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__pyx_t_3) {
            __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3); __pyx_t_3 = NULL;
          }
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_10, __pyx_v_deriv);
          __Pyx_INCREF(((PyObject *)__pyx_v_chart2));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_chart2));
          PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_10, ((PyObject *)__pyx_v_chart2));
          __Pyx_INCREF(__pyx_v_backtransform);
          __Pyx_GIVEREF(__pyx_v_backtransform);
          PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_10, __pyx_v_backtransform);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0433: 			else:
+0434: 				derivs[treestr] = fragmentsinderiv_re(
      /*else*/ {
/* … */
        __pyx_t_1 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(__pyx_v_entry.first, ((PyObject *)__pyx_v_chart2), __pyx_v_backtransform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
        if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_treestr, __pyx_t_1) < 0)) __PYX_ERR(0, 434, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_L31:;
 0435: 						entry.first, chart2, backtransform)
+0436: 			if len(result) > sldop_n:
      __pyx_t_8 = PyDict_Size(__pyx_v_result); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 436, __pyx_L1_error)
      __pyx_t_5 = ((__pyx_t_8 > __pyx_v_sldop_n) != 0);
      if (__pyx_t_5) {
/* … */
      }
+0437: 				break
        goto __pyx_L24_break;
+0438: 	chart.grammar.switch(model, logprob=True)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart->grammar), __pyx_n_s_switch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_model);
  __Pyx_GIVEREF(__pyx_v_model);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_model);
  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_logprob, Py_True) < 0) __PYX_ERR(0, 438, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0439: 	if not len(result):
  __pyx_t_7 = PyDict_Size(__pyx_v_result); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 439, __pyx_L1_error)
  __pyx_t_5 = ((!(__pyx_t_7 != 0)) != 0);
  if (__pyx_t_5) {
/* … */
  }
+0440: 		return [], 'no matching derivation found'
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_12);
    __Pyx_INCREF(__pyx_kp_u_no_matching_derivation_found);
    __Pyx_GIVEREF(__pyx_kp_u_no_matching_derivation_found);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_kp_u_no_matching_derivation_found);
    __pyx_t_12 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+0441: 	msg = '(%d derivations, %d of %d parsetrees)' % (
  __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_d_derivations_d_of_d_parsetrees, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_1);
  __pyx_t_1 = 0;
+0442: 		len(derivations), min(sldop_n, len(parsetreeprob)), len(parsetreeprob))
  __pyx_t_7 = PyDict_Size(__pyx_v_derivations); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 442, __pyx_L1_error)
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyDict_Size(__pyx_v_parsetreeprob); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 442, __pyx_L1_error)
  __pyx_t_9 = __pyx_v_sldop_n;
  if (((__pyx_t_7 < __pyx_t_9) != 0)) {
    __pyx_t_8 = __pyx_t_7;
  } else {
    __pyx_t_8 = __pyx_t_9;
  }
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_8 = PyDict_Size(__pyx_v_parsetreeprob); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 442, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_12 = 0;
  __pyx_t_1 = 0;
+0443: 	return [(tree, result[tree], derivs[tree]) for tree in result], msg
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    PyObject *__pyx_8genexpr9__pyx_v_tree = NULL;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L36_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = 0;
    __pyx_t_12 = __Pyx_dict_iterator(__pyx_v_result, 1, ((PyObject *)NULL), (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 443, __pyx_L36_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_12;
    __pyx_t_12 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_8, &__pyx_t_12, NULL, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 443, __pyx_L36_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_XDECREF_SET(__pyx_8genexpr9__pyx_v_tree, __pyx_t_12);
      __pyx_t_12 = 0;
      __pyx_t_12 = __Pyx_PyDict_GetItem(__pyx_v_result, __pyx_8genexpr9__pyx_v_tree); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 443, __pyx_L36_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_8genexpr9__pyx_v_tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 443, __pyx_L36_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L36_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_8genexpr9__pyx_v_tree);
      __Pyx_GIVEREF(__pyx_8genexpr9__pyx_v_tree);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_8genexpr9__pyx_v_tree);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
      __pyx_t_12 = 0;
      __pyx_t_4 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 443, __pyx_L36_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_tree);
    goto __pyx_L39_exit_scope;
    __pyx_L36_error:;
    __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_tree);
    goto __pyx_L1_error;
    __pyx_L39_exit_scope:;
  } /* exit inner scope */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0444: 
 0445: 
+0446: cdef sldop_simple(int sldop_n, Chart chart, list backtransform):
static PyObject *__pyx_f_8discodop_14disambiguation_sldop_simple(int __pyx_v_sldop_n, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
  std::pair<RankedEdge,Prob>  __pyx_v_entry;
  PyObject *__pyx_v_derivations = 0;
  PyObject *__pyx_v_derivs = 0;
  PyObject *__pyx_v_keys = 0;
  int __pyx_v_n;
  PyObject *__pyx_v_derivsfortree = NULL;
  PyObject *__pyx_v_deriv = NULL;
  PyObject *__pyx_v_tree = NULL;
  PyObject *__pyx_v_parsetreeprob = NULL;
  PyObject *__pyx_v_selectedtrees = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_score = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sldop_simple", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("discodop.disambiguation.sldop_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_derivations);
  __Pyx_XDECREF(__pyx_v_derivs);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_derivsfortree);
  __Pyx_XDECREF(__pyx_v_deriv);
  __Pyx_XDECREF(__pyx_v_tree);
  __Pyx_XDECREF(__pyx_v_parsetreeprob);
  __Pyx_XDECREF(__pyx_v_selectedtrees);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_score);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0447: 	"""Simple sl-dop method.
 0448: 
 0449: 	Estimates shortest derivation directly from number of addressed nodes in
 0450: 	the *k*-best derivations. After selecting the *n* best parse trees, the one
 0451: 	with the shortest derivation is returned. In other words, selects shortest
 0452: 	derivation among the list of available derivations, instead of finding the
 0453: 	shortest among all possible derivations using Viterbi."""
 0454: 	cdef pair[RankedEdge, Prob] entry
+0455: 	cdef dict derivations = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0456: 	cdef dict derivs = {}, keys = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_derivs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0457: 	cdef int n
+0458: 	derivsfortree = defaultdict(set)
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (!__pyx_t_3) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PySet_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)(&PySet_Type))};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)(&PySet_Type))};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 458, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      __Pyx_INCREF(((PyObject *)(&PySet_Type)));
      __Pyx_GIVEREF(((PyObject *)(&PySet_Type)));
      PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)(&PySet_Type)));
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_derivsfortree = __pyx_t_1;
  __pyx_t_1 = 0;
 0459: 	# collect derivations for each parse tree
+0460: 	if backtransform is None:
  __pyx_t_5 = (__pyx_v_backtransform == ((PyObject*)Py_None));
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+0461: 		derivations = dict(chart.derivations)
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_chart->derivations);
    __Pyx_GIVEREF(__pyx_v_chart->derivations);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chart->derivations);
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_derivations, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+0462: 		for deriv in derivations:
    __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_derivations, 1, ((PyObject *)NULL), (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_7, &__pyx_t_1, NULL, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 462, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_1);
      __pyx_t_1 = 0;
+0463: 			tree = REMOVEIDS.sub('', deriv)
      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 463, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sub); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 463, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_u__3, __pyx_v_deriv};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_1);
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 463, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_kp_u__3);
        __Pyx_INCREF(__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_v_deriv);
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_tree, __pyx_t_1);
      __pyx_t_1 = 0;
+0464: 			derivsfortree[tree].add(deriv)
      __pyx_t_3 = PyObject_GetItem(__pyx_v_derivsfortree, __pyx_v_tree); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 464, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      if (!__pyx_t_3) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_deriv};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_deriv);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0465: 	else:
+0466: 		for n in range(<signed>chart.rankededges[chart.root()].size()):
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    if (__pyx_t_11) {
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else {
      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_12 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_12 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 466, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_13 = ((int)(__pyx_v_chart->rankededges[__pyx_t_12]).size());
    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_13; __pyx_t_9+=1) {
      __pyx_v_n = __pyx_t_9;
+0467: 			entry = chart.rankededges[chart.root()][n]
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      if (__pyx_t_11) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_12 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_12 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 467, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_entry = ((__pyx_v_chart->rankededges[__pyx_t_12])[__pyx_v_n]);
+0468: 			deriv = <bytes>getderiv(chart.root(), entry.first, chart).decode('utf8')
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 468, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      if (__pyx_t_11) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 468, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 468, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = __Pyx_PyInt_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_14 == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_decode_cpp_string(__pyx_f_8discodop_5kbest_getderiv(__pyx_t_14, __pyx_v_entry.first, __pyx_v_chart), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 468, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_1);
      __pyx_t_1 = 0;
+0469: 			deriv = str(unbinarize(Tree(deriv), childchar='}'))
      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unbinarize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      if (!__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_deriv); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 469, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_deriv);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_childchar, __pyx_kp_u__11) < 0) __PYX_ERR(0, 469, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_deriv, __pyx_t_3);
      __pyx_t_3 = 0;
+0470: 			tree = recoverfragments_re(entry.first, chart, backtransform)
      __pyx_t_3 = __pyx_f_8discodop_14disambiguation_recoverfragments_re(__pyx_v_entry.first, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 470, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_tree, __pyx_t_3);
      __pyx_t_3 = 0;
+0471: 			keys[deriv] = n
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyDict_SetItem(__pyx_v_keys, __pyx_v_deriv, __pyx_t_3) < 0)) __PYX_ERR(0, 471, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0472: 			derivations[deriv] = entry.second
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_entry.second); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyDict_SetItem(__pyx_v_derivations, __pyx_v_deriv, __pyx_t_3) < 0)) __PYX_ERR(0, 472, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0473: 			derivsfortree[tree].add(deriv)
      __pyx_t_2 = PyObject_GetItem(__pyx_v_derivsfortree, __pyx_v_tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_add); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      if (!__pyx_t_2) {
        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_deriv); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_deriv};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_deriv};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        {
          __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
          __Pyx_INCREF(__pyx_v_deriv);
          __Pyx_GIVEREF(__pyx_v_deriv);
          PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_deriv);
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
  }
  __pyx_L3:;
 0474: 
 0475: 	# sum over derivations to get parse trees
+0476: 	parsetreeprob = {tree: logprobsum([-derivations[d] for d in ds])
  { /* enter inner scope */
    PyObject *__pyx_9genexpr10__pyx_v_tree = NULL;
    PyObject *__pyx_9genexpr10__pyx_v_ds = NULL;
    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
      { /* enter inner scope */
        PyObject *__pyx_9genexpr11__pyx_9genexpr10__pyx_v_d = NULL;
        __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (likely(PyList_CheckExact(__pyx_9genexpr10__pyx_v_ds)) || PyTuple_CheckExact(__pyx_9genexpr10__pyx_v_ds)) {
          __pyx_t_1 = __pyx_9genexpr10__pyx_v_ds; __Pyx_INCREF(__pyx_t_1); __pyx_t_15 = 0;
          __pyx_t_16 = NULL;
        } else {
          __pyx_t_15 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_9genexpr10__pyx_v_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 476, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 476, __pyx_L15_error)
        }
        for (;;) {
          if (likely(!__pyx_t_16)) {
            if (likely(PyList_CheckExact(__pyx_t_1))) {
              if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_1)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 476, __pyx_L15_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 476, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            } else {
              if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 476, __pyx_L15_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 476, __pyx_L15_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            }
          } else {
            __pyx_t_4 = __pyx_t_16(__pyx_t_1);
            if (unlikely(!__pyx_t_4)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 476, __pyx_L15_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_4);
          }
          __Pyx_XDECREF_SET(__pyx_9genexpr11__pyx_9genexpr10__pyx_v_d, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_derivations, __pyx_9genexpr11__pyx_9genexpr10__pyx_v_d); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 476, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_17 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 476, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_17))) __PYX_ERR(0, 476, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_9genexpr11__pyx_9genexpr10__pyx_v_d);
        goto __pyx_L18_exit_scope;
        __pyx_L15_error:;
        __Pyx_XDECREF(__pyx_9genexpr11__pyx_9genexpr10__pyx_v_d);
        goto __pyx_L10_error;
        __pyx_L18_exit_scope:;
      } /* exit inner scope */
      __pyx_t_18 = __pyx_convert_vector_from_py_Prob(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyFloat_FromDouble(__pyx_f_8discodop_10containers_logprobsum(__pyx_t_18)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_9genexpr10__pyx_v_tree, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 476, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_tree);
    __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_ds);
    goto __pyx_L19_exit_scope;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_tree);
    __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_ds);
    goto __pyx_L1_error;
    __pyx_L19_exit_scope:;
  } /* exit inner scope */
  __pyx_v_parsetreeprob = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0477: 			for tree, ds in derivsfortree.items()}
    __pyx_t_8 = 0;
    if (unlikely(__pyx_v_derivsfortree == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "items");
      __PYX_ERR(0, 477, __pyx_L10_error)
    }
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_derivsfortree, 0, __pyx_n_s_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 477, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_11);
    __pyx_t_11 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_11, __pyx_t_7, &__pyx_t_8, &__pyx_t_1, &__pyx_t_2, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 477, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_9genexpr10__pyx_v_tree, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_9genexpr10__pyx_v_ds, __pyx_t_2);
      __pyx_t_2 = 0;
+0478: 	selectedtrees = nlargest(sldop_n, parsetreeprob, key=parsetreeprob.get)
  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_nlargest); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_sldop_n); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11);
  __Pyx_INCREF(__pyx_v_parsetreeprob);
  __Pyx_GIVEREF(__pyx_v_parsetreeprob);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_parsetreeprob);
  __pyx_t_11 = 0;
  __pyx_t_11 = PyDict_New(); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_parsetreeprob, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_key, __pyx_t_1) < 0) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_selectedtrees = __pyx_t_1;
  __pyx_t_1 = 0;
 0479: 
 0480: 	# the number of fragments used is the number of
 0481: 	# nodes (open parens), minus the number of interior
 0482: 	# (addressed) nodes.
+0483: 	result = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0484: 	for tree in selectedtrees:
  if (likely(PyList_CheckExact(__pyx_v_selectedtrees)) || PyTuple_CheckExact(__pyx_v_selectedtrees)) {
    __pyx_t_1 = __pyx_v_selectedtrees; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
    __pyx_t_16 = NULL;
  } else {
    __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_selectedtrees); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 484, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_16)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_11 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 484, __pyx_L1_error)
        #else
        __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 484, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
      } else {
        if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 484, __pyx_L1_error)
        #else
        __pyx_t_11 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 484, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
      }
    } else {
      __pyx_t_11 = __pyx_t_16(__pyx_t_1);
      if (unlikely(!__pyx_t_11)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 484, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_11);
    }
    __Pyx_XDECREF_SET(__pyx_v_tree, __pyx_t_11);
    __pyx_t_11 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0485: 		score, deriv = min([(deriv.count('(') -
    { /* enter inner scope */
      PyObject *__pyx_9genexpr12__pyx_v_deriv = NULL;
      __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 485, __pyx_L24_error)
      __Pyx_GOTREF(__pyx_t_11);
/* … */
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr12__pyx_v_deriv, __pyx_n_s_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 485, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
        __pyx_t_20 = PyNumber_Subtract(__pyx_t_17, __pyx_t_2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 485, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_20);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_20);
        __Pyx_INCREF(__pyx_9genexpr12__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_9genexpr12__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_9genexpr12__pyx_v_deriv);
        __pyx_t_20 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 485, __pyx_L24_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_3, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
      PyObject* sequence = __pyx_t_11;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 485, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_20 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_24 = Py_TYPE(__pyx_t_20)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_24(__pyx_t_20); if (unlikely(!__pyx_t_3)) goto __pyx_L37_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_2 = __pyx_t_24(__pyx_t_20); if (unlikely(!__pyx_t_2)) goto __pyx_L37_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_24(__pyx_t_20), 2) < 0) __PYX_ERR(0, 485, __pyx_L1_error)
      __pyx_t_24 = NULL;
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      goto __pyx_L38_unpacking_done;
      __pyx_L37_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      __pyx_t_24 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 485, __pyx_L1_error)
      __pyx_L38_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u__12); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);
+0486: 				len([a for a in deriv.split() if '@' in a or '}<' in a]),
        { /* enter inner scope */
          PyObject *__pyx_9genexpr13__pyx_9genexpr12__pyx_v_a = NULL;
          __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr12__pyx_v_deriv, __pyx_n_s_split); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 486, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_21 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
            __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_20);
            if (likely(__pyx_t_21)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
              __Pyx_INCREF(__pyx_t_21);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_20, function);
            }
          }
          if (__pyx_t_21) {
            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_21); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L29_error)
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          } else {
            __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_20); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L29_error)
          }
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
            __pyx_t_20 = __pyx_t_4; __Pyx_INCREF(__pyx_t_20); __pyx_t_15 = 0;
            __pyx_t_22 = NULL;
          } else {
            __pyx_t_15 = -1; __pyx_t_20 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 486, __pyx_L29_error)
            __Pyx_GOTREF(__pyx_t_20);
            __pyx_t_22 = Py_TYPE(__pyx_t_20)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 486, __pyx_L29_error)
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          for (;;) {
            if (likely(!__pyx_t_22)) {
              if (likely(PyList_CheckExact(__pyx_t_20))) {
                if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_20)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_4 = PyList_GET_ITEM(__pyx_t_20, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 486, __pyx_L29_error)
                #else
                __pyx_t_4 = PySequence_ITEM(__pyx_t_20, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L29_error)
                __Pyx_GOTREF(__pyx_t_4);
                #endif
              } else {
                if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_20)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_20, __pyx_t_15); __Pyx_INCREF(__pyx_t_4); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 486, __pyx_L29_error)
                #else
                __pyx_t_4 = PySequence_ITEM(__pyx_t_20, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 486, __pyx_L29_error)
                __Pyx_GOTREF(__pyx_t_4);
                #endif
              }
            } else {
              __pyx_t_4 = __pyx_t_22(__pyx_t_20);
              if (unlikely(!__pyx_t_4)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 486, __pyx_L29_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_4);
            }
            __Pyx_XDECREF_SET(__pyx_9genexpr13__pyx_9genexpr12__pyx_v_a, __pyx_t_4);
            __pyx_t_4 = 0;
            __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_9genexpr13__pyx_9genexpr12__pyx_v_a, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 486, __pyx_L29_error)
            __pyx_t_23 = (__pyx_t_5 != 0);
            if (!__pyx_t_23) {
            } else {
              __pyx_t_6 = __pyx_t_23;
              goto __pyx_L33_bool_binop_done;
            }
            __pyx_t_23 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__15, __pyx_9genexpr13__pyx_9genexpr12__pyx_v_a, Py_EQ)); if (unlikely(__pyx_t_23 < 0)) __PYX_ERR(0, 486, __pyx_L29_error)
            __pyx_t_5 = (__pyx_t_23 != 0);
            __pyx_t_6 = __pyx_t_5;
            __pyx_L33_bool_binop_done:;
            if (__pyx_t_6) {
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_9genexpr13__pyx_9genexpr12__pyx_v_a))) __PYX_ERR(0, 486, __pyx_L29_error)
            }
          }
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_9genexpr13__pyx_9genexpr12__pyx_v_a);
          goto __pyx_L35_exit_scope;
          __pyx_L29_error:;
          __Pyx_XDECREF(__pyx_9genexpr13__pyx_9genexpr12__pyx_v_a);
          goto __pyx_L24_error;
          __pyx_L35_exit_scope:;
        } /* exit inner scope */
        __pyx_t_15 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 486, __pyx_L24_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_2);
 0487: 				deriv)
+0488: 				for deriv in derivsfortree[tree]])
      __pyx_t_2 = PyObject_GetItem(__pyx_v_derivsfortree, __pyx_v_tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 488, __pyx_L24_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
        __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
        __pyx_t_19 = NULL;
      } else {
        __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_19 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 488, __pyx_L24_error)
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      for (;;) {
        if (likely(!__pyx_t_19)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 488, __pyx_L24_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 488, __pyx_L24_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 488, __pyx_L24_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 488, __pyx_L24_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_19(__pyx_t_3);
          if (unlikely(!__pyx_t_2)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 488, __pyx_L24_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr12__pyx_v_deriv, __pyx_t_2);
        __pyx_t_2 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_9genexpr12__pyx_v_deriv);
      goto __pyx_L36_exit_scope;
      __pyx_L24_error:;
      __Pyx_XDECREF(__pyx_9genexpr12__pyx_v_deriv);
      goto __pyx_L1_error;
      __pyx_L36_exit_scope:;
    } /* exit inner scope */
+0489: 		result[tree] = (-score, parsetreeprob[tree])
    __pyx_t_11 = PyNumber_Negative(__pyx_v_score); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_parsetreeprob, __pyx_v_tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
    __pyx_t_11 = 0;
    __pyx_t_2 = 0;
    if (unlikely(PyDict_SetItem(__pyx_v_result, __pyx_v_tree, __pyx_t_3) < 0)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0490: 		if backtransform is None:
    __pyx_t_6 = (__pyx_v_backtransform == ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_6 != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L39;
    }
+0491: 			derivs[tree] = fragmentsinderiv_str(
      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragmentsinderiv_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 491, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
      if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_tree, __pyx_t_3) < 0)) __PYX_ERR(0, 491, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0492: 					deriv,
+0493: 					chart, backtransform)
      __pyx_t_11 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_9 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_deriv, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_deriv, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      {
        __pyx_t_20 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 491, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_20);
        if (__pyx_t_11) {
          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_11); __pyx_t_11 = NULL;
        }
        __Pyx_INCREF(__pyx_v_deriv);
        __Pyx_GIVEREF(__pyx_v_deriv);
        PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_9, __pyx_v_deriv);
        __Pyx_INCREF(((PyObject *)__pyx_v_chart));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
        PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_9, ((PyObject *)__pyx_v_chart));
        __Pyx_INCREF(__pyx_v_backtransform);
        __Pyx_GIVEREF(__pyx_v_backtransform);
        PyTuple_SET_ITEM(__pyx_t_20, 2+__pyx_t_9, __pyx_v_backtransform);
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0494: 		else:
+0495: 			derivs[tree] = fragmentsinderiv_re(
    /*else*/ {
/* … */
      __pyx_t_3 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(((__pyx_v_chart->rankededges[__pyx_t_12])[__pyx_t_25]).first, ((PyObject *)__pyx_v_chart), __pyx_v_backtransform); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyDict_SetItem(__pyx_v_derivs, __pyx_v_tree, __pyx_t_3) < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_L39:;
+0496: 					chart.rankededges[chart.root()][keys[deriv]].first,
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_root); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 496, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_20 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_20)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_20);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (__pyx_t_20) {
        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_20); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      } else {
        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_12 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_12 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 496, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_keys, __pyx_v_deriv); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_25 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_25 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 496, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0497: 					chart, backtransform)
+0498: 	msg = '(%d derivations, %d of %d parsetrees)' % (
  __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_d_derivations_d_of_d_parsetrees, __pyx_t_20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_v_msg = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0499: 			len(derivations), len(result), len(parsetreeprob))
  __pyx_t_7 = PyDict_Size(__pyx_v_derivations); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 499, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Size(__pyx_v_result); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 499, __pyx_L1_error)
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = PyDict_Size(__pyx_v_parsetreeprob); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 499, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_20 = PyTuple_New(3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_20, 2, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
+0500: 	return [(tree, result[tree], derivs[tree]) for tree in result], msg
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    PyObject *__pyx_9genexpr14__pyx_v_tree = NULL;
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 500, __pyx_L42_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = 0;
    __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_result, 1, ((PyObject *)NULL), (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L42_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_20);
    __pyx_t_20 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_20, __pyx_t_8, &__pyx_t_7, &__pyx_t_3, NULL, NULL, __pyx_t_9);
      if (unlikely(__pyx_t_10 == 0)) break;
      if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 500, __pyx_L42_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_9genexpr14__pyx_v_tree, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_result, __pyx_9genexpr14__pyx_v_tree); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L42_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_derivs, __pyx_9genexpr14__pyx_v_tree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 500, __pyx_L42_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 500, __pyx_L42_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_9genexpr14__pyx_v_tree);
      __Pyx_GIVEREF(__pyx_9genexpr14__pyx_v_tree);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_9genexpr14__pyx_v_tree);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_1);
      __pyx_t_3 = 0;
      __pyx_t_1 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 500, __pyx_L42_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_9genexpr14__pyx_v_tree);
    goto __pyx_L45_exit_scope;
    __pyx_L42_error:;
    __Pyx_XDECREF(__pyx_9genexpr14__pyx_v_tree);
    goto __pyx_L1_error;
    __pyx_L45_exit_scope:;
  } /* exit inner scope */
  __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_v_msg);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_20;
  __pyx_t_20 = 0;
  goto __pyx_L0;
 0501: 
 0502: 
+0503: cdef str recoverfragments_re(
static PyObject *__pyx_f_8discodop_14disambiguation_recoverfragments_re(RankedEdge __pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("recoverfragments_re", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("discodop.disambiguation.recoverfragments_re", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0504: 		RankedEdge deriv, Chart chart, list backtransform):
 0505: 	"""Reconstruct a DOP derivation from a derivation with flattened fragments.
 0506: 
 0507: 	:param deriv: a RankedEdge representing a derivation.
 0508: 	:param backtransform: a list with fragments (as string templates)
 0509: 		corresponding to grammar rules.
 0510: 	:returns: expanded derivation as a string.
 0511: 
 0512: 	The flattened fragments in the derivation should be left-binarized.
 0513: 
 0514: 	Does on-the-fly debinarization following labels that are not mapped to a
 0515: 	label in the coarse grammar, i.e., it assumes that neverblockre is only
 0516: 	used to avoid blocking nonterminals from the double-dop binarization
 0517: 	(containing the string '}<'). Note that this means getmapping() has to have
 0518: 	been called on `chart.grammar`, even when not doing coarse-to-fine
 0519: 	parsing."""
+0520: 	result = recoverfragments_re_(deriv, chart, backtransform)
  __pyx_t_1 = __pyx_f_8discodop_14disambiguation_recoverfragments_re_(__pyx_v_deriv, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0521: 	return REMOVEWORDTAGS.sub('', result)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEWORDTAGS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sub); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u__3, __pyx_v_result};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u__3, __pyx_v_result};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 521, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u__3);
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u__3);
    __Pyx_INCREF(__pyx_v_result);
    __Pyx_GIVEREF(__pyx_v_result);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_result);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 521, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0522: 
 0523: 
+0524: cpdef str recoverfragments_str(str deriv, Chart chart, list backtransform):
static PyObject *__pyx_pw_8discodop_14disambiguation_7recoverfragments_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_14disambiguation_recoverfragments_str(PyObject *__pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_v_deriv1 = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("recoverfragments_str", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("discodop.disambiguation.recoverfragments_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deriv1);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_7recoverfragments_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_6recoverfragments_str[] = "recoverfragments_str(unicode deriv, Chart chart, list backtransform) -> unicode\nReconstruct a DOP derivation from a derivation with flattened fragments.\n\n\t:param deriv: a string representing a derivation.\n\t:param backtransform: a list with fragments (as string templates)\n\t\tcorresponding to grammar rules.\n\t:returns: expanded derivation as a string.\n\n\tDoes on-the-fly debinarization following labels that are not mapped to a\n\tlabel in the coarse grammar, i.e., it assumes that neverblockre is only\n\tused to avoid blocking nonterminals from the double-dop binarization\n\t(containing the string '}<'). Note that this means getmapping() has to have\n\tbeen called on `chart.grammar`, even when not doing coarse-to-fine\n\tparsing.";
static PyObject *__pyx_pw_8discodop_14disambiguation_7recoverfragments_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_deriv = 0;
struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart = 0;
PyObject *__pyx_v_backtransform = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("recoverfragments_str (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_deriv,&__pyx_n_s_chart,&__pyx_n_s_backtransform,0};
  PyObject* values[3] = {0,0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_deriv)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chart)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("recoverfragments_str", 1, 3, 3, 1); __PYX_ERR(0, 524, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_backtransform)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("recoverfragments_str", 1, 3, 3, 2); __PYX_ERR(0, 524, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recoverfragments_str") < 0)) __PYX_ERR(0, 524, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
  }
  __pyx_v_deriv = ((PyObject*)values[0]);
  __pyx_v_chart = ((struct __pyx_obj_8discodop_10containers_Chart *)values[1]);
  __pyx_v_backtransform = ((PyObject*)values[2]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("recoverfragments_str", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 524, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.recoverfragments_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_deriv), (&PyUnicode_Type), 1, "deriv", 1))) __PYX_ERR(0, 524, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chart), __pyx_ptype_8discodop_10containers_Chart, 1, "chart", 0))) __PYX_ERR(0, 524, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_backtransform), (&PyList_Type), 1, "backtransform", 1))) __PYX_ERR(0, 524, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_6recoverfragments_str(__pyx_self, __pyx_v_deriv, __pyx_v_chart, __pyx_v_backtransform);

/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_6recoverfragments_str(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("recoverfragments_str", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_recoverfragments_str(__pyx_v_deriv, __pyx_v_chart, __pyx_v_backtransform, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;

/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.disambiguation.recoverfragments_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0525: 	"""Reconstruct a DOP derivation from a derivation with flattened fragments.
 0526: 
 0527: 	:param deriv: a string representing a derivation.
 0528: 	:param backtransform: a list with fragments (as string templates)
 0529: 		corresponding to grammar rules.
 0530: 	:returns: expanded derivation as a string.
 0531: 
 0532: 	Does on-the-fly debinarization following labels that are not mapped to a
 0533: 	label in the coarse grammar, i.e., it assumes that neverblockre is only
 0534: 	used to avoid blocking nonterminals from the double-dop binarization
 0535: 	(containing the string '}<'). Note that this means getmapping() has to have
 0536: 	been called on `chart.grammar`, even when not doing coarse-to-fine
 0537: 	parsing."""
+0538: 	deriv1 = Tree(deriv)
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (!__pyx_t_3) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      __Pyx_INCREF(__pyx_v_deriv);
      __Pyx_GIVEREF(__pyx_v_deriv);
      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_deriv);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_deriv1 = __pyx_t_1;
  __pyx_t_1 = 0;
+0539: 	result = recoverfragments_str_(deriv1, chart, backtransform)
  __pyx_t_1 = __pyx_f_8discodop_14disambiguation_recoverfragments_str_(__pyx_v_deriv1, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0540: 	return REMOVEWORDTAGS.sub('', result)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEWORDTAGS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sub); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u__3, __pyx_v_result};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u__3, __pyx_v_result};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_u__3);
    __Pyx_GIVEREF(__pyx_kp_u__3);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_kp_u__3);
    __Pyx_INCREF(__pyx_v_result);
    __Pyx_GIVEREF(__pyx_v_result);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_v_result);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 540, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0541: 
 0542: 
+0543: cdef str recoverfragments_re_(RankedEdge deriv, Chart chart,
static PyObject *__pyx_f_8discodop_14disambiguation_recoverfragments_re_(RankedEdge __pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
PyObject *__pyx_v_children = 0;
std::vector<RankedEdge>  __pyx_v_rechildren;
PyObject *__pyx_v_frag = 0;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("recoverfragments_re_", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("discodop.disambiguation.recoverfragments_re_", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_children);
__Pyx_XDECREF(__pyx_v_frag);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0544: 		list backtransform):
 0545: 	# cdef RankedEdge child
+0546: 	cdef list children = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_children = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0547: 	cdef vector[RankedEdge] rechildren
+0548: 	cdef str frag = backtransform[deriv.edge.rule.no]  # template
if (unlikely(__pyx_v_backtransform == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 548, __pyx_L1_error)
}
if (!(likely(PyUnicode_CheckExact(PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no)))||((PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no)) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no))->tp_name), 0))) __PYX_ERR(0, 548, __pyx_L1_error)
__pyx_t_1 = PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_frag = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0549: 	# NB: this is the only code that uses the .head field of RankedEdge
 0550: 
 0551: 	# collect all children w/on the fly left-factored debinarization
+0552: 	if deriv.edge.rule.rhs2:  # is there a right child?
__pyx_t_2 = (__pyx_v_deriv.edge.rule->rhs2 != 0);
if (__pyx_t_2) {
/* … */
  goto __pyx_L3;
}
 0553: 		# keep going while left child is part of same binarized constituent
 0554: 		# instead of looking for a binarization marker in the label string, we
 0555: 		# use the fact that such labels do not have a mapping as proxy.
+0556: 		while chart.grammar.selfmapping[deriv.edge.rule.rhs1] == 0:
  while (1) {
    __pyx_t_2 = (((__pyx_v_chart->grammar->selfmapping[__pyx_v_deriv.edge.rule->rhs1]) == 0) != 0);
    if (!__pyx_t_2) break;
 0557: 			# one of the right children
+0558: 			rechildren.push_back(chart.rankededges[
    try {
      __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->right(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.right]).first);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 558, __pyx_L1_error)
    }
 0559: 					chart.right(deriv)][deriv.right].first)
 0560: 			# move on to next node in this binarized constituent
 0561: 			deriv = chart.rankededges[
+0562: 					chart.left(deriv)][deriv.left].first
    __pyx_t_3 = ((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first;
    __pyx_v_deriv = __pyx_t_3;
  }
 0563: 		# last right child
+0564: 		if deriv.edge.rule.rhs2:  # is there a right child?
  __pyx_t_2 = (__pyx_v_deriv.edge.rule->rhs2 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0565: 			rechildren.push_back(chart.rankededges[
    try {
      __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->right(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.right]).first);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 565, __pyx_L1_error)
    }
 0566: 					chart.right(deriv)][deriv.right].first)
+0567: 	elif chart.grammar.selfmapping[deriv.edge.rule.rhs1] == 0:
__pyx_t_2 = (((__pyx_v_chart->grammar->selfmapping[__pyx_v_deriv.edge.rule->rhs1]) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
__pyx_L3:;
 0568: 		deriv = chart.rankededges[
+0569: 				chart.left(deriv)][deriv.left].first
  __pyx_t_3 = ((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first;
  __pyx_v_deriv = __pyx_t_3;
 0570: 	# left-most child
+0571: 	rechildren.push_back(chart.rankededges[
try {
  __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first);
} catch(...) {
  __Pyx_CppExn2PyErr();
  __PYX_ERR(0, 571, __pyx_L1_error)
}
 0572: 			chart.left(deriv)][deriv.left].first)
 0573: 
 0574: 	# recursively expand all substitution sites
+0575: 	children = ['(%s %d)' % (chart.grammar.tolabel[chart.label(child.head)],
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
      __pyx_t_6 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_9genexpr15__pyx_v_child.head);
      __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_chart->grammar->tolabel), __pyx_t_6, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
/* … */
      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9);
      __pyx_t_7 = 0;
      __pyx_t_9 = 0;
      __pyx_t_9 = PyUnicode_Format(__pyx_kp_u_s_d, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_5 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
+0576: 			chart.lexidx(child.edge)) if child.edge.rule is NULL
    if (((__pyx_9genexpr15__pyx_v_child.edge.rule == NULL) != 0)) {
/* … */
      __pyx_t_8 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_9genexpr15__pyx_v_child.edge); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 576, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+0577: 			else recoverfragments_re_(child, chart, backtransform)
      __pyx_t_9 = __pyx_f_8discodop_14disambiguation_recoverfragments_re_(__pyx_9genexpr15__pyx_v_child, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 577, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __pyx_t_9;
      __pyx_t_9 = 0;
    }
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0578: 			for child in rechildren][::-1]
{ /* enter inner scope */
  RankedEdge __pyx_9genexpr15__pyx_v_child;
/* … */
  __pyx_t_4 = __pyx_v_rechildren.begin();
  for (;;) {
    if (!(__pyx_t_4 != __pyx_v_rechildren.end())) break;
    __pyx_t_3 = *__pyx_t_4;
    ++__pyx_t_4;
    __pyx_9genexpr15__pyx_v_child = __pyx_t_3;
/* … */
  }
} /* exit inner scope */
__pyx_t_5 = PyObject_GetItem(__pyx_t_1, __pyx_slice__16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 578, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF_SET(__pyx_v_children, ((PyObject*)__pyx_t_5));
__pyx_t_5 = 0;
/* … */
  __pyx_slice__16 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__16)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__16);
  __Pyx_GIVEREF(__pyx_slice__16);
 0579: 
 0580: 	# substitute results in template
+0581: 	return frag.format(*children)
__Pyx_XDECREF(__pyx_r);
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frag, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_1 = PySequence_Tuple(__pyx_v_children); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 581, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (!(likely(PyUnicode_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 581, __pyx_L1_error)
__pyx_r = ((PyObject*)__pyx_t_9);
__pyx_t_9 = 0;
goto __pyx_L0;
 0582: 
 0583: 	# even better: build result incrementally; use a list of strings
 0584: 	# extended in recursive calls w/strings from backtransform.
 0585: 	# step 1: collect RankedEdges in a list (children);
 0586: 	# 		i.e., exctract nodes from binarized constituent.
 0587: 	# step 2: iterate over parts of template, alternately adding string from it
 0588: 	# 		and making a recursive call to insert the relevant child RankedEdge
 0589: 	# new backtransform format:
 0590: 	# backtransform[prod] = (list_of_strs, list_of_idx)
 0591: 	# backtransform[34] = (['(NP (DT ', ') (NN ', '))'], [0, 1])
 0592: 	# alternatively: (better locality?)
 0593: 	# frag = backtransform[34] = ['(NP (DT ', 0, ') (NN ', 1, '))']
 0594: 	# result += frag[0]
 0595: 	# for n in range(1, len(result), 2):
 0596: 	# 	foo(result, children[frag[n]])
 0597: 	# 	result += frag[n + 1]
 0598: 
 0599: 
+0600: cdef str recoverfragments_str_(deriv, Chart chart, list backtransform):
static PyObject *__pyx_f_8discodop_14disambiguation_recoverfragments_str_(PyObject *__pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
PyObject *__pyx_v_children = 0;
PyObject *__pyx_v_frag = 0;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("recoverfragments_str_", 0);
__Pyx_INCREF(__pyx_v_deriv);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("discodop.disambiguation.recoverfragments_str_", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_children);
__Pyx_XDECREF(__pyx_v_frag);
__Pyx_XDECREF(__pyx_v_deriv);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0601: 	cdef list children = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_children = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0602: 	cdef str frag
+0603: 	frag = backtransform[chart.grammar.noderuleno(deriv)]
if (unlikely(__pyx_v_backtransform == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 603, __pyx_L1_error)
}
__pyx_t_1 = ((struct __pyx_vtabstruct_8discodop_10containers_Grammar *)__pyx_v_chart->grammar->__pyx_vtab)->noderuleno(__pyx_v_chart->grammar, __pyx_v_deriv, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyObject_GetItem(__pyx_v_backtransform, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 603, __pyx_L1_error)
__pyx_v_frag = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
 0604: 	# collect children w/on the fly left-factored debinarization
+0605: 	if len(deriv) >= 2:  # is there a right child?
__pyx_t_3 = PyObject_Length(__pyx_v_deriv); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 605, __pyx_L1_error)
__pyx_t_4 = ((__pyx_t_3 >= 2) != 0);
if (__pyx_t_4) {
/* … */
  goto __pyx_L3;
}
 0606: 		# keep going while left child is part of same binarized constituent
 0607: 		# this shortcut assumes that neverblockre is only used to avoid
 0608: 		# blocking nonterminals from the double-dop binarization.
+0609: 		while '}<' in deriv[0].label:
  while (1) {
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__15, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = (__pyx_t_4 != 0);
    if (!__pyx_t_5) break;
 0610: 			# one of the right children
+0611: 			children.extend(reversed(deriv[1:]))
    __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_deriv, 1, 0, NULL, NULL, &__pyx_slice__17, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 611, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 611, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_reversed, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 611, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyList_Extend(__pyx_v_children, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 611, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_slice__17 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__17)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__17);
  __Pyx_GIVEREF(__pyx_slice__17);
 0612: 			# move on to next node in this binarized constituent
+0613: 			deriv = deriv[0]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_deriv, __pyx_t_1);
    __pyx_t_1 = 0;
  }
 0614: 		# last right child
+0615: 		children.extend(reversed(deriv[1:]))
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_deriv, 1, 0, NULL, NULL, &__pyx_slice__18, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_reversed, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyList_Extend(__pyx_v_children, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_slice__18 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__18)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__18);
  __Pyx_GIVEREF(__pyx_slice__18);
+0616: 	elif '}<' in deriv[0].label:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__15, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 616, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_4 = (__pyx_t_5 != 0);
if (__pyx_t_4) {
/* … */
}
__pyx_L3:;
+0617: 		deriv = deriv[0]
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_deriv, __pyx_t_2);
  __pyx_t_2 = 0;
 0618: 	# left-most child
+0619: 	children.append(deriv[0])
__pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 619, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_6 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_2); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 619, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0620: 
 0621: 	# recursively expand all substitution sites
+0622: 	children = [recoverfragments_str_(child, chart, backtransform)
{ /* enter inner scope */
  PyObject *__pyx_9genexpr16__pyx_v_child = NULL;
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 622, __pyx_L8_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
      __pyx_t_9 = __pyx_f_8discodop_14disambiguation_recoverfragments_str_(__pyx_9genexpr16__pyx_v_child, __pyx_v_chart, __pyx_v_backtransform); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 622, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_7 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
+0623: 			if isinstance(child[0], Tree)
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr16__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 623, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 623, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyObject_IsInstance(__pyx_t_8, __pyx_t_9); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 623, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if ((__pyx_t_4 != 0)) {
+0624: 			else ('(%s %d)' % (child.label, child[0]))
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr16__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 624, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr16__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 624, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 624, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8);
      __pyx_t_9 = 0;
      __pyx_t_8 = 0;
      __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_s_d, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 624, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_7 = __pyx_t_8;
      __pyx_t_8 = 0;
    }
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 622, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0625: 			for child in reversed(children)]
  __pyx_t_1 = __pyx_v_children; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyList_GET_SIZE(__pyx_t_1) - 1;
  for (;;) {
    if (__pyx_t_3 < 0) break;
    if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_7); __pyx_t_3--; if (unlikely(0 < 0)) __PYX_ERR(0, 625, __pyx_L8_error)
    #else
    __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3--; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 625, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_XDECREF_SET(__pyx_9genexpr16__pyx_v_child, __pyx_t_7);
    __pyx_t_7 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_child);
  goto __pyx_L11_exit_scope;
  __pyx_L8_error:;
  __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_child);
  goto __pyx_L1_error;
  __pyx_L11_exit_scope:;
} /* exit inner scope */
__Pyx_DECREF_SET(__pyx_v_children, ((PyObject*)__pyx_t_2));
__pyx_t_2 = 0;
 0626: 
 0627: 	# substitute results in template
+0628: 	return frag.format(*children)
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frag, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = PySequence_Tuple(__pyx_v_children); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 628, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 628, __pyx_L1_error)
__pyx_r = ((PyObject*)__pyx_t_7);
__pyx_t_7 = 0;
goto __pyx_L0;
 0629: 
 0630: 
+0631: cdef fragmentsinderiv_re(RankedEdge deriv, chart, list backtransform):
static PyObject *__pyx_f_8discodop_14disambiguation_fragmentsinderiv_re(RankedEdge __pyx_v_deriv, PyObject *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
PyObject *__pyx_v_result = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("fragmentsinderiv_re", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.disambiguation.fragmentsinderiv_re", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_result);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0632: 	"""Extract the list of fragments that were used in a given derivation.
 0633: 
 0634: 	:returns: a list of fragments in discbracket format."""
+0635: 	result = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_result = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+0636: 	fragmentsinderiv_re_(deriv, chart, backtransform, result)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 636, __pyx_L1_error)
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re_(__pyx_v_deriv, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_backtransform, __pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 636, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0637: 	return [_fragments.pygetsent(frag) for frag in result]
__Pyx_XDECREF(__pyx_r);
{ /* enter inner scope */
  PyObject *__pyx_9genexpr17__pyx_v_frag = NULL;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L5_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_v_result; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 637, __pyx_L5_error)
    #else
    __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_XDECREF_SET(__pyx_9genexpr17__pyx_v_frag, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 637, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pygetsent); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 637, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    if (!__pyx_t_5) {
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_9genexpr17__pyx_v_frag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_9genexpr17__pyx_v_frag};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L5_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_9genexpr17__pyx_v_frag};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L5_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 637, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
        __Pyx_INCREF(__pyx_9genexpr17__pyx_v_frag);
        __Pyx_GIVEREF(__pyx_9genexpr17__pyx_v_frag);
        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_9genexpr17__pyx_v_frag);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 637, __pyx_L5_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_frag);
  goto __pyx_L8_exit_scope;
  __pyx_L5_error:;
  __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_frag);
  goto __pyx_L1_error;
  __pyx_L8_exit_scope:;
} /* exit inner scope */
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0638: 
 0639: 
+0640: def fragmentsinderiv_str(str deriv, chart, list backtransform):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_9fragmentsinderiv_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_8fragmentsinderiv_str[] = "fragmentsinderiv_str(unicode deriv, chart, list backtransform)\nExtract the list of fragments that were used in a given derivation.\n\n\t:returns: a list of fragments in discbracket format.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_9fragmentsinderiv_str = {"fragmentsinderiv_str", (PyCFunction)__pyx_pw_8discodop_14disambiguation_9fragmentsinderiv_str, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_8fragmentsinderiv_str};
static PyObject *__pyx_pw_8discodop_14disambiguation_9fragmentsinderiv_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_deriv = 0;
PyObject *__pyx_v_chart = 0;
PyObject *__pyx_v_backtransform = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("fragmentsinderiv_str (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_deriv,&__pyx_n_s_chart,&__pyx_n_s_backtransform,0};
  PyObject* values[3] = {0,0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_deriv)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chart)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("fragmentsinderiv_str", 1, 3, 3, 1); __PYX_ERR(0, 640, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_backtransform)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("fragmentsinderiv_str", 1, 3, 3, 2); __PYX_ERR(0, 640, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fragmentsinderiv_str") < 0)) __PYX_ERR(0, 640, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
  }
  __pyx_v_deriv = ((PyObject*)values[0]);
  __pyx_v_chart = values[1];
  __pyx_v_backtransform = ((PyObject*)values[2]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("fragmentsinderiv_str", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 640, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.fragmentsinderiv_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_deriv), (&PyUnicode_Type), 1, "deriv", 1))) __PYX_ERR(0, 640, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_backtransform), (&PyList_Type), 1, "backtransform", 1))) __PYX_ERR(0, 640, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_8fragmentsinderiv_str(__pyx_self, __pyx_v_deriv, __pyx_v_chart, __pyx_v_backtransform);

/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_8fragmentsinderiv_str(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_deriv, PyObject *__pyx_v_chart, PyObject *__pyx_v_backtransform) {
PyObject *__pyx_v_result = NULL;
PyObject *__pyx_v_deriv1 = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("fragmentsinderiv_str", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("discodop.disambiguation.fragmentsinderiv_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_result);
__Pyx_XDECREF(__pyx_v_deriv1);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__51 = PyTuple_Pack(5, __pyx_n_s_deriv, __pyx_n_s_chart, __pyx_n_s_backtransform, __pyx_n_s_result, __pyx_n_s_deriv1); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__51);
  __Pyx_GIVEREF(__pyx_tuple__51);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_9fragmentsinderiv_str, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fragmentsinderiv_str, __pyx_t_5) < 0) __PYX_ERR(0, 640, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_fragmentsinderiv_str, 640, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 640, __pyx_L1_error)
 0641: 	"""Extract the list of fragments that were used in a given derivation.
 0642: 
 0643: 	:returns: a list of fragments in discbracket format."""
+0644: 	result = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_result = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+0645: 	if backtransform is None:
__pyx_t_2 = (__pyx_v_backtransform == ((PyObject*)Py_None));
__pyx_t_3 = (__pyx_t_2 != 0);
if (__pyx_t_3) {
/* … */
  goto __pyx_L3;
}
+0646: 		deriv1 = Tree(deriv)
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  if (!__pyx_t_5) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 646, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
      __Pyx_INCREF(__pyx_v_deriv);
      __Pyx_GIVEREF(__pyx_v_deriv);
      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_deriv);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_deriv1 = __pyx_t_1;
  __pyx_t_1 = 0;
+0647: 		result = [writediscbrackettree(
  { /* enter inner scope */
    PyObject *__pyx_9genexpr18__pyx_v_node = NULL;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_writediscbrackettree); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 647, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_5);
+0648: 				REMOVEIDS.sub('', str(splitfrag(node))),
      __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sub); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 648, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_splitfrag); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 648, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      if (!__pyx_t_14) {
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_9genexpr18__pyx_v_node); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_13)) {
          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_9genexpr18__pyx_v_node};
          __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_GOTREF(__pyx_t_11);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_9genexpr18__pyx_v_node};
          __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_GOTREF(__pyx_t_11);
        } else
        #endif
        {
          __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 648, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
          __Pyx_INCREF(__pyx_9genexpr18__pyx_v_node);
          __Pyx_GIVEREF(__pyx_9genexpr18__pyx_v_node);
          PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_9genexpr18__pyx_v_node);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_15, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 648, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11);
      __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_13, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 648, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = NULL;
      __pyx_t_16 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_12, function);
          __pyx_t_16 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_12)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_kp_u__3, __pyx_t_11};
        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
        PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_kp_u__3, __pyx_t_11};
        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      {
        __pyx_t_15 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 648, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_15);
        if (__pyx_t_13) {
          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13); __pyx_t_13 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_kp_u__3);
        PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_16, __pyx_kp_u__3);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_16, __pyx_t_11);
        __pyx_t_11 = 0;
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      }
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0649: 				chart.sent).rstrip()
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_chart, __pyx_n_s_sent); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 649, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_15 = NULL;
      __pyx_t_16 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_16 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_7, __pyx_t_12};
        __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 647, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_7, __pyx_t_12};
        __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 647, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 647, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_15) {
          __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_15); __pyx_t_15 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_16, __pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_16, __pyx_t_12);
        __pyx_t_7 = 0;
        __pyx_t_12 = 0;
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 647, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 649, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      if (__pyx_t_8) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else {
        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L6_error)
      }
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 647, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0650: 				for node in deriv1.subtrees(frontiernt)]
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_deriv1, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_frontiernt); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 650, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    if (!__pyx_t_7) {
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_5};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_5};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 650, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_6 = __pyx_t_4; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0;
      __pyx_t_10 = NULL;
    } else {
      __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 650, __pyx_L6_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_10)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 650, __pyx_L6_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 650, __pyx_L6_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_10(__pyx_t_6);
        if (unlikely(!__pyx_t_4)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 650, __pyx_L6_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_9genexpr18__pyx_v_node, __pyx_t_4);
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_node);
    goto __pyx_L9_exit_scope;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_9genexpr18__pyx_v_node);
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;
 0651: 	else:
+0652: 		deriv1 = Tree(deriv)
/*else*/ {
  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  if (!__pyx_t_4) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_deriv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_deriv};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 652, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
      __Pyx_INCREF(__pyx_v_deriv);
      __Pyx_GIVEREF(__pyx_v_deriv);
      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_deriv);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_deriv1 = __pyx_t_1;
  __pyx_t_1 = 0;
+0653: 		fragmentsinderiv_str_(deriv1, chart, backtransform, result)
  if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 653, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_str_(__pyx_v_deriv1, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_backtransform, __pyx_v_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 653, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__pyx_L3:;
+0654: 	return [_fragments.pygetsent(frag) for frag in result]
__Pyx_XDECREF(__pyx_r);
{ /* enter inner scope */
  PyObject *__pyx_9genexpr19__pyx_v_frag = NULL;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 654, __pyx_L12_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __pyx_v_result; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0;
  for (;;) {
    if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 654, __pyx_L12_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_frag, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 654, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_pygetsent); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 654, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    if (!__pyx_t_4) {
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_9genexpr19__pyx_v_frag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_5);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_9genexpr19__pyx_v_frag};
        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L12_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_5);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_9genexpr19__pyx_v_frag};
        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L12_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_5);
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 654, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_4); __pyx_t_4 = NULL;
        __Pyx_INCREF(__pyx_9genexpr19__pyx_v_frag);
        __Pyx_GIVEREF(__pyx_9genexpr19__pyx_v_frag);
        PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_9genexpr19__pyx_v_frag);
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 654, __pyx_L12_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_frag);
  goto __pyx_L15_exit_scope;
  __pyx_L12_error:;
  __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_frag);
  goto __pyx_L1_error;
  __pyx_L15_exit_scope:;
} /* exit inner scope */
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0655: 
 0656: 
+0657: cdef fragmentsinderiv_re_(RankedEdge deriv, Chart chart,
static PyObject *__pyx_f_8discodop_14disambiguation_fragmentsinderiv_re_(RankedEdge __pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform, PyObject *__pyx_v_result) {
RankedEdge __pyx_v_child;
std::vector<RankedEdge>  __pyx_v_rechildren;
PyObject *__pyx_v_frag = 0;
int __pyx_v_n;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("fragmentsinderiv_re_", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("discodop.disambiguation.fragmentsinderiv_re_", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_frag);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0658: 		list backtransform, list result):
 0659: 	cdef RankedEdge child
 0660: 	cdef vector[RankedEdge] rechildren
+0661: 	cdef str frag = backtransform[deriv.edge.rule.no]  # template
if (unlikely(__pyx_v_backtransform == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 661, __pyx_L1_error)
}
if (!(likely(PyUnicode_CheckExact(PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no)))||((PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no)) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no))->tp_name), 0))) __PYX_ERR(0, 661, __pyx_L1_error)
__pyx_t_1 = PyList_GET_ITEM(__pyx_v_backtransform, __pyx_v_deriv.edge.rule->no);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_frag = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0662: 	cdef int n
 0663: 
 0664: 	# collect all children w/on the fly left-factored debinarization
+0665: 	if deriv.edge.rule.rhs2:  # is there a right child?
__pyx_t_2 = (__pyx_v_deriv.edge.rule->rhs2 != 0);
if (__pyx_t_2) {
/* … */
  goto __pyx_L3;
}
 0666: 		# keep going while left child is part of same binarized constituent
 0667: 		# instead of looking for a binarization marker in the label string, we
 0668: 		# use the fact that such labels do not have a mapping as proxy.
+0669: 		while chart.grammar.selfmapping[deriv.edge.rule.rhs1] == 0:
  while (1) {
    __pyx_t_2 = (((__pyx_v_chart->grammar->selfmapping[__pyx_v_deriv.edge.rule->rhs1]) == 0) != 0);
    if (!__pyx_t_2) break;
 0670: 			# one of the right children
+0671: 			rechildren.push_back(chart.rankededges[
    try {
      __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->right(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.right]).first);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 671, __pyx_L1_error)
    }
 0672: 					chart.right(deriv)][deriv.right].first)
 0673: 			# move on to next node in this binarized constituent
 0674: 			deriv = chart.rankededges[
+0675: 					chart.left(deriv)][deriv.left].first
    __pyx_t_3 = ((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first;
    __pyx_v_deriv = __pyx_t_3;
  }
 0676: 		# last right child
+0677: 		if deriv.edge.rule.rhs2:  # is there a right child?
  __pyx_t_2 = (__pyx_v_deriv.edge.rule->rhs2 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0678: 			rechildren.push_back(chart.rankededges[
    try {
      __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->right(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.right]).first);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 678, __pyx_L1_error)
    }
 0679: 					chart.right(deriv)][deriv.right].first)
+0680: 	elif chart.grammar.selfmapping[deriv.edge.rule.rhs1] == 0:
__pyx_t_2 = (((__pyx_v_chart->grammar->selfmapping[__pyx_v_deriv.edge.rule->rhs1]) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
__pyx_L3:;
 0681: 		deriv = chart.rankededges[
+0682: 				chart.left(deriv)][deriv.left].first
  __pyx_t_3 = ((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first;
  __pyx_v_deriv = __pyx_t_3;
 0683: 	# left-most child
+0684: 	rechildren.push_back(chart.rankededges[
try {
  __pyx_v_rechildren.push_back(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first);
} catch(...) {
  __Pyx_CppExn2PyErr();
  __PYX_ERR(0, 684, __pyx_L1_error)
}
 0685: 			chart.left(deriv)][deriv.left].first)
 0686: 
+0687: 	result.append(frag.format(*['(%s %s)' % (
if (unlikely(__pyx_v_result == Py_None)) {
  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
  __PYX_ERR(0, 687, __pyx_L1_error)
}
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frag, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 687, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
{ /* enter inner scope */
  RankedEdge __pyx_9genexpr20__pyx_v_child;
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
    __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_s_s_2, __pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_7))) __PYX_ERR(0, 687, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_t_4 = PySequence_Tuple(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 687, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_15 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 687, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0688: 				chart.grammar.tolabel[chart.label(child.head)].split('@')[0],
    __pyx_t_6 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_9genexpr20__pyx_v_child.head);
    __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_chart->grammar->tolabel), __pyx_t_6, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_split); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_7);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
/* … */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_u__14); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
+0689: 				('%d=%s' % (chart.lexidx(child.edge),
      __pyx_t_10 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_9genexpr20__pyx_v_child.edge); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 689, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
/* … */
      __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
      __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_10));
      __Pyx_GIVEREF(PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_10));
      PyTuple_SET_ITEM(__pyx_t_11, 1, PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_10));
      __pyx_t_9 = 0;
      __pyx_t_9 = PyUnicode_Format(__pyx_kp_u_d_s, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_7 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
+0690: 					chart.sent[chart.lexidx(child.edge)])
      if (unlikely(__pyx_v_chart->sent == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 690, __pyx_L1_error)
      }
      __pyx_t_10 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_9genexpr20__pyx_v_child.edge); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 690, __pyx_L1_error)
+0691: 					if '@' in chart.grammar.tolabel[chart.label(child.head)]
    __pyx_t_6 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_9genexpr20__pyx_v_child.head);
    __pyx_t_9 = __Pyx_GetItemInt(((PyObject *)__pyx_v_chart->grammar->tolabel), __pyx_t_6, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 691, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if ((__pyx_t_2 != 0)) {
+0692: 					else yieldranges(chart.indices(child.head))))
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_indices); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyInt_From_uint32_t(__pyx_9genexpr20__pyx_v_child.head); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      if (!__pyx_t_13) {
        __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 692, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_9);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_12};
          __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 692, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_12};
          __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 692, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        } else
        #endif
        {
          __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 692, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); __pyx_t_13 = NULL;
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 692, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (!(likely(PyList_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 692, __pyx_L1_error)
      __pyx_t_11 = __pyx_f_8discodop_10containers_yieldranges(((PyObject*)__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_7 = __pyx_t_11;
      __pyx_t_11 = 0;
    }
+0693: 				for child in rechildren][::-1]))
  __pyx_t_5 = __pyx_v_rechildren.begin();
  for (;;) {
    if (!(__pyx_t_5 != __pyx_v_rechildren.end())) break;
    __pyx_t_3 = *__pyx_t_5;
    ++__pyx_t_5;
    __pyx_9genexpr20__pyx_v_child = __pyx_t_3;
/* … */
  }
} /* exit inner scope */
__pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_slice__20); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 693, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_slice__20 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__20)) __PYX_ERR(0, 693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__20);
  __Pyx_GIVEREF(__pyx_slice__20);
 0694: 	# recursively visit all substitution sites
+0695: 	for n in range(rechildren.size() - 1, -1, -1):
for (__pyx_t_10 = (__pyx_v_rechildren.size() - 1); __pyx_t_10 > -1L; __pyx_t_10-=1) {
  __pyx_v_n = __pyx_t_10;
+0696: 		child = rechildren[n]
  __pyx_v_child = (__pyx_v_rechildren[__pyx_v_n]);
+0697: 		if child.edge.rule is not NULL:
  __pyx_t_2 = ((__pyx_v_child.edge.rule != NULL) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L11;
  }
+0698: 			fragmentsinderiv_re_(child, chart, backtransform, result)
    __pyx_t_7 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_re_(__pyx_v_child, __pyx_v_chart, __pyx_v_backtransform, __pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 698, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0699: 		elif '@' not in chart.grammar.tolabel[chart.label(child.head)]:
  __pyx_t_6 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_v_child.head);
  __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_chart->grammar->tolabel), __pyx_t_6, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_7, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_16 = (__pyx_t_2 != 0);
  if (__pyx_t_16) {
/* … */
  }
  __pyx_L11:;
}
+0700: 			result.append('(%s %d=%s)' % (
    if (unlikely(__pyx_v_result == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
      __PYX_ERR(0, 700, __pyx_L1_error)
    }
/* … */
    __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_s_d_s, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 700, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0701: 					chart.grammar.tolabel[chart.label(child.head)],
    __pyx_t_6 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_v_child.head);
    __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_chart->grammar->tolabel), __pyx_t_6, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
    __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_17));
    __Pyx_GIVEREF(PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_17));
    PyTuple_SET_ITEM(__pyx_t_1, 2, PyList_GET_ITEM(__pyx_v_chart->sent, __pyx_t_17));
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
+0702: 					chart.lexidx(child.edge),
    __pyx_t_17 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_v_child.edge); if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 702, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+0703: 					chart.sent[chart.lexidx(child.edge)]))
    if (unlikely(__pyx_v_chart->sent == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 703, __pyx_L1_error)
    }
    __pyx_t_17 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_v_child.edge); if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 703, __pyx_L1_error)
 0704: 
 0705: 
+0706: cdef fragmentsinderiv_str_(
static PyObject *__pyx_f_8discodop_14disambiguation_fragmentsinderiv_str_(PyObject *__pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_backtransform, PyObject *__pyx_v_result) {
PyObject *__pyx_v_children = 0;
PyObject *__pyx_v_frag = 0;
PyObject *__pyx_v_child = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("fragmentsinderiv_str_", 0);
__Pyx_INCREF(__pyx_v_deriv);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("discodop.disambiguation.fragmentsinderiv_str_", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_children);
__Pyx_XDECREF(__pyx_v_frag);
__Pyx_XDECREF(__pyx_v_child);
__Pyx_XDECREF(__pyx_v_deriv);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0707: 		deriv, Chart chart, list backtransform, list result):
+0708: 	cdef list children = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_children = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0709: 	cdef str frag
+0710: 	frag = backtransform[chart.grammar.noderuleno(deriv)]
if (unlikely(__pyx_v_backtransform == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 710, __pyx_L1_error)
}
__pyx_t_1 = ((struct __pyx_vtabstruct_8discodop_10containers_Grammar *)__pyx_v_chart->grammar->__pyx_vtab)->noderuleno(__pyx_v_chart->grammar, __pyx_v_deriv, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyObject_GetItem(__pyx_v_backtransform, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 710, __pyx_L1_error)
__pyx_v_frag = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
 0711: 	# collect children w/on the fly left-factored debinarization
+0712: 	if len(deriv) >= 2:  # is there a right child?
__pyx_t_3 = PyObject_Length(__pyx_v_deriv); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 712, __pyx_L1_error)
__pyx_t_4 = ((__pyx_t_3 >= 2) != 0);
if (__pyx_t_4) {
/* … */
  goto __pyx_L3;
}
 0713: 		# keep going while left child is part of same binarized constituent
 0714: 		# this shortcut assumes that neverblockre is only used to avoid
 0715: 		# blocking nonterminals from the double-dop binarization.
+0716: 		while '}<' in deriv[0].label:
  while (1) {
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__15, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 716, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = (__pyx_t_4 != 0);
    if (!__pyx_t_5) break;
 0717: 			# one of the right children
+0718: 			children.extend(reversed(deriv[1:]))
    __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_deriv, 1, 0, NULL, NULL, &__pyx_slice__21, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_reversed, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyList_Extend(__pyx_v_children, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 718, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_slice__21 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__21)) __PYX_ERR(0, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__21);
  __Pyx_GIVEREF(__pyx_slice__21);
 0719: 			# move on to next node in this binarized constituent
+0720: 			deriv = deriv[0]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_deriv, __pyx_t_1);
    __pyx_t_1 = 0;
  }
 0721: 		# last right child
+0722: 		children.extend(reversed(deriv[1:]))
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_deriv, 1, 0, NULL, NULL, &__pyx_slice__22, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_reversed, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyList_Extend(__pyx_v_children, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_slice__22 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__22);
  __Pyx_GIVEREF(__pyx_slice__22);
+0723: 	elif '}<' in deriv[0].label:
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 723, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__15, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 723, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_4 = (__pyx_t_5 != 0);
if (__pyx_t_4) {
/* … */
}
__pyx_L3:;
+0724: 		deriv = deriv[0]
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_deriv, __pyx_t_2);
  __pyx_t_2 = 0;
 0725: 	# left-most child
+0726: 	children.append(deriv[0])
__pyx_t_2 = __Pyx_GetItemInt(__pyx_v_deriv, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_6 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_2); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 726, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0727: 
+0728: 	result.append(frag.format(*['(%s %s)' % (
if (unlikely(__pyx_v_result == Py_None)) {
  PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
  __PYX_ERR(0, 728, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frag, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
{ /* enter inner scope */
  PyObject *__pyx_9genexpr21__pyx_v_child = NULL;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L8_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
    __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_s_s_2, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 728, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 728, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
__pyx_t_7 = PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_6 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0729: 			child.label.split('@')[0],
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr21__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 729, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_split); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 729, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 729, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_8, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 729, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 729, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8);
    __pyx_t_9 = 0;
    __pyx_t_8 = 0;
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_u__14); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
+0730: 			('%d=%s' % (child[0], chart.sent[child[0]]) if '@' in child.label
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr21__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 730, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_10, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 730, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if ((__pyx_t_4 != 0)) {
      __pyx_t_10 = __Pyx_GetItemInt(__pyx_9genexpr21__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 730, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (unlikely(__pyx_v_chart->sent == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 730, __pyx_L8_error)
      }
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_9genexpr21__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 730, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = PyObject_GetItem(__pyx_v_chart->sent, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 730, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12);
      __pyx_t_10 = 0;
      __pyx_t_12 = 0;
      __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_d_s, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_8 = __pyx_t_12;
      __pyx_t_12 = 0;
    } else {
+0731: 				else yieldranges(sorted(child.leaves()))))
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr21__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 731, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      if (__pyx_t_13) {
        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 731, __pyx_L8_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      } else {
        __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 731, __pyx_L8_error)
      }
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PySequence_List(__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 731, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = ((PyObject*)__pyx_t_10);
      __pyx_t_10 = 0;
      __pyx_t_6 = PyList_Sort(__pyx_t_12); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 731, __pyx_L8_error)
      __pyx_t_10 = __pyx_f_8discodop_10containers_yieldranges(((PyObject*)__pyx_t_12)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 731, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_8 = __pyx_t_10;
      __pyx_t_10 = 0;
    }
+0732: 			for child in reversed(children)]))
  __pyx_t_7 = __pyx_v_children; __Pyx_INCREF(__pyx_t_7); __pyx_t_3 = PyList_GET_SIZE(__pyx_t_7) - 1;
  for (;;) {
    if (__pyx_t_3 < 0) break;
    if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_7)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_3); __Pyx_INCREF(__pyx_t_8); __pyx_t_3--; if (unlikely(0 < 0)) __PYX_ERR(0, 732, __pyx_L8_error)
    #else
    __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_3); __pyx_t_3--; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 732, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_child, __pyx_t_8);
    __pyx_t_8 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_child);
  goto __pyx_L11_exit_scope;
  __pyx_L8_error:;
  __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_child);
  goto __pyx_L1_error;
  __pyx_L11_exit_scope:;
} /* exit inner scope */
 0733: 	# recursively visit all substitution sites
+0734: 	for child in reversed(children):
__pyx_t_1 = __pyx_v_children; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyList_GET_SIZE(__pyx_t_1) - 1;
for (;;) {
  if (__pyx_t_3 < 0) break;
  if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_7); __pyx_t_3--; if (unlikely(0 < 0)) __PYX_ERR(0, 734, __pyx_L1_error)
  #else
  __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3--; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #endif
  __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_7);
  __pyx_t_7 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0735: 		if isinstance(child[0], Tree):
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_IsInstance(__pyx_t_7, __pyx_t_2); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 735, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L14;
  }
+0736: 			fragmentsinderiv_str_(child, chart, backtransform, result)
    __pyx_t_2 = __pyx_f_8discodop_14disambiguation_fragmentsinderiv_str_(__pyx_v_child, __pyx_v_chart, __pyx_v_backtransform, __pyx_v_result); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0737: 		elif '@' not in child.label:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 737, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {
/* … */
  }
  __pyx_L14:;
+0738: 			result.append('(%s %d=%s)' % (child.label, child[0],
    if (unlikely(__pyx_v_result == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
      __PYX_ERR(0, 738, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_10);
    __pyx_t_2 = 0;
    __pyx_t_7 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = PyUnicode_Format(__pyx_kp_u_s_d_s, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_10); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 738, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0739: 					chart.sent[child[0]]))
    if (unlikely(__pyx_v_chart->sent == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 739, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = PyObject_GetItem(__pyx_v_chart->sent, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 0740: 
 0741: 
+0742: def frontiernt(node):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_11frontiernt(PyObject *__pyx_self, PyObject *__pyx_v_node); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_10frontiernt[] = "frontiernt(node)\nTest whether node from a DOP derivation is a frontier nonterminal.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_11frontiernt = {"frontiernt", (PyCFunction)__pyx_pw_8discodop_14disambiguation_11frontiernt, METH_O, __pyx_doc_8discodop_14disambiguation_10frontiernt};
static PyObject *__pyx_pw_8discodop_14disambiguation_11frontiernt(PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("frontiernt (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_10frontiernt(__pyx_self, ((PyObject *)__pyx_v_node));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_10frontiernt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("frontiernt", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.disambiguation.frontiernt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_node); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__53);
  __Pyx_GIVEREF(__pyx_tuple__53);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_11frontiernt, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_frontiernt, __pyx_t_5) < 0) __PYX_ERR(0, 742, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_frontiernt, 742, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 742, __pyx_L1_error)
 0743: 	"""Test whether node from a DOP derivation is a frontier nonterminal."""
+0744: 	return '@' not in node.label
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 744, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0745: 
 0746: 
+0747: def splitfrag(node):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_13splitfrag(PyObject *__pyx_self, PyObject *__pyx_v_node); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_12splitfrag[] = "splitfrag(node)\nReturn a copy of a tree with subtrees labeled without '@' removed.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_13splitfrag = {"splitfrag", (PyCFunction)__pyx_pw_8discodop_14disambiguation_13splitfrag, METH_O, __pyx_doc_8discodop_14disambiguation_12splitfrag};
static PyObject *__pyx_pw_8discodop_14disambiguation_13splitfrag(PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("splitfrag (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_12splitfrag(__pyx_self, ((PyObject *)__pyx_v_node));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_12splitfrag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_v_children = NULL;
PyObject *__pyx_v_child = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("splitfrag", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("discodop.disambiguation.splitfrag", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_children);
__Pyx_XDECREF(__pyx_v_child);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__55 = PyTuple_Pack(3, __pyx_n_s_node, __pyx_n_s_children, __pyx_n_s_child); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 747, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__55);
  __Pyx_GIVEREF(__pyx_tuple__55);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_13splitfrag, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 747, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_splitfrag, __pyx_t_5) < 0) __PYX_ERR(0, 747, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_splitfrag, 747, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 747, __pyx_L1_error)
 0748: 	"""Return a copy of a tree with subtrees labeled without '@' removed."""
+0749: 	children = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_children = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+0750: 	for child in node:
if (likely(PyList_CheckExact(__pyx_v_node)) || PyTuple_CheckExact(__pyx_v_node)) {
  __pyx_t_1 = __pyx_v_node; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  __pyx_t_3 = NULL;
} else {
  __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 750, __pyx_L1_error)
}
for (;;) {
  if (likely(!__pyx_t_3)) {
    if (likely(PyList_CheckExact(__pyx_t_1))) {
      if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 750, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    } else {
      if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 750, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    }
  } else {
    __pyx_t_4 = __pyx_t_3(__pyx_t_1);
    if (unlikely(!__pyx_t_4)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 750, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0751: 		if not isinstance(child, Tree):
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_child, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+0752: 			children.append(child)
    __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_children, __pyx_v_child); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 752, __pyx_L1_error)
+0753: 		elif '@' in child.label:
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 753, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 753, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = (__pyx_t_6 != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L5;
  }
+0754: 			children.append(child if isinstance(child[0], int)
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = PyInt_Check(__pyx_t_8); 
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if ((__pyx_t_5 != 0)) {
      __Pyx_INCREF(__pyx_v_child);
      __pyx_t_4 = __pyx_v_child;
    } else {
/* … */
    __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 754, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0755: 					else splitfrag(child))
      __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_splitfrag); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 755, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      if (!__pyx_t_10) {
        __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_child); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 755, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_child};
          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 755, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_8);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_child};
          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 755, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_8);
        } else
        #endif
        {
          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 755, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
          __Pyx_INCREF(__pyx_v_child);
          __Pyx_GIVEREF(__pyx_v_child);
          PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_child);
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 755, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
    }
 0756: 		else:
+0757: 			children.append(Tree(child.label,
  /*else*/ {
    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
/* … */
    __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_L5:;
+0758: 					['%d:%d' % (min(child.leaves()), max(child.leaves()))]))
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    if (__pyx_t_12) {
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 758, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else {
      __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 758, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    if (__pyx_t_13) {
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else {
      __pyx_t_10 = __Pyx_PyObject_CallNoArg(__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_10);
    __pyx_t_11 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = PyUnicode_Format(__pyx_kp_u_d_d, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_10);
    PyList_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_14 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_14 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_9, __pyx_t_12};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 757, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_9, __pyx_t_12};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 757, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_14, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_14, __pyx_t_12);
      __pyx_t_9 = 0;
      __pyx_t_12 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0759: 	return Tree(node.label, children)
__Pyx_XDECREF(__pyx_r);
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 759, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_11 = NULL;
__pyx_t_14 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
  __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
  if (likely(__pyx_t_11)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_4, function);
    __pyx_t_14 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_8, __pyx_v_children};
  __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_8, __pyx_v_children};
  __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
} else
#endif
{
  __pyx_t_12 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (__pyx_t_11) {
    __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
  }
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_14, __pyx_t_8);
  __Pyx_INCREF(__pyx_v_children);
  __Pyx_GIVEREF(__pyx_v_children);
  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_14, __pyx_v_children);
  __pyx_t_8 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0760: 
 0761: 
+0762: def treeparsing(trees, sent, Grammar grammar, int m, backtransform, tags=None,
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_15treeparsing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_14treeparsing[] = "treeparsing(trees, sent, Grammar grammar, int m, backtransform, tags=None, maskrules=True)\nAssign probabilities to a sequence of trees with a DOP grammar.\n\n\tGiven a sequence of trees (as strings), parse them with a DOP grammar\n\tto get parse tree probabilities; will consider multiple derivations.\n\n\t:param maskrules: If True, prune any grammar rule not in the trees.\n\t\tIf DOP reduction is used, requires selfrulemapping of grammar which\n\t\tshould map to itself; e.g., 'NP@2 => DT@3 NN' should be mapped\n\t\tto 'NP => DT NN' in the same grammar.\n\t:returns: a tuple ``(derivations, msg, chart)``.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_15treeparsing = {"treeparsing", (PyCFunction)__pyx_pw_8discodop_14disambiguation_15treeparsing, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_14treeparsing};
static PyObject *__pyx_pw_8discodop_14disambiguation_15treeparsing(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_trees = 0;
PyObject *__pyx_v_sent = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
int __pyx_v_m;
CYTHON_UNUSED PyObject *__pyx_v_backtransform = 0;
PyObject *__pyx_v_tags = 0;
PyObject *__pyx_v_maskrules = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("treeparsing (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trees,&__pyx_n_s_sent,&__pyx_n_s_grammar,&__pyx_n_s_m,&__pyx_n_s_backtransform,&__pyx_n_s_tags,&__pyx_n_s_maskrules,0};
  PyObject* values[7] = {0,0,0,0,0,0,0};
  values[5] = ((PyObject *)Py_None);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_14treeparsing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_trees, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, int __pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_backtransform, PyObject *__pyx_v_tags, PyObject *__pyx_v_maskrules) {
SmallChartItem __pyx_v_item;
FatChartItem __pyx_v_fitem;
struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist = 0;
int __pyx_v_n;
int __pyx_v_lensent;
PyObject *__pyx_v_treestr = NULL;
PyObject *__pyx_v_tree = NULL;
PyObject *__pyx_v_node = NULL;
PyObject *__pyx_v_r = NULL;
PyObject *__pyx_v_yf = NULL;
PyObject *__pyx_v_leaves = NULL;
PyObject *__pyx_v_label = NULL;
PyObject *__pyx_v_ruleno = NULL;
PyObject *__pyx_v_chart = NULL;
CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("treeparsing", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_16);
__Pyx_AddTraceback("discodop.disambiguation.treeparsing", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_whitelist);
__Pyx_XDECREF(__pyx_v_treestr);
__Pyx_XDECREF(__pyx_v_tree);
__Pyx_XDECREF(__pyx_v_node);
__Pyx_XDECREF(__pyx_v_r);
__Pyx_XDECREF(__pyx_v_yf);
__Pyx_XDECREF(__pyx_v_leaves);
__Pyx_XDECREF(__pyx_v_label);
__Pyx_XDECREF(__pyx_v_ruleno);
__Pyx_XDECREF(__pyx_v_chart);
__Pyx_XDECREF(__pyx_v__);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__57 = PyTuple_Pack(22, __pyx_n_s_trees, __pyx_n_s_sent, __pyx_n_s_grammar, __pyx_n_s_m, __pyx_n_s_backtransform, __pyx_n_s_tags, __pyx_n_s_maskrules, __pyx_n_s_item, __pyx_n_s_fitem, __pyx_n_s_whitelist, __pyx_n_s_n, __pyx_n_s_lensent, __pyx_n_s_treestr, __pyx_n_s_tree, __pyx_n_s_node, __pyx_n_s_r, __pyx_n_s_yf, __pyx_n_s_leaves, __pyx_n_s_label, __pyx_n_s_ruleno, __pyx_n_s_chart, __pyx_n_s__39); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__57);
  __Pyx_GIVEREF(__pyx_tuple__57);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_15treeparsing, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_treeparsing, __pyx_t_5) < 0) __PYX_ERR(0, 762, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(7, 0, 22, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_treeparsing, 762, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 762, __pyx_L1_error)
+0763: 		maskrules=True):
  values[6] = ((PyObject *)Py_True);
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      CYTHON_FALLTHROUGH;
      case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      CYTHON_FALLTHROUGH;
      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      CYTHON_FALLTHROUGH;
      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      CYTHON_FALLTHROUGH;
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trees)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("treeparsing", 0, 5, 7, 1); __PYX_ERR(0, 762, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_grammar)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("treeparsing", 0, 5, 7, 2); __PYX_ERR(0, 762, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  3:
      if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_m)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("treeparsing", 0, 5, 7, 3); __PYX_ERR(0, 762, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  4:
      if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_backtransform)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("treeparsing", 0, 5, 7, 4); __PYX_ERR(0, 762, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  5:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tags);
        if (value) { values[5] = value; kw_args--; }
      }
      CYTHON_FALLTHROUGH;
      case  6:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maskrules);
        if (value) { values[6] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "treeparsing") < 0)) __PYX_ERR(0, 762, __pyx_L3_error)
    }
  } else {
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      CYTHON_FALLTHROUGH;
      case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      CYTHON_FALLTHROUGH;
      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  __pyx_v_trees = values[0];
  __pyx_v_sent = values[1];
  __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[2]);
  __pyx_v_m = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_m == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 762, __pyx_L3_error)
  __pyx_v_backtransform = values[4];
  __pyx_v_tags = values[5];
  __pyx_v_maskrules = values[6];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("treeparsing", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 762, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.treeparsing", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_grammar), __pyx_ptype_8discodop_10containers_Grammar, 1, "grammar", 0))) __PYX_ERR(0, 762, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_14treeparsing(__pyx_self, __pyx_v_trees, __pyx_v_sent, __pyx_v_grammar, __pyx_v_m, __pyx_v_backtransform, __pyx_v_tags, __pyx_v_maskrules);
 0764: 	"""Assign probabilities to a sequence of trees with a DOP grammar.
 0765: 
 0766: 	Given a sequence of trees (as strings), parse them with a DOP grammar
 0767: 	to get parse tree probabilities; will consider multiple derivations.
 0768: 
 0769: 	:param maskrules: If True, prune any grammar rule not in the trees.
 0770: 		If DOP reduction is used, requires selfrulemapping of grammar which
 0771: 		should map to itself; e.g., 'NP@2 => DT@3 NN' should be mapped
 0772: 		to 'NP => DT NN' in the same grammar.
 0773: 	:returns: a tuple ``(derivations, msg, chart)``."""
 0774: 	# Parsing & pruning inside the disambiguation module is rather kludgy,
 0775: 	# but the problem is that we need to get probabilities of trees,
 0776: 	# not just of derivations. Therefore the regular coarse-to-fine methods
 0777: 	# do not apply directly.
 0778: 	cdef SmallChartItem item
 0779: 	cdef FatChartItem fitem
+0780: 	cdef Whitelist whitelist = Whitelist()
__pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_10containers_Whitelist), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_whitelist = ((struct __pyx_obj_8discodop_10containers_Whitelist *)__pyx_t_1);
__pyx_t_1 = 0;
+0781: 	cdef int n, lensent = len(sent)
__pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 781, __pyx_L1_error)
__pyx_v_lensent = __pyx_t_2;
 0782: 	# cdef int selected = 0
+0783: 	if <unsigned>lensent < sizeof(uint64_t) * 8:
__pyx_t_3 = ((((unsigned int)__pyx_v_lensent) < ((sizeof(uint64_t)) * 8)) != 0);
if (__pyx_t_3) {
/* … */
  goto __pyx_L3;
}
+0784: 		whitelist.small.resize(grammar.nonterminals)
  try {
    __pyx_v_whitelist->small.resize(__pyx_v_grammar->nonterminals);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 784, __pyx_L1_error)
  }
 0785: 	else:
+0786: 		whitelist.fat.resize(grammar.nonterminals)
/*else*/ {
  try {
    __pyx_v_whitelist->fat.resize(__pyx_v_grammar->nonterminals);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 786, __pyx_L1_error)
  }
}
__pyx_L3:;
+0787: 	assert grammar.selfmapping is not NULL, ('treeparsing() requires '
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
  if (unlikely(!((__pyx_v_grammar->selfmapping != NULL) != 0))) {
    PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_treeparsing_requires_self_mappin);
    __PYX_ERR(0, 787, __pyx_L1_error)
  }
}
#endif
 0788: 			'self mapping; call grammar.getmapping(None, ...)')
+0789: 	whitelist.mapping = grammar.selfmapping
__pyx_t_4 = __pyx_v_grammar->selfmapping;
__pyx_v_whitelist->mapping = __pyx_t_4;
+0790: 	whitelist.splitmapping = NULL
__pyx_v_whitelist->splitmapping = NULL;
+0791: 	if maskrules:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_maskrules); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 791, __pyx_L1_error)
if (__pyx_t_3) {
/* … */
}
+0792: 		grammar.setmask([])  # block all rules
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_grammar), __pyx_n_s_setmask); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  if (!__pyx_t_7) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0793: 	for treestr in trees:
if (likely(PyList_CheckExact(__pyx_v_trees)) || PyTuple_CheckExact(__pyx_v_trees)) {
  __pyx_t_1 = __pyx_v_trees; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  __pyx_t_9 = NULL;
} else {
  __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_trees); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 793, __pyx_L1_error)
}
for (;;) {
  if (likely(!__pyx_t_9)) {
    if (likely(PyList_CheckExact(__pyx_t_1))) {
      if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 793, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 793, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    }
  } else {
    __pyx_t_5 = __pyx_t_9(__pyx_t_1);
    if (unlikely(!__pyx_t_5)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 793, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_5);
  }
  __Pyx_XDECREF_SET(__pyx_v_treestr, __pyx_t_5);
  __pyx_t_5 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0794: 		tree = Tree(treestr)
  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  if (!__pyx_t_6) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_treestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_treestr};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_treestr};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
      __Pyx_INCREF(__pyx_v_treestr);
      __Pyx_GIVEREF(__pyx_v_treestr);
      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_treestr);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_XDECREF_SET(__pyx_v_tree, __pyx_t_5);
  __pyx_t_5 = 0;
+0795: 		for node, (r, yf) in zip(tree.subtrees(),
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  if (__pyx_t_7) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else {
    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8);
  __pyx_t_5 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
    __pyx_t_7 = __pyx_t_8; __Pyx_INCREF(__pyx_t_7); __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
  } else {
    __pyx_t_12 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_13 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 795, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  for (;;) {
    if (likely(!__pyx_t_13)) {
      if (likely(PyList_CheckExact(__pyx_t_7))) {
        if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_7)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 795, __pyx_L1_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
      } else {
        if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 795, __pyx_L1_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
      }
    } else {
      __pyx_t_8 = __pyx_t_13(__pyx_t_7);
      if (unlikely(!__pyx_t_8)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 795, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_8);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
      PyObject* sequence = __pyx_t_8;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 795, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_11);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      #endif
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_14 = Py_TYPE(__pyx_t_6)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_14(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_6); if (unlikely(!__pyx_t_11)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_6), 2) < 0) __PYX_ERR(0, 795, __pyx_L1_error)
      __pyx_t_14 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L10_unpacking_done;
      __pyx_L9_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_14 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 795, __pyx_L1_error)
      __pyx_L10_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_5);
    __pyx_t_5 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
      PyObject* sequence = __pyx_t_11;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 795, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_15 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_15);
      #else
      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      #endif
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_16 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_14 = Py_TYPE(__pyx_t_16)->tp_iternext;
      index = 0; __pyx_t_6 = __pyx_t_14(__pyx_t_16); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      index = 1; __pyx_t_15 = __pyx_t_14(__pyx_t_16); if (unlikely(!__pyx_t_15)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_15);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_16), 2) < 0) __PYX_ERR(0, 795, __pyx_L1_error)
      __pyx_t_14 = NULL;
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      goto __pyx_L12_unpacking_done;
      __pyx_L11_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_14 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 795, __pyx_L1_error)
      __pyx_L12_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_yf, __pyx_t_15);
    __pyx_t_15 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0796: 				lcfrsproductions(tree, sent)):
  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_lcfrsproductions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tree, __pyx_v_sent};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 796, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tree, __pyx_v_sent};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 796, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_tree);
    __Pyx_GIVEREF(__pyx_v_tree);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_tree);
    __Pyx_INCREF(__pyx_v_sent);
    __Pyx_GIVEREF(__pyx_v_sent);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_v_sent);
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0797: 			leaves = node.leaves()
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    if (__pyx_t_5) {
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF_SET(__pyx_v_leaves, __pyx_t_8);
    __pyx_t_8 = 0;
+0798: 			try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_PyThreadState_assign
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __Pyx_PyThreadState_assign
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      goto __pyx_L1_error;
      __pyx_L16_except_return:;
      __Pyx_PyThreadState_assign
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      goto __pyx_L0;
      __pyx_L20_try_end:;
    }
+0799: 				label = grammar.toid[node.label]
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 799, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_11 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->toid), __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 799, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF_SET(__pyx_v_label, __pyx_t_11);
        __pyx_t_11 = 0;
+0800: 			except KeyError:
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
      if (__pyx_t_10) {
        __Pyx_AddTraceback("discodop.disambiguation.treeparsing", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_8, &__pyx_t_5) < 0) __PYX_ERR(0, 800, __pyx_L15_except_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_t_5);
+0801: 				return [], "'%s' not in grammar" % node.label, None
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_15 = PyList_New(0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 801, __pyx_L15_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 801, __pyx_L15_except_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_16 = PyUnicode_Format(__pyx_kp_u_s_not_in_grammar, __pyx_t_6); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 801, __pyx_L15_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 801, __pyx_L15_except_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_15);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_16);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_16);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_6, 2, Py_None);
        __pyx_t_15 = 0;
        __pyx_t_16 = 0;
        __pyx_r = __pyx_t_6;
        __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L16_except_return;
      }
      goto __pyx_L15_except_error;
      __pyx_L15_except_error:;
 0802: 			# whitelist based on (label, span)
+0803: 			if <unsigned>lensent < sizeof(uint64_t) * 8:
    __pyx_t_3 = ((((unsigned int)__pyx_v_lensent) < ((sizeof(uint64_t)) * 8)) != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L23;
    }
+0804: 				item = SmallChartItem(label, sum([1L << n for n in leaves]))
      __pyx_t_20 = __Pyx_PyInt_As_uint32_t(__pyx_v_label); if (unlikely((__pyx_t_20 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 804, __pyx_L1_error)
      { /* enter inner scope */
        int __pyx_9genexpr22__pyx_v_n;
        __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 804, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (likely(PyList_CheckExact(__pyx_v_leaves)) || PyTuple_CheckExact(__pyx_v_leaves)) {
          __pyx_t_8 = __pyx_v_leaves; __Pyx_INCREF(__pyx_t_8); __pyx_t_21 = 0;
          __pyx_t_22 = NULL;
        } else {
          __pyx_t_21 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_leaves); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 804, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_22 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 804, __pyx_L1_error)
        }
        for (;;) {
          if (likely(!__pyx_t_22)) {
            if (likely(PyList_CheckExact(__pyx_t_8))) {
              if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_21); __Pyx_INCREF(__pyx_t_11); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 804, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_21 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_21); __Pyx_INCREF(__pyx_t_11); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 804, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_22(__pyx_t_8);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 804, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 804, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_9genexpr22__pyx_v_n = __pyx_t_10;
          __pyx_t_11 = __Pyx_PyInt_From_long((1L << __pyx_9genexpr22__pyx_v_n)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 804, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } /* exit inner scope */
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_23 = __Pyx_PyInt_As_uint64_t(__pyx_t_5); if (unlikely((__pyx_t_23 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_item = SmallChartItem(__pyx_t_20, __pyx_t_23);
+0805: 				whitelist.small[label].insert(item)
      __pyx_t_24 = __Pyx_PyInt_As_size_t(__pyx_v_label); if (unlikely((__pyx_t_24 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 805, __pyx_L1_error)
      (__pyx_v_whitelist->small[__pyx_t_24]).insert(__pyx_v_item);
 0806: 			else:
+0807: 				fitem = FatChartItem(label)
    /*else*/ {
      __pyx_t_20 = __Pyx_PyInt_As_uint32_t(__pyx_v_label); if (unlikely((__pyx_t_20 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L1_error)
      __pyx_v_fitem = FatChartItem(__pyx_t_20);
+0808: 				for n in leaves:
      if (likely(PyList_CheckExact(__pyx_v_leaves)) || PyTuple_CheckExact(__pyx_v_leaves)) {
        __pyx_t_5 = __pyx_v_leaves; __Pyx_INCREF(__pyx_t_5); __pyx_t_21 = 0;
        __pyx_t_22 = NULL;
      } else {
        __pyx_t_21 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_leaves); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 808, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_22 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 808, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_22)) {
          if (likely(PyList_CheckExact(__pyx_t_5))) {
            if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_21); __Pyx_INCREF(__pyx_t_8); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 808, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 808, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          } else {
            if (__pyx_t_21 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_21); __Pyx_INCREF(__pyx_t_8); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 808, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 808, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          }
        } else {
          __pyx_t_8 = __pyx_t_22(__pyx_t_5);
          if (unlikely(!__pyx_t_8)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 808, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_8);
        }
        __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 808, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_v_n = __pyx_t_10;
/* … */
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0809: 					SETBIT(fitem.vec, n)
        SETBIT(__pyx_v_fitem.vec, __pyx_v_n);
+0810: 				whitelist.fat[label].insert(fitem)
      __pyx_t_25 = __Pyx_PyInt_As_size_t(__pyx_v_label); if (unlikely((__pyx_t_25 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 810, __pyx_L1_error)
      (__pyx_v_whitelist->fat[__pyx_t_25]).insert(__pyx_v_fitem);
    }
    __pyx_L23:;
 0811: 			# whitelist based on grammar rule
+0812: 			if maskrules and isinstance(node[0], Tree):
    __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_v_maskrules); if (unlikely(__pyx_t_26 < 0)) __PYX_ERR(0, 812, __pyx_L1_error)
    if (__pyx_t_26) {
    } else {
      __pyx_t_3 = __pyx_t_26;
      goto __pyx_L29_bool_binop_done;
    }
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_26 = PyObject_IsInstance(__pyx_t_5, __pyx_t_8); if (unlikely(__pyx_t_26 == -1)) __PYX_ERR(0, 812, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_27 = (__pyx_t_26 != 0);
    __pyx_t_3 = __pyx_t_27;
    __pyx_L29_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+0813: 				try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        goto __pyx_L38_try_end;
        __pyx_L31_error:;
        __Pyx_PyThreadState_assign
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
        __Pyx_PyThreadState_assign
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
        goto __pyx_L1_error;
        __pyx_L34_except_return:;
        __Pyx_PyThreadState_assign
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
        goto __pyx_L0;
        __pyx_L38_try_end:;
      }
+0814: 					ruleno = grammar.getruleno(r, yf)
          if (!(likely(PyTuple_CheckExact(__pyx_v_r))||((__pyx_v_r) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_r)->tp_name), 0))) __PYX_ERR(0, 814, __pyx_L31_error)
          if (!(likely(PyTuple_CheckExact(__pyx_v_yf))||((__pyx_v_yf) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_yf)->tp_name), 0))) __PYX_ERR(0, 814, __pyx_L31_error)
          __pyx_t_8 = ((struct __pyx_vtabstruct_8discodop_10containers_Grammar *)__pyx_v_grammar->__pyx_vtab)->getruleno(__pyx_v_grammar, ((PyObject*)__pyx_v_r), ((PyObject*)__pyx_v_yf), 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 814, __pyx_L31_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_XDECREF_SET(__pyx_v_ruleno, __pyx_t_8);
          __pyx_t_8 = 0;
+0815: 				except KeyError:
        __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
        if (__pyx_t_10) {
          __Pyx_AddTraceback("discodop.disambiguation.treeparsing", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_5, &__pyx_t_11) < 0) __PYX_ERR(0, 815, __pyx_L33_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_11);
+0816: 					return [], "not in grammar: %r %r" % (r, yf), None
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 816, __pyx_L33_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 816, __pyx_L33_except_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_INCREF(__pyx_v_r);
          __Pyx_GIVEREF(__pyx_v_r);
          PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_r);
          __Pyx_INCREF(__pyx_v_yf);
          __Pyx_GIVEREF(__pyx_v_yf);
          PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_v_yf);
          __pyx_t_15 = PyUnicode_Format(__pyx_kp_u_not_in_grammar_r_r, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 816, __pyx_L33_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 816, __pyx_L33_except_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_15);
          PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_15);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyTuple_SET_ITEM(__pyx_t_16, 2, Py_None);
          __pyx_t_6 = 0;
          __pyx_t_15 = 0;
          __pyx_r = __pyx_t_16;
          __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          goto __pyx_L34_except_return;
        }
        goto __pyx_L33_except_error;
        __pyx_L33_except_error:;
+0817: 				if grammar.selfrulemapping is None:
      __pyx_t_3 = (__pyx_v_grammar->selfrulemapping == ((PyObject*)Py_None));
      __pyx_t_27 = (__pyx_t_3 != 0);
      if (__pyx_t_27) {
/* … */
        goto __pyx_L41;
      }
+0818: 					CLEARBIT(grammar.mask, ruleno)
        __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_ruleno); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 818, __pyx_L1_error)
        CLEARBIT(__pyx_v_grammar->mask, __pyx_t_10);
 0819: 				else:
+0820: 					for n in grammar.selfrulemapping[ruleno]:
      /*else*/ {
        if (unlikely(__pyx_v_grammar->selfrulemapping == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 820, __pyx_L1_error)
        }
        __pyx_t_11 = PyObject_GetItem(__pyx_v_grammar->selfrulemapping, __pyx_v_ruleno); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 820, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) {
          __pyx_t_5 = __pyx_t_11; __Pyx_INCREF(__pyx_t_5); __pyx_t_21 = 0;
          __pyx_t_22 = NULL;
        } else {
          __pyx_t_21 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 820, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_22 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 820, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        for (;;) {
          if (likely(!__pyx_t_22)) {
            if (likely(PyList_CheckExact(__pyx_t_5))) {
              if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_5)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_21); __Pyx_INCREF(__pyx_t_11); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 820, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 820, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_21 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_21); __Pyx_INCREF(__pyx_t_11); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 820, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 820, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_22(__pyx_t_5);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 820, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 820, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_v_n = __pyx_t_10;
/* … */
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_L41:;
+0821: 						CLEARBIT(grammar.mask, n)
          CLEARBIT(__pyx_v_grammar->mask, __pyx_v_n);
 0822: 						# if TESTBIT(grammar.mask, n):
 0823: 						# 	CLEARBIT(grammar.mask, n)
 0824: 						# 	selected += 1
 0825: 
 0826: 	# Finally, parse with the small set of allowed labeled spans & rules.
 0827: 	# Do not parse with the PCFG parser even if possible, because that
 0828: 	# requires a different way of pruning.
 0829: 	# FIXME: two pruning mechanisms; want both?
+0830: 	chart, _ = plcfrs.parse(sent, grammar, tags=tags, whitelist=whitelist)
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_plcfrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_parse); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_v_sent);
__Pyx_GIVEREF(__pyx_v_sent);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sent);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_grammar));
__pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_tags, __pyx_v_tags) < 0) __PYX_ERR(0, 830, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_whitelist, ((PyObject *)__pyx_v_whitelist)) < 0) __PYX_ERR(0, 830, __pyx_L1_error)
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 830, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
  PyObject* sequence = __pyx_t_11;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 830, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_t_1);
  #else
  __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  #endif
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_7 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_14 = Py_TYPE(__pyx_t_7)->tp_iternext;
  index = 0; __pyx_t_5 = __pyx_t_14(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L44_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_5);
  index = 1; __pyx_t_1 = __pyx_t_14(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L44_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_7), 2) < 0) __PYX_ERR(0, 830, __pyx_L1_error)
  __pyx_t_14 = NULL;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  goto __pyx_L45_unpacking_done;
  __pyx_L44_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_14 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 830, __pyx_L1_error)
  __pyx_L45_unpacking_done:;
}
__pyx_v_chart = __pyx_t_5;
__pyx_t_5 = 0;
__pyx_v__ = __pyx_t_1;
__pyx_t_1 = 0;
+0831: 	if maskrules:
__pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_v_maskrules); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 831, __pyx_L1_error)
if (__pyx_t_27) {
/* … */
}
+0832: 		grammar.setmask(None)
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_grammar), __pyx_n_s_setmask); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__24 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
 0833: 
+0834: 	if not chart:
__pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_v_chart); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 834, __pyx_L1_error)
__pyx_t_3 = ((!__pyx_t_27) != 0);
if (__pyx_t_3) {
/* … */
}
+0835: 		return [], 'tree parsing failed', chart
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_kp_u_tree_parsing_failed);
  __Pyx_GIVEREF(__pyx_kp_u_tree_parsing_failed);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_kp_u_tree_parsing_failed);
  __Pyx_INCREF(__pyx_v_chart);
  __Pyx_GIVEREF(__pyx_v_chart);
  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_chart);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_11;
  __pyx_t_11 = 0;
  goto __pyx_L0;
+0836: 	return lazykbest(chart, m), '', chart
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lazykbest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 836, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = NULL;
__pyx_t_10 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
  __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
  if (likely(__pyx_t_7)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_1, function);
    __pyx_t_10 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_1)) {
  PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_chart, __pyx_t_5};
  __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 836, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
  PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_chart, __pyx_t_5};
  __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 836, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
} else
#endif
{
  __pyx_t_8 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (__pyx_t_7) {
    __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
  }
  __Pyx_INCREF(__pyx_v_chart);
  __Pyx_GIVEREF(__pyx_v_chart);
  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_v_chart);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_11);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11);
__Pyx_INCREF(__pyx_kp_u__3);
__Pyx_GIVEREF(__pyx_kp_u__3);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_kp_u__3);
__Pyx_INCREF(__pyx_v_chart);
__Pyx_GIVEREF(__pyx_v_chart);
PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_chart);
__pyx_t_11 = 0;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0837: 
 0838: 
+0839: cdef Prob getderivprob(RankedEdge deriv, Chart chart, list sent):
static Prob __pyx_f_8discodop_14disambiguation_getderivprob(RankedEdge __pyx_v_deriv, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, PyObject *__pyx_v_sent) {
Prob __pyx_v_result;
Label __pyx_v_label;
PyObject *__pyx_v_word = NULL;
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("getderivprob", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_WriteUnraisable("discodop.disambiguation.getderivprob", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_word);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0840: 	"""Recursively calculate probability of a derivation.
 0841: 
 0842: 	Useful to obtain probability of derivation under different probability
 0843: 	model of the same grammar."""
 0844: 	cdef Prob result
+0845: 	if deriv.edge.rule is NULL:  # is terminal
__pyx_t_1 = ((__pyx_v_deriv.edge.rule == NULL) != 0);
if (__pyx_t_1) {
/* … */
}
+0846: 		label = chart.label(deriv.head)
  __pyx_v_label = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->label(__pyx_v_chart, __pyx_v_deriv.head);
+0847: 		word = sent[chart.lexidx(deriv.edge)]
  if (unlikely(__pyx_v_sent == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 847, __pyx_L1_error)
  }
  __pyx_t_2 = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->lexidx(__pyx_v_chart, __pyx_v_deriv.edge); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 847, __pyx_L1_error)
  __pyx_t_3 = PyList_GET_ITEM(__pyx_v_sent, __pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_word = __pyx_t_3;
  __pyx_t_3 = 0;
 0848: 		return chart.grammar.lexical[
+0849: 				chart.grammar.lexicalbylhs[label][word.encode('utf8')]].prob
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_word, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __pyx_convert_string_from_py_std__in_string(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_r = (__pyx_v_chart->grammar->lexical[((__pyx_v_chart->grammar->lexicalbylhs[__pyx_v_label])[__pyx_t_5])]).prob;
  goto __pyx_L0;
/* … */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
+0850: 	result = deriv.edge.rule.prob
__pyx_t_6 = __pyx_v_deriv.edge.rule->prob;
__pyx_v_result = __pyx_t_6;
+0851: 	result += getderivprob(chart.rankededges[
__pyx_v_result = (__pyx_v_result + __pyx_f_8discodop_14disambiguation_getderivprob(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->left(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.left]).first, __pyx_v_chart, __pyx_v_sent));
 0852: 			chart.left(deriv)][deriv.left].first,
 0853: 			chart, sent)
+0854: 	if deriv.edge.rule.rhs2:
__pyx_t_1 = (__pyx_v_deriv.edge.rule->rhs2 != 0);
if (__pyx_t_1) {
/* … */
}
+0855: 		result += getderivprob(chart.rankededges[
  __pyx_v_result = (__pyx_v_result + __pyx_f_8discodop_14disambiguation_getderivprob(((__pyx_v_chart->rankededges[((struct __pyx_vtabstruct_8discodop_10containers_Chart *)__pyx_v_chart->__pyx_vtab)->right(__pyx_v_chart, __pyx_v_deriv)])[__pyx_v_deriv.right]).first, __pyx_v_chart, __pyx_v_sent));
 0856: 				chart.right(deriv)][deriv.right].first,
 0857: 				chart, sent)
+0858: 	return result
__pyx_r = __pyx_v_result;
goto __pyx_L0;
 0859: 
+0860: cpdef viterbiderivation(Chart chart):
static PyObject *__pyx_pw_8discodop_14disambiguation_17viterbiderivation(PyObject *__pyx_self, PyObject *__pyx_v_chart); /*proto*/
static PyObject *__pyx_f_8discodop_14disambiguation_viterbiderivation(struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart, CYTHON_UNUSED int __pyx_skip_dispatch) {
PyObject *__pyx_v_derivations = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("viterbiderivation", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("discodop.disambiguation.viterbiderivation", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_derivations);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_17viterbiderivation(PyObject *__pyx_self, PyObject *__pyx_v_chart); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_16viterbiderivation[] = "viterbiderivation(Chart chart)\nWrapper to get Viterbi derivation from chart.";
static PyObject *__pyx_pw_8discodop_14disambiguation_17viterbiderivation(PyObject *__pyx_self, PyObject *__pyx_v_chart) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("viterbiderivation (wrapper)", 0);
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_chart), __pyx_ptype_8discodop_10containers_Chart, 1, "chart", 0))) __PYX_ERR(0, 860, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_16viterbiderivation(__pyx_self, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart));

/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_16viterbiderivation(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("viterbiderivation", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_viterbiderivation(__pyx_v_chart, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;

/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.disambiguation.viterbiderivation", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
 0861: 	"""Wrapper to get Viterbi derivation from chart."""
 0862: 	# Ask for at least 10 derivations because unary cycles.
+0863: 	derivations = lazykbest(chart, 10)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_lazykbest); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_4 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_chart), __pyx_int_10};
  __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_chart), __pyx_int_10};
  __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_1);
} else
#endif
{
  __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_3) {
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
  }
  __Pyx_INCREF(((PyObject *)__pyx_v_chart));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_chart));
  __Pyx_INCREF(__pyx_int_10);
  __Pyx_GIVEREF(__pyx_int_10);
  PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_10);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_derivations = __pyx_t_1;
__pyx_t_1 = 0;
+0864: 	return derivations[0]
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_derivations, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 0865: 
 0866: 
+0867: def doprerank(parsetrees, sent, k, Grammar coarse, Grammar fine):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_19doprerank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_18doprerank[] = "doprerank(parsetrees, sent, k, Grammar coarse, Grammar fine)\nRerank *k*-best coarse trees w/parse probabilities of DOP reduction.\n\n\tcf. ``dopparseprob()``.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_19doprerank = {"doprerank", (PyCFunction)__pyx_pw_8discodop_14disambiguation_19doprerank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_18doprerank};
static PyObject *__pyx_pw_8discodop_14disambiguation_19doprerank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_parsetrees = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_k = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_coarse = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_fine = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("doprerank (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parsetrees,&__pyx_n_s_sent,&__pyx_n_s_k,&__pyx_n_s_coarse,&__pyx_n_s_fine,0};
  PyObject* values[5] = {0,0,0,0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      CYTHON_FALLTHROUGH;
      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      CYTHON_FALLTHROUGH;
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parsetrees)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("doprerank", 1, 5, 5, 1); __PYX_ERR(0, 867, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("doprerank", 1, 5, 5, 2); __PYX_ERR(0, 867, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  3:
      if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coarse)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("doprerank", 1, 5, 5, 3); __PYX_ERR(0, 867, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  4:
      if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fine)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("doprerank", 1, 5, 5, 4); __PYX_ERR(0, 867, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "doprerank") < 0)) __PYX_ERR(0, 867, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
  }
  __pyx_v_parsetrees = values[0];
  __pyx_v_sent = values[1];
  __pyx_v_k = values[2];
  __pyx_v_coarse = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[3]);
  __pyx_v_fine = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[4]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("doprerank", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 867, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.doprerank", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coarse), __pyx_ptype_8discodop_10containers_Grammar, 1, "coarse", 0))) __PYX_ERR(0, 867, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fine), __pyx_ptype_8discodop_10containers_Grammar, 1, "fine", 0))) __PYX_ERR(0, 867, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_18doprerank(__pyx_self, __pyx_v_parsetrees, __pyx_v_sent, __pyx_v_k, __pyx_v_coarse, __pyx_v_fine);

/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8discodop_14disambiguation_18doprerank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_parsetrees, PyObject *__pyx_v_sent, PyObject *__pyx_v_k, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_coarse, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_fine) {
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *__pyx_cur_scope;
PyObject *__pyx_v_derivstr = NULL;
CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
PyObject *__pyx_v_deriv = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("doprerank", 0);
__pyx_cur_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *)__pyx_tp_new_8discodop_14disambiguation___pyx_scope_struct__doprerank(__pyx_ptype_8discodop_14disambiguation___pyx_scope_struct__doprerank, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
  __pyx_cur_scope = ((struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *)Py_None);
  __Pyx_INCREF(Py_None);
  __PYX_ERR(0, 867, __pyx_L1_error)
} else {
  __Pyx_GOTREF(__pyx_cur_scope);
}
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("discodop.disambiguation.doprerank", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_derivstr);
__Pyx_XDECREF(__pyx_v__);
__Pyx_XDECREF(__pyx_v_deriv);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__59 = PyTuple_Pack(10, __pyx_n_s_parsetrees, __pyx_n_s_sent, __pyx_n_s_k, __pyx_n_s_coarse, __pyx_n_s_fine, __pyx_n_s_results, __pyx_n_s_derivstr, __pyx_n_s__39, __pyx_n_s_deriv, __pyx_n_s_msg); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__59);
  __Pyx_GIVEREF(__pyx_tuple__59);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_19doprerank, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doprerank, __pyx_t_5) < 0) __PYX_ERR(0, 867, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_doprerank, 867, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 867, __pyx_L1_error)
/* … */
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank {
  PyObject_HEAD
  PyObject *__pyx_v_results;
};

 0868: 	"""Rerank *k*-best coarse trees w/parse probabilities of DOP reduction.
 0869: 
 0870: 	cf. ``dopparseprob()``."""
+0871: 	cdef list results = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 871, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_cur_scope->__pyx_v_results = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+0872: 	for derivstr, _, _ in nlargest(k, parsetrees, key=itemgetter(1)):
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_nlargest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_v_k);
__Pyx_GIVEREF(__pyx_v_k);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k);
__Pyx_INCREF(__pyx_v_parsetrees);
__Pyx_GIVEREF(__pyx_v_parsetrees);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_parsetrees);
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_itemgetter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_key, __pyx_t_5) < 0) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 872, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
  __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
  __pyx_t_7 = NULL;
} else {
  __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 872, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
for (;;) {
  if (likely(!__pyx_t_7)) {
    if (likely(PyList_CheckExact(__pyx_t_3))) {
      if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 872, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 872, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    }
  } else {
    __pyx_t_5 = __pyx_t_7(__pyx_t_3);
    if (unlikely(!__pyx_t_5)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 872, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_5);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 872, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 872, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 2; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 3) < 0) __PYX_ERR(0, 872, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 872, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __Pyx_XDECREF_SET(__pyx_v_derivstr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);
+0873: 		deriv = addbitsets(derivstr)
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_addbitsets); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  if (!__pyx_t_1) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_derivstr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_derivstr};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_derivstr};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
      __Pyx_INCREF(__pyx_v_derivstr);
      __Pyx_GIVEREF(__pyx_v_derivstr);
      PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_v_derivstr);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XDECREF_SET(__pyx_v_deriv, __pyx_t_5);
  __pyx_t_5 = 0;
+0874: 		results.append((derivstr, exp(dopparseprob(deriv, sent, coarse, fine)),
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_dopparseprob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_deriv, __pyx_v_sent, ((PyObject *)__pyx_v_coarse), ((PyObject *)__pyx_v_fine)};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 874, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_deriv, __pyx_v_sent, ((PyObject *)__pyx_v_coarse), ((PyObject *)__pyx_v_fine)};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 874, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_v_deriv);
    __Pyx_GIVEREF(__pyx_v_deriv);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_deriv);
    __Pyx_INCREF(__pyx_v_sent);
    __Pyx_GIVEREF(__pyx_v_sent);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_v_sent);
    __Pyx_INCREF(((PyObject *)__pyx_v_coarse));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_coarse));
    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, ((PyObject *)__pyx_v_coarse));
    __Pyx_INCREF(((PyObject *)__pyx_v_fine));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fine));
    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, ((PyObject *)__pyx_v_fine));
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  if (!__pyx_t_1) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 874, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_5);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_2};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = NULL;
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 874, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_derivstr);
  __Pyx_GIVEREF(__pyx_v_derivstr);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_derivstr);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_5 = 0;
/* … */
  __pyx_t_12 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_results, __pyx_t_4); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 874, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0875: 				None))
+0876: 	msg = 're-ranked %d parse trees; best tree at %d. ' % (
__pyx_t_4 = PyUnicode_Format(__pyx_kp_u_re_ranked_d_parse_trees_best_tre, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_v_msg = ((PyObject*)__pyx_t_4);
__pyx_t_4 = 0;
+0877: 			len(results),
__pyx_t_3 = __pyx_cur_scope->__pyx_v_results;
__Pyx_INCREF(__pyx_t_3);
if (unlikely(__pyx_t_3 == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
  __PYX_ERR(0, 877, __pyx_L1_error)
}
__pyx_t_6 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 877, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 877, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
/* … */
__pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 877, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
__pyx_t_3 = 0;
__pyx_t_4 = 0;
+0878: 			max(range(len(results)), key=lambda x: results[x][1]) + 1)
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_9doprerank_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_9doprerank_lambda = {"lambda", (PyCFunction)__pyx_pw_8discodop_14disambiguation_9doprerank_lambda, METH_O, 0};
static PyObject *__pyx_pw_8discodop_14disambiguation_9doprerank_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, ((PyObject *)__pyx_v_x));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__pyx_v_x) {
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *__pyx_cur_scope;
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *__pyx_outer_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda", 0);
__pyx_outer_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct__doprerank *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_v_results)) { __Pyx_RaiseClosureNameError("results"); __PYX_ERR(0, 878, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_v_results == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 878, __pyx_L1_error)
}
__pyx_t_1 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_results, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_2;
__pyx_t_2 = 0;
goto __pyx_L0;

/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.disambiguation.doprerank.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_4 = __pyx_cur_scope->__pyx_v_results;
__Pyx_INCREF(__pyx_t_4);
if (unlikely(__pyx_t_4 == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
  __PYX_ERR(0, 878, __pyx_L1_error)
}
__pyx_t_6 = PyList_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
__pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
__pyx_t_4 = 0;
__pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_11 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_9doprerank_lambda, 0, __pyx_n_s_doprerank_locals_lambda, ((PyObject*)__pyx_cur_scope), __pyx_n_s_discodop_disambiguation, __pyx_d, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_key, __pyx_t_11) < 0) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_11, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0879: 	return results, msg
__Pyx_XDECREF(__pyx_r);
__pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_results);
__Pyx_INCREF(__pyx_v_msg);
__Pyx_GIVEREF(__pyx_v_msg);
PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_msg);
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
 0880: 
 0881: 
+0882: def dopparseprob(tree, sent, Grammar coarse, Grammar fine):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_21dopparseprob(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_20dopparseprob[] = "dopparseprob(tree, sent, Grammar coarse, Grammar fine)\nCompute the exact DOP parse probability of a Tree in a DOP reduction.\n\n\tThis follows up on a suggestion made by Goodman (2003, p. 143) of\n\tcalculating DOP probabilities of given parse trees, although I'm not sure\n\tit has complexity *O(nP)* as he suggests (with *n* as number of nodes in\n\tinput, and *P* as max number of rules consistent with a node in the input).\n\tFurthermore, the idea of sampling trees \"long enough\" until we have the MPP\n\tis no faster than sampling without applying this procedure, because to\n\tdetermine that some probability *p* is the maximal probability, we need to\n\tcollect the probability mass *p_seen* of enough parse trees such that we\n\thave some parsetree with probability *p* > (1 - *p_seen*), which requires\n\tfirst seeing almost all parse trees, unless *p* is exceptionally high.\n\tHence, this method is mostly useful in a reranking framework where it is\n\tknown in advance that a small set of trees is of interest.\n\n\tExpects a mapping which gives a list of consistent rules from the reduction\n\tas produced by ``fine.getrulemapping(coarse, re.compile('@[-0-9]+$'))``.\n\n\tNB: this algorithm could also be used to determine the probability of\n\tderivations, but then the input would have to distinguish whether nodes are\n\tinternal nodes of fragments, or whether they join two fragments.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_21dopparseprob = {"dopparseprob", (PyCFunction)__pyx_pw_8discodop_14disambiguation_21dopparseprob, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_20dopparseprob};
static PyObject *__pyx_pw_8discodop_14disambiguation_21dopparseprob(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_tree = 0;
PyObject *__pyx_v_sent = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_coarse = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_fine = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dopparseprob (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tree,&__pyx_n_s_sent,&__pyx_n_s_coarse,&__pyx_n_s_fine,0};
  PyObject* values[4] = {0,0,0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      CYTHON_FALLTHROUGH;
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tree)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("dopparseprob", 1, 4, 4, 1); __PYX_ERR(0, 882, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coarse)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("dopparseprob", 1, 4, 4, 2); __PYX_ERR(0, 882, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  3:
      if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fine)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("dopparseprob", 1, 4, 4, 3); __PYX_ERR(0, 882, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dopparseprob") < 0)) __PYX_ERR(0, 882, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
  }
  __pyx_v_tree = values[0];
  __pyx_v_sent = values[1];
  __pyx_v_coarse = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[2]);
  __pyx_v_fine = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[3]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("dopparseprob", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 882, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.dopparseprob", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coarse), __pyx_ptype_8discodop_10containers_Grammar, 1, "coarse", 0))) __PYX_ERR(0, 882, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fine), __pyx_ptype_8discodop_10containers_Grammar, 1, "fine", 0))) __PYX_ERR(0, 882, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_14disambiguation_20dopparseprob(__pyx_self, __pyx_v_tree, __pyx_v_sent, __pyx_v_coarse, __pyx_v_fine);

/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_20dopparseprob(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tree, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_coarse, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_fine) {
PyObject *__pyx_v_chart = 0;
PyObject *__pyx_v_cell = 0;
ProbRule *__pyx_v_rule;
LexicalRule __pyx_v_lexrule;
PyObject *__pyx_v_n = 0;
PyObject *__pyx_v_pos = 0;
PyObject *__pyx_v_word = NULL;
spp::sparse_hash_map<std::string,std::vector<uint32_t> > ::iterator __pyx_v_it;
uint32_t __pyx_v_lexruleno;
PyObject *__pyx_v_node = NULL;
PyObject *__pyx_v_r = NULL;
PyObject *__pyx_v_yf = NULL;
PyObject *__pyx_v_prod = NULL;
PyObject *__pyx_v_ruleno = NULL;
PyObject *__pyx_v_leftcell = NULL;
PyObject *__pyx_v_rightcell = NULL;
PyObject *__pyx_v_newprob = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("dopparseprob", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("discodop.disambiguation.dopparseprob", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_chart);
__Pyx_XDECREF(__pyx_v_cell);
__Pyx_XDECREF(__pyx_v_n);
__Pyx_XDECREF(__pyx_v_pos);
__Pyx_XDECREF(__pyx_v_word);
__Pyx_XDECREF(__pyx_v_node);
__Pyx_XDECREF(__pyx_v_r);
__Pyx_XDECREF(__pyx_v_yf);
__Pyx_XDECREF(__pyx_v_prod);
__Pyx_XDECREF(__pyx_v_ruleno);
__Pyx_XDECREF(__pyx_v_leftcell);
__Pyx_XDECREF(__pyx_v_rightcell);
__Pyx_XDECREF(__pyx_v_newprob);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__61 = PyTuple_Pack(21, __pyx_n_s_tree, __pyx_n_s_sent, __pyx_n_s_coarse, __pyx_n_s_fine, __pyx_n_s_chart, __pyx_n_s_cell, __pyx_n_s_rule, __pyx_n_s_lexrule, __pyx_n_s_n, __pyx_n_s_pos, __pyx_n_s_word, __pyx_n_s_it, __pyx_n_s_lexruleno, __pyx_n_s_node, __pyx_n_s_r, __pyx_n_s_yf, __pyx_n_s_prod, __pyx_n_s_ruleno, __pyx_n_s_leftcell, __pyx_n_s_rightcell, __pyx_n_s_newprob); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__61);
  __Pyx_GIVEREF(__pyx_tuple__61);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_21dopparseprob, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dopparseprob, __pyx_t_5) < 0) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(4, 0, 21, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_dopparseprob, 882, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 882, __pyx_L1_error)
 0883: 	"""Compute the exact DOP parse probability of a Tree in a DOP reduction.
 0884: 
 0885: 	This follows up on a suggestion made by Goodman (2003, p. 143) of
 0886: 	calculating DOP probabilities of given parse trees, although I'm not sure
 0887: 	it has complexity *O(nP)* as he suggests (with *n* as number of nodes in
 0888: 	input, and *P* as max number of rules consistent with a node in the input).
 0889: 	Furthermore, the idea of sampling trees "long enough" until we have the MPP
 0890: 	is no faster than sampling without applying this procedure, because to
 0891: 	determine that some probability *p* is the maximal probability, we need to
 0892: 	collect the probability mass *p_seen* of enough parse trees such that we
 0893: 	have some parsetree with probability *p* > (1 - *p_seen*), which requires
 0894: 	first seeing almost all parse trees, unless *p* is exceptionally high.
 0895: 	Hence, this method is mostly useful in a reranking framework where it is
 0896: 	known in advance that a small set of trees is of interest.
 0897: 
 0898: 	Expects a mapping which gives a list of consistent rules from the reduction
 0899: 	as produced by ``fine.getrulemapping(coarse, re.compile('@[-0-9]+$'))``.
 0900: 
 0901: 	NB: this algorithm could also be used to determine the probability of
 0902: 	derivations, but then the input would have to distinguish whether nodes are
 0903: 	internal nodes of fragments, or whether they join two fragments."""
+0904: 	cdef dict chart = {}  # chart[bitset][label] = prob
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_chart = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 0905: 	cdef dict cell  # chart[bitset] = cell; cell[label] = prob
 0906: 	cdef ProbRule *rule
 0907: 	cdef LexicalRule lexrule
 0908: 	cdef object n  # pyint
 0909: 	cdef str pos
+0910: 	if not fine.logprob:
__pyx_t_2 = ((!(__pyx_v_fine->logprob != 0)) != 0);
if (__pyx_t_2) {
/* … */
}
+0911: 		raise ValueError('Grammar should have log probabilities.')
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 911, __pyx_L1_error)
/* … */
  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_Grammar_should_have_log_probabil); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
 0912: 	# Log probabilities are not ideal here because we do lots of additions,
 0913: 	# but the probabilities are very small.
 0914: 	# A possible alternative is to scale them somehow.
 0915: 
 0916: 	# add all matching POS tags
+0917: 	for n, pos in tree.pos():
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
  __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
  if (likely(__pyx_t_4)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_3, function);
  }
}
if (__pyx_t_4) {
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __pyx_L1_error)
}
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
  __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
  __pyx_t_6 = NULL;
} else {
  __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 917, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
for (;;) {
  if (likely(!__pyx_t_6)) {
    if (likely(PyList_CheckExact(__pyx_t_3))) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 917, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    } else {
      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 917, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    }
  } else {
    __pyx_t_1 = __pyx_t_6(__pyx_t_3);
    if (unlikely(!__pyx_t_1)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 917, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_1);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 917, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_7);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 917, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L7_unpacking_done;
    __pyx_L6_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 917, __pyx_L1_error)
    __pyx_L7_unpacking_done:;
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 917, __pyx_L1_error)
  __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_XDECREF_SET(__pyx_v_pos, ((PyObject*)__pyx_t_7));
  __pyx_t_7 = 0;
/* … */
  __pyx_L4_continue:;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0918: 		word = sent[n]
  __pyx_t_1 = PyObject_GetItem(__pyx_v_sent, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_1);
  __pyx_t_1 = 0;
+0919: 		chart[1 << n] = cell = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyNumber_Lshift(__pyx_int_1, __pyx_v_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (unlikely(PyDict_SetItem(__pyx_v_chart, __pyx_t_7, __pyx_t_1) < 0)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_XDECREF_SET(__pyx_v_cell, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0920: 		it = fine.lexicalbyword.find(word.encode('utf8'))
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_word, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __pyx_convert_string_from_py_std__in_string(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 920, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_it = __pyx_v_fine->lexicalbyword.find(__pyx_t_10);
/* … */
  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
+0921: 		if it == fine.lexicalbyword.end():
  __pyx_t_2 = ((__pyx_v_it == __pyx_v_fine->lexicalbyword.end()) != 0);
  if (__pyx_t_2) {
/* … */
  }
+0922: 			cell[fine.toid[pos]] = -0.0
    __pyx_t_7 = PyObject_GetItem(((PyObject *)__pyx_v_fine->toid), __pyx_v_pos); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_7, __pyx_float_neg_0_0) < 0)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0923: 			continue
    goto __pyx_L4_continue;
 0924: 		# for lexruleno in fine.lexicalbyword[word]:
+0925: 		for lexruleno in dereference(it).second:
  __pyx_t_12 = &(*__pyx_v_it).second;
  __pyx_t_11 = __pyx_t_12->begin();
  for (;;) {
    if (!(__pyx_t_11 != __pyx_t_12->end())) break;
    __pyx_t_13 = *__pyx_t_11;
    ++__pyx_t_11;
    __pyx_v_lexruleno = __pyx_t_13;
/* … */
  }
+0926: 			lexrule = fine.lexical[lexruleno]
    __pyx_v_lexrule = (__pyx_v_fine->lexical[__pyx_v_lexruleno]);
+0927: 			if (fine.tolabel[lexrule.lhs] == pos
    __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fine->tolabel), __pyx_v_lexrule.lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    if (__pyx_t_2) {
/* … */
    }
+0928: 					or fine.tolabel[lexrule.lhs].startswith(pos + '@')):
    __pyx_t_14 = (__Pyx_PyUnicode_Equals(__pyx_t_7, __pyx_v_pos, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (!__pyx_t_14) {
    } else {
      __pyx_t_2 = __pyx_t_14;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fine->tolabel), __pyx_v_lexrule.lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_pos, __pyx_kp_u__14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    if (!__pyx_t_8) {
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 928, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_7);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 928, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 928, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else
      #endif
      {
        __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 928, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8); __pyx_t_8 = NULL;
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 928, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 928, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_2 = __pyx_t_14;
    __pyx_L12_bool_binop_done:;
+0929: 				cell[lexrule.lhs] = -lexrule.prob
      __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_lexrule.prob)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_lexrule.lhs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_4, __pyx_t_7) < 0)) __PYX_ERR(0, 929, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0930: 
 0931: 	# do post-order traversal (bottom-up)
+0932: 	for node, (r, yf) in list(zip(tree.subtrees(),
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 932, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_4 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
  __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
  if (likely(__pyx_t_4)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_7, function);
  }
}
if (__pyx_t_4) {
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
  __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
}
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 932, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
__pyx_t_3 = 0;
__pyx_t_7 = 0;
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 932, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = PySequence_List(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 932, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
__pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
for (;;) {
  if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 932, __pyx_L1_error)
  #else
  __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #endif
  if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
    PyObject* sequence = __pyx_t_7;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 932, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_15 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_15)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_15); if (unlikely(!__pyx_t_3)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_15); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_15), 2) < 0) __PYX_ERR(0, 932, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    goto __pyx_L17_unpacking_done;
    __pyx_L16_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 932, __pyx_L1_error)
    __pyx_L17_unpacking_done:;
  }
  __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_3);
  __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 932, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_15 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_17 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_17)->tp_iternext;
    index = 0; __pyx_t_15 = __pyx_t_9(__pyx_t_17); if (unlikely(!__pyx_t_15)) goto __pyx_L18_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_15);
    index = 1; __pyx_t_8 = __pyx_t_9(__pyx_t_17); if (unlikely(!__pyx_t_8)) goto __pyx_L18_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_17), 2) < 0) __PYX_ERR(0, 932, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    goto __pyx_L19_unpacking_done;
    __pyx_L18_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 932, __pyx_L1_error)
    __pyx_L19_unpacking_done:;
  }
  __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_15);
  __pyx_t_15 = 0;
  __Pyx_XDECREF_SET(__pyx_v_yf, __pyx_t_8);
  __pyx_t_8 = 0;
/* … */
  __pyx_L14_continue:;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0933: 			lcfrsproductions(tree, sent)))[::-1]:
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_lcfrsproductions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 933, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_15 = NULL;
__pyx_t_16 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
  __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_4);
  if (likely(__pyx_t_15)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_4, function);
    __pyx_t_16 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_v_tree, __pyx_v_sent};
  __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_GOTREF(__pyx_t_7);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_v_tree, __pyx_v_sent};
  __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_GOTREF(__pyx_t_7);
} else
#endif
{
  __pyx_t_1 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__pyx_t_15) {
    __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15); __pyx_t_15 = NULL;
  }
  __Pyx_INCREF(__pyx_v_tree);
  __Pyx_GIVEREF(__pyx_v_tree);
  PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_16, __pyx_v_tree);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_16, __pyx_v_sent);
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
__pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_slice__29); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 933, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_slice__29 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__29)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__29);
  __Pyx_GIVEREF(__pyx_slice__29);
+0934: 		if not isinstance(node[0], Tree):
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_t_7, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_14 = ((!(__pyx_t_2 != 0)) != 0);
  if (__pyx_t_14) {
/* … */
  }
+0935: 			continue
    goto __pyx_L14_continue;
+0936: 		if node.bitset not in chart:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_bitset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_chart, Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 936, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = (__pyx_t_14 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0937: 			chart[node.bitset] = {}
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 937, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_bitset); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 937, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(PyDict_SetItem(__pyx_v_chart, __pyx_t_7, __pyx_t_1) < 0)) __PYX_ERR(0, 937, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0938: 		cell = chart[node.bitset]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_bitset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_chart, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(PyDict_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_XDECREF_SET(__pyx_v_cell, ((PyObject*)__pyx_t_7));
  __pyx_t_7 = 0;
+0939: 		prod = coarse.getruleno(r, yf)
  if (!(likely(PyTuple_CheckExact(__pyx_v_r))||((__pyx_v_r) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_r)->tp_name), 0))) __PYX_ERR(0, 939, __pyx_L1_error)
  if (!(likely(PyTuple_CheckExact(__pyx_v_yf))||((__pyx_v_yf) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_yf)->tp_name), 0))) __PYX_ERR(0, 939, __pyx_L1_error)
  __pyx_t_7 = ((struct __pyx_vtabstruct_8discodop_10containers_Grammar *)__pyx_v_coarse->__pyx_vtab)->getruleno(__pyx_v_coarse, ((PyObject*)__pyx_v_r), ((PyObject*)__pyx_v_yf), 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_XDECREF_SET(__pyx_v_prod, __pyx_t_7);
  __pyx_t_7 = 0;
+0940: 		if len(node) == 1:  # unary node
  __pyx_t_18 = PyObject_Length(__pyx_v_node); if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 940, __pyx_L1_error)
  __pyx_t_2 = ((__pyx_t_18 == 1) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L22;
  }
+0941: 			for ruleno in fine.rulemapping[prod]:
    if (unlikely(__pyx_v_fine->rulemapping == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 941, __pyx_L1_error)
    }
    __pyx_t_7 = PyObject_GetItem(__pyx_v_fine->rulemapping, __pyx_v_prod); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 941, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
      __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_18 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 941, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_7); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 941, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 941, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_7); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 941, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 941, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 941, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XDECREF_SET(__pyx_v_ruleno, __pyx_t_7);
      __pyx_t_7 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0942: 				rule = &(fine.bylhs[0][fine.revrulemap[ruleno]])
      __pyx_t_19 = __Pyx_PyIndex_AsSsize_t(__pyx_v_ruleno); if (unlikely((__pyx_t_19 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L1_error)
      __pyx_v_rule = (&((__pyx_v_fine->bylhs[0])[(__pyx_v_fine->revrulemap[__pyx_t_19])]));
+0943: 				if rule.rhs1 in cell:
      __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->rhs1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 943, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (unlikely(__pyx_v_cell == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 943, __pyx_L1_error)
      }
      __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_t_7, __pyx_v_cell, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 943, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_14 = (__pyx_t_2 != 0);
      if (__pyx_t_14) {
/* … */
      }
+0944: 					if rule.lhs in cell:
        __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 944, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (unlikely(__pyx_v_cell == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 944, __pyx_L1_error)
        }
        __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_t_7, __pyx_v_cell, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 944, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_2 = (__pyx_t_14 != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L26;
        }
+0945: 						cell[rule.lhs] = logprobadd(cell[rule.lhs],
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 945, __pyx_L1_error)
          }
          __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 945, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_cell, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 945, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
          __pyx_t_15 = __pyx_f_8discodop_10containers_logprobadd(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 945, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 945, __pyx_L1_error)
          }
          __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 945, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_8, __pyx_t_15) < 0)) __PYX_ERR(0, 945, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+0946: 								-rule.prob + cell[rule.rhs1])
          __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_rule->prob)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 946, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 946, __pyx_L1_error)
          }
          __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->rhs1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = __Pyx_PyDict_GetItem(__pyx_v_cell, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 946, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 0947: 					else:
+0948: 						cell[rule.lhs] = (-rule.prob + cell[rule.rhs1])
        /*else*/ {
          __pyx_t_15 = PyFloat_FromDouble((-__pyx_v_rule->prob)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 948, __pyx_L1_error)
          }
          __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->rhs1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_cell, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 948, __pyx_L1_error)
          }
          __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_3, __pyx_t_8) < 0)) __PYX_ERR(0, 948, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_L26:;
+0949: 		elif len(node) == 2:  # binary node
  __pyx_t_18 = PyObject_Length(__pyx_v_node); if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 949, __pyx_L1_error)
  __pyx_t_2 = ((__pyx_t_18 == 2) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L22;
  }
+0950: 			leftcell = chart[node[0].bitset]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_bitset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_chart, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_leftcell, __pyx_t_1);
    __pyx_t_1 = 0;
+0951: 			rightcell = chart[node[1].bitset]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_node, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_bitset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_chart, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_rightcell, __pyx_t_1);
    __pyx_t_1 = 0;
+0952: 			for ruleno in fine.rulemapping[prod]:
    if (unlikely(__pyx_v_fine->rulemapping == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 952, __pyx_L1_error)
    }
    __pyx_t_1 = PyObject_GetItem(__pyx_v_fine->rulemapping, __pyx_v_prod); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
      __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8); __pyx_t_18 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_18 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 952, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 952, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_18); __Pyx_INCREF(__pyx_t_1); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 952, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_18); __Pyx_INCREF(__pyx_t_1); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 952, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_8);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 952, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_ruleno, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0953: 				rule = &(fine.bylhs[0][fine.revrulemap[ruleno]])
      __pyx_t_19 = __Pyx_PyIndex_AsSsize_t(__pyx_v_ruleno); if (unlikely((__pyx_t_19 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 953, __pyx_L1_error)
      __pyx_v_rule = (&((__pyx_v_fine->bylhs[0])[(__pyx_v_fine->revrulemap[__pyx_t_19])]));
+0954: 				if (rule.rhs1 in leftcell and rule.rhs2 in rightcell):
      __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->rhs1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 954, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_leftcell, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 954, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_20 = (__pyx_t_14 != 0);
      if (__pyx_t_20) {
      } else {
        __pyx_t_2 = __pyx_t_20;
        goto __pyx_L30_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->rhs2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 954, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_20 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_rightcell, Py_EQ)); if (unlikely(__pyx_t_20 < 0)) __PYX_ERR(0, 954, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = (__pyx_t_20 != 0);
      __pyx_t_2 = __pyx_t_14;
      __pyx_L30_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+0955: 					newprob = (-rule.prob
        __pyx_t_1 = PyFloat_FromDouble((-__pyx_v_rule->prob)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 955, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
+0956: 							+ leftcell[rule.rhs1] + rightcell[rule.rhs2])
        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_leftcell, __pyx_v_rule->rhs1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_15 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_rightcell, __pyx_v_rule->rhs2, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = PyNumber_Add(__pyx_t_15, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 956, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF_SET(__pyx_v_newprob, __pyx_t_1);
        __pyx_t_1 = 0;
+0957: 					if rule.lhs in cell:
        __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(__pyx_v_cell == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 957, __pyx_L1_error)
        }
        __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_cell, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 957, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_14 = (__pyx_t_2 != 0);
        if (__pyx_t_14) {
/* … */
          goto __pyx_L32;
        }
+0958: 						cell[rule.lhs] = logprobadd(cell[rule.lhs], newprob)
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 958, __pyx_L1_error)
          }
          __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_cell, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 958, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = __pyx_f_8discodop_10containers_logprobadd(__pyx_t_3, __pyx_v_newprob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 958, __pyx_L1_error)
          }
          __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 958, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_3, __pyx_t_1) < 0)) __PYX_ERR(0, 958, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0959: 					else:
+0960: 						cell[rule.lhs] = newprob
        /*else*/ {
          if (unlikely(__pyx_v_cell == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 960, __pyx_L1_error)
          }
          __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule->lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(PyDict_SetItem(__pyx_v_cell, __pyx_t_1, __pyx_v_newprob) < 0)) __PYX_ERR(0, 960, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_L32:;
 0961: 		else:
+0962: 			raise ValueError('expected binary tree without empty nodes.')
  /*else*/ {
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 962, __pyx_L1_error)
  }
  __pyx_L22:;
/* … */
  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_u_expected_binary_tree_without_emp); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
+0963: 	return chart[tree.bitset].get(fine.toid[tree.label], float('-inf'))
__Pyx_XDECREF(__pyx_r);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_bitset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_chart, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_fine->toid), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyNumber_Float(__pyx_kp_u_inf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_15 = NULL;
__pyx_t_16 = 0;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
  __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);
  if (likely(__pyx_t_15)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_8, function);
    __pyx_t_16 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_8)) {
  PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_3, __pyx_t_1};
  __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
  PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_3, __pyx_t_1};
  __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else
#endif
{
  __pyx_t_7 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_15) {
    __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_15); __pyx_t_15 = NULL;
  }
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_16, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_16, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
 0964: 
 0965: 
+0966: def mcrerank(parsetrees, sent, k, trees, vocab):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_23mcrerank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_22mcrerank[] = "mcrerank(parsetrees, sent, k, trees, vocab)\nRerank *k*-best trees using tree fragments from training treebank.\n\n\tSearches for trees that share multiple fragments (multi component).";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_23mcrerank = {"mcrerank", (PyCFunction)__pyx_pw_8discodop_14disambiguation_23mcrerank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_22mcrerank};
static PyObject *__pyx_pw_8discodop_14disambiguation_23mcrerank(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_parsetrees = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_k = 0;
PyObject *__pyx_v_trees = 0;
PyObject *__pyx_v_vocab = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("mcrerank (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parsetrees,&__pyx_n_s_sent,&__pyx_n_s_k,&__pyx_n_s_trees,&__pyx_n_s_vocab,0};
  PyObject* values[5] = {0,0,0,0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      CYTHON_FALLTHROUGH;
      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      CYTHON_FALLTHROUGH;
      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      CYTHON_FALLTHROUGH;
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parsetrees)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("mcrerank", 1, 5, 5, 1); __PYX_ERR(0, 966, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  2:
      if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("mcrerank", 1, 5, 5, 2); __PYX_ERR(0, 966, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  3:
      if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trees)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("mcrerank", 1, 5, 5, 3); __PYX_ERR(0, 966, __pyx_L3_error)
      }
      CYTHON_FALLTHROUGH;
      case  4:
      if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vocab)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("mcrerank", 1, 5, 5, 4); __PYX_ERR(0, 966, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mcrerank") < 0)) __PYX_ERR(0, 966, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
  }
  __pyx_v_parsetrees = values[0];
  __pyx_v_sent = values[1];
  __pyx_v_k = values[2];
  __pyx_v_trees = values[3];
  __pyx_v_vocab = values[4];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("mcrerank", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 966, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.mcrerank", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_14disambiguation_22mcrerank(__pyx_self, __pyx_v_parsetrees, __pyx_v_sent, __pyx_v_k, __pyx_v_trees, __pyx_v_vocab);

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_8discodop_14disambiguation_8mcrerank_2generator(__pyx_CoroutineObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_8discodop_14disambiguation_22mcrerank(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_parsetrees, PyObject *__pyx_v_sent, PyObject *__pyx_v_k, PyObject *__pyx_v_trees, PyObject *__pyx_v_vocab) {
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *__pyx_cur_scope;
PyObject *__pyx_v_derivstr = NULL;
PyObject *__pyx_v_prob = NULL;
CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
PyObject *__pyx_v_tmp = NULL;
PyObject *__pyx_v_frags = NULL;
PyObject *__pyx_v_indices = NULL;
PyObject *__pyx_v_score = NULL;
PyObject *__pyx_v_frag = NULL;
PyObject *__pyx_v_idx = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("mcrerank", 0);
__pyx_cur_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *)__pyx_tp_new_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank(__pyx_ptype_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
  __pyx_cur_scope = ((struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *)Py_None);
  __Pyx_INCREF(Py_None);
  __PYX_ERR(0, 966, __pyx_L1_error)
} else {
  __Pyx_GOTREF(__pyx_cur_scope);
}
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_AddTraceback("discodop.disambiguation.mcrerank", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_derivstr);
__Pyx_XDECREF(__pyx_v_prob);
__Pyx_XDECREF(__pyx_v__);
__Pyx_XDECREF(__pyx_v_tmp);
__Pyx_XDECREF(__pyx_v_frags);
__Pyx_XDECREF(__pyx_v_indices);
__Pyx_XDECREF(__pyx_v_score);
__Pyx_XDECREF(__pyx_v_frag);
__Pyx_XDECREF(__pyx_v_idx);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__63 = PyTuple_Pack(20, __pyx_n_s_parsetrees, __pyx_n_s_sent, __pyx_n_s_k, __pyx_n_s_trees, __pyx_n_s_vocab, __pyx_n_s_results, __pyx_n_s_derivstr, __pyx_n_s_prob, __pyx_n_s__39, __pyx_n_s_tmp, __pyx_n_s_frags, __pyx_n_s_indices, __pyx_n_s_score, __pyx_n_s_rev, __pyx_n_s_frag, __pyx_n_s_idx, __pyx_n_s_i, __pyx_n_s_msg, __pyx_n_s_genexpr, __pyx_n_s_genexpr); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__63);
  __Pyx_GIVEREF(__pyx_tuple__63);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_23mcrerank, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mcrerank, __pyx_t_5) < 0) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(5, 0, 20, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_mcrerank, 966, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 966, __pyx_L1_error)
/* … */
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank {
  PyObject_HEAD
  PyObject *__pyx_v_i;
  PyObject *__pyx_v_results;
  PyObject *__pyx_v_rev;
};

 0967: 	"""Rerank *k*-best trees using tree fragments from training treebank.
 0968: 
 0969: 	Searches for trees that share multiple fragments (multi component)."""
+0970: 	cdef list results = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_cur_scope->__pyx_v_results = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+0971: 	for derivstr, prob, _ in nlargest(k, parsetrees, key=itemgetter(1)):
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_nlargest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_v_k);
__Pyx_GIVEREF(__pyx_v_k);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k);
__Pyx_INCREF(__pyx_v_parsetrees);
__Pyx_GIVEREF(__pyx_v_parsetrees);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_parsetrees);
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_itemgetter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_key, __pyx_t_5) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 971, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
  __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
  __pyx_t_7 = NULL;
} else {
  __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 971, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
for (;;) {
  if (likely(!__pyx_t_7)) {
    if (likely(PyList_CheckExact(__pyx_t_3))) {
      if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    }
  } else {
    __pyx_t_5 = __pyx_t_7(__pyx_t_3);
    if (unlikely(!__pyx_t_5)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 971, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_5);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    #if !CYTHON_COMPILING_IN_PYPY
    Py_ssize_t size = Py_SIZE(sequence);
    #else
    Py_ssize_t size = PySequence_Size(sequence);
    #endif
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 971, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 2; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 3) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 971, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __Pyx_XDECREF_SET(__pyx_v_derivstr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_XDECREF_SET(__pyx_v_prob, __pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
/* … */
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0972: 		tmp = _fragments.getctrees(
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_getctrees); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
/* … */
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF_SET(__pyx_v_tmp, __pyx_t_8);
  __pyx_t_8 = 0;
+0973: 				[(addbitsets(derivstr), sent)], vocab=vocab)
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_addbitsets); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  if (!__pyx_t_2) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_derivstr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_derivstr};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_derivstr};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL;
      __Pyx_INCREF(__pyx_v_derivstr);
      __Pyx_GIVEREF(__pyx_v_derivstr);
      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_derivstr);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_sent);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_vocab, __pyx_v_vocab) < 0) __PYX_ERR(0, 973, __pyx_L1_error)
+0974: 		frags = _fragments.extractfragments(
  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_extractfragments); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_0);
  __Pyx_INCREF(__pyx_v_vocab);
  __Pyx_GIVEREF(__pyx_v_vocab);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_vocab);
  __Pyx_INCREF(__pyx_v_trees);
  __Pyx_GIVEREF(__pyx_v_trees);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_trees);
  __pyx_t_8 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_XDECREF_SET(__pyx_v_frags, __pyx_t_4);
  __pyx_t_4 = 0;
+0975: 				tmp['trees1'], 0, 0, vocab, trees,
  __pyx_t_8 = PyObject_GetItem(__pyx_v_tmp, __pyx_n_u_trees1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
+0976: 				disc=True, approx=False)
  __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_disc, Py_True) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_approx, Py_False) < 0) __PYX_ERR(0, 976, __pyx_L1_error)
+0977: 		frags = {frag: bitset for frag, bitset in frags.items()
  { /* enter inner scope */
    PyObject *__pyx_9genexpr23__pyx_v_frag = NULL;
    PyObject *__pyx_9genexpr23__pyx_v_bitset = NULL;
    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 977, __pyx_L9_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = 0;
    if (unlikely(__pyx_v_frags == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "items");
      __PYX_ERR(0, 977, __pyx_L9_error)
    }
    __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_frags, 0, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 977, __pyx_L9_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_8);
    __pyx_t_8 = __pyx_t_1;
    __pyx_t_1 = 0;
    while (1) {
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_8, __pyx_t_11, &__pyx_t_10, &__pyx_t_1, &__pyx_t_5, NULL, __pyx_t_12);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 977, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_frag, __pyx_t_1);
      __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_bitset, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
        if (unlikely(PyDict_SetItem(__pyx_t_4, (PyObject*)__pyx_9genexpr23__pyx_v_frag, (PyObject*)__pyx_9genexpr23__pyx_v_bitset))) __PYX_ERR(0, 977, __pyx_L9_error)
+0978: 				if frag[0].count('(') > 3}
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_9genexpr23__pyx_v_frag, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 978, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 978, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_int_3, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 978, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_14) {
/* … */
      }
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_frag);
    __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_bitset);
    goto __pyx_L13_exit_scope;
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_frag);
    __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_bitset);
    goto __pyx_L1_error;
    __pyx_L13_exit_scope:;
  } /* exit inner scope */
  __Pyx_DECREF_SET(__pyx_v_frags, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_u__12); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
+0979: 		indices = _fragments.exactcounts(
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exactcounts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __Pyx_INCREF(__pyx_v_trees);
  __Pyx_GIVEREF(__pyx_v_trees);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_trees);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_5);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XDECREF_SET(__pyx_v_indices, __pyx_t_4);
  __pyx_t_4 = 0;
+0980: 				tmp['trees1'], trees, list(frags.values()), indices=True)
  __pyx_t_4 = PyObject_GetItem(__pyx_v_tmp, __pyx_n_u_trees1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frags, __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  if (__pyx_t_2) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 980, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 980, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_indices, Py_True) < 0) __PYX_ERR(0, 980, __pyx_L1_error)
+0981: 		score = 0
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_XDECREF_SET(__pyx_v_score, __pyx_int_0);
+0982: 		rev = defaultdict(set)
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  if (!__pyx_t_1) {
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PySet_Type))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, ((PyObject *)(&PySet_Type))};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[2] = {__pyx_t_1, ((PyObject *)(&PySet_Type))};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __pyx_t_1 = NULL;
      __Pyx_INCREF(((PyObject *)(&PySet_Type)));
      __Pyx_GIVEREF(((PyObject *)(&PySet_Type)));
      PyTuple_SET_ITEM(__pyx_t_8, 0+1, ((PyObject *)(&PySet_Type)));
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_rev);
  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_rev, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
+0983: 		for frag, idx in zip(frags, indices):
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_frags);
  __Pyx_GIVEREF(__pyx_v_frags);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_frags);
  __Pyx_INCREF(__pyx_v_indices);
  __Pyx_GIVEREF(__pyx_v_indices);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_indices);
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
    __pyx_t_4 = __pyx_t_5; __Pyx_INCREF(__pyx_t_4); __pyx_t_11 = 0;
    __pyx_t_15 = NULL;
  } else {
    __pyx_t_11 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_15 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 983, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  for (;;) {
    if (likely(!__pyx_t_15)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_11); __Pyx_INCREF(__pyx_t_5); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 983, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_11); __Pyx_INCREF(__pyx_t_5); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 983, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 983, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_15(__pyx_t_4);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 983, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
      PyObject* sequence = __pyx_t_5;
      #if !CYTHON_COMPILING_IN_PYPY
      Py_ssize_t size = Py_SIZE(sequence);
      #else
      Py_ssize_t size = PySequence_Size(sequence);
      #endif
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 983, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      #else
      __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 983, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
      index = 0; __pyx_t_8 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_8)) goto __pyx_L16_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_2), 2) < 0) __PYX_ERR(0, 983, __pyx_L1_error)
      __pyx_t_9 = NULL;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L17_unpacking_done;
      __pyx_L16_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_9 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 983, __pyx_L1_error)
      __pyx_L17_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_frag, __pyx_t_8);
    __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0984: 			# from: frag => (tree idx, freq)...
 0985: 			# to: tree idx => frags...
+0986: 			for i in idx:
    if (likely(PyList_CheckExact(__pyx_v_idx)) || PyTuple_CheckExact(__pyx_v_idx)) {
      __pyx_t_5 = __pyx_v_idx; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0;
      __pyx_t_16 = NULL;
    } else {
      __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 986, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_16 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 986, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_16)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 986, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 986, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_16(__pyx_t_5);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 986, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0987: 				rev[i].add(frag)
      __pyx_t_8 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_rev, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 987, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_add); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 987, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (!__pyx_t_8) {
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_frag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_frag};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_frag};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_17 = PyTuple_New(1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 987, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_8); __pyx_t_8 = NULL;
          __Pyx_INCREF(__pyx_v_frag);
          __Pyx_GIVEREF(__pyx_v_frag);
          PyTuple_SET_ITEM(__pyx_t_17, 0+1, __pyx_v_frag);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0988: 		for i in rev:
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_rev)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_rev)) {
    __pyx_t_4 = __pyx_cur_scope->__pyx_v_rev; __Pyx_INCREF(__pyx_t_4); __pyx_t_11 = 0;
    __pyx_t_15 = NULL;
  } else {
    __pyx_t_11 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_rev); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_15 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 988, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_15)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_11); __Pyx_INCREF(__pyx_t_5); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 988, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 988, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_11); __Pyx_INCREF(__pyx_t_5); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 988, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 988, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_15(__pyx_t_4);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 988, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0989: 			if len(rev[i]) > 1:
    __pyx_t_5 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_rev, __pyx_cur_scope->__pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 989, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_14 = ((__pyx_t_10 > 1) != 0);
    if (__pyx_t_14) {
/* … */
    }
 0990: 				# score is the total number of nodes
 0991: 				# of the common fragments consisting of at least 2 parts
+0992: 				score += sum(frag[0].count('(') for frag in rev[i])
static PyObject *__pyx_pf_8discodop_14disambiguation_8mcrerank_genexpr(PyObject *__pyx_self) {
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_cur_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_2_genexpr *)__pyx_tp_new_8discodop_14disambiguation___pyx_scope_struct_2_genexpr(__pyx_ptype_8discodop_14disambiguation___pyx_scope_struct_2_genexpr, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
  __pyx_cur_scope = ((struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_2_genexpr *)Py_None);
  __Pyx_INCREF(Py_None);
  __PYX_ERR(0, 992, __pyx_L1_error)
} else {
  __Pyx_GOTREF(__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *) __pyx_self;
__Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
{
  __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_8discodop_14disambiguation_8mcrerank_2generator, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_mcrerank_locals_genexpr, __pyx_n_s_discodop_disambiguation); if (unlikely(!gen)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_DECREF(__pyx_cur_scope);
  __Pyx_RefNannyFinishContext();
  return (PyObject *) gen;
}

/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("discodop.disambiguation.mcrerank.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_gb_8discodop_14disambiguation_8mcrerank_2generator(__pyx_CoroutineObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("None", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 992, __pyx_L1_error)
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_rev)) { __Pyx_RaiseClosureNameError("rev"); __PYX_ERR(0, 992, __pyx_L1_error) }
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_i)) { __Pyx_RaiseClosureNameError("i"); __PYX_ERR(0, 992, __pyx_L1_error) }
__pyx_t_1 = PyObject_GetItem(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_rev, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
  __pyx_t_4 = NULL;
} else {
  __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 992, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
for (;;) {
  if (likely(!__pyx_t_4)) {
    if (likely(PyList_CheckExact(__pyx_t_2))) {
      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 992, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    } else {
      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 992, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    }
  } else {
    __pyx_t_1 = __pyx_t_4(__pyx_t_2);
    if (unlikely(!__pyx_t_1)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 992, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_frag);
  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_frag, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_frag, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  __Pyx_XGIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
  __pyx_cur_scope->__pyx_t_1 = __pyx_t_3;
  __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  /* return from generator, yielding value */
  __pyx_generator->resume_label = 1;
  return __pyx_r;
  __pyx_L6_resume_from_yield:;
  __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
  __pyx_cur_scope->__pyx_t_0 = 0;
  __Pyx_XGOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_cur_scope->__pyx_t_1;
  __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 992, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

/* function exit code */
PyErr_SetNone(PyExc_StopIteration);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u__12); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
/* … */
      __pyx_t_5 = __pyx_pf_8discodop_14disambiguation_8mcrerank_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_score, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_2_genexpr {
  PyObject_HEAD
  struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *__pyx_outer_scope;
  PyObject *__pyx_v_frag;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


 0993: 		# divide by number of nodes in derivation to avoid preferring
 0994: 		# larger derivations
+0995: 		score = float(score) / (derivstr.count('(') + len(sent))
  __pyx_t_4 = __Pyx_PyNumber_Float(__pyx_v_score); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_derivstr, __pyx_n_s_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 995, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_u__12); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);
+0996: 		results.append((derivstr, (score, prob), None))
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_score);
  __Pyx_GIVEREF(__pyx_v_score);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_score);
  __Pyx_INCREF(__pyx_v_prob);
  __Pyx_GIVEREF(__pyx_v_prob);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_prob);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_derivstr);
  __Pyx_GIVEREF(__pyx_v_derivstr);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_derivstr);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
  __pyx_t_1 = 0;
  __pyx_t_18 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_results, __pyx_t_2); if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 996, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0997: 	msg = 're-ranked %d parse trees; best tree at %d. ' % (
__pyx_t_2 = PyUnicode_Format(__pyx_kp_u_re_ranked_d_parse_trees_best_tre, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_msg = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+0998: 			len(results),
__pyx_t_3 = __pyx_cur_scope->__pyx_v_results;
__Pyx_INCREF(__pyx_t_3);
if (unlikely(__pyx_t_3 == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
  __PYX_ERR(0, 998, __pyx_L1_error)
}
__pyx_t_6 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 998, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 998, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
/* … */
__pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 998, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
__pyx_t_3 = 0;
__pyx_t_2 = 0;
+0999: 			max(range(len(results)), key=lambda x: results[x][1]) + 1)
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_8mcrerank_3lambda2(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_8mcrerank_3lambda2 = {"lambda2", (PyCFunction)__pyx_pw_8discodop_14disambiguation_8mcrerank_3lambda2, METH_O, 0};
static PyObject *__pyx_pw_8discodop_14disambiguation_8mcrerank_3lambda2(PyObject *__pyx_self, PyObject *__pyx_v_x) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda2 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda2(__pyx_self, ((PyObject *)__pyx_v_x));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda2(PyObject *__pyx_self, PyObject *__pyx_v_x) {
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *__pyx_cur_scope;
struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *__pyx_outer_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda2", 0);
__pyx_outer_scope = (struct __pyx_obj_8discodop_14disambiguation___pyx_scope_struct_1_mcrerank *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_v_results)) { __Pyx_RaiseClosureNameError("results"); __PYX_ERR(0, 999, __pyx_L1_error) }
if (unlikely(__pyx_cur_scope->__pyx_v_results == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
  __PYX_ERR(0, 999, __pyx_L1_error)
}
__pyx_t_1 = PyObject_GetItem(__pyx_cur_scope->__pyx_v_results, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_2;
__pyx_t_2 = 0;
goto __pyx_L0;

/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.disambiguation.mcrerank.lambda2", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __pyx_cur_scope->__pyx_v_results;
__Pyx_INCREF(__pyx_t_2);
if (unlikely(__pyx_t_2 == Py_None)) {
  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
  __PYX_ERR(0, 999, __pyx_L1_error)
}
__pyx_t_6 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
__pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
__pyx_t_2 = 0;
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_8mcrerank_3lambda2, 0, __pyx_n_s_mcrerank_locals_lambda, ((PyObject*)__pyx_cur_scope), __pyx_n_s_discodop_disambiguation, __pyx_d, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_key, __pyx_t_4) < 0) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1000: 	return results, msg
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1000, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_results);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_results);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_results);
__Pyx_INCREF(__pyx_v_msg);
__Pyx_GIVEREF(__pyx_v_msg);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
__pyx_r = __pyx_t_2;
__pyx_t_2 = 0;
goto __pyx_L0;
 1001: 
 1002: 
+1003: def ostagderivation(derivtreestr, sent):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_25ostagderivation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_24ostagderivation[] = "ostagderivation(derivtreestr, sent)\nExtract the list of fragments that were used in a given derivation.\n\n\t:returns: a list of fragments of the form ``(tree, sent)``";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_25ostagderivation = {"ostagderivation", (PyCFunction)__pyx_pw_8discodop_14disambiguation_25ostagderivation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_24ostagderivation};
static PyObject *__pyx_pw_8discodop_14disambiguation_25ostagderivation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_derivtreestr = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("ostagderivation (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_derivtreestr,&__pyx_n_s_sent,0};
  PyObject* values[2] = {0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_derivtreestr)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("ostagderivation", 1, 2, 2, 1); __PYX_ERR(0, 1003, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ostagderivation") < 0)) __PYX_ERR(0, 1003, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
  }
  __pyx_v_derivtreestr = values[0];
  __pyx_v_sent = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("ostagderivation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1003, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.ostagderivation", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_14disambiguation_24ostagderivation(__pyx_self, __pyx_v_derivtreestr, __pyx_v_sent);

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_24ostagderivation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_derivtreestr, PyObject *__pyx_v_sent) {
PyObject *__pyx_v_derivtree = NULL;
PyObject *__pyx_v_tmp = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("ostagderivation", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("discodop.disambiguation.ostagderivation", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_derivtree);
__Pyx_XDECREF(__pyx_v_tmp);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__65 = PyTuple_Pack(4, __pyx_n_s_derivtreestr, __pyx_n_s_sent, __pyx_n_s_derivtree, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__65);
  __Pyx_GIVEREF(__pyx_tuple__65);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_25ostagderivation, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ostagderivation, __pyx_t_5) < 0) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_ostagderivation, 1003, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 1003, __pyx_L1_error)
 1004: 	"""Extract the list of fragments that were used in a given derivation.
 1005: 
 1006: 	:returns: a list of fragments of the form ``(tree, sent)``"""
+1007: 	derivtree = ParentedTree(derivtreestr)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParentedTree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1007, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
  }
}
if (!__pyx_t_3) {
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_derivtreestr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
} else {
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_derivtreestr};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_derivtreestr};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
    __Pyx_INCREF(__pyx_v_derivtreestr);
    __Pyx_GIVEREF(__pyx_v_derivtreestr);
    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_derivtreestr);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_v_derivtree = __pyx_t_1;
__pyx_t_1 = 0;
 1008: 	# tmp = [REMOVEDEC.sub('', str(splitostagfrag(node, sent)))
+1009: 	try:
{
  /*try:*/ {
/* … */
  }
  __pyx_L3_error:;
  __Pyx_PyThreadState_assign
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __Pyx_PyThreadState_assign
  __Pyx_XGIVEREF(__pyx_t_5);
  __Pyx_XGIVEREF(__pyx_t_6);
  __Pyx_XGIVEREF(__pyx_t_7);
  __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
  goto __pyx_L1_error;
  __pyx_L7_try_return:;
  __Pyx_PyThreadState_assign
  __Pyx_XGIVEREF(__pyx_t_5);
  __Pyx_XGIVEREF(__pyx_t_6);
  __Pyx_XGIVEREF(__pyx_t_7);
  __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
  goto __pyx_L0;
  __pyx_L6_except_return:;
  __Pyx_PyThreadState_assign
  __Pyx_XGIVEREF(__pyx_t_5);
  __Pyx_XGIVEREF(__pyx_t_6);
  __Pyx_XGIVEREF(__pyx_t_7);
  __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
  goto __pyx_L0;
}
+1010: 		tmp = [str(splitostagfrag(node, sent))
    { /* enter inner scope */
      PyObject *__pyx_9genexpr25__pyx_v_node = NULL;
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_splitostagfrag); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1010, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = NULL;
        __pyx_t_12 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
            __pyx_t_12 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_9genexpr25__pyx_v_node, __pyx_v_sent};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L11_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_9genexpr25__pyx_v_node, __pyx_v_sent};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L11_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_8 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (__pyx_t_3) {
            __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
          }
          __Pyx_INCREF(__pyx_9genexpr25__pyx_v_node);
          __Pyx_GIVEREF(__pyx_9genexpr25__pyx_v_node);
          PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_12, __pyx_9genexpr25__pyx_v_node);
          __Pyx_INCREF(__pyx_v_sent);
          __Pyx_GIVEREF(__pyx_v_sent);
          PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_12, __pyx_v_sent);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1010, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1010, __pyx_L11_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1011: 				for node in derivtree.subtrees(ostagfrontiernt)]
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_derivtree, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1011, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ostagfrontiernt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1011, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (!__pyx_t_8) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        {
          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1011, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
        __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0;
        __pyx_t_11 = NULL;
      } else {
        __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1011, __pyx_L11_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1011, __pyx_L11_error)
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      for (;;) {
        if (likely(!__pyx_t_11)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1011, __pyx_L11_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1011, __pyx_L11_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_11(__pyx_t_4);
          if (unlikely(!__pyx_t_2)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 1011, __pyx_L11_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr25__pyx_v_node, __pyx_t_2);
        __pyx_t_2 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_node);
      goto __pyx_L14_exit_scope;
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_node);
      goto __pyx_L3_error;
      __pyx_L14_exit_scope:;
    } /* exit inner scope */
    __pyx_v_tmp = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+1012: 		return [_fragments.pygetsent(frag) for frag in tmp]
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      PyObject *__pyx_9genexpr26__pyx_v_frag = NULL;
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __pyx_v_tmp; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0;
      for (;;) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1012, __pyx_L17_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
        __Pyx_XDECREF_SET(__pyx_9genexpr26__pyx_v_frag, __pyx_t_2);
        __pyx_t_2 = 0;
        __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_fragments); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1012, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_pygetsent); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1012, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
          }
        }
        if (!__pyx_t_9) {
          __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_9genexpr26__pyx_v_frag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_2);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_8)) {
            PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_9genexpr26__pyx_v_frag};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L17_error)
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
            PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_9genexpr26__pyx_v_frag};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L17_error)
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          {
            __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1012, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); __pyx_t_9 = NULL;
            __Pyx_INCREF(__pyx_9genexpr26__pyx_v_frag);
            __Pyx_GIVEREF(__pyx_9genexpr26__pyx_v_frag);
            PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_9genexpr26__pyx_v_frag);
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1012, __pyx_L17_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_9genexpr26__pyx_v_frag);
      goto __pyx_L20_exit_scope;
      __pyx_L17_error:;
      __Pyx_XDECREF(__pyx_9genexpr26__pyx_v_frag);
      goto __pyx_L3_error;
      __pyx_L20_exit_scope:;
    } /* exit inner scope */
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L7_try_return;
+1013: 	except:
  /*except:*/ {
    __Pyx_AddTraceback("discodop.disambiguation.ostagderivation", __pyx_clineno, __pyx_lineno, __pyx_filename);
    if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 1013, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_t_2);
+1014: 		return []
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1014, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_r = __pyx_t_8;
    __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L6_except_return;
  }
  __pyx_L5_except_error:;
 1015: 
 1016: 
+1017: def ostagfrontiernt(node):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_27ostagfrontiernt(PyObject *__pyx_self, PyObject *__pyx_v_node); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_26ostagfrontiernt[] = "ostagfrontiernt(node)\nTest if osTAG derivation node is a substitution/adjunction site.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_27ostagfrontiernt = {"ostagfrontiernt", (PyCFunction)__pyx_pw_8discodop_14disambiguation_27ostagfrontiernt, METH_O, __pyx_doc_8discodop_14disambiguation_26ostagfrontiernt};
static PyObject *__pyx_pw_8discodop_14disambiguation_27ostagfrontiernt(PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("ostagfrontiernt (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_26ostagfrontiernt(__pyx_self, ((PyObject *)__pyx_v_node));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_26ostagfrontiernt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_node) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("ostagfrontiernt", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("discodop.disambiguation.ostagfrontiernt", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__67 = PyTuple_Pack(1, __pyx_n_s_node); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 1017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__67);
  __Pyx_GIVEREF(__pyx_tuple__67);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_27ostagfrontiernt, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ostagfrontiernt, __pyx_t_5) < 0) __PYX_ERR(0, 1017, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_ostagfrontiernt, 1017, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 1017, __pyx_L1_error)
 1018: 	"""Test if osTAG derivation node is a substitution/adjunction site."""
+1019: 	return ('@' not in node.label
__Pyx_XDECREF(__pyx_r);
/* … */
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1019, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1019, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (!__pyx_t_3) {
} else {
/* … */
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L3_bool_binop_done;
}
+1020: 			or '[' in node.label and '[' not in node.parent.label)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_3) {
} else {
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L3_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_parent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1020, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __pyx_t_4;
__pyx_t_4 = 0;
__pyx_L3_bool_binop_done:;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 1021: 
 1022: 
+1023: def splitostagfrag(node, sent):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_29splitostagfrag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_28splitostagfrag[] = "splitostagfrag(node, sent)\nReturn copy of tree after pruning subtrees that are subst/adj sites.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_29splitostagfrag = {"splitostagfrag", (PyCFunction)__pyx_pw_8discodop_14disambiguation_29splitostagfrag, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_14disambiguation_28splitostagfrag};
static PyObject *__pyx_pw_8discodop_14disambiguation_29splitostagfrag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_node = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("splitostagfrag (wrapper)", 0);
{
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_node,&__pyx_n_s_sent,0};
  PyObject* values[2] = {0,0};
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args;
    const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    switch (pos_args) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      CYTHON_FALLTHROUGH;
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      CYTHON_FALLTHROUGH;
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    kw_args = PyDict_Size(__pyx_kwds);
    switch (pos_args) {
      case  0:
      if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_node)) != 0)) kw_args--;
      else goto __pyx_L5_argtuple_error;
      CYTHON_FALLTHROUGH;
      case  1:
      if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
      else {
        __Pyx_RaiseArgtupleInvalid("splitostagfrag", 1, 2, 2, 1); __PYX_ERR(0, 1023, __pyx_L3_error)
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "splitostagfrag") < 0)) __PYX_ERR(0, 1023, __pyx_L3_error)
    }
  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
    goto __pyx_L5_argtuple_error;
  } else {
    values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
  }
  __pyx_v_node = values[0];
  __pyx_v_sent = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("splitostagfrag", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1023, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.disambiguation.splitostagfrag", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_14disambiguation_28splitostagfrag(__pyx_self, __pyx_v_node, __pyx_v_sent);

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_28splitostagfrag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_node, PyObject *__pyx_v_sent) {
PyObject *__pyx_v_children = NULL;
PyObject *__pyx_v_child = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("splitostagfrag", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("discodop.disambiguation.splitostagfrag", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_children);
__Pyx_XDECREF(__pyx_v_child);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__69 = PyTuple_Pack(4, __pyx_n_s_node, __pyx_n_s_sent, __pyx_n_s_children, __pyx_n_s_child); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__69);
  __Pyx_GIVEREF(__pyx_tuple__69);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_29splitostagfrag, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_splitostagfrag, __pyx_t_5) < 0) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_splitostagfrag, 1023, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 1023, __pyx_L1_error)
 1024: 	"""Return copy of tree after pruning subtrees that are subst/adj sites."""
+1025: 	children = []
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1025, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_children = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
 1026: 	# FIXME: hopefully this can be simplified...
+1027: 	for child in node:
if (likely(PyList_CheckExact(__pyx_v_node)) || PyTuple_CheckExact(__pyx_v_node)) {
  __pyx_t_1 = __pyx_v_node; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  __pyx_t_3 = NULL;
} else {
  __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1027, __pyx_L1_error)
}
for (;;) {
  if (likely(!__pyx_t_3)) {
    if (likely(PyList_CheckExact(__pyx_t_1))) {
      if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1027, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1027, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    } else {
      if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1027, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1027, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    }
  } else {
    __pyx_t_4 = __pyx_t_3(__pyx_t_1);
    if (unlikely(!__pyx_t_4)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 1027, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_4);
  __pyx_t_4 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1028: 		if not isinstance(child, Tree):
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_child, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+1029: 			children.append('%d=%s' % (child, sent[child]))
    __pyx_t_4 = PyObject_GetItem(__pyx_v_sent, __pyx_v_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_child);
    __Pyx_GIVEREF(__pyx_v_child);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_child);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_d_s, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1029, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1030: 		elif '@' not in child.label or (
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_4, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = (__pyx_t_5 != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_6 = __pyx_t_9;
    goto __pyx_L6_bool_binop_done;
  }
/* … */
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+1031: 				'[' not in child.label and '[' in node.label
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_NE)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = (__pyx_t_9 != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L6_bool_binop_done;
  }
/* … */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1031, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_9 = (__pyx_t_5 != 0);
  if (__pyx_t_9) {
  } else {
    __pyx_t_6 = __pyx_t_9;
    goto __pyx_L6_bool_binop_done;
  }
+1032: 				and node.label.endswith(child.label + ']')):
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_endswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_11 = PyNumber_Add(__pyx_t_7, __pyx_kp_u__36); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  if (!__pyx_t_7) {
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_11};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_11};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else
    #endif
    {
      __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1032, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_7); __pyx_t_7 = NULL;
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_11);
      __pyx_t_11 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1032, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __pyx_t_9;
  __pyx_L6_bool_binop_done:;
 1033: 			# this is a substitution site, or a foot node:
+1034: 			children.append(Tree(child.label,
    __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
/* … */
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1034, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1035: 					['%d:%d' % (min(child.leaves()), max(child.leaves()))]))
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    if (__pyx_t_13) {
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else {
      __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1035, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_7, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    if (__pyx_t_14) {
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    } else {
      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_7);
    __pyx_t_11 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_d_d, __pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_7);
    PyList_SET_ITEM(__pyx_t_13, 0, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_12, __pyx_t_13};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1034, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_12, __pyx_t_13};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1034, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_15, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_15, __pyx_t_13);
      __pyx_t_12 = 0;
      __pyx_t_13 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1034, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1036: 		elif '[' in child.label and '[' not in node.label:
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = (__pyx_t_9 != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = (__pyx_t_5 != 0);
  __pyx_t_6 = __pyx_t_9;
  __pyx_L10_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
 1037: 			# this is an adjunction site, skip aux tree until foot node:
+1038: 			while '[' in child.label:
    while (1) {
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1038, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = (__pyx_t_6 != 0);
      if (!__pyx_t_9) break;
+1039: 				if (spinal(child[0])
      __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_spinal); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1039, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1039, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      if (!__pyx_t_13) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1039, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_11};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1039, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_11};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1039, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13); __pyx_t_13 = NULL;
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1039, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L15_bool_binop_done;
      }
/* … */
      if (__pyx_t_9) {
/* … */
        goto __pyx_L14;
      }
+1040: 						or child.label.endswith(child[0].label + ']')):
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_endswith); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_label); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_kp_u__36); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_12, function);
        }
      }
      if (!__pyx_t_11) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1040, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_12)) {
          PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_10};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1040, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
          PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_10};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1040, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        {
          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL;
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_10);
          __pyx_t_10 = 0;
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1040, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = __pyx_t_6;
      __pyx_L15_bool_binop_done:;
+1041: 					child = child[0]
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1041, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF_SET(__pyx_v_child, __pyx_t_4);
        __pyx_t_4 = 0;
 1042: 				else:
+1043: 					child = child[1]
      /*else*/ {
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_child, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1043, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF_SET(__pyx_v_child, __pyx_t_4);
        __pyx_t_4 = 0;
      }
      __pyx_L14:;
    }
+1044: 			if '@' in child.label:  # add rest of initial tree
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__14, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1044, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (__pyx_t_9 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L17;
    }
+1045: 				children.extend(
      __pyx_t_8 = __Pyx_PyList_Extend(__pyx_v_children, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1045, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1046: 						['%d=%s' % (child[0], sent[child[0]])]
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_10 = PyObject_GetItem(__pyx_v_sent, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_10);
        __pyx_t_12 = 0;
        __pyx_t_10 = 0;
        __pyx_t_10 = PyUnicode_Format(__pyx_kp_u_d_s, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1046, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_10);
        PyList_SET_ITEM(__pyx_t_13, 0, __pyx_t_10);
        __pyx_t_10 = 0;
        __pyx_t_4 = __pyx_t_13;
        __pyx_t_13 = 0;
      } else {
+1047: 						if isinstance(child[0], int)
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1047, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_6 = PyInt_Check(__pyx_t_12); 
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if ((__pyx_t_6 != 0)) {
+1048: 						else splitostagfrag(child, sent))
        __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_splitostagfrag); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1048, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_12 = NULL;
        __pyx_t_15 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_15 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_child, __pyx_v_sent};
          __pyx_t_13 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1048, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_13);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_child, __pyx_v_sent};
          __pyx_t_13 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1048, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_13);
        } else
        #endif
        {
          __pyx_t_11 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1048, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); __pyx_t_12 = NULL;
          }
          __Pyx_INCREF(__pyx_v_child);
          __Pyx_GIVEREF(__pyx_v_child);
          PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_15, __pyx_v_child);
          __Pyx_INCREF(__pyx_v_sent);
          __Pyx_GIVEREF(__pyx_v_sent);
          PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_15, __pyx_v_sent);
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1048, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_4 = __pyx_t_13;
        __pyx_t_13 = 0;
      }
 1049: 			else:  # this is a substitution site
+1050: 				children.append(
    /*else*/ {
/* … */
      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_13); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1050, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __pyx_L17:;
+1051: 						'%d:%d' % (min(child.leaves()), max(child.leaves())))
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      if (__pyx_t_10) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else {
        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_leaves); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      if (__pyx_t_11) {
        __pyx_t_13 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        __pyx_t_13 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_10, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_13);
      __pyx_t_4 = 0;
      __pyx_t_13 = 0;
      __pyx_t_13 = PyUnicode_Format(__pyx_kp_u_d_d, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 1052: 		else:
+1053: 			children.append(
  /*else*/ {
/* … */
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_children, __pyx_t_13); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1053, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __pyx_L5:;
+1054: 					ParentedTree(child.label,
      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParentedTree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1054, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_label); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1054, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
+1055: 						['%d=%s' % (child[0], sent[child[0]])])
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_14 = PyObject_GetItem(__pyx_v_sent, __pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_14);
      __pyx_t_12 = 0;
      __pyx_t_14 = 0;
      __pyx_t_14 = PyUnicode_Format(__pyx_kp_u_d_s, __pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_14);
      PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_14);
      __pyx_t_14 = 0;
      __pyx_t_14 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_11, __pyx_t_7};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_11, __pyx_t_7};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      {
        __pyx_t_12 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__pyx_t_14) {
          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_14); __pyx_t_14 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_15, __pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_15, __pyx_t_7);
        __pyx_t_11 = 0;
        __pyx_t_7 = 0;
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_13 = __pyx_t_10;
      __pyx_t_10 = 0;
    } else {
+1056: 					if isinstance(child[0], int)
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_child, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_6 = PyInt_Check(__pyx_t_10); 
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if ((__pyx_t_6 != 0)) {
+1057: 					else splitostagfrag(child, sent))
      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_splitostagfrag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1057, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_child, __pyx_v_sent};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1057, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_10);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_v_child, __pyx_v_sent};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1057, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_10);
      } else
      #endif
      {
        __pyx_t_7 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1057, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__pyx_t_12) {
          __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_12); __pyx_t_12 = NULL;
        }
        __Pyx_INCREF(__pyx_v_child);
        __Pyx_GIVEREF(__pyx_v_child);
        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, __pyx_v_child);
        __Pyx_INCREF(__pyx_v_sent);
        __Pyx_GIVEREF(__pyx_v_sent);
        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_v_sent);
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1057, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_13 = __pyx_t_10;
      __pyx_t_10 = 0;
    }
+1058: 	return Tree(node.label, children)
__Pyx_XDECREF(__pyx_r);
__pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1058, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1058, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_4 = NULL;
__pyx_t_15 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
  __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_13);
  if (likely(__pyx_t_4)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_13, function);
    __pyx_t_15 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_13)) {
  PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_10, __pyx_v_children};
  __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
  PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_10, __pyx_v_children};
  __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
{
  __pyx_t_7 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_4) {
    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
  }
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, __pyx_t_10);
  __Pyx_INCREF(__pyx_v_children);
  __Pyx_GIVEREF(__pyx_v_children);
  PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_v_children);
  __pyx_t_10 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
 1059: 
 1060: 
+1061: def removeadjunaries(tree):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_31removeadjunaries(PyObject *__pyx_self, PyObject *__pyx_v_tree); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_30removeadjunaries[] = "removeadjunaries(tree)\nRemove artificial unary adjunction nodes from osTAG derivation.";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_31removeadjunaries = {"removeadjunaries", (PyCFunction)__pyx_pw_8discodop_14disambiguation_31removeadjunaries, METH_O, __pyx_doc_8discodop_14disambiguation_30removeadjunaries};
static PyObject *__pyx_pw_8discodop_14disambiguation_31removeadjunaries(PyObject *__pyx_self, PyObject *__pyx_v_tree) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("removeadjunaries (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_30removeadjunaries(__pyx_self, ((PyObject *)__pyx_v_tree));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8discodop_14disambiguation_30removeadjunaries(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tree) {
PyObject *__pyx_v_node = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("removeadjunaries", 0);
__Pyx_INCREF(__pyx_v_tree);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("discodop.disambiguation.removeadjunaries", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_node);
__Pyx_XDECREF(__pyx_v_tree);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__71 = PyTuple_Pack(2, __pyx_n_s_tree, __pyx_n_s_node); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 1061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__71);
  __Pyx_GIVEREF(__pyx_tuple__71);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_31removeadjunaries, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_removeadjunaries, __pyx_t_5) < 0) __PYX_ERR(0, 1061, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_removeadjunaries, 1061, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 1061, __pyx_L1_error)
 1062: 	"""Remove artificial unary adjunction nodes from osTAG derivation."""
+1063: 	tree = Tree(tree)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
  }
}
if (!__pyx_t_3) {
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_tree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
} else {
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_tree};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_tree};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
    __Pyx_INCREF(__pyx_v_tree);
    __Pyx_GIVEREF(__pyx_v_tree);
    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_tree);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v_tree, __pyx_t_1);
__pyx_t_1 = 0;
+1064: 	for node in tree.subtrees(lambda n: '[' not in n.label
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_16removeadjunaries_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_n); /*proto*/
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_16removeadjunaries_lambda3 = {"lambda3", (PyCFunction)__pyx_pw_8discodop_14disambiguation_16removeadjunaries_lambda3, METH_O, 0};
static PyObject *__pyx_pw_8discodop_14disambiguation_16removeadjunaries_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_n) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda3 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda3(__pyx_self, ((PyObject *)__pyx_v_n));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda3", 0);
/* … */
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_2, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_3) {
} else {
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L3_bool_binop_done;
}
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("discodop.disambiguation.removeadjunaries.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_tree, __pyx_n_s_subtrees); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_16removeadjunaries_lambda3, 0, __pyx_n_s_removeadjunaries_locals_lambda, NULL, __pyx_n_s_discodop_disambiguation, __pyx_d, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1064, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
  }
}
if (!__pyx_t_3) {
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_t_1);
} else {
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
  __pyx_t_7 = NULL;
} else {
  __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1064, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
for (;;) {
  if (likely(!__pyx_t_7)) {
    if (likely(PyList_CheckExact(__pyx_t_2))) {
      if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    } else {
      if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      #endif
    }
  } else {
    __pyx_t_1 = __pyx_t_7(__pyx_t_2);
    if (unlikely(!__pyx_t_1)) {
      PyObject* exc_type = PyErr_Occurred();
      if (exc_type) {
        if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
        else __PYX_ERR(0, 1064, __pyx_L1_error)
      }
      break;
    }
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_1);
  __pyx_t_1 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1065: 			and isinstance(n[0], Tree) and '[' in n[0].label):
__Pyx_XDECREF(__pyx_r);
/* … */
__pyx_t_2 = __Pyx_GetItemInt(__pyx_v_n, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_3 = PyObject_IsInstance(__pyx_t_2, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__pyx_t_3) {
} else {
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L3_bool_binop_done;
}
__pyx_t_4 = __Pyx_GetItemInt(__pyx_v_n, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_u__35, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = __pyx_t_2;
__pyx_t_2 = 0;
__pyx_L3_bool_binop_done:;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
+1066: 		node.label = node[0].label
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_label); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_node, __pyx_n_s_label, __pyx_t_5) < 0) __PYX_ERR(0, 1066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1067: 		node[:] = node[0]
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_PyObject_SetSlice(__pyx_v_node, __pyx_t_5, 0, 0, NULL, NULL, &__pyx_slice__37, 0, 0, 0) < 0) __PYX_ERR(0, 1067, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_slice__37 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 1067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__37);
  __Pyx_GIVEREF(__pyx_slice__37);
+1068: 	return str(tree)
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1068, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_v_tree);
__Pyx_GIVEREF(__pyx_v_tree);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_tree);
__pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1068, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_5;
__pyx_t_5 = 0;
goto __pyx_L0;
 1069: 
 1070: 
+1071: def test():
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_33test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_14disambiguation_32test[] = "test()";
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_33test = {"test", (PyCFunction)__pyx_pw_8discodop_14disambiguation_33test, METH_NOARGS, __pyx_doc_8discodop_14disambiguation_32test};
static PyObject *__pyx_pw_8discodop_14disambiguation_33test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("test (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_32test(__pyx_self);

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_8discodop_14disambiguation_32test(CYTHON_UNUSED PyObject *__pyx_self) {
PyObject *__pyx_v_dopreduction = NULL;
PyObject *__pyx_v_Grammar = NULL;
PyObject *__pyx_v_plcfrs = NULL;
PyObject *__pyx_v_e = 0;
PyObject *__pyx_v_trees = NULL;
PyObject *__pyx_v_sents = NULL;
PyObject *__pyx_v_xgrammar = NULL;
PyObject *__pyx_v_altweights = NULL;
PyObject *__pyx_v_grammar = NULL;
PyObject *__pyx_v_sent = NULL;
PyObject *__pyx_v_chart = NULL;
CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
PyObject *__pyx_v_vitderiv = NULL;
PyObject *__pyx_v_vitprob = NULL;
PyObject *__pyx_v_mpd = NULL;
PyObject *__pyx_v_mpp = NULL;
PyObject *__pyx_v_mcp = NULL;
PyObject *__pyx_v_sldop_ = NULL;
PyObject *__pyx_v_sldopsimple = NULL;
PyObject *__pyx_v_short = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("test", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_AddTraceback("discodop.disambiguation.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dopreduction);
__Pyx_XDECREF(__pyx_v_Grammar);
__Pyx_XDECREF(__pyx_v_plcfrs);
__Pyx_XDECREF(__pyx_v_e);
__Pyx_XDECREF(__pyx_v_trees);
__Pyx_XDECREF(__pyx_v_sents);
__Pyx_XDECREF(__pyx_v_xgrammar);
__Pyx_XDECREF(__pyx_v_altweights);
__Pyx_XDECREF(__pyx_v_grammar);
__Pyx_XDECREF(__pyx_v_sent);
__Pyx_XDECREF(__pyx_v_chart);
__Pyx_XDECREF(__pyx_v__);
__Pyx_XDECREF(__pyx_v_vitderiv);
__Pyx_XDECREF(__pyx_v_vitprob);
__Pyx_XDECREF(__pyx_v_mpd);
__Pyx_XDECREF(__pyx_v_mpp);
__Pyx_XDECREF(__pyx_v_mcp);
__Pyx_XDECREF(__pyx_v_sldop_);
__Pyx_XDECREF(__pyx_v_sldopsimple);
__Pyx_XDECREF(__pyx_v_short);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__73 = PyTuple_Pack(21, __pyx_n_s_dopreduction, __pyx_n_s_Grammar, __pyx_n_s_plcfrs, __pyx_n_s_e, __pyx_n_s_e, __pyx_n_s_trees, __pyx_n_s_sents, __pyx_n_s_xgrammar, __pyx_n_s_altweights, __pyx_n_s_grammar, __pyx_n_s_sent, __pyx_n_s_chart, __pyx_n_s__39, __pyx_n_s_vitderiv, __pyx_n_s_vitprob, __pyx_n_s_mpd, __pyx_n_s_mpp, __pyx_n_s_mcp, __pyx_n_s_sldop, __pyx_n_s_sldopsimple, __pyx_n_s_short); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__73);
  __Pyx_GIVEREF(__pyx_tuple__73);
/* … */
  __pyx_t_5 = PyCFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_33test, NULL, __pyx_n_s_discodop_disambiguation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1072: 	from .grammar import dopreduction
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_n_s_dopreduction);
__Pyx_GIVEREF(__pyx_n_s_dopreduction);
PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_dopreduction);
__pyx_t_2 = __Pyx_Import(__pyx_n_s_grammar, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_dopreduction); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_dopreduction = __pyx_t_1;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1073: 	from .containers import Grammar
__pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1073, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_n_s_Grammar);
__Pyx_GIVEREF(__pyx_n_s_Grammar);
PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Grammar);
__pyx_t_1 = __Pyx_Import(__pyx_n_s_containers, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1073, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Grammar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1073, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_t_2);
__pyx_v_Grammar = __pyx_t_2;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1074: 	from . import plcfrs
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_n_s_plcfrs);
__Pyx_GIVEREF(__pyx_n_s_plcfrs);
PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_plcfrs);
__pyx_t_2 = __Pyx_Import(__pyx_n_s__3, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_plcfrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1074, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_plcfrs = __pyx_t_1;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1075: 
+1076: 	def e(x):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_14disambiguation_4test_1e(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/
static PyMethodDef __pyx_mdef_8discodop_14disambiguation_4test_1e = {"e", (PyCFunction)__pyx_pw_8discodop_14disambiguation_4test_1e, METH_O, 0};
static PyObject *__pyx_pw_8discodop_14disambiguation_4test_1e(PyObject *__pyx_self, PyObject *__pyx_v_x) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("e (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_self, ((PyObject *)__pyx_v_x));

/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_14disambiguation_4test_e(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
PyObject *__pyx_v_a = NULL;
PyObject *__pyx_v_b = NULL;
CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("e", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("discodop.disambiguation.test.e", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_a);
__Pyx_XDECREF(__pyx_v_b);
__Pyx_XDECREF(__pyx_v__);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
  __pyx_tuple__40 = PyTuple_Pack(4, __pyx_n_s_x, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s__39); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);
/* … */
__pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8discodop_14disambiguation_4test_1e, 0, __pyx_n_s_test_locals_e, NULL, __pyx_n_s_discodop_disambiguation, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1076, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_v_e = __pyx_t_2;
__pyx_t_2 = 0;
  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_disambiguation_pyx, __pyx_n_s_e, 1076, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 1076, __pyx_L1_error)
+1077: 		a, b, _ = max(x, key=itemgetter(1))
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(__pyx_v_x);
__Pyx_GIVEREF(__pyx_v_x);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_itemgetter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_key, __pyx_t_4) < 0) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1077, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
  PyObject* sequence = __pyx_t_4;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 3)) {
    if (size > 3) __Pyx_RaiseTooManyValuesError(3);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1077, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_1);
  index = 2; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 1077, __pyx_L1_error)
  __pyx_t_6 = NULL;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  goto __pyx_L4_unpacking_done;
  __pyx_L3_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1077, __pyx_L1_error)
  __pyx_L4_unpacking_done:;
}
__pyx_v_a = __pyx_t_2;
__pyx_t_2 = 0;
__pyx_v_b = __pyx_t_1;
__pyx_t_1 = 0;
__pyx_v__ = __pyx_t_3;
__pyx_t_3 = 0;
/* … */
  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__38);
  __Pyx_GIVEREF(__pyx_tuple__38);
+1078: 		return (a, (int(abs(b[0])), b[1])) if isinstance(b, tuple) else (
__Pyx_XDECREF(__pyx_r);
__pyx_t_7 = PyTuple_Check(__pyx_v_b); 
if ((__pyx_t_7 != 0)) {
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_b, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Absolute(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_b, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_a);
  __Pyx_GIVEREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_4 = __pyx_t_1;
  __pyx_t_1 = 0;
} else {
+1079: 				a, b)
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_a);
  __Pyx_GIVEREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a);
  __Pyx_INCREF(__pyx_v_b);
  __Pyx_GIVEREF(__pyx_v_b);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_b);
  __pyx_t_4 = __pyx_t_1;
  __pyx_t_1 = 0;
}
__pyx_r = __pyx_t_4;
__pyx_t_4 = 0;
goto __pyx_L0;
 1080: 
+1081: 	trees = [Tree(t) for t in
{ /* enter inner scope */
  PyObject *__pyx_9genexpr27__pyx_v_t = NULL;
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1081, __pyx_L5_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Tree); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    if (!__pyx_t_7) {
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_9genexpr27__pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1081, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_9genexpr27__pyx_v_t};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1081, __pyx_L5_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_9genexpr27__pyx_v_t};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1081, __pyx_L5_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1081, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
        __Pyx_INCREF(__pyx_9genexpr27__pyx_v_t);
        __Pyx_GIVEREF(__pyx_9genexpr27__pyx_v_t);
        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_9genexpr27__pyx_v_t);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1081, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1081, __pyx_L5_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_t);
  goto __pyx_L8_exit_scope;
  __pyx_L5_error:;
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_t);
  goto __pyx_L1_error;
  __pyx_L8_exit_scope:;
} /* exit inner scope */
__pyx_v_trees = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+1082: 		'''(ROOT (A (A 0) (B 1)) (C 2))
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1082, __pyx_L5_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1082, __pyx_L5_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1082, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1082, __pyx_L5_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1082, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_6(__pyx_t_3);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1082, __pyx_L5_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v_t, __pyx_t_4);
    __pyx_t_4 = 0;
 1083: 		(ROOT (C 0) (A (A 1) (B 2)))
 1084: 		(ROOT (A 0) (C (B 1) (C 2)))
+1085: 		(ROOT (A 0) (C (B 1) (C 2)))'''.splitlines()
  __pyx_t_1 = PyUnicode_Splitlines(__pyx_kp_u_ROOT_A_A_0_B_1_C_2_ROOT_C_0_A_A, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L5_error)
  __Pyx_GOTREF(__pyx_t_1);
+1086: 		+ 14 * ['(ROOT (B (A 0) (B 1)) (C 2))']]
  __pyx_t_3 = PyList_New(1 * 14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1086, __pyx_L5_error)
  __Pyx_GOTREF(__pyx_t_3);
  { Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < 14; __pyx_temp++) {
      __Pyx_INCREF(__pyx_kp_u_ROOT_B_A_0_B_1_C_2);
      __Pyx_GIVEREF(__pyx_kp_u_ROOT_B_A_0_B_1_C_2);
      PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_kp_u_ROOT_B_A_0_B_1_C_2);
    }
  }
  __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1086, __pyx_L5_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1087: 	sents = [a.split() for a in
{ /* enter inner scope */
  PyObject *__pyx_9genexpr28__pyx_v_a = NULL;
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1087, __pyx_L11_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr28__pyx_v_a, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1087, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    if (__pyx_t_8) {
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1087, __pyx_L11_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else {
      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1087, __pyx_L11_error)
    }
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1087, __pyx_L11_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_a);
  goto __pyx_L14_exit_scope;
  __pyx_L11_error:;
  __Pyx_XDECREF(__pyx_9genexpr28__pyx_v_a);
  goto __pyx_L1_error;
  __pyx_L14_exit_scope:;
} /* exit inner scope */
__pyx_v_sents = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+1088: 		'''d b c\n c a b\n a e f\n a e f\n a e f\n a e f\n d b f\n d b f
  __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1088, __pyx_L11_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L11_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_9genexpr28__pyx_v_a, __pyx_t_3);
    __pyx_t_3 = 0;
 1089: 		d b f\n d b g\n e f c\n e f c\n e f c\n e f c\n e f c\n e f c\n f b c
+1090: 		a d e'''.splitlines()]
  __pyx_t_3 = PyUnicode_Splitlines(__pyx_kp_u_d_b_c_c_a_b_a_e_f_a_e_f_a_e_f_a, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1090, __pyx_L11_error)
  __Pyx_GOTREF(__pyx_t_3);
+1091: 	xgrammar, altweights = dopreduction(trees, sents)
__Pyx_INCREF(__pyx_v_dopreduction);
__pyx_t_4 = __pyx_v_dopreduction; __pyx_t_3 = NULL;
__pyx_t_9 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_4, function);
    __pyx_t_9 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_trees, __pyx_v_sents};
  __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_2);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_trees, __pyx_v_sents};
  __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_2);
} else
#endif
{
  __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__pyx_t_3) {
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
  }
  __Pyx_INCREF(__pyx_v_trees);
  __Pyx_GIVEREF(__pyx_v_trees);
  PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_v_trees);
  __Pyx_INCREF(__pyx_v_sents);
  __Pyx_GIVEREF(__pyx_v_sents);
  PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_v_sents);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
  PyObject* sequence = __pyx_t_2;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1091, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_1);
  #else
  __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  #endif
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext;
  index = 0; __pyx_t_4 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_4);
  index = 1; __pyx_t_1 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L15_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1091, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  goto __pyx_L16_unpacking_done;
  __pyx_L15_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1091, __pyx_L1_error)
  __pyx_L16_unpacking_done:;
}
__pyx_v_xgrammar = __pyx_t_4;
__pyx_t_4 = 0;
__pyx_v_altweights = __pyx_t_1;
__pyx_t_1 = 0;
+1092: 	grammar = Grammar(xgrammar, altweights=altweights)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1092, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_v_xgrammar);
__Pyx_GIVEREF(__pyx_v_xgrammar);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_xgrammar);
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_altweights, __pyx_v_altweights) < 0) __PYX_ERR(0, 1092, __pyx_L1_error)
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_Grammar, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1092, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_grammar = __pyx_t_4;
__pyx_t_4 = 0;
+1093: 	grammar.getmapping(None, striplabelre=REMOVEIDS)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_grammar, __pyx_n_s_getmapping); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1093, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1093, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1093, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_striplabelre, __pyx_t_2) < 0) __PYX_ERR(0, 1093, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__42, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1093, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__42 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 1093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);
+1094: 	print(grammar)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1094, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_INCREF(__pyx_v_grammar);
__Pyx_GIVEREF(__pyx_v_grammar);
PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_grammar);
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1094, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1095: 	sent = 'a b c'.split()
__pyx_t_1 = PyUnicode_Split(__pyx_kp_u_a_b_c, ((PyObject *)NULL), -1L); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1095, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_sent = __pyx_t_1;
__pyx_t_1 = 0;
+1096: 	chart, _ = plcfrs.parse(sent, grammar, None, True)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plcfrs, __pyx_n_s_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1096, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = NULL;
__pyx_t_9 = 0;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_4)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_9 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_sent, __pyx_v_grammar, Py_None, Py_True};
  __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_sent, __pyx_v_grammar, Py_None, Py_True};
  __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GOTREF(__pyx_t_1);
} else
#endif
{
  __pyx_t_3 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__pyx_t_4) {
    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
  }
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_v_sent);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_v_grammar);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_9, Py_None);
  __Pyx_INCREF(Py_True);
  __Pyx_GIVEREF(Py_True);
  PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_9, Py_True);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1096, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L17_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L17_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L18_unpacking_done;
  __pyx_L17_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1096, __pyx_L1_error)
  __pyx_L18_unpacking_done:;
}
__pyx_v_chart = __pyx_t_2;
__pyx_t_2 = 0;
__pyx_v__ = __pyx_t_3;
__pyx_t_3 = 0;
+1097: 	assert chart
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_chart); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1097, __pyx_L1_error)
  if (unlikely(!__pyx_t_11)) {
    PyErr_SetNone(PyExc_AssertionError);
    __PYX_ERR(0, 1097, __pyx_L1_error)
  }
}
#endif
+1098: 	vitderiv, vitprob = viterbiderivation(chart)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 1098, __pyx_L1_error)
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_viterbiderivation(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1098, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1098, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_2);
  #else
  __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L19_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  index = 1; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L19_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1098, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L20_unpacking_done;
  __pyx_L19_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1098, __pyx_L1_error)
  __pyx_L20_unpacking_done:;
}
__pyx_v_vitderiv = __pyx_t_3;
__pyx_t_3 = 0;
__pyx_v_vitprob = __pyx_t_2;
__pyx_t_2 = 0;
+1099: 	getderivations(chart, 1000, derivstrings=True)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 1099, __pyx_L1_error)
__pyx_t_12.__pyx_n = 1;
__pyx_t_12.derivstrings = Py_True;
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_getderivations(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), 0x3E8, 0, &__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1100: 	mpd, _ = marginalize('mpd', chart)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 1100, __pyx_L1_error)
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_marginalize(__pyx_n_u_mpd, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), 0, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1100, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1100, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L21_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L21_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1100, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L22_unpacking_done;
  __pyx_L21_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1100, __pyx_L1_error)
  __pyx_L22_unpacking_done:;
}
__pyx_v_mpd = __pyx_t_2;
__pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
__pyx_t_3 = 0;
+1101: 	mpp, _ = marginalize('mpp', chart)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 1101, __pyx_L1_error)
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_marginalize(__pyx_n_u_mpp, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), 0, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1101, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_2);
  #else
  __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L23_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  index = 1; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L23_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1101, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L24_unpacking_done;
  __pyx_L23_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1101, __pyx_L1_error)
  __pyx_L24_unpacking_done:;
}
__pyx_v_mpp = __pyx_t_3;
__pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_2);
__pyx_t_2 = 0;
+1102: 	mcp, _ = marginalize('mcp', chart)
if (!(likely(((__pyx_v_chart) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_chart, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 1102, __pyx_L1_error)
__pyx_t_1 = __pyx_f_8discodop_14disambiguation_marginalize(__pyx_n_u_mcp, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), 0, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1102, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1102, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L25_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L25_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1102, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L26_unpacking_done;
  __pyx_L25_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1102, __pyx_L1_error)
  __pyx_L26_unpacking_done:;
}
__pyx_v_mcp = __pyx_t_2;
__pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
__pyx_t_3 = 0;
+1103: 	sldop_, _ = marginalize('sl-dop', chart, k=1000,
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_marginalize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1103, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_kp_u_sl_dop);
__Pyx_GIVEREF(__pyx_kp_u_sl_dop);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_sl_dop);
__Pyx_INCREF(__pyx_v_chart);
__Pyx_GIVEREF(__pyx_v_chart);
PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_chart);
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1103, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_k, __pyx_int_1000) < 0) __PYX_ERR(0, 1103, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sldop_n, __pyx_int_7) < 0) __PYX_ERR(0, 1103, __pyx_L1_error)
/* … */
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1103, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
  PyObject* sequence = __pyx_t_4;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1103, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L27_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L27_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_1), 2) < 0) __PYX_ERR(0, 1103, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L28_unpacking_done;
  __pyx_L27_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1103, __pyx_L1_error)
  __pyx_L28_unpacking_done:;
}
__pyx_v_sldop_ = __pyx_t_2;
__pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
__pyx_t_3 = 0;
+1104: 			sldop_n=7, sent=sent)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sent, __pyx_v_sent) < 0) __PYX_ERR(0, 1103, __pyx_L1_error)
+1105: 	sldopsimple, _ = marginalize('sl-dop-simple',
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_marginalize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
/* … */
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_kp_u_sl_dop_simple);
__Pyx_GIVEREF(__pyx_kp_u_sl_dop_simple);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_sl_dop_simple);
__Pyx_INCREF(__pyx_v_chart);
__Pyx_GIVEREF(__pyx_v_chart);
PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_chart);
/* … */
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1105, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
  PyObject* sequence = __pyx_t_1;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1105, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L29_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L29_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1105, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  goto __pyx_L30_unpacking_done;
  __pyx_L29_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1105, __pyx_L1_error)
  __pyx_L30_unpacking_done:;
}
__pyx_v_sldopsimple = __pyx_t_2;
__pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
__pyx_t_3 = 0;
+1106: 			chart, k=1000, sldop_n=7, sent=sent)
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1106, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_k, __pyx_int_1000) < 0) __PYX_ERR(0, 1106, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sldop_n, __pyx_int_7) < 0) __PYX_ERR(0, 1106, __pyx_L1_error)
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sent, __pyx_v_sent) < 0) __PYX_ERR(0, 1106, __pyx_L1_error)
+1107: 	short, _ = marginalize('shortest', chart, sent=sent)
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_marginalize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_n_u_shortest);
__Pyx_GIVEREF(__pyx_n_u_shortest);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_shortest);
__Pyx_INCREF(__pyx_v_chart);
__Pyx_GIVEREF(__pyx_v_chart);
PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_chart);
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sent, __pyx_v_sent) < 0) __PYX_ERR(0, 1107, __pyx_L1_error)
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1107, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
  PyObject* sequence = __pyx_t_4;
  #if !CYTHON_COMPILING_IN_PYPY
  Py_ssize_t size = Py_SIZE(sequence);
  #else
  Py_ssize_t size = PySequence_Size(sequence);
  #endif
  if (unlikely(size != 2)) {
    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    __PYX_ERR(0, 1107, __pyx_L1_error)
  }
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
  if (likely(PyTuple_CheckExact(sequence))) {
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
  } else {
    __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
  }
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  #else
  __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  #endif
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
  Py_ssize_t index = -1;
  __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext;
  index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L31_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_2);
  index = 1; __pyx_t_3 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L31_unpacking_failed;
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_1), 2) < 0) __PYX_ERR(0, 1107, __pyx_L1_error)
  __pyx_t_10 = NULL;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  goto __pyx_L32_unpacking_done;
  __pyx_L31_unpacking_failed:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = NULL;
  if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
  __PYX_ERR(0, 1107, __pyx_L1_error)
  __pyx_L32_unpacking_done:;
}
__pyx_v_short = __pyx_t_2;
__pyx_t_2 = 0;
__Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
__pyx_t_3 = 0;
+1108: 	print('\nvit:\t\t%s %r' % (REMOVEIDS.sub('', vitderiv),
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_REMOVEIDS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sub); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = NULL;
__pyx_t_9 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
  __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
  if (likely(__pyx_t_3)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_2, function);
    __pyx_t_9 = 1;
  }
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u__3, __pyx_v_vitderiv};
  __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1108, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_4);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
  PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u__3, __pyx_v_vitderiv};
  __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1108, __pyx_L1_error)
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_4);
} else
#endif
{
  __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__pyx_t_3) {
    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL;
  }
  __Pyx_INCREF(__pyx_kp_u__3);
  __Pyx_GIVEREF(__pyx_kp_u__3);
  PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_kp_u__3);
  __Pyx_INCREF(__pyx_v_vitderiv);
  __Pyx_GIVEREF(__pyx_v_vitderiv);
  PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_v_vitderiv);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
__pyx_t_4 = 0;
__pyx_t_2 = 0;
__pyx_t_2 = PyUnicode_Format(__pyx_kp_u_vit_s_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_7);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
__Pyx_GIVEREF(__pyx_t_8);
PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_8);
__Pyx_GIVEREF(__pyx_t_13);
PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_13);
__Pyx_GIVEREF(__pyx_t_14);
PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_14);
__pyx_t_2 = 0;
__pyx_t_4 = 0;
__pyx_t_7 = 0;
__pyx_t_3 = 0;
__pyx_t_8 = 0;
__pyx_t_13 = 0;
__pyx_t_14 = 0;
/* … */
__pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
__Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1109: 			exp(-vitprob)),
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = PyNumber_Negative(__pyx_v_vitprob); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_8 = NULL;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
  __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
  if (likely(__pyx_t_8)) {
    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(function);
    __Pyx_DECREF_SET(__pyx_t_1, function);
  }
}
if (!__pyx_t_8) {
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GOTREF(__pyx_t_2);
} else {
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1110: 		'MPD:\t\t%s %r' % e(mpd), 'MCP:\t\t%s %r' % e(mcp),
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_mpd); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_4 = PyUnicode_Format(__pyx_kp_u_MPD_s_r, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_mcp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_7 = PyUnicode_Format(__pyx_kp_u_MCP_s_r, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1111: 		'MPP:\t\t%s %r' % e(mpp),
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_mpp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1111, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = PyUnicode_Format(__pyx_kp_u_MPP_s_r, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1111, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1112: 		'SL-DOP n=7:\t%s %r' % e(sldop_),
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_sldop_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = PyUnicode_Format(__pyx_kp_u_SL_DOP_n_7_s_r, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1112, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1113: 		'simple SL-DOP:\t%s %r' % e(sldopsimple),
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_sldopsimple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_13 = PyUnicode_Format(__pyx_kp_u_simple_SL_DOP_s_r, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_13);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1114: 		'shortest:\t%s %r' % e(short), sep='\n')
__pyx_t_1 = __pyx_pf_8discodop_14disambiguation_4test_e(__pyx_v_e, __pyx_v_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_14 = PyUnicode_Format(__pyx_kp_u_shortest_s_r, __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__pyx_t_14 = PyDict_New(); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_14);
if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_sep, __pyx_kp_u__43) < 0) __PYX_ERR(0, 1114, __pyx_L1_error)
 1115: 
+1116: __all__ = ['getderivations', 'marginalize', 'gettree', 'recoverfragments_str',
  __pyx_t_5 = PyList_New(11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_n_u_getderivations);
  __Pyx_GIVEREF(__pyx_n_u_getderivations);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_n_u_getderivations);
  __Pyx_INCREF(__pyx_n_u_marginalize);
  __Pyx_GIVEREF(__pyx_n_u_marginalize);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_n_u_marginalize);
  __Pyx_INCREF(__pyx_n_u_gettree);
  __Pyx_GIVEREF(__pyx_n_u_gettree);
  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_n_u_gettree);
  __Pyx_INCREF(__pyx_n_u_recoverfragments_str);
  __Pyx_GIVEREF(__pyx_n_u_recoverfragments_str);
  PyList_SET_ITEM(__pyx_t_5, 3, __pyx_n_u_recoverfragments_str);
  __Pyx_INCREF(__pyx_n_u_fragmentsinderiv_str);
  __Pyx_GIVEREF(__pyx_n_u_fragmentsinderiv_str);
  PyList_SET_ITEM(__pyx_t_5, 4, __pyx_n_u_fragmentsinderiv_str);
  __Pyx_INCREF(__pyx_n_u_treeparsing);
  __Pyx_GIVEREF(__pyx_n_u_treeparsing);
  PyList_SET_ITEM(__pyx_t_5, 5, __pyx_n_u_treeparsing);
  __Pyx_INCREF(__pyx_n_u_viterbiderivation);
  __Pyx_GIVEREF(__pyx_n_u_viterbiderivation);
  PyList_SET_ITEM(__pyx_t_5, 6, __pyx_n_u_viterbiderivation);
  __Pyx_INCREF(__pyx_n_u_doprerank);
  __Pyx_GIVEREF(__pyx_n_u_doprerank);
  PyList_SET_ITEM(__pyx_t_5, 7, __pyx_n_u_doprerank);
  __Pyx_INCREF(__pyx_n_u_dopparseprob);
  __Pyx_GIVEREF(__pyx_n_u_dopparseprob);
  PyList_SET_ITEM(__pyx_t_5, 8, __pyx_n_u_dopparseprob);
  __Pyx_INCREF(__pyx_n_u_frontiernt);
  __Pyx_GIVEREF(__pyx_n_u_frontiernt);
  PyList_SET_ITEM(__pyx_t_5, 9, __pyx_n_u_frontiernt);
  __Pyx_INCREF(__pyx_n_u_splitfrag);
  __Pyx_GIVEREF(__pyx_n_u_splitfrag);
  PyList_SET_ITEM(__pyx_t_5, 10, __pyx_n_u_splitfrag);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_5) < 0) __PYX_ERR(0, 1116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1117: 		'fragmentsinderiv_str', 'treeparsing', 'viterbiderivation',
 1118: 		'doprerank', 'dopparseprob', 'frontiernt', 'splitfrag']