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: estimates.cpp

+001: """Computation of outside estimates for best-first or A* parsing.
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 002: 
 003: - PCFG A* estimate (Klein & Manning 2003).
 004:   http://aclweb.org/anthology/N03-1016
 005: - PLCFRS LR context-summary estimate (Kallmeyer & Maier 2010).
 006:   http://aclweb.org/anthology/C10-1061
 007: 
 008: The latter ported almost directly from rparse
 009: (except for sign reversal of log probs)."""
 010: 
 011: from __future__ import print_function
+012: from math import exp
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_exp);
  __Pyx_GIVEREF(__pyx_n_s_exp);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_exp);
  __pyx_t_4 = __Pyx_Import(__pyx_n_s_math, __pyx_t_3, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_exp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_exp, __pyx_t_3) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+013: import numpy as np
  __pyx_t_4 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_4) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+014: from .util import PyAgenda
  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_n_s_PyAgenda);
  __Pyx_GIVEREF(__pyx_n_s_PyAgenda);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_PyAgenda);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_util, __pyx_t_4, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PyAgenda); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PyAgenda, __pyx_t_4) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 015: 
 016: from cython.operator cimport dereference
 017: from libc.stdint cimport uint8_t, uint32_t, uint64_t
 018: from libc.math cimport HUGE_VAL as INFINITY
 019: from libcpp.utility cimport pair
 020: from .bit cimport nextset, nextunset, bitcount, bitlength, testbit
 021: from .containers cimport SmallChartItemAgenda, Agenda, Chart, Grammar, \
 022: 		Label, Prob, ProbRule, LexicalRule, SmallChartItem
 023: 
 024: # from libc.math cimport isnan, isfinite  # conflicts with C++ std::isfinite
 025: cdef extern from "<cmath>" namespace "std" nogil:
 026: 	bint isfinite(double v)
 027: 	bint isnan(double v)
 028: 
 029: include "constants.pxi"
 030: 
 031: 
+032: cdef class Item:
struct __pyx_obj_8discodop_9estimates_Item {
  PyObject_HEAD
  int state;
  int length;
  int lr;
  int gaps;
};

 033: 	"""Item class used in agenda for computing the outside LR estimate."""
 034: 	cdef int state, length, lr, gaps
 035: 
+036: 	def __hash__(Item self):
/* Python wrapper */
static Py_hash_t __pyx_pw_8discodop_9estimates_4Item_1__hash__(PyObject *__pyx_v_self); /*proto*/
static Py_hash_t __pyx_pw_8discodop_9estimates_4Item_1__hash__(PyObject *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8discodop_9estimates_4Item___hash__(((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_v_self));

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

static Py_hash_t __pyx_pf_8discodop_9estimates_4Item___hash__(struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 037: 		return (self.state * 1021
 038: 				+ self.length * 571
 039: 				+ self.lr * 311
+040: 				+ self.gaps)
  __pyx_r = ((((__pyx_v_self->state * 0x3FD) + (__pyx_v_self->length * 0x23B)) + (__pyx_v_self->lr * 0x137)) + __pyx_v_self->gaps);
  goto __pyx_L0;
 041: 
+042: 	def __richcmp__(Item self, Item other, op):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_4Item_3__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op); /*proto*/
static PyObject *__pyx_pw_8discodop_9estimates_4Item_3__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op) {
  PyObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_v_op = __Pyx_PyInt_From_int(__pyx_arg_op); if (unlikely(!__pyx_v_op)) __PYX_ERR(0, 42, __pyx_L3_error)
  __Pyx_GOTREF(__pyx_v_op);
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.Item.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_self), __pyx_ptype_8discodop_9estimates_Item, 1, "self", 0))) __PYX_ERR(0, 42, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_8discodop_9estimates_Item, 1, "other", 0))) __PYX_ERR(0, 42, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_4Item_2__richcmp__(((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_v_self), ((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_v_other), ((PyObject *)__pyx_v_op));

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

static PyObject *__pyx_pf_8discodop_9estimates_4Item_2__richcmp__(struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_self, struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_other, PyObject *__pyx_v_op) {
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__", 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("discodop.estimates.Item.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+043: 		if op == 2:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+044: 			return (self.state == other.state and self.length == other.length
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = (__pyx_v_self->state == __pyx_v_other->state);
    if (__pyx_t_2) {
    } else {
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
/* … */
    __pyx_t_2 = (__pyx_v_self->length == __pyx_v_other->length);
    if (__pyx_t_2) {
    } else {
/* … */
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
+045: 					and self.lr == other.lr and self.gaps == other.gaps)
    __pyx_t_2 = (__pyx_v_self->lr == __pyx_v_other->lr);
    if (__pyx_t_2) {
    } else {
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_self->gaps == __pyx_v_other->gaps);
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L4_bool_binop_done:;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+046: 		a = (self.state, self.length, self.lr, self.gaps)
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->lr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->gaps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_v_a = __pyx_t_6;
  __pyx_t_6 = 0;
+047: 		b = (other.state, other.length, other.lr, other.gaps)
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_other->state); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_other->length); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_other->lr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_other->gaps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_v_b = __pyx_t_1;
  __pyx_t_1 = 0;
+048: 		if op == 0:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+049: 			return a < b
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+050: 		elif op == 1:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+051: 			return a <= b
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+052: 		elif op == 3:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+053: 			return a != b
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+054: 		elif op == 4:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_4, 4, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+055: 			return a > b
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+056: 		elif op == 5:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_5, 5, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+057: 			return a >= b
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_a, __pyx_v_b, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 058: 
+059: 	def __repr__(Item self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_4Item_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_8discodop_9estimates_4Item_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8discodop_9estimates_4Item_4__repr__(((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_v_self));

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

static PyObject *__pyx_pf_8discodop_9estimates_4Item_4__repr__(struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 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_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("discodop.estimates.Item.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+060: 		return "%s(%4d, %2d, %2d, %2d)" % (self.__class__.__name__,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_5);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_s_4d_2d_2d_2d, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
+061: 				self.state, self.length, self.lr, self.gaps)
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->lr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->gaps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
 062: 
 063: 
+064: cdef inline Item new_Item(int state, int length, int lr, int gaps):
static CYTHON_INLINE struct __pyx_obj_8discodop_9estimates_Item *__pyx_f_8discodop_9estimates_new_Item(int __pyx_v_state, int __pyx_v_length, int __pyx_v_lr, int __pyx_v_gaps) {
  struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_item = 0;
  struct __pyx_obj_8discodop_9estimates_Item *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("new_Item", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("discodop.estimates.new_Item", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_item);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+065: 	cdef Item item = Item.__new__(Item)
  __pyx_t_1 = __pyx_tp_new_8discodop_9estimates_Item(((PyTypeObject *)__pyx_ptype_8discodop_9estimates_Item), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8discodop_9estimates_Item)))) __PYX_ERR(0, 65, __pyx_L1_error)
  __pyx_v_item = ((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_t_1);
  __pyx_t_1 = 0;
+066: 	item.state = state
  __pyx_v_item->state = __pyx_v_state;
+067: 	item.length = length
  __pyx_v_item->length = __pyx_v_length;
+068: 	item.lr = lr
  __pyx_v_item->lr = __pyx_v_lr;
+069: 	item.gaps = gaps
  __pyx_v_item->gaps = __pyx_v_gaps;
+070: 	return item
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_item));
  __pyx_r = __pyx_v_item;
  goto __pyx_L0;
 071: 
 072: 
+073: cdef inline double getoutside(double [:, :, :, :] outside,
static CYTHON_INLINE double __pyx_f_8discodop_9estimates_getoutside(__Pyx_memviewslice __pyx_v_outside, uint32_t __pyx_v_maxlen, uint32_t __pyx_v_slen, Label __pyx_v_label, uint64_t __pyx_v_vec) {
  int __pyx_v_length;
  int __pyx_v_left;
  int __pyx_v_gaps;
  int __pyx_v_right;
  int __pyx_v_lr;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getoutside", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 074: 		uint32_t maxlen, uint32_t slen, Label label, uint64_t vec):
 075: 	"""Query for outside estimate.
 076: 
 077: 	NB: if this would be used, it should be in a .pxd with `inline`.
 078: 	However, passing the numpy array may be slow."""
+079: 	cdef int length = bitcount(vec)
  __pyx_v_length = __pyx_f_8discodop_3bit_bitcount(__pyx_v_vec, 0);
+080: 	cdef int left = nextset(vec, 0)
  __pyx_v_left = __pyx_f_8discodop_3bit_nextset(__pyx_v_vec, 0);
+081: 	cdef int gaps = bitlength(vec) - length - left
  __pyx_v_gaps = ((__pyx_f_8discodop_3bit_bitlength(__pyx_v_vec) - __pyx_v_length) - __pyx_v_left);
+082: 	cdef int right = slen - length - left - gaps
  __pyx_v_right = (((__pyx_v_slen - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
+083: 	cdef int lr = left + right
  __pyx_v_lr = (__pyx_v_left + __pyx_v_right);
+084: 	if slen > maxlen or length + lr + gaps > maxlen:
  __pyx_t_2 = ((__pyx_v_slen > __pyx_v_maxlen) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((((__pyx_v_length + __pyx_v_lr) + __pyx_v_gaps) > __pyx_v_maxlen) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+085: 		return 0.0
    __pyx_r = 0.0;
    goto __pyx_L0;
+086: 	return outside[label, length, lr, gaps]
  __pyx_t_3 = __pyx_v_label;
  __pyx_t_4 = __pyx_v_length;
  __pyx_t_5 = __pyx_v_lr;
  __pyx_t_6 = __pyx_v_gaps;
  __pyx_r = (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_3 * __pyx_v_outside.strides[0]) ) + __pyx_t_4 * __pyx_v_outside.strides[1]) ) + __pyx_t_5 * __pyx_v_outside.strides[2]) ) + __pyx_t_6 * __pyx_v_outside.strides[3]) )));
  goto __pyx_L0;
 087: 
 088: 
+089: def simpleinside(Grammar grammar, uint32_t maxlen, double [:, :] insidescores):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_1simpleinside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_simpleinside[] = "simpleinside(Grammar grammar, uint32_t maxlen, __Pyx_memviewslice insidescores)\nCompute simple inside estimate in bottom-up fashion.\n\tHere vec is actually the length (number of terminals in the yield of\n\tthe constituent)\n\tinsidescores is a 2-dimensional matrix initialized with NaN to indicate\n\tvalues that have yet to be computed.";
static PyMethodDef __pyx_mdef_8discodop_9estimates_1simpleinside = {"simpleinside", (PyCFunction)__pyx_pw_8discodop_9estimates_1simpleinside, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_9estimates_simpleinside};
static PyObject *__pyx_pw_8discodop_9estimates_1simpleinside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  __Pyx_memviewslice __pyx_v_insidescores = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("simpleinside (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_insidescores,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("simpleinside", 1, 3, 3, 1); __PYX_ERR(0, 89, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_insidescores)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("simpleinside", 1, 3, 3, 2); __PYX_ERR(0, 89, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "simpleinside") < 0)) __PYX_ERR(0, 89, __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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
    __pyx_v_insidescores = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[2]); if (unlikely(!__pyx_v_insidescores.memview)) __PYX_ERR(0, 89, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("simpleinside", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 89, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.simpleinside", __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, 89, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_simpleinside(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_insidescores);

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

static PyObject *__pyx_pf_8discodop_9estimates_simpleinside(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, __Pyx_memviewslice __pyx_v_insidescores) {
  SmallChartItemAgenda<double>  __pyx_v_agenda;
  std::pair<SmallChartItem,double>  __pyx_v_entry;
  SmallChartItem __pyx_v_I;
  double __pyx_v_x;
  ProbRule __pyx_v_rule;
  size_t __pyx_v_i;
  uint64_t __pyx_v_vec;
  std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> >  __pyx_v_lhsrules;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("simpleinside", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_37);
  __Pyx_XDECREF(__pyx_t_38);
  __Pyx_XDECREF(__pyx_t_39);
  __Pyx_XDECREF(__pyx_t_40);
  __Pyx_XDECREF(__pyx_t_41);
  __Pyx_AddTraceback("discodop.estimates.simpleinside", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_insidescores, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__51 = PyTuple_Pack(11, __pyx_n_s_grammar, __pyx_n_s_maxlen, __pyx_n_s_insidescores, __pyx_n_s_agenda, __pyx_n_s_entry, __pyx_n_s_I, __pyx_n_s_x, __pyx_n_s_rule, __pyx_n_s_i, __pyx_n_s_vec, __pyx_n_s_lhsrules); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__51);
  __Pyx_GIVEREF(__pyx_tuple__51);
/* … */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_9estimates_1simpleinside, NULL, __pyx_n_s_discodop_estimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_simpleinside, __pyx_t_3) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_estimates_pyx, __pyx_n_s_simpleinside, 89, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 89, __pyx_L1_error)
 090: 	"""Compute simple inside estimate in bottom-up fashion.
 091: 	Here vec is actually the length (number of terminals in the yield of
 092: 	the constituent)
 093: 	insidescores is a 2-dimensional matrix initialized with NaN to indicate
 094: 	values that have yet to be computed."""
 095: 	cdef SmallChartItemAgenda[double] agenda
 096: 	cdef pair[SmallChartItem, double] entry
 097: 	cdef SmallChartItem I
 098: 	cdef double x
 099: 	cdef ProbRule rule
 100: 	cdef size_t i
 101: 	cdef uint64_t vec
+102: 	for lhsrules in grammar.lexicalbylhs:
  __pyx_t_2 = &__pyx_v_grammar->lexicalbylhs;
  __pyx_t_1 = __pyx_t_2->begin();
  for (;;) {
    if (!(__pyx_t_1 != __pyx_t_2->end())) break;
    __pyx_t_3 = *__pyx_t_1;
    ++__pyx_t_1;
    __pyx_v_lhsrules = __pyx_t_3;
/* … */
  }
+103: 		agenda.setitem(
    __pyx_v_agenda.setitem(SmallChartItem(__pyx_v_lhsrules.first, 1), __pyx_t_9);
 104: 				SmallChartItem(lhsrules.first, 1),
+105: 				min([grammar.lexical[wordlexrule.second].prob
    { /* enter inner scope */
      std::pair<std::string,uint32_t>  __pyx_7genexpr__pyx_v_wordlexrule;
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 105, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
/* … */
        __pyx_t_8 = PyFloat_FromDouble((__pyx_v_grammar->lexical[__pyx_7genexpr__pyx_v_wordlexrule.second]).prob); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 105, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 105, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+106: 					for wordlexrule in lhsrules.second]))
      __pyx_t_6 = &__pyx_v_lhsrules.second;
      __pyx_t_5 = __pyx_t_6->begin();
      for (;;) {
        if (!(__pyx_t_5 != __pyx_t_6->end())) break;
        __pyx_t_7 = *__pyx_t_5;
        ++__pyx_t_5;
        __pyx_7genexpr__pyx_v_wordlexrule = __pyx_t_7;
/* … */
      }
    } /* exit inner scope */
 107: 		# 			for lexruleno in grammar.lexicalbylhs[i].values()]))
+108: 	while not agenda.empty():
  while (1) {
    __pyx_t_10 = ((!(__pyx_v_agenda.empty() != 0)) != 0);
    if (!__pyx_t_10) break;
+109: 		entry = agenda.pop()
    __pyx_v_entry = __pyx_v_agenda.pop();
+110: 		I = entry.first
    __pyx_t_11 = __pyx_v_entry.first;
    __pyx_v_I = __pyx_t_11;
+111: 		x = entry.second
    __pyx_t_9 = __pyx_v_entry.second;
    __pyx_v_x = __pyx_t_9;
 112: 
 113: 		# This comparison catches the case when insidescores has a higher
 114: 		# value than x, but also when it is NaN, because all comparisons
 115: 		# against NaN are false.
 116: 		# if not x >= insidescores[I.label, I.vec]:
 117: 		# Mory explicitly:
+118: 		if (isnan(insidescores[I.label, I.vec])
    __pyx_t_12 = __pyx_v_I.label;
    __pyx_t_13 = __pyx_v_I.vec;
    __pyx_t_14 = (std::isnan((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_12 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_13 * __pyx_v_insidescores.strides[1]) )))) != 0);
    if (!__pyx_t_14) {
    } else {
      __pyx_t_10 = __pyx_t_14;
      goto __pyx_L10_bool_binop_done;
    }
/* … */
    if (__pyx_t_10) {
/* … */
    }
+119: 				or x < insidescores[I.label, I.vec]):
    __pyx_t_15 = __pyx_v_I.label;
    __pyx_t_16 = __pyx_v_I.vec;
    __pyx_t_14 = ((__pyx_v_x < (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_15 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_16 * __pyx_v_insidescores.strides[1]) )))) != 0);
    __pyx_t_10 = __pyx_t_14;
    __pyx_L10_bool_binop_done:;
+120: 			insidescores[I.label, I.vec] = x
      __pyx_t_17 = __pyx_v_I.label;
      __pyx_t_18 = __pyx_v_I.vec;
      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_17 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_18 * __pyx_v_insidescores.strides[1]) )) = __pyx_v_x;
 121: 
+122: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+123: 			rule = grammar.unary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_I.label])[__pyx_v_i]);
+124: 			if rule.rhs1 != I.label:
      __pyx_t_10 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_10) {
/* … */
      }
+125: 				break
        goto __pyx_L13_break;
+126: 			elif isnan(insidescores[rule.lhs, I.vec]):
      __pyx_t_21 = __pyx_v_rule.lhs;
      __pyx_t_22 = __pyx_v_I.vec;
      __pyx_t_10 = (std::isnan((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_21 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_22 * __pyx_v_insidescores.strides[1]) )))) != 0);
      if (__pyx_t_10) {
/* … */
      }
    }
    __pyx_L13_break:;
+127: 				agenda.setifbetter(
        __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, __pyx_v_I.vec), (__pyx_v_rule.prob + __pyx_v_x));
 128: 						SmallChartItem(rule.lhs, I.vec), rule.prob + x)
 129: 
+130: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+131: 			rule = grammar.lbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->lbinary[__pyx_v_I.label])[__pyx_v_i]);
+132: 			if rule.rhs1 != I.label:
      __pyx_t_10 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_10) {
/* … */
      }
+133: 				break
        goto __pyx_L16_break;
+134: 			for vec in range(1, maxlen - I.vec + 1):
      __pyx_t_23 = ((__pyx_v_maxlen - __pyx_v_I.vec) + 1);
      for (__pyx_t_24 = 1; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
        __pyx_v_vec = __pyx_t_24;
+135: 				if (isfinite(insidescores[rule.rhs2, vec])
        __pyx_t_25 = __pyx_v_rule.rhs2;
        __pyx_t_26 = __pyx_v_vec;
        __pyx_t_14 = (std::isfinite((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_25 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_26 * __pyx_v_insidescores.strides[1]) )))) != 0);
        if (__pyx_t_14) {
        } else {
          __pyx_t_10 = __pyx_t_14;
          goto __pyx_L21_bool_binop_done;
        }
/* … */
        if (__pyx_t_10) {
/* … */
        }
      }
    }
    __pyx_L16_break:;
+136: 						and isnan(insidescores[rule.lhs, I.vec + vec])):
        __pyx_t_27 = __pyx_v_rule.lhs;
        __pyx_t_28 = (__pyx_v_I.vec + __pyx_v_vec);
        __pyx_t_14 = (std::isnan((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_27 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_28 * __pyx_v_insidescores.strides[1]) )))) != 0);
        __pyx_t_10 = __pyx_t_14;
        __pyx_L21_bool_binop_done:;
+137: 					agenda.setifbetter(
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, (__pyx_v_I.vec + __pyx_v_vec)), ((__pyx_v_rule.prob + __pyx_v_x) + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_29 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_30 * __pyx_v_insidescores.strides[1]) )))));
 138: 							SmallChartItem(rule.lhs, I.vec + vec),
+139: 							rule.prob + x + insidescores[rule.rhs2, vec])
          __pyx_t_29 = __pyx_v_rule.rhs2;
          __pyx_t_30 = __pyx_v_vec;
 140: 
+141: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+142: 			rule = grammar.rbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->rbinary[__pyx_v_I.label])[__pyx_v_i]);
+143: 			if rule.rhs2 != I.label:
      __pyx_t_10 = ((__pyx_v_rule.rhs2 != __pyx_v_I.label) != 0);
      if (__pyx_t_10) {
/* … */
      }
+144: 				break
        goto __pyx_L24_break;
+145: 			for vec in range(1, maxlen - I.vec + 1):
      __pyx_t_23 = ((__pyx_v_maxlen - __pyx_v_I.vec) + 1);
      for (__pyx_t_24 = 1; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
        __pyx_v_vec = __pyx_t_24;
+146: 				if (isfinite(insidescores[rule.rhs1, vec])
        __pyx_t_31 = __pyx_v_rule.rhs1;
        __pyx_t_32 = __pyx_v_vec;
        __pyx_t_14 = (std::isfinite((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_31 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_32 * __pyx_v_insidescores.strides[1]) )))) != 0);
        if (__pyx_t_14) {
        } else {
          __pyx_t_10 = __pyx_t_14;
          goto __pyx_L29_bool_binop_done;
        }
/* … */
        if (__pyx_t_10) {
/* … */
        }
      }
    }
    __pyx_L24_break:;
  }
+147: 						and isnan(insidescores[rule.lhs, vec + I.vec])):
        __pyx_t_33 = __pyx_v_rule.lhs;
        __pyx_t_34 = (__pyx_v_vec + __pyx_v_I.vec);
        __pyx_t_14 = (std::isnan((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_33 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_34 * __pyx_v_insidescores.strides[1]) )))) != 0);
        __pyx_t_10 = __pyx_t_14;
        __pyx_L29_bool_binop_done:;
+148: 					agenda.setifbetter(
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, (__pyx_v_vec + __pyx_v_I.vec)), ((__pyx_v_rule.prob + (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_35 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_36 * __pyx_v_insidescores.strides[1]) )))) + __pyx_v_x));
 149: 							SmallChartItem(rule.lhs, vec + I.vec),
+150: 							rule.prob + insidescores[rule.rhs1, vec] + x)
          __pyx_t_35 = __pyx_v_rule.rhs1;
          __pyx_t_36 = __pyx_v_vec;
 151: 
 152: 	# anything not reached so far is still NaN and gets probability zero:
+153: 	insidescores.base[np.isnan(insidescores.base)] = np.inf
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_insidescores, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_base); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_38 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_38)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_38);
  __pyx_t_39 = __Pyx_PyObject_GetAttrStr(__pyx_t_38, __pyx_n_s_isnan); if (unlikely(!__pyx_t_39)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_39);
  __Pyx_DECREF(__pyx_t_38); __pyx_t_38 = 0;
  __pyx_t_38 = __pyx_memoryview_fromslice(__pyx_v_insidescores, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_38)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_38);
  __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_38, __pyx_n_s_base); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_40);
  __Pyx_DECREF(__pyx_t_38); __pyx_t_38 = 0;
  __pyx_t_38 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_39))) {
    __pyx_t_38 = PyMethod_GET_SELF(__pyx_t_39);
    if (likely(__pyx_t_38)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_39);
      __Pyx_INCREF(__pyx_t_38);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_39, function);
    }
  }
  if (!__pyx_t_38) {
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_39, __pyx_t_40); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_39)) {
      PyObject *__pyx_temp[2] = {__pyx_t_38, __pyx_t_40};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_39, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_38); __pyx_t_38 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_39)) {
      PyObject *__pyx_temp[2] = {__pyx_t_38, __pyx_t_40};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_39, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_38); __pyx_t_38 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
    } else
    #endif
    {
      __pyx_t_41 = PyTuple_New(1+1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 153, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __Pyx_GIVEREF(__pyx_t_38); PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_t_38); __pyx_t_38 = NULL;
      __Pyx_GIVEREF(__pyx_t_40);
      PyTuple_SET_ITEM(__pyx_t_41, 0+1, __pyx_t_40);
      __pyx_t_40 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_39, __pyx_t_41, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_39); __pyx_t_39 = 0;
  if (unlikely(PyObject_SetItem(__pyx_t_37, __pyx_t_4, __pyx_t_8) < 0)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 154: 
 155: 
+156: def inside(Grammar grammar, uint32_t maxlen, dict insidescores):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_3inside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_2inside[] = "inside(Grammar grammar, uint32_t maxlen, dict insidescores)\nCompute inside estimate in bottom-up fashion, with full bit vectors.\n\n\t(not used).";
static PyMethodDef __pyx_mdef_8discodop_9estimates_3inside = {"inside", (PyCFunction)__pyx_pw_8discodop_9estimates_3inside, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_9estimates_2inside};
static PyObject *__pyx_pw_8discodop_9estimates_3inside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  PyObject *__pyx_v_insidescores = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inside (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_insidescores,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("inside", 1, 3, 3, 1); __PYX_ERR(0, 156, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_insidescores)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("inside", 1, 3, 3, 2); __PYX_ERR(0, 156, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "inside") < 0)) __PYX_ERR(0, 156, __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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L3_error)
    __pyx_v_insidescores = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("inside", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 156, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.inside", __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, 156, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_insidescores), (&PyDict_Type), 1, "insidescores", 1))) __PYX_ERR(0, 156, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_2inside(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_insidescores);

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

static PyObject *__pyx_pf_8discodop_9estimates_2inside(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_insidescores) {
  SmallChartItem __pyx_v_I;
  SmallChartItemAgenda<double>  __pyx_v_agenda;
  std::pair<SmallChartItem,double>  __pyx_v_entry;
  size_t __pyx_v_i;
  std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> >  __pyx_v_lhsrules;
  double __pyx_v_x;
  ProbRule __pyx_v_rule;
  PyObject *__pyx_v_vec = NULL;
  uint64_t __pyx_v_left;
  uint64_t __pyx_v_right;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inside", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("discodop.estimates.inside", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_vec);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__53 = PyTuple_Pack(13, __pyx_n_s_grammar, __pyx_n_s_maxlen, __pyx_n_s_insidescores, __pyx_n_s_I, __pyx_n_s_agenda, __pyx_n_s_entry, __pyx_n_s_i, __pyx_n_s_lhsrules, __pyx_n_s_x, __pyx_n_s_rule, __pyx_n_s_vec, __pyx_n_s_left, __pyx_n_s_right); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__53);
  __Pyx_GIVEREF(__pyx_tuple__53);
/* … */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_9estimates_3inside, NULL, __pyx_n_s_discodop_estimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_inside_2, __pyx_t_3) < 0) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(3, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_estimates_pyx, __pyx_n_s_inside_2, 156, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 156, __pyx_L1_error)
 157: 	"""Compute inside estimate in bottom-up fashion, with full bit vectors.
 158: 
 159: 	(not used)."""
 160: 	cdef SmallChartItem I
 161: 	cdef SmallChartItemAgenda[double] agenda
 162: 	cdef pair[SmallChartItem, double] entry
 163: 	cdef size_t i
 164: 
+165: 	for lhsrules in grammar.lexicalbylhs:
  __pyx_t_2 = &__pyx_v_grammar->lexicalbylhs;
  __pyx_t_1 = __pyx_t_2->begin();
  for (;;) {
    if (!(__pyx_t_1 != __pyx_t_2->end())) break;
    __pyx_t_3 = *__pyx_t_1;
    ++__pyx_t_1;
    __pyx_v_lhsrules = __pyx_t_3;
/* … */
  }
+166: 		agenda.setitem(
    __pyx_v_agenda.setitem(SmallChartItem(__pyx_v_lhsrules.first, 1), __pyx_t_9);
 167: 				SmallChartItem(lhsrules.first, 1),
+168: 				min([grammar.lexical[wordlexrule.second].prob
    { /* enter inner scope */
      std::pair<std::string,uint32_t>  __pyx_8genexpr1__pyx_v_wordlexrule;
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
/* … */
        __pyx_t_8 = PyFloat_FromDouble((__pyx_v_grammar->lexical[__pyx_8genexpr1__pyx_v_wordlexrule.second]).prob); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 168, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 168, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+169: 					for wordlexrule in lhsrules.second]))
      __pyx_t_6 = &__pyx_v_lhsrules.second;
      __pyx_t_5 = __pyx_t_6->begin();
      for (;;) {
        if (!(__pyx_t_5 != __pyx_t_6->end())) break;
        __pyx_t_7 = *__pyx_t_5;
        ++__pyx_t_5;
        __pyx_8genexpr1__pyx_v_wordlexrule = __pyx_t_7;
/* … */
      }
    } /* exit inner scope */
 170: 
+171: 	while not agenda.empty():
  while (1) {
    __pyx_t_10 = ((!(__pyx_v_agenda.empty() != 0)) != 0);
    if (!__pyx_t_10) break;
+172: 		entry = agenda.pop()
    __pyx_v_entry = __pyx_v_agenda.pop();
+173: 		I = entry.first
    __pyx_t_11 = __pyx_v_entry.first;
    __pyx_v_I = __pyx_t_11;
+174: 		x = entry.second
    __pyx_t_9 = __pyx_v_entry.second;
    __pyx_v_x = __pyx_t_9;
+175: 		if I.label not in insidescores:
    __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_I.label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__pyx_v_insidescores == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 175, __pyx_L1_error)
    }
    __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_t_4, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 175, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_12 = (__pyx_t_10 != 0);
    if (__pyx_t_12) {
/* … */
    }
+176: 			insidescores[I.label] = {}
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 176, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_I.label); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(PyDict_SetItem(__pyx_v_insidescores, __pyx_t_8, __pyx_t_4) < 0)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+177: 		if x < insidescores[I.label].get(I.vec, INFINITY):
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__pyx_v_insidescores == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 177, __pyx_L1_error)
    }
    __pyx_t_13 = __Pyx_PyInt_From_uint32_t(__pyx_v_I.label); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_get); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyInt_From_uint64_t(__pyx_v_I.vec); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_15 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_16 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_16)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_t_14, __pyx_t_15};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
      PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_t_14, __pyx_t_15};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    } else
    #endif
    {
      __pyx_t_18 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (__pyx_t_16) {
        __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_16); __pyx_t_16 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_17, __pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_17, __pyx_t_15);
      __pyx_t_14 = 0;
      __pyx_t_15 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_18, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = PyObject_RichCompare(__pyx_t_4, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 177, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (__pyx_t_12) {
/* … */
    }
+178: 			insidescores[I.label][I.vec] = x
      __pyx_t_13 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 178, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_I.label); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(__Pyx_SetItemInt(__pyx_t_4, __pyx_v_I.vec, __pyx_t_13, uint64_t, 0, __Pyx_PyInt_From_uint64_t, 0, 0, 0) < 0)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 179: 
+180: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+181: 			rule = grammar.unary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_I.label])[__pyx_v_i]);
+182: 			if rule.rhs1 != I.label:
      __pyx_t_12 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_12) {
/* … */
      }
+183: 				break
        goto __pyx_L12_break;
+184: 			elif (rule.lhs not in insidescores
      __pyx_t_13 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
/* … */
      __pyx_t_21 = (__pyx_t_10 != 0);
      if (!__pyx_t_21) {
      } else {
        __pyx_t_12 = __pyx_t_21;
        goto __pyx_L14_bool_binop_done;
      }
/* … */
      if (__pyx_t_12) {
/* … */
      }
    }
    __pyx_L12_break:;
+185: 					or I.vec not in insidescores[rule.lhs]):
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 185, __pyx_L1_error)
      }
      __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_t_13, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 184, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
      __pyx_t_13 = __Pyx_PyInt_From_uint64_t(__pyx_v_I.vec); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 185, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 185, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 185, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_21 = (__Pyx_PySequence_ContainsTF(__pyx_t_13, __pyx_t_8, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 185, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10 = (__pyx_t_21 != 0);
      __pyx_t_12 = __pyx_t_10;
      __pyx_L14_bool_binop_done:;
+186: 				agenda.setifbetter(
        __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, __pyx_v_I.vec), (__pyx_v_rule.prob + __pyx_v_x));
 187: 						SmallChartItem(rule.lhs, I.vec), rule.prob + x)
 188: 
+189: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+190: 			rule = grammar.lbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->lbinary[__pyx_v_I.label])[__pyx_v_i]);
+191: 			if rule.rhs1 != I.label:
      __pyx_t_12 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_12) {
/* … */
      }
+192: 				break
        goto __pyx_L17_break;
+193: 			elif rule.rhs2 not in insidescores:
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 193, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 193, __pyx_L1_error)
      }
      __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_t_8, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 193, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10 = (__pyx_t_12 != 0);
      if (__pyx_t_10) {
/* … */
      }
+194: 				continue
        goto __pyx_L16_continue;
+195: 			for vec in insidescores[rule.rhs2]:
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 195, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_13 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (likely(PyList_CheckExact(__pyx_t_13)) || PyTuple_CheckExact(__pyx_t_13)) {
        __pyx_t_8 = __pyx_t_13; __Pyx_INCREF(__pyx_t_8); __pyx_t_22 = 0;
        __pyx_t_23 = NULL;
      } else {
        __pyx_t_22 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_23 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 195, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      for (;;) {
        if (likely(!__pyx_t_23)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_22 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_13 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_22); __Pyx_INCREF(__pyx_t_13); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 195, __pyx_L1_error)
            #else
            __pyx_t_13 = PySequence_ITEM(__pyx_t_8, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 195, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_13);
            #endif
          } else {
            if (__pyx_t_22 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_13 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_22); __Pyx_INCREF(__pyx_t_13); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 195, __pyx_L1_error)
            #else
            __pyx_t_13 = PySequence_ITEM(__pyx_t_8, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 195, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_13);
            #endif
          }
        } else {
          __pyx_t_13 = __pyx_t_23(__pyx_t_8);
          if (unlikely(!__pyx_t_13)) {
            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, 195, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_13);
        }
        __Pyx_XDECREF_SET(__pyx_v_vec, __pyx_t_13);
        __pyx_t_13 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_L16_continue:;
    }
    __pyx_L17_break:;
+196: 				left = insideconcat(I.vec, vec, rule, grammar, maxlen)
        __pyx_t_24 = __Pyx_PyInt_As_uint64_t(__pyx_v_vec); if (unlikely((__pyx_t_24 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L1_error)
        __pyx_v_left = __pyx_f_8discodop_9estimates_insideconcat(__pyx_v_I.vec, __pyx_t_24, __pyx_v_rule, __pyx_v_grammar, __pyx_v_maxlen);
+197: 				if left and (rule.lhs not in insidescores
        __pyx_t_12 = (__pyx_v_left != 0);
        if (__pyx_t_12) {
        } else {
          __pyx_t_10 = __pyx_t_12;
          goto __pyx_L22_bool_binop_done;
        }
/* … */
        __pyx_t_13 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 197, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
/* … */
        __pyx_t_21 = (__pyx_t_12 != 0);
        if (!__pyx_t_21) {
        } else {
          __pyx_t_10 = __pyx_t_21;
          goto __pyx_L22_bool_binop_done;
        }
/* … */
        if (__pyx_t_10) {
/* … */
        }
+198: 						or left not in insidescores[rule.lhs]):
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 198, __pyx_L1_error)
        }
        __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_t_13, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 197, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
        __pyx_t_13 = __Pyx_PyInt_From_uint64_t(__pyx_v_left); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 198, __pyx_L1_error)
        }
        __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_18 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_21 = (__Pyx_PySequence_ContainsTF(__pyx_t_13, __pyx_t_18, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 198, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_12 = (__pyx_t_21 != 0);
        __pyx_t_10 = __pyx_t_12;
        __pyx_L22_bool_binop_done:;
+199: 					agenda.setifbetter(SmallChartItem(rule.lhs, left),
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, __pyx_v_left), __pyx_t_9);
+200: 							rule.prob + x + insidescores[rule.rhs2][vec])
          __pyx_t_18 = PyFloat_FromDouble((__pyx_v_rule.prob + __pyx_v_x)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          if (unlikely(__pyx_v_insidescores == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 200, __pyx_L1_error)
          }
          __pyx_t_13 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_13 = PyObject_GetItem(__pyx_t_4, __pyx_v_vec); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyNumber_Add(__pyx_t_18, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 200, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 201: 
+202: 		for i in range(grammar.nonterminals):
    __pyx_t_19 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_i = __pyx_t_20;
+203: 			rule = grammar.rbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->rbinary[__pyx_v_I.label])[__pyx_v_i]);
+204: 			if rule.rhs2 != I.label:
      __pyx_t_10 = ((__pyx_v_rule.rhs2 != __pyx_v_I.label) != 0);
      if (__pyx_t_10) {
/* … */
      }
+205: 				break
        goto __pyx_L26_break;
+206: 			elif rule.rhs1 not in insidescores:
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 206, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 206, __pyx_L1_error)
      }
      __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_t_8, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 206, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_12 = (__pyx_t_10 != 0);
      if (__pyx_t_12) {
/* … */
      }
+207: 				continue
        goto __pyx_L25_continue;
+208: 			for vec in insidescores[rule.rhs1]:
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 208, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
        __pyx_t_8 = __pyx_t_4; __Pyx_INCREF(__pyx_t_8); __pyx_t_22 = 0;
        __pyx_t_23 = NULL;
      } else {
        __pyx_t_22 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_23 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 208, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      for (;;) {
        if (likely(!__pyx_t_23)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_22 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_22); __Pyx_INCREF(__pyx_t_4); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 208, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          } else {
            if (__pyx_t_22 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_22); __Pyx_INCREF(__pyx_t_4); __pyx_t_22++; if (unlikely(0 < 0)) __PYX_ERR(0, 208, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_8, __pyx_t_22); __pyx_t_22++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          }
        } else {
          __pyx_t_4 = __pyx_t_23(__pyx_t_8);
          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, 208, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_XDECREF_SET(__pyx_v_vec, __pyx_t_4);
        __pyx_t_4 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_L25_continue:;
    }
    __pyx_L26_break:;
  }
+209: 				right = insideconcat(vec, I.vec, rule, grammar, maxlen)
        __pyx_t_24 = __Pyx_PyInt_As_uint64_t(__pyx_v_vec); if (unlikely((__pyx_t_24 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 209, __pyx_L1_error)
        __pyx_v_right = __pyx_f_8discodop_9estimates_insideconcat(__pyx_t_24, __pyx_v_I.vec, __pyx_v_rule, __pyx_v_grammar, __pyx_v_maxlen);
+210: 				if right and (rule.lhs not in insidescores
        __pyx_t_10 = (__pyx_v_right != 0);
        if (__pyx_t_10) {
        } else {
          __pyx_t_12 = __pyx_t_10;
          goto __pyx_L31_bool_binop_done;
        }
/* … */
        __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
/* … */
        __pyx_t_21 = (__pyx_t_10 != 0);
        if (!__pyx_t_21) {
        } else {
          __pyx_t_12 = __pyx_t_21;
          goto __pyx_L31_bool_binop_done;
        }
/* … */
        if (__pyx_t_12) {
/* … */
        }
+211: 						or right not in insidescores[rule.lhs]):
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
          __PYX_ERR(0, 211, __pyx_L1_error)
        }
        __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_t_4, __pyx_v_insidescores, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 210, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
        __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_right); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 211, __pyx_L1_error)
        }
        __pyx_t_13 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 211, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_18 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 211, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_21 = (__Pyx_PySequence_ContainsTF(__pyx_t_4, __pyx_t_18, Py_NE)); if (unlikely(__pyx_t_21 < 0)) __PYX_ERR(0, 211, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_10 = (__pyx_t_21 != 0);
        __pyx_t_12 = __pyx_t_10;
        __pyx_L31_bool_binop_done:;
+212: 					agenda.setifbetter(SmallChartItem(rule.lhs, right),
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, __pyx_v_right), __pyx_t_9);
+213: 							rule.prob + insidescores[rule.rhs1][vec] + x)
          __pyx_t_18 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          if (unlikely(__pyx_v_insidescores == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 213, __pyx_L1_error)
          }
          __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_13 = __Pyx_PyDict_GetItem(__pyx_v_insidescores, __pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyObject_GetItem(__pyx_t_13, __pyx_v_vec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_13 = PyNumber_Add(__pyx_t_18, __pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_18 = PyNumber_Add(__pyx_t_13, __pyx_t_4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_18); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 213, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 214: 
+215: 	return insidescores
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_insidescores);
  __pyx_r = __pyx_v_insidescores;
  goto __pyx_L0;
 216: 
 217: 
+218: cdef inline uint64_t insideconcat(uint64_t a, uint64_t b, ProbRule rule,
static CYTHON_INLINE uint64_t __pyx_f_8discodop_9estimates_insideconcat(uint64_t __pyx_v_a, uint64_t __pyx_v_b, ProbRule __pyx_v_rule, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen) {
  int __pyx_v_subarg;
  int __pyx_v_resultpos;
  uint64_t __pyx_v_result;
  PyObject *__pyx_v_l = NULL;
  PyObject *__pyx_v_r = NULL;
  int __pyx_v_x;
  uint64_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insideconcat", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("discodop.estimates.insideconcat", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_l);
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 219: 		Grammar grammar, uint32_t maxlen):
 220: 	cdef int subarg, resultpos
 221: 	cdef uint64_t result
+222: 	if grammar.fanout[rule.lhs] + bitcount(a) + bitcount(b) > maxlen + 1:
  __pyx_t_1 = (((((__pyx_v_grammar->fanout[__pyx_v_rule.lhs]) + __pyx_f_8discodop_3bit_bitcount(__pyx_v_a, 0)) + __pyx_f_8discodop_3bit_bitcount(__pyx_v_b, 0)) > (__pyx_v_maxlen + 1)) != 0);
  if (__pyx_t_1) {
/* … */
  }
+223: 		return 0
    __pyx_r = 0;
    goto __pyx_L0;
+224: 	result = resultpos = l = r = 0
  __pyx_v_result = 0;
  __pyx_v_resultpos = 0;
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_l = __pyx_int_0;
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_r = __pyx_int_0;
+225: 	for x in range(bitlength(rule.lengths)):
  __pyx_t_2 = __pyx_f_8discodop_3bit_bitlength(__pyx_v_rule.lengths);
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_x = __pyx_t_3;
+226: 		if testbit(rule.args, x) == 0:
    __pyx_t_1 = ((__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_x) == 0) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L6;
    }
+227: 			subarg = nextunset(a, l) - l
      __pyx_t_4 = __Pyx_PyInt_As_uint32_t(__pyx_v_l); if (unlikely((__pyx_t_4 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_f_8discodop_3bit_nextunset(__pyx_v_a, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyNumber_Subtract(__pyx_t_5, __pyx_v_l); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_subarg = __pyx_t_7;
+228: 			result |= (1UL << subarg) - 1UL << resultpos
      __pyx_v_result = (__pyx_v_result | (((1UL << __pyx_v_subarg) - 1UL) << __pyx_v_resultpos));
+229: 			resultpos += subarg
      __pyx_v_resultpos = (__pyx_v_resultpos + __pyx_v_subarg);
+230: 			l = subarg + 1
      __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_subarg + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_l, __pyx_t_6);
      __pyx_t_6 = 0;
 231: 		else:
+232: 			subarg = nextunset(b, r) - r
    /*else*/ {
      __pyx_t_4 = __Pyx_PyInt_As_uint32_t(__pyx_v_r); if (unlikely((__pyx_t_4 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_f_8discodop_3bit_nextunset(__pyx_v_b, __pyx_t_4)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PyNumber_Subtract(__pyx_t_6, __pyx_v_r); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_subarg = __pyx_t_7;
+233: 			result |= (1UL << subarg) - 1UL << resultpos
      __pyx_v_result = (__pyx_v_result | (((1UL << __pyx_v_subarg) - 1UL) << __pyx_v_resultpos));
+234: 			resultpos += subarg
      __pyx_v_resultpos = (__pyx_v_resultpos + __pyx_v_subarg);
+235: 			r = subarg + 1
      __pyx_t_5 = __Pyx_PyInt_From_long((__pyx_v_subarg + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 235, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_r, __pyx_t_5);
      __pyx_t_5 = 0;
    }
    __pyx_L6:;
+236: 		if testbit(rule.lengths, x):
    __pyx_t_1 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.lengths, __pyx_v_x) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
+237: 			resultpos += 1
      __pyx_v_resultpos = (__pyx_v_resultpos + 1);
+238: 			result &= ~(1UL << resultpos)
      __pyx_v_result = (__pyx_v_result & (~(1UL << __pyx_v_resultpos)));
+239: 	return result
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 240: 
 241: 
+242: def outsidelr(Grammar grammar, double [:, :] insidescores,
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_5outsidelr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_4outsidelr[] = "outsidelr(Grammar grammar, __Pyx_memviewslice insidescores, uint32_t maxlen, Label goal, __Pyx_memviewslice outside)\nCompute the outside SX simple LR estimate in top down fashion.";
static PyMethodDef __pyx_mdef_8discodop_9estimates_5outsidelr = {"outsidelr", (PyCFunction)__pyx_pw_8discodop_9estimates_5outsidelr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_9estimates_4outsidelr};
static PyObject *__pyx_pw_8discodop_9estimates_5outsidelr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  __Pyx_memviewslice __pyx_v_insidescores = { 0, 0, { 0 }, { 0 }, { 0 } };
  uint32_t __pyx_v_maxlen;
  Label __pyx_v_goal;
  __Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outsidelr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_insidescores,&__pyx_n_s_maxlen,&__pyx_n_s_goal,&__pyx_n_s_outside,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_insidescores)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("outsidelr", 1, 5, 5, 1); __PYX_ERR(0, 242, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("outsidelr", 1, 5, 5, 2); __PYX_ERR(0, 242, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_goal)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("outsidelr", 1, 5, 5, 3); __PYX_ERR(0, 242, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_outside)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("outsidelr", 1, 5, 5, 4); __PYX_ERR(0, 242, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "outsidelr") < 0)) __PYX_ERR(0, 242, __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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_insidescores = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[1]); if (unlikely(!__pyx_v_insidescores.memview)) __PYX_ERR(0, 242, __pyx_L3_error)
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[2]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 243, __pyx_L3_error)
    __pyx_v_goal = __Pyx_PyInt_As_uint32_t(values[3]); if (unlikely((__pyx_v_goal == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 243, __pyx_L3_error)
    __pyx_v_outside = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(values[4]); if (unlikely(!__pyx_v_outside.memview)) __PYX_ERR(0, 243, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("outsidelr", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 242, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.outsidelr", __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, 242, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_4outsidelr(__pyx_self, __pyx_v_grammar, __pyx_v_insidescores, __pyx_v_maxlen, __pyx_v_goal, __pyx_v_outside);

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

static PyObject *__pyx_pf_8discodop_9estimates_4outsidelr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, __Pyx_memviewslice __pyx_v_insidescores, uint32_t __pyx_v_maxlen, Label __pyx_v_goal, __Pyx_memviewslice __pyx_v_outside) {
  struct __pyx_obj_8discodop_9estimates_Item *__pyx_v_I = 0;
  ProbRule __pyx_v_rule;
  double __pyx_v_x;
  double __pyx_v_insidescore;
  double __pyx_v_current;
  double __pyx_v_score;
  int __pyx_v_n;
  int __pyx_v_totlen;
  int __pyx_v_addgaps;
  int __pyx_v_addright;
  int __pyx_v_leftfanout;
  int __pyx_v_rightfanout;
  int __pyx_v_lenA;
  int __pyx_v_lenB;
  int __pyx_v_lr;
  int __pyx_v_ga;
  size_t __pyx_v_i;
  int __pyx_v_stopaddleft;
  int __pyx_v_stopaddright;
  PyObject *__pyx_v_agenda = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("outsidelr", 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_11);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("discodop.estimates.outsidelr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_I);
  __Pyx_XDECREF(__pyx_v_agenda);
  __PYX_XDEC_MEMVIEW(&__pyx_v_insidescores, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__55 = PyTuple_Pack(25, __pyx_n_s_grammar, __pyx_n_s_insidescores, __pyx_n_s_maxlen, __pyx_n_s_goal, __pyx_n_s_outside, __pyx_n_s_I, __pyx_n_s_rule, __pyx_n_s_x, __pyx_n_s_insidescore, __pyx_n_s_current, __pyx_n_s_score, __pyx_n_s_n, __pyx_n_s_totlen, __pyx_n_s_addgaps, __pyx_n_s_addright, __pyx_n_s_leftfanout, __pyx_n_s_rightfanout, __pyx_n_s_lenA, __pyx_n_s_lenB, __pyx_n_s_lr, __pyx_n_s_ga, __pyx_n_s_i, __pyx_n_s_stopaddleft, __pyx_n_s_stopaddright, __pyx_n_s_agenda); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__55);
  __Pyx_GIVEREF(__pyx_tuple__55);
/* … */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_9estimates_5outsidelr, NULL, __pyx_n_s_discodop_estimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_outsidelr, __pyx_t_3) < 0) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(5, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_estimates_pyx, __pyx_n_s_outsidelr, 242, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 242, __pyx_L1_error)
 243: 		uint32_t maxlen, Label goal, double [:, :, :, :] outside):
 244: 	"""Compute the outside SX simple LR estimate in top down fashion."""
 245: 	cdef Item I
 246: 	cdef ProbRule rule
 247: 	cdef double x, insidescore, current, score
 248: 	cdef int n, totlen, addgaps, addright, leftfanout, rightfanout
 249: 	cdef int lenA, lenB, lr, ga
 250: 	cdef size_t i
 251: 	cdef bint stopaddleft, stopaddright
+252: 	agenda = PyAgenda()
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PyAgenda); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __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_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_agenda = __pyx_t_1;
  __pyx_t_1 = 0;
 253: 
+254: 	for n in range(1, maxlen + 1):
  __pyx_t_4 = (__pyx_v_maxlen + 1);
  for (__pyx_t_5 = 1; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_n = __pyx_t_5;
+255: 		agenda[new_Item(goal, n, 0, 0)] = 0.0
    __pyx_t_1 = ((PyObject *)__pyx_f_8discodop_9estimates_new_Item(__pyx_v_goal, __pyx_v_n, 0, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_1, __pyx_float_0_0) < 0)) __PYX_ERR(0, 255, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+256: 		outside[goal, n, 0, 0] = 0.0
    __pyx_t_6 = __pyx_v_goal;
    __pyx_t_7 = __pyx_v_n;
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_6 * __pyx_v_outside.strides[0]) ) + __pyx_t_7 * __pyx_v_outside.strides[1]) ) + __pyx_t_8 * __pyx_v_outside.strides[2]) ) + __pyx_t_9 * __pyx_v_outside.strides[3]) )) = 0.0;
  }
+257: 	print("initialized")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_n_u_initialized); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);
 258: 
+259: 	while agenda:
  while (1) {
    __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_agenda); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 259, __pyx_L1_error)
    if (!__pyx_t_10) break;
+260: 		I, x = agenda.popitem()
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_agenda, __pyx_n_s_popitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __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_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_1);
    __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, 260, __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, 260, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __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_11 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 260, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 260, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L8_unpacking_done;
      __pyx_L7_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 260, __pyx_L1_error)
      __pyx_L8_unpacking_done:;
    }
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8discodop_9estimates_Item))))) __PYX_ERR(0, 260, __pyx_L1_error)
    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_I, ((struct __pyx_obj_8discodop_9estimates_Item *)__pyx_t_2));
    __pyx_t_2 = 0;
    __pyx_v_x = __pyx_t_13;
+261: 		if len(agenda) % 10000 == 0:
    __pyx_t_14 = PyObject_Length(__pyx_v_agenda); if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 261, __pyx_L1_error)
    __pyx_t_10 = (((__pyx_t_14 % 0x2710) == 0) != 0);
    if (__pyx_t_10) {
/* … */
    }
+262: 			print('agenda size: %dk top: %r, %g %s' % (
      __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_agenda_size_dk_top_r_g_s, __pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+263: 					len(agenda) / 1000, I, exp(-x),
      __pyx_t_14 = PyObject_Length(__pyx_v_agenda); if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 263, __pyx_L1_error)
      __pyx_t_1 = PyInt_FromSsize_t((__pyx_t_14 / 0x3E8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = PyFloat_FromDouble((-__pyx_v_x)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      if (!__pyx_t_15) {
        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_11};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_11};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        {
          __pyx_t_16 = PyTuple_New(1+1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 263, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_15); __pyx_t_15 = NULL;
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_16, 0+1, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_t_16 = PyTuple_New(4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_I));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_I));
      PyTuple_SET_ITEM(__pyx_t_16, 1, ((PyObject *)__pyx_v_I));
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_16, 3, __pyx_t_2);
      __pyx_t_1 = 0;
      __pyx_t_3 = 0;
      __pyx_t_2 = 0;
+264: 					grammar.tolabel[I.state]))
      __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_I->state, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+265: 		totlen = I.length + I.lr + I.gaps
    __pyx_v_totlen = ((__pyx_v_I->length + __pyx_v_I->lr) + __pyx_v_I->gaps);
+266: 		i = 0
    __pyx_v_i = 0;
+267: 		rule = grammar.bylhs[I.state][i]
    __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_I->state])[__pyx_v_i]);
+268: 		while rule.lhs == I.state:
    while (1) {
      __pyx_t_10 = ((__pyx_v_rule.lhs == __pyx_v_I->state) != 0);
      if (!__pyx_t_10) break;
 269: 			# X -> A
+270: 			if rule.rhs2 == 0:
      __pyx_t_10 = ((__pyx_v_rule.rhs2 == 0) != 0);
      if (__pyx_t_10) {
/* … */
      }
+271: 				score = rule.prob + x
        __pyx_v_score = (__pyx_v_rule.prob + __pyx_v_x);
+272: 				if score < outside[rule.rhs1, I.length, I.lr, I.gaps]:
        __pyx_t_17 = __pyx_v_rule.rhs1;
        __pyx_t_18 = __pyx_v_I->length;
        __pyx_t_19 = __pyx_v_I->lr;
        __pyx_t_20 = __pyx_v_I->gaps;
        __pyx_t_10 = ((__pyx_v_score < (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_17 * __pyx_v_outside.strides[0]) ) + __pyx_t_18 * __pyx_v_outside.strides[1]) ) + __pyx_t_19 * __pyx_v_outside.strides[2]) ) + __pyx_t_20 * __pyx_v_outside.strides[3]) )))) != 0);
        if (__pyx_t_10) {
/* … */
        }
+273: 					agenda[new_Item(rule.rhs1, I.length, I.lr, I.gaps)
          __pyx_t_16 = ((PyObject *)__pyx_f_8discodop_9estimates_new_Item(__pyx_v_rule.rhs1, __pyx_v_I->length, __pyx_v_I->lr, __pyx_v_I->gaps)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 273, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_16, __pyx_t_2) < 0)) __PYX_ERR(0, 273, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+274: 							] = score
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
+275: 					outside[rule.rhs1, I.length, I.lr, I.gaps] = score
          __pyx_t_21 = __pyx_v_rule.rhs1;
          __pyx_t_22 = __pyx_v_I->length;
          __pyx_t_23 = __pyx_v_I->lr;
          __pyx_t_24 = __pyx_v_I->gaps;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_21 * __pyx_v_outside.strides[0]) ) + __pyx_t_22 * __pyx_v_outside.strides[1]) ) + __pyx_t_23 * __pyx_v_outside.strides[2]) ) + __pyx_t_24 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
+276: 				i += 1
        __pyx_v_i = (__pyx_v_i + 1);
+277: 				rule = grammar.bylhs[I.state][i]
        __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_I->state])[__pyx_v_i]);
+278: 				continue
        goto __pyx_L10_continue;
 279: 			# X -> A B
+280: 			addgaps = addright = 0
      __pyx_v_addgaps = 0;
      __pyx_v_addright = 0;
+281: 			stopaddright = False
      __pyx_v_stopaddright = 0;
+282: 			for n in range(bitlength(rule.lengths) - 1, -1, -1):
      for (__pyx_t_5 = (__pyx_f_8discodop_3bit_bitlength(__pyx_v_rule.lengths) - 1); __pyx_t_5 > -1L; __pyx_t_5-=1) {
        __pyx_v_n = __pyx_t_5;
+283: 				if testbit(rule.args, n):
        __pyx_t_10 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_n) != 0);
        if (__pyx_t_10) {
/* … */
          goto __pyx_L16;
        }
+284: 					if stopaddright:
          __pyx_t_10 = (__pyx_v_stopaddright != 0);
          if (__pyx_t_10) {
/* … */
            goto __pyx_L17;
          }
+285: 						addgaps += 1
            __pyx_v_addgaps = (__pyx_v_addgaps + 1);
 286: 					else:
+287: 						addright += 1
          /*else*/ {
            __pyx_v_addright = (__pyx_v_addright + 1);
          }
          __pyx_L17:;
+288: 				elif not stopaddright:
        __pyx_t_10 = ((!(__pyx_v_stopaddright != 0)) != 0);
        if (__pyx_t_10) {
/* … */
        }
        __pyx_L16:;
      }
+289: 					stopaddright = True
          __pyx_v_stopaddright = 1;
 290: 
+291: 			leftfanout = grammar.fanout[rule.rhs1]
      __pyx_v_leftfanout = (__pyx_v_grammar->fanout[__pyx_v_rule.rhs1]);
+292: 			rightfanout = grammar.fanout[rule.rhs2]
      __pyx_v_rightfanout = (__pyx_v_grammar->fanout[__pyx_v_rule.rhs2]);
 293: 
 294: 			# binary-left (A is left)
+295: 			for lenA in range(leftfanout, I.length - rightfanout + 1):
      __pyx_t_4 = ((__pyx_v_I->length - __pyx_v_rightfanout) + 1);
      for (__pyx_t_5 = __pyx_v_leftfanout; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
        __pyx_v_lenA = __pyx_t_5;
+296: 				lenB = I.length - lenA
        __pyx_v_lenB = (__pyx_v_I->length - __pyx_v_lenA);
+297: 				insidescore = insidescores[rule.rhs2, lenB]
        __pyx_t_25 = __pyx_v_rule.rhs2;
        __pyx_t_26 = __pyx_v_lenB;
        __pyx_v_insidescore = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_25 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_26 * __pyx_v_insidescores.strides[1]) )));
+298: 				for lr in range(I.lr, I.lr + lenB + 2):  # FIXME: why 2?
        __pyx_t_27 = ((__pyx_v_I->lr + __pyx_v_lenB) + 2);
        for (__pyx_t_28 = __pyx_v_I->lr; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
          __pyx_v_lr = __pyx_t_28;
+299: 					if addright == 0 and lr != I.lr:
          __pyx_t_29 = ((__pyx_v_addright == 0) != 0);
          if (__pyx_t_29) {
          } else {
            __pyx_t_10 = __pyx_t_29;
            goto __pyx_L23_bool_binop_done;
          }
          __pyx_t_29 = ((__pyx_v_lr != __pyx_v_I->lr) != 0);
          __pyx_t_10 = __pyx_t_29;
          __pyx_L23_bool_binop_done:;
          if (__pyx_t_10) {
/* … */
          }
+300: 						continue
            goto __pyx_L20_continue;
+301: 					for ga in range(leftfanout - 1, totlen + 1):
          __pyx_t_30 = (__pyx_v_totlen + 1);
          for (__pyx_t_31 = (__pyx_v_leftfanout - 1); __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {
            __pyx_v_ga = __pyx_t_31;
+302: 						if (lenA + lr + ga == I.length + I.lr + I.gaps
            __pyx_t_29 = ((((__pyx_v_lenA + __pyx_v_lr) + __pyx_v_ga) == ((__pyx_v_I->length + __pyx_v_I->lr) + __pyx_v_I->gaps)) != 0);
            if (__pyx_t_29) {
            } else {
              __pyx_t_10 = __pyx_t_29;
              goto __pyx_L28_bool_binop_done;
            }
/* … */
            if (__pyx_t_10) {
/* … */
            }
          }
          __pyx_L20_continue:;
        }
      }
+303: 								and ga >= addgaps):
            __pyx_t_29 = ((__pyx_v_ga >= __pyx_v_addgaps) != 0);
            __pyx_t_10 = __pyx_t_29;
            __pyx_L28_bool_binop_done:;
+304: 							score = rule.prob + x + insidescore
              __pyx_v_score = ((__pyx_v_rule.prob + __pyx_v_x) + __pyx_v_insidescore);
+305: 							current = outside[rule.rhs1, lenA, lr, ga]
              __pyx_t_32 = __pyx_v_rule.rhs1;
              __pyx_t_33 = __pyx_v_lenA;
              __pyx_t_34 = __pyx_v_lr;
              __pyx_t_35 = __pyx_v_ga;
              __pyx_v_current = (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_32 * __pyx_v_outside.strides[0]) ) + __pyx_t_33 * __pyx_v_outside.strides[1]) ) + __pyx_t_34 * __pyx_v_outside.strides[2]) ) + __pyx_t_35 * __pyx_v_outside.strides[3]) )));
+306: 							if score < current:
              __pyx_t_10 = ((__pyx_v_score < __pyx_v_current) != 0);
              if (__pyx_t_10) {
/* … */
              }
+307: 								agenda[new_Item(rule.rhs1, lenA, lr, ga)
                __pyx_t_16 = ((PyObject *)__pyx_f_8discodop_9estimates_new_Item(__pyx_v_rule.rhs1, __pyx_v_lenA, __pyx_v_lr, __pyx_v_ga)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 307, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_16);
                if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_16, __pyx_t_2) < 0)) __PYX_ERR(0, 307, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+308: 										] = score
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 308, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
+309: 								outside[rule.rhs1, lenA, lr, ga] = score
                __pyx_t_36 = __pyx_v_rule.rhs1;
                __pyx_t_37 = __pyx_v_lenA;
                __pyx_t_38 = __pyx_v_lr;
                __pyx_t_39 = __pyx_v_ga;
                *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_36 * __pyx_v_outside.strides[0]) ) + __pyx_t_37 * __pyx_v_outside.strides[1]) ) + __pyx_t_38 * __pyx_v_outside.strides[2]) ) + __pyx_t_39 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
 310: 
 311: 			# X -> B A
+312: 			addgaps = addright = 0
      __pyx_v_addgaps = 0;
      __pyx_v_addright = 0;
+313: 			stopaddleft = False
      __pyx_v_stopaddleft = 0;
+314: 			for n in range(bitlength(rule.lengths)):
      __pyx_t_5 = __pyx_f_8discodop_3bit_bitlength(__pyx_v_rule.lengths);
      for (__pyx_t_28 = 0; __pyx_t_28 < __pyx_t_5; __pyx_t_28+=1) {
        __pyx_v_n = __pyx_t_28;
+315: 				if not stopaddleft and testbit(rule.args, n):
        __pyx_t_29 = ((!(__pyx_v_stopaddleft != 0)) != 0);
        if (__pyx_t_29) {
        } else {
          __pyx_t_10 = __pyx_t_29;
          goto __pyx_L34_bool_binop_done;
        }
        __pyx_t_29 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_n) != 0);
        __pyx_t_10 = __pyx_t_29;
        __pyx_L34_bool_binop_done:;
        if (__pyx_t_10) {
/* … */
        }
+316: 					stopaddleft = True
          __pyx_v_stopaddleft = 1;
+317: 				if not testbit(rule.args, n):
        __pyx_t_10 = ((!(__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_n) != 0)) != 0);
        if (__pyx_t_10) {
/* … */
        }
      }
+318: 					if stopaddleft:
          __pyx_t_10 = (__pyx_v_stopaddleft != 0);
          if (__pyx_t_10) {
/* … */
          }
+319: 						addgaps += 1
            __pyx_v_addgaps = (__pyx_v_addgaps + 1);
 320: 
+321: 			stopaddright = False
      __pyx_v_stopaddright = 0;
+322: 			for n in range(bitlength(rule.lengths) - 1, -1, -1):
      for (__pyx_t_5 = (__pyx_f_8discodop_3bit_bitlength(__pyx_v_rule.lengths) - 1); __pyx_t_5 > -1L; __pyx_t_5-=1) {
        __pyx_v_n = __pyx_t_5;
+323: 				if not stopaddright and testbit(rule.args, n):
        __pyx_t_29 = ((!(__pyx_v_stopaddright != 0)) != 0);
        if (__pyx_t_29) {
        } else {
          __pyx_t_10 = __pyx_t_29;
          goto __pyx_L41_bool_binop_done;
        }
        __pyx_t_29 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_n) != 0);
        __pyx_t_10 = __pyx_t_29;
        __pyx_L41_bool_binop_done:;
        if (__pyx_t_10) {
/* … */
        }
+324: 					stopaddright = True
          __pyx_v_stopaddright = 1;
+325: 				if not testbit(rule.args, n) and not stopaddright:
        __pyx_t_29 = ((!(__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule.args, __pyx_v_n) != 0)) != 0);
        if (__pyx_t_29) {
        } else {
          __pyx_t_10 = __pyx_t_29;
          goto __pyx_L44_bool_binop_done;
        }
        __pyx_t_29 = ((!(__pyx_v_stopaddright != 0)) != 0);
        __pyx_t_10 = __pyx_t_29;
        __pyx_L44_bool_binop_done:;
        if (__pyx_t_10) {
/* … */
        }
      }
+326: 					addright += 1
          __pyx_v_addright = (__pyx_v_addright + 1);
+327: 			addgaps -= addright
      __pyx_v_addgaps = (__pyx_v_addgaps - __pyx_v_addright);
 328: 
 329: 			# binary-right (A is right)
+330: 			for lenA in range(rightfanout, I.length - leftfanout + 1):
      __pyx_t_4 = ((__pyx_v_I->length - __pyx_v_leftfanout) + 1);
      for (__pyx_t_5 = __pyx_v_rightfanout; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
        __pyx_v_lenA = __pyx_t_5;
+331: 				lenB = I.length - lenA
        __pyx_v_lenB = (__pyx_v_I->length - __pyx_v_lenA);
+332: 				insidescore = insidescores[rule.rhs1, lenB]
        __pyx_t_40 = __pyx_v_rule.rhs1;
        __pyx_t_41 = __pyx_v_lenB;
        __pyx_v_insidescore = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_insidescores.data + __pyx_t_40 * __pyx_v_insidescores.strides[0]) ) + __pyx_t_41 * __pyx_v_insidescores.strides[1]) )));
+333: 				for lr in range(I.lr, I.lr + lenB + 2):  # FIXME: why 2?
        __pyx_t_27 = ((__pyx_v_I->lr + __pyx_v_lenB) + 2);
        for (__pyx_t_28 = __pyx_v_I->lr; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
          __pyx_v_lr = __pyx_t_28;
+334: 					for ga in range(rightfanout - 1, totlen + 1):
          __pyx_t_30 = (__pyx_v_totlen + 1);
          for (__pyx_t_31 = (__pyx_v_rightfanout - 1); __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {
            __pyx_v_ga = __pyx_t_31;
+335: 						if (lenA + lr + ga == I.length + I.lr + I.gaps
            __pyx_t_29 = ((((__pyx_v_lenA + __pyx_v_lr) + __pyx_v_ga) == ((__pyx_v_I->length + __pyx_v_I->lr) + __pyx_v_I->gaps)) != 0);
            if (__pyx_t_29) {
            } else {
              __pyx_t_10 = __pyx_t_29;
              goto __pyx_L53_bool_binop_done;
            }
/* … */
            if (__pyx_t_10) {
/* … */
            }
          }
        }
      }
+336: 								and ga >= addgaps):
            __pyx_t_29 = ((__pyx_v_ga >= __pyx_v_addgaps) != 0);
            __pyx_t_10 = __pyx_t_29;
            __pyx_L53_bool_binop_done:;
+337: 							score = rule.prob + insidescore + x
              __pyx_v_score = ((__pyx_v_rule.prob + __pyx_v_insidescore) + __pyx_v_x);
+338: 							current = outside[rule.rhs2, lenA, lr, ga]
              __pyx_t_42 = __pyx_v_rule.rhs2;
              __pyx_t_43 = __pyx_v_lenA;
              __pyx_t_44 = __pyx_v_lr;
              __pyx_t_45 = __pyx_v_ga;
              __pyx_v_current = (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_42 * __pyx_v_outside.strides[0]) ) + __pyx_t_43 * __pyx_v_outside.strides[1]) ) + __pyx_t_44 * __pyx_v_outside.strides[2]) ) + __pyx_t_45 * __pyx_v_outside.strides[3]) )));
+339: 							if score < current:
              __pyx_t_10 = ((__pyx_v_score < __pyx_v_current) != 0);
              if (__pyx_t_10) {
/* … */
              }
+340: 								agenda[new_Item(rule.rhs2, lenA, lr, ga)
                __pyx_t_16 = ((PyObject *)__pyx_f_8discodop_9estimates_new_Item(__pyx_v_rule.rhs2, __pyx_v_lenA, __pyx_v_lr, __pyx_v_ga)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 340, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_16);
                if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_16, __pyx_t_2) < 0)) __PYX_ERR(0, 340, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+341: 										] = score
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
+342: 								outside[rule.rhs2, lenA, lr, ga] = score
                __pyx_t_46 = __pyx_v_rule.rhs2;
                __pyx_t_47 = __pyx_v_lenA;
                __pyx_t_48 = __pyx_v_lr;
                __pyx_t_49 = __pyx_v_ga;
                *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_46 * __pyx_v_outside.strides[0]) ) + __pyx_t_47 * __pyx_v_outside.strides[1]) ) + __pyx_t_48 * __pyx_v_outside.strides[2]) ) + __pyx_t_49 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
+343: 			i += 1
      __pyx_v_i = (__pyx_v_i + 1);
+344: 			rule = grammar.bylhs[I.state][i]
      __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_I->state])[__pyx_v_i]);
      __pyx_L10_continue:;
    }
  }
 345: 		# end while rule.lhs == I.state:
 346: 	# end while agenda:
 347: 
 348: 
+349: def getestimates(Grammar grammar, uint32_t maxlen, str rootlabel):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_7getestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_6getestimates[] = "getestimates(Grammar grammar, uint32_t maxlen, unicode rootlabel)\nCompute table of outside SX simple LR estimates for a PLCFRS.";
static PyMethodDef __pyx_mdef_8discodop_9estimates_7getestimates = {"getestimates", (PyCFunction)__pyx_pw_8discodop_9estimates_7getestimates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_9estimates_6getestimates};
static PyObject *__pyx_pw_8discodop_9estimates_7getestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  PyObject *__pyx_v_rootlabel = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getestimates (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_rootlabel,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getestimates", 1, 3, 3, 1); __PYX_ERR(0, 349, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rootlabel)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getestimates", 1, 3, 3, 2); __PYX_ERR(0, 349, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getestimates") < 0)) __PYX_ERR(0, 349, __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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error)
    __pyx_v_rootlabel = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getestimates", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 349, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.getestimates", __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, 349, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rootlabel), (&PyUnicode_Type), 1, "rootlabel", 1))) __PYX_ERR(0, 349, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_6getestimates(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_rootlabel);

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

static PyObject *__pyx_pf_8discodop_9estimates_6getestimates(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_rootlabel) {
  Label __pyx_v_goal;
  PyObject *__pyx_v_insidescores = NULL;
  PyObject *__pyx_v_outside = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getestimates", 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_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("discodop.estimates.getestimates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_insidescores);
  __Pyx_XDECREF(__pyx_v_outside);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__57 = PyTuple_Pack(6, __pyx_n_s_grammar, __pyx_n_s_maxlen, __pyx_n_s_rootlabel, __pyx_n_s_goal, __pyx_n_s_insidescores, __pyx_n_s_outside); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__57);
  __Pyx_GIVEREF(__pyx_tuple__57);
/* … */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_9estimates_7getestimates, NULL, __pyx_n_s_discodop_estimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getestimates, __pyx_t_3) < 0) __PYX_ERR(0, 349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_estimates_pyx, __pyx_n_s_getestimates, 349, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 349, __pyx_L1_error)
 350: 	"""Compute table of outside SX simple LR estimates for a PLCFRS."""
+351: 	cdef Label goal = grammar.toid[rootlabel]
  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->toid), __pyx_v_rootlabel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_goal = __pyx_t_2;
+352: 	print("allocating outside matrix:",
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_kp_u_allocating_outside_matrix);
  __Pyx_GIVEREF(__pyx_kp_u_allocating_outside_matrix);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_allocating_outside_matrix);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_MB);
  __Pyx_GIVEREF(__pyx_n_u_MB);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_n_u_MB);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 353: 		(8 * grammar.nonterminals * (maxlen + 1) * (maxlen + 1)
+354: 			* (maxlen + 1) / 1024 ** 2), 'MB')
  __pyx_t_1 = __Pyx_PyInt_FromSize_t((((((8 * __pyx_v_grammar->nonterminals) * (__pyx_v_maxlen + 1)) * (__pyx_v_maxlen + 1)) * (__pyx_v_maxlen + 1)) / 0x100000)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+355: 	insidescores = np.empty((grammar.nonterminals, (maxlen + 1)), dtype='d')
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 355, __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 = 0;
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 355, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __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;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_insidescores = __pyx_t_1;
  __pyx_t_1 = 0;
+356: 	outside = np.empty((grammar.nonterminals, ) + 3 * (maxlen + 1, ), dtype='d')
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1 * 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  { Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < 3; __pyx_temp++) {
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_t_1);
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 356, __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_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 356, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_outside = __pyx_t_4;
  __pyx_t_4 = 0;
+357: 	insidescores[...] = np.NAN
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_NAN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_insidescores, Py_Ellipsis, __pyx_t_1) < 0)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+358: 	outside[...] = np.inf
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_outside, Py_Ellipsis, __pyx_t_4) < 0)) __PYX_ERR(0, 358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+359: 	print("getting inside estimates")
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_getting_inside_estimates); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);
+360: 	simpleinside(grammar, maxlen, insidescores)
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_simpleinside); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_grammar), __pyx_t_3, __pyx_v_insidescores};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __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[4] = {__pyx_t_5, ((PyObject *)__pyx_v_grammar), __pyx_t_3, __pyx_v_insidescores};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 360, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_v_insidescores);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_insidescores);
    __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+361: 	print("getting outside estimates")
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_getting_outside_estimates); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
+362: 	outsidelr(grammar, insidescores, maxlen, goal, outside)
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_outsidelr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_goal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_5, ((PyObject *)__pyx_v_grammar), __pyx_v_insidescores, __pyx_t_7, __pyx_t_3, __pyx_v_outside};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __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[6] = {__pyx_t_5, ((PyObject *)__pyx_v_grammar), __pyx_v_insidescores, __pyx_t_7, __pyx_t_3, __pyx_v_outside};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_6, ((PyObject *)__pyx_v_grammar));
    __Pyx_INCREF(__pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_v_insidescores);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_6, __pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_6, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_outside);
    __Pyx_GIVEREF(__pyx_v_outside);
    PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_6, __pyx_v_outside);
    __pyx_t_7 = 0;
    __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 362, __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_4); __pyx_t_4 = 0;
+363: 	return outside
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outside);
  __pyx_r = __pyx_v_outside;
  goto __pyx_L0;
 364: 
 365: 
+366: cdef inline double getpcfgoutside(dict outsidescores,
static CYTHON_INLINE double __pyx_f_8discodop_9estimates_getpcfgoutside(PyObject *__pyx_v_outsidescores, uint32_t __pyx_v_maxlen, uint32_t __pyx_v_slen, Label __pyx_v_label, uint64_t __pyx_v_vec) {
  int __pyx_v_length;
  int __pyx_v_left;
  int __pyx_v_right;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgoutside", 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_WriteUnraisable("discodop.estimates.getpcfgoutside", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 367: 		uint32_t maxlen, uint32_t slen, Label label, uint64_t vec):
 368: 	"""Query for a PCFG A* estimate. For documentation purposes."""
+369: 	cdef int length = bitcount(vec)
  __pyx_v_length = __pyx_f_8discodop_3bit_bitcount(__pyx_v_vec, 0);
+370: 	cdef int left = nextset(vec, 0)
  __pyx_v_left = __pyx_f_8discodop_3bit_nextset(__pyx_v_vec, 0);
+371: 	cdef int right = slen - length - left
  __pyx_v_right = ((__pyx_v_slen - __pyx_v_length) - __pyx_v_left);
+372: 	if slen > maxlen or length + left + right > maxlen:
  __pyx_t_2 = ((__pyx_v_slen > __pyx_v_maxlen) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((((__pyx_v_length + __pyx_v_left) + __pyx_v_right) > __pyx_v_maxlen) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+373: 		return 0.0
    __pyx_r = 0.0;
    goto __pyx_L0;
+374: 	return outsidescores[label, left, right]
  if (unlikely(__pyx_v_outsidescores == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 374, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_label); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_left); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_right); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_outsidescores, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 374, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;
 375: 
 376: 
+377: cpdef getpcfgestimates(Grammar grammar, uint32_t maxlen, str rootlabel,
static PyObject *__pyx_pw_8discodop_9estimates_9getpcfgestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_9estimates_getpcfgestimates(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_rootlabel, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8discodop_9estimates_getpcfgestimates *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("discodop.estimates.getpcfgestimates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_insidescores);
  __Pyx_XDECREF(__pyx_v_outside);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_lspan);
  __Pyx_XDECREF(__pyx_v_rspan);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_9getpcfgestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_8getpcfgestimates[] = "getpcfgestimates(Grammar grammar, uint32_t maxlen, unicode rootlabel, bool debug=False)\nCompute table of outside SX estimates for a PCFG.";
static PyObject *__pyx_pw_8discodop_9estimates_9getpcfgestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  PyObject *__pyx_v_rootlabel = 0;
  int __pyx_v_debug;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimates (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_rootlabel,&__pyx_n_s_debug,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getpcfgestimates", 0, 3, 4, 1); __PYX_ERR(0, 377, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rootlabel)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getpcfgestimates", 0, 3, 4, 2); __PYX_ERR(0, 377, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getpcfgestimates") < 0)) __PYX_ERR(0, 377, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 377, __pyx_L3_error)
    __pyx_v_rootlabel = ((PyObject*)values[2]);
    if (values[3]) {
      __pyx_v_debug = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_debug == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 378, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_9estimates_8getpcfgestimates(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_rootlabel, int __pyx_v_debug) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimates", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.debug = __pyx_v_debug;
  __pyx_t_1 = __pyx_f_8discodop_9estimates_getpcfgestimates(__pyx_v_grammar, __pyx_v_maxlen, __pyx_v_rootlabel, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __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.estimates.getpcfgestimates", __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_9estimates_getpcfgestimates {
  int __pyx_n;
  int debug;
};
+378: 		bint debug=False):
  int __pyx_v_debug = ((int)0);
  Label __pyx_v_goal;
  PyObject *__pyx_v_insidescores = NULL;
  PyObject *__pyx_v_outside = NULL;
  long __pyx_v_span;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_lspan = NULL;
  PyObject *__pyx_v_rspan = NULL;
  size_t __pyx_v_lhs;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimates", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_debug = __pyx_optional_args->debug;
    }
  }
/* … */
      __pyx_v_debug = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getpcfgestimates", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 377, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.getpcfgestimates", __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, 377, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rootlabel), (&PyUnicode_Type), 1, "rootlabel", 1))) __PYX_ERR(0, 377, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_8getpcfgestimates(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_rootlabel, __pyx_v_debug);
 379: 	"""Compute table of outside SX estimates for a PCFG."""
+380: 	cdef Label goal = grammar.toid[rootlabel]
  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->toid), __pyx_v_rootlabel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_goal = __pyx_t_2;
+381: 	insidescores = pcfginsidesx(grammar, maxlen)
  __pyx_t_1 = __pyx_f_8discodop_9estimates_pcfginsidesx(__pyx_v_grammar, __pyx_v_maxlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_insidescores = __pyx_t_1;
  __pyx_t_1 = 0;
+382: 	outside = pcfgoutsidesx(grammar, insidescores, goal, maxlen)
  if (!(likely(PyList_CheckExact(__pyx_v_insidescores))||((__pyx_v_insidescores) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_insidescores)->tp_name), 0))) __PYX_ERR(0, 382, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_8discodop_9estimates_pcfgoutsidesx(__pyx_v_grammar, ((PyObject*)__pyx_v_insidescores), __pyx_v_goal, __pyx_v_maxlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_outside = __pyx_t_1;
  __pyx_t_1 = 0;
+383: 	if debug:
  __pyx_t_3 = (__pyx_v_debug != 0);
  if (__pyx_t_3) {
/* … */
  }
+384: 		print('inside:')
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_inside); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
+385: 		for span in range(1, maxlen + 1):
    __pyx_t_4 = (__pyx_v_maxlen + 1);
    for (__pyx_t_5 = 1; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_span = __pyx_t_5;
+386: 			for k, v in sorted(insidescores[span].items()):
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_insidescores, __pyx_v_span, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_items); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __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_6 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 386, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 386, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 386, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_1 = ((PyObject*)__pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_9 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 386, __pyx_L1_error)
      if (unlikely(__pyx_t_1 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 386, __pyx_L1_error)
      }
      __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (__pyx_t_10 >= 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_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 386, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __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, 386, __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_7 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          #else
          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 386, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 386, __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_11 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 386, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
          index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_6);
          index = 1; __pyx_t_7 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_7);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 386, __pyx_L1_error)
          __pyx_t_12 = NULL;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          goto __pyx_L9_unpacking_done;
          __pyx_L8_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_12 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 386, __pyx_L1_error)
          __pyx_L9_unpacking_done:;
        }
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
+387: 				if v < INFINITY:
        __pyx_t_1 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_7 = PyObject_RichCompare(__pyx_v_v, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 387, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 387, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_3) {
/* … */
        }
+388: 					print("%s[%d] %g" % (grammar.tolabel[k],
          __pyx_t_7 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_k); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
/* … */
          __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_6);
          __pyx_t_7 = 0;
          __pyx_t_1 = 0;
          __pyx_t_6 = 0;
          __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_s_d_g, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 388, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+389: 							span, exp(-v)))
          __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 389, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_13 = PyNumber_Negative(__pyx_v_v); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 389, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __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_6 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_GOTREF(__pyx_t_6);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
              __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
              PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
              __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            } else
            #endif
            {
              __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 389, __pyx_L1_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_GIVEREF(__pyx_t_13);
              PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_13);
              __pyx_t_13 = 0;
              __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_15, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+390: 		print('infinite:', end=' ')
    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 390, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__5, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_infinite); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);
+391: 		for span in range(1, maxlen + 1):
    __pyx_t_4 = (__pyx_v_maxlen + 1);
    for (__pyx_t_5 = 1; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_span = __pyx_t_5;
+392: 			for k, v in sorted(insidescores[span].items()):
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_insidescores, __pyx_v_span, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 392, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __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_8 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        __pyx_t_8 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PySequence_List(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_6 = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_9 = PyList_Sort(__pyx_t_6); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 392, __pyx_L1_error)
      if (unlikely(__pyx_t_6 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 392, __pyx_L1_error)
      }
      __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      for (;;) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 392, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 392, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
        if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
          PyObject* sequence = __pyx_t_6;
          #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, 392, __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_11 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_11);
          #else
          __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 392, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          #endif
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else {
          Py_ssize_t index = -1;
          __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 392, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_12 = Py_TYPE(__pyx_t_7)->tp_iternext;
          index = 0; __pyx_t_8 = __pyx_t_12(__pyx_t_7); if (unlikely(!__pyx_t_8)) goto __pyx_L15_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_8);
          index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_7); if (unlikely(!__pyx_t_11)) goto __pyx_L15_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_11);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_7), 2) < 0) __PYX_ERR(0, 392, __pyx_L1_error)
          __pyx_t_12 = NULL;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L16_unpacking_done;
          __pyx_L15_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_12 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 392, __pyx_L1_error)
          __pyx_L16_unpacking_done:;
        }
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_8);
        __pyx_t_8 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_11);
        __pyx_t_11 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
+393: 				if v == INFINITY:
        __pyx_t_6 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 393, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_11 = PyObject_RichCompare(__pyx_v_v, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 393, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 393, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (__pyx_t_3) {
/* … */
        }
+394: 					print("%s[%d]" % (grammar.tolabel[k],
          __pyx_t_11 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_k); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
/* … */
          __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
          __pyx_t_11 = 0;
          __pyx_t_6 = 0;
          __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_s_d, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
          __pyx_t_6 = 0;
/* … */
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+395: 							span), end=' ')
          __pyx_t_6 = __Pyx_PyInt_From_long(__pyx_v_span); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 395, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
/* … */
          __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 395, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 395, __pyx_L1_error)
+396: 		print('\n\noutside:')
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_outside_2); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
+397: 		for lspan in range(maxlen + 1):
    __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 397, __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 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
      __pyx_t_11 = __pyx_t_1; __Pyx_INCREF(__pyx_t_11); __pyx_t_10 = 0;
      __pyx_t_16 = NULL;
    } else {
      __pyx_t_10 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_16 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 397, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (likely(!__pyx_t_16)) {
        if (likely(PyList_CheckExact(__pyx_t_11))) {
          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 397, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_11, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 397, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_11, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_16(__pyx_t_11);
        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, 397, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_lspan, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+398: 			for rspan in range(maxlen - lspan + 1):
      __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyNumber_Subtract(__pyx_t_1, __pyx_v_lspan); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_17 = 0;
        __pyx_t_18 = NULL;
      } else {
        __pyx_t_17 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 398, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_18 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 398, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_18)) {
          if (likely(PyList_CheckExact(__pyx_t_6))) {
            if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 398, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_17 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 398, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_18(__pyx_t_6);
          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, 398, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_v_rspan, __pyx_t_1);
        __pyx_t_1 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+399: 				for lhs in range(grammar.nonterminals):
        __pyx_t_19 = __pyx_v_grammar->nonterminals;
        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
          __pyx_v_lhs = __pyx_t_20;
+400: 					if outside[lhs, lspan, rspan] < INFINITY:
          __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
          __Pyx_INCREF(__pyx_v_lspan);
          __Pyx_GIVEREF(__pyx_v_lspan);
          PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_lspan);
          __Pyx_INCREF(__pyx_v_rspan);
          __Pyx_GIVEREF(__pyx_v_rspan);
          PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_rspan);
          __pyx_t_1 = 0;
          __pyx_t_1 = PyObject_GetItem(__pyx_v_outside, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_7 = PyObject_RichCompare(__pyx_t_1, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 400, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (__pyx_t_3) {
/* … */
          }
        }
+401: 						print("%s[%d-%d] %g" % (
            __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_s_d_d_g, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 401, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
            __pyx_t_8 = 0;
            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 401, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+402: 								grammar.tolabel[lhs], lspan,
            __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, size_t, 0, __Pyx_PyInt_FromSize_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 402, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
/* … */
            __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
            __Pyx_INCREF(__pyx_v_lspan);
            __Pyx_GIVEREF(__pyx_v_lspan);
            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_lspan);
            __Pyx_INCREF(__pyx_v_rspan);
            __Pyx_GIVEREF(__pyx_v_rspan);
            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_rspan);
            __Pyx_GIVEREF(__pyx_t_8);
            PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_8);
            __pyx_t_7 = 0;
            __pyx_t_8 = 0;
+403: 								rspan, exp(-outside[lhs, lspan, rspan])))
            __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_15 = __Pyx_PyInt_FromSize_t(__pyx_v_lhs); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 403, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 403, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_GIVEREF(__pyx_t_15);
            PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_15);
            __Pyx_INCREF(__pyx_v_lspan);
            __Pyx_GIVEREF(__pyx_v_lspan);
            PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_lspan);
            __Pyx_INCREF(__pyx_v_rspan);
            __Pyx_GIVEREF(__pyx_v_rspan);
            PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_rspan);
            __pyx_t_15 = 0;
            __pyx_t_15 = PyObject_GetItem(__pyx_v_outside, __pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 403, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_13 = PyNumber_Negative(__pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 403, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = NULL;
            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);
              }
            }
            if (!__pyx_t_15) {
              __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 403, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_GOTREF(__pyx_t_8);
            } else {
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_1)) {
                PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_13};
                __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 403, __pyx_L1_error)
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
                PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_13};
                __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 403, __pyx_L1_error)
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              } else
              #endif
              {
                __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 403, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_14);
                __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_15); __pyx_t_15 = NULL;
                __Pyx_GIVEREF(__pyx_t_13);
                PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_13);
                __pyx_t_13 = 0;
                __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 403, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              }
            }
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+404: 	return outside
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outside);
  __pyx_r = __pyx_v_outside;
  goto __pyx_L0;
 405: 
 406: 
+407: cdef pcfginsidesx(Grammar grammar, uint32_t maxlen):
static PyObject *__pyx_f_8discodop_9estimates_pcfginsidesx(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen) {
  uint64_t __pyx_v_vec;
  SmallChartItem __pyx_v_I;
  SmallChartItemAgenda<double>  __pyx_v_agenda;
  std::pair<SmallChartItem,double>  __pyx_v_entry;
  ProbRule __pyx_v_rule;
  double __pyx_v_x;
  PyObject *__pyx_v_insidescores = 0;
  std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> >  __pyx_v_lhsrules;
  size_t __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pcfginsidesx", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("discodop.estimates.pcfginsidesx", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_insidescores);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 408: 	"""Compute insideSX estimate for a PCFG using agenda.
 409: 
 410: 	Adapted from: Klein & Manning (2003), A* parsing: Fast Exact Viterbi Parse
 411: 	Selection."""
 412: 	cdef uint64_t vec
 413: 	cdef SmallChartItem I
 414: 	cdef SmallChartItemAgenda[double] agenda
 415: 	cdef pair[SmallChartItem, double] entry
 416: 	cdef ProbRule rule
 417: 	cdef double x
+418: 	cdef list insidescores = [{} for _ in range(maxlen + 1)]
  { /* enter inner scope */
    CYTHON_UNUSED long __pyx_8genexpr2__pyx_v__;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__pyx_v_maxlen + 1);
    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
      __pyx_8genexpr2__pyx_v__ = __pyx_t_3;
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 418, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 418, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  } /* exit inner scope */
  __pyx_v_insidescores = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+419: 	for lhsrules in grammar.lexicalbylhs:
  __pyx_t_6 = &__pyx_v_grammar->lexicalbylhs;
  __pyx_t_5 = __pyx_t_6->begin();
  for (;;) {
    if (!(__pyx_t_5 != __pyx_t_6->end())) break;
    __pyx_t_7 = *__pyx_t_5;
    ++__pyx_t_5;
    __pyx_v_lhsrules = __pyx_t_7;
/* … */
  }
+420: 		agenda.setitem(
    __pyx_v_agenda.setitem(SmallChartItem(__pyx_v_lhsrules.first, 1), __pyx_t_11);
 421: 				SmallChartItem(lhsrules.first, 1),
+422: 				min([grammar.lexical[wordlexrule.second].prob
    { /* enter inner scope */
      std::pair<std::string,uint32_t>  __pyx_8genexpr3__pyx_v_wordlexrule;
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_4 = PyFloat_FromDouble((__pyx_v_grammar->lexical[__pyx_8genexpr3__pyx_v_wordlexrule.second]).prob); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 422, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 422, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_4, NULL); 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_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+423: 					for wordlexrule in lhsrules.second]))
      __pyx_t_9 = &__pyx_v_lhsrules.second;
      __pyx_t_8 = __pyx_t_9->begin();
      for (;;) {
        if (!(__pyx_t_8 != __pyx_t_9->end())) break;
        __pyx_t_10 = *__pyx_t_8;
        ++__pyx_t_8;
        __pyx_8genexpr3__pyx_v_wordlexrule = __pyx_t_10;
/* … */
      }
    } /* exit inner scope */
+424: 	while not agenda.empty():
  while (1) {
    __pyx_t_12 = ((!(__pyx_v_agenda.empty() != 0)) != 0);
    if (!__pyx_t_12) break;
+425: 		entry = agenda.pop()
    __pyx_v_entry = __pyx_v_agenda.pop();
+426: 		I = entry.first
    __pyx_t_13 = __pyx_v_entry.first;
    __pyx_v_I = __pyx_t_13;
+427: 		x = entry.second
    __pyx_t_11 = __pyx_v_entry.second;
    __pyx_v_x = __pyx_t_11;
+428: 		if (I.label not in insidescores[I.vec]
    __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_I.label); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_I.vec), Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 428, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_15 = (__pyx_t_14 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_12 = __pyx_t_15;
      goto __pyx_L12_bool_binop_done;
    }
/* … */
    if (__pyx_t_12) {
/* … */
    }
+429: 				or x < insidescores[I.vec][I.label]):
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_I.vec), __pyx_v_I.label, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_16 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_12 = __pyx_t_15;
    __pyx_L12_bool_binop_done:;
+430: 			insidescores[I.vec][I.label] = x
      __pyx_t_16 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 430, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_I.vec), __pyx_v_I.label, __pyx_t_16, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0) < 0)) __PYX_ERR(0, 430, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 431: 
+432: 		for i in range(grammar.nonterminals):
    __pyx_t_17 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_i = __pyx_t_18;
+433: 			rule = grammar.unary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_I.label])[__pyx_v_i]);
+434: 			if rule.rhs1 != I.label:
      __pyx_t_12 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_12) {
/* … */
      }
+435: 				break
        goto __pyx_L15_break;
+436: 			elif rule.lhs not in insidescores[I.vec]:
      __pyx_t_16 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_t_16, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_I.vec), Py_NE)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 436, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_15 = (__pyx_t_12 != 0);
      if (__pyx_t_15) {
/* … */
      }
    }
    __pyx_L15_break:;
+437: 				agenda.setifbetter(
        __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, __pyx_v_I.vec), (__pyx_v_rule.prob + __pyx_v_x));
 438: 						SmallChartItem(rule.lhs, I.vec), rule.prob + x)
 439: 
+440: 		for i in range(grammar.nonterminals):
    __pyx_t_17 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_i = __pyx_t_18;
+441: 			rule = grammar.lbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->lbinary[__pyx_v_I.label])[__pyx_v_i]);
+442: 			if rule.rhs1 != I.label:
      __pyx_t_15 = ((__pyx_v_rule.rhs1 != __pyx_v_I.label) != 0);
      if (__pyx_t_15) {
/* … */
      }
+443: 				break
        goto __pyx_L18_break;
+444: 			for vec in range(1, maxlen - I.vec + 1):
      __pyx_t_19 = ((__pyx_v_maxlen - __pyx_v_I.vec) + 1);
      for (__pyx_t_20 = 1; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_vec = __pyx_t_20;
+445: 				if (rule.rhs2 in insidescores[vec]
        __pyx_t_16 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_t_16, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_vec), Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_14 = (__pyx_t_12 != 0);
        if (__pyx_t_14) {
        } else {
          __pyx_t_15 = __pyx_t_14;
          goto __pyx_L23_bool_binop_done;
        }
/* … */
        if (__pyx_t_15) {
/* … */
        }
      }
    }
    __pyx_L18_break:;
+446: 						and rule.lhs not in insidescores[I.vec + vec]):
        __pyx_t_16 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 446, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_21 = (__pyx_v_I.vec + __pyx_v_vec);
        __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_16, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_t_21), Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 446, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_12 = (__pyx_t_14 != 0);
        __pyx_t_15 = __pyx_t_12;
        __pyx_L23_bool_binop_done:;
+447: 					agenda.setifbetter(
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, (__pyx_v_I.vec + __pyx_v_vec)), __pyx_t_11);
 448: 							SmallChartItem(rule.lhs, I.vec + vec),
+449: 							rule.prob + x + insidescores[vec][rule.rhs2])
          __pyx_t_16 = PyFloat_FromDouble((__pyx_v_rule.prob + __pyx_v_x)); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 449, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_4 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_vec), __pyx_v_rule.rhs2, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 449, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_1 = PyNumber_Add(__pyx_t_16, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 449, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 450: 
+451: 		for i in range(grammar.nonterminals):
    __pyx_t_17 = __pyx_v_grammar->nonterminals;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_i = __pyx_t_18;
+452: 			rule = grammar.rbinary[I.label][i]
      __pyx_v_rule = ((__pyx_v_grammar->rbinary[__pyx_v_I.label])[__pyx_v_i]);
+453: 			if rule.rhs2 != I.label:
      __pyx_t_15 = ((__pyx_v_rule.rhs2 != __pyx_v_I.label) != 0);
      if (__pyx_t_15) {
/* … */
      }
+454: 				break
        goto __pyx_L26_break;
+455: 			for vec in range(1, maxlen - I.vec + 1):
      __pyx_t_19 = ((__pyx_v_maxlen - __pyx_v_I.vec) + 1);
      for (__pyx_t_20 = 1; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_vec = __pyx_t_20;
+456: 				if (rule.rhs1 in insidescores[vec]
        __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_vec), Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 456, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_14 = (__pyx_t_12 != 0);
        if (__pyx_t_14) {
        } else {
          __pyx_t_15 = __pyx_t_14;
          goto __pyx_L31_bool_binop_done;
        }
/* … */
        if (__pyx_t_15) {
/* … */
        }
      }
    }
    __pyx_L26_break:;
  }
+457: 						and rule.lhs not in insidescores[vec + I.vec]):
        __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_21 = (__pyx_v_vec + __pyx_v_I.vec);
        __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_t_21), Py_NE)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 457, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_12 = (__pyx_t_14 != 0);
        __pyx_t_15 = __pyx_t_12;
        __pyx_L31_bool_binop_done:;
+458: 					agenda.setifbetter(
          __pyx_v_agenda.setifbetter(SmallChartItem(__pyx_v_rule.lhs, (__pyx_v_vec + __pyx_v_I.vec)), __pyx_t_11);
 459: 							SmallChartItem(rule.lhs, vec + I.vec),
+460: 							rule.prob + insidescores[vec][rule.rhs1] + x)
          __pyx_t_1 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_vec), __pyx_v_rule.rhs1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_16 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_1 = PyNumber_Add(__pyx_t_16, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 460, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+461: 	return insidescores
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_insidescores);
  __pyx_r = __pyx_v_insidescores;
  goto __pyx_L0;
 462: 
 463: 
+464: cdef pcfgoutsidesx(Grammar grammar, list insidescores, Label goal,
static PyObject *__pyx_f_8discodop_9estimates_pcfgoutsidesx(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_insidescores, Label __pyx_v_goal, uint32_t __pyx_v_maxlen) {
  PyObject *__pyx_v_I = 0;
  ProbRule __pyx_v_rule;
  double __pyx_v_x;
  double __pyx_v_insidescore;
  double __pyx_v_current;
  double __pyx_v_score;
  int __pyx_v_state;
  int __pyx_v_left;
  int __pyx_v_right;
  size_t __pyx_v_i;
  size_t __pyx_v_sibsize;
  __Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_agenda = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pcfgoutsidesx", 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_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("discodop.estimates.pcfgoutsidesx", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_I);
  __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
  __Pyx_XDECREF(__pyx_v_agenda);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 465: 		uint32_t maxlen):
 466: 	"""outsideSX estimate for a PCFG, agenda-based version."""
 467: 	cdef tuple I
 468: 	cdef ProbRule rule
 469: 	cdef double x, insidescore, current, score
 470: 	cdef int state, left, right
 471: 	cdef size_t i, sibsize
+472: 	cdef double [:, :, :, :] outside = np.empty(
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 472, __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 = 0;
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_3);
  if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_outside = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+473: 			(grammar.nonterminals, maxlen + 1, maxlen + 1, 1), dtype='d')
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_int_1);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
/* … */
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 473, __pyx_L1_error)
+474: 	outside[...] = np.inf
  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 474, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  {
      double __pyx_temp_scalar = __pyx_t_7;
      {
          Py_ssize_t __pyx_temp_extent_0 = __pyx_v_outside.shape[0];
          Py_ssize_t __pyx_temp_stride_0 = __pyx_v_outside.strides[0];
          char *__pyx_temp_pointer_0;
          Py_ssize_t __pyx_temp_idx_0;
          Py_ssize_t __pyx_temp_extent_1 = __pyx_v_outside.shape[1];
          Py_ssize_t __pyx_temp_stride_1 = __pyx_v_outside.strides[1];
          char *__pyx_temp_pointer_1;
          Py_ssize_t __pyx_temp_idx_1;
          Py_ssize_t __pyx_temp_extent_2 = __pyx_v_outside.shape[2];
          Py_ssize_t __pyx_temp_stride_2 = __pyx_v_outside.strides[2];
          char *__pyx_temp_pointer_2;
          Py_ssize_t __pyx_temp_idx_2;
          Py_ssize_t __pyx_temp_extent_3 = __pyx_v_outside.shape[3];
          Py_ssize_t __pyx_temp_stride_3 = __pyx_v_outside.strides[3];
          char *__pyx_temp_pointer_3;
          Py_ssize_t __pyx_temp_idx_3;
          __pyx_temp_pointer_0 = __pyx_v_outside.data;
          for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
            __pyx_temp_pointer_1 = __pyx_temp_pointer_0;
            for (__pyx_temp_idx_1 = 0; __pyx_temp_idx_1 < __pyx_temp_extent_1; __pyx_temp_idx_1++) {
              __pyx_temp_pointer_2 = __pyx_temp_pointer_1;
              for (__pyx_temp_idx_2 = 0; __pyx_temp_idx_2 < __pyx_temp_extent_2; __pyx_temp_idx_2++) {
                __pyx_temp_pointer_3 = __pyx_temp_pointer_2;
                for (__pyx_temp_idx_3 = 0; __pyx_temp_idx_3 < __pyx_temp_extent_3; __pyx_temp_idx_3++) {
                  *((double *) __pyx_temp_pointer_3) = __pyx_temp_scalar;
                  __pyx_temp_pointer_3 += __pyx_temp_stride_3;
                }
                __pyx_temp_pointer_2 += __pyx_temp_stride_2;
              }
              __pyx_temp_pointer_1 += __pyx_temp_stride_1;
            }
            __pyx_temp_pointer_0 += __pyx_temp_stride_0;
          }
      }
  }
 475: 
+476: 	agenda = PyAgenda()
  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_PyAgenda); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  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);
    }
  }
  if (__pyx_t_4) {
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 476, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_agenda = __pyx_t_5;
  __pyx_t_5 = 0;
+477: 	agenda[goal, 0, 0] = outside[goal, 0, 0, 0] = 0.0
  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_goal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_0);
  __pyx_t_5 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_3, __pyx_float_0_0) < 0)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __pyx_v_goal;
  __pyx_t_9 = 0;
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_8 * __pyx_v_outside.strides[0]) ) + __pyx_t_9 * __pyx_v_outside.strides[1]) ) + __pyx_t_10 * __pyx_v_outside.strides[2]) ) + __pyx_t_11 * __pyx_v_outside.strides[3]) )) = 0.0;
+478: 	while agenda:
  while (1) {
    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_agenda); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 478, __pyx_L1_error)
    if (!__pyx_t_12) break;
+479: 		I, x = agenda.popitem()
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_agenda, __pyx_n_s_popitem); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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);
      }
    }
    if (__pyx_t_4) {
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error)
    }
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    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 != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 479, __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_4 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 479, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 479, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 479, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_2)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_13(__pyx_t_2); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_4 = __pyx_t_13(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_2), 2) < 0) __PYX_ERR(0, 479, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L6_unpacking_done;
      __pyx_L5_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 479, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 479, __pyx_L1_error)
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 479, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_I, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
    __pyx_v_x = __pyx_t_7;
+480: 		state, left, right = I
    if (likely(__pyx_v_I != Py_None)) {
      PyObject* sequence = __pyx_v_I;
      #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, 480, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 480, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 480, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 480, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 480, __pyx_L1_error)
    }
    __pyx_t_14 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 480, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 480, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_16 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 480, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_state = __pyx_t_14;
    __pyx_v_left = __pyx_t_15;
    __pyx_v_right = __pyx_t_16;
+481: 		if len(agenda) % 10000 == 0:
    __pyx_t_17 = PyObject_Length(__pyx_v_agenda); if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 481, __pyx_L1_error)
    __pyx_t_12 = (((__pyx_t_17 % 0x2710) == 0) != 0);
    if (__pyx_t_12) {
/* … */
    }
+482: 			print('agenda size: %dk top: %r, %g %s' % (
      __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_agenda_size_dk_top_r_g_s, __pyx_t_18); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 482, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 482, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 482, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+483: 					len(agenda) / 1000, I, exp(-x),
      __pyx_t_17 = PyObject_Length(__pyx_v_agenda); if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 483, __pyx_L1_error)
      __pyx_t_5 = PyInt_FromSsize_t((__pyx_t_17 / 0x3E8)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_x)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (!__pyx_t_1) {
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 483, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_2};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 483, __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_3)) {
          PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_2};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 483, __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_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 483, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_1); __pyx_t_1 = NULL;
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_18, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 483, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __pyx_t_18 = PyTuple_New(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_5);
      __Pyx_INCREF(__pyx_v_I);
      __Pyx_GIVEREF(__pyx_v_I);
      PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_v_I);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_18, 2, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_18, 3, __pyx_t_3);
      __pyx_t_5 = 0;
      __pyx_t_4 = 0;
      __pyx_t_3 = 0;
+484: 					grammar.tolabel[state]))
      __pyx_t_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_state, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
+485: 		i = 0
    __pyx_v_i = 0;
+486: 		rule = grammar.bylhs[state][i]
    __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_i]);
+487: 		while rule.lhs == state:
    while (1) {
      __pyx_t_12 = ((__pyx_v_rule.lhs == __pyx_v_state) != 0);
      if (!__pyx_t_12) break;
 488: 			# X -> A
+489: 			if rule.rhs2 == 0:
      __pyx_t_12 = ((__pyx_v_rule.rhs2 == 0) != 0);
      if (__pyx_t_12) {
/* … */
      }
+490: 				score = rule.prob + x
        __pyx_v_score = (__pyx_v_rule.prob + __pyx_v_x);
+491: 				if score < outside[rule.rhs1, left, right, 0]:
        __pyx_t_19 = __pyx_v_rule.rhs1;
        __pyx_t_20 = __pyx_v_left;
        __pyx_t_21 = __pyx_v_right;
        __pyx_t_22 = 0;
        __pyx_t_12 = ((__pyx_v_score < (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_19 * __pyx_v_outside.strides[0]) ) + __pyx_t_20 * __pyx_v_outside.strides[1]) ) + __pyx_t_21 * __pyx_v_outside.strides[2]) ) + __pyx_t_22 * __pyx_v_outside.strides[3]) )))) != 0);
        if (__pyx_t_12) {
/* … */
        }
+492: 					agenda[(rule.rhs1, left, right)] = score
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_18 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_left); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_right); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
          __pyx_t_18 = 0;
          __pyx_t_4 = 0;
          __pyx_t_5 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 492, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+493: 					outside[rule.rhs1, left, right, 0] = score
          __pyx_t_23 = __pyx_v_rule.rhs1;
          __pyx_t_24 = __pyx_v_left;
          __pyx_t_25 = __pyx_v_right;
          __pyx_t_26 = 0;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_23 * __pyx_v_outside.strides[0]) ) + __pyx_t_24 * __pyx_v_outside.strides[1]) ) + __pyx_t_25 * __pyx_v_outside.strides[2]) ) + __pyx_t_26 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
+494: 				i += 1
        __pyx_v_i = (__pyx_v_i + 1);
+495: 				rule = grammar.bylhs[state][i]
        __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_i]);
+496: 				continue
        goto __pyx_L8_continue;
 497: 
 498: 			# item is on the left: X -> A B.
+499: 			for sibsize in range(1, maxlen - left - right):
      __pyx_t_27 = ((__pyx_v_maxlen - __pyx_v_left) - __pyx_v_right);
      for (__pyx_t_28 = 1; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
        __pyx_v_sibsize = __pyx_t_28;
+500: 				insidescore = insidescores[sibsize].get(rule.rhs2, INFINITY)
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 500, __pyx_L1_error)
        }
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_sibsize), __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_18 = NULL;
        __pyx_t_16 = 0;
        if (CYTHON_UNPACK_METHODS && likely(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_16 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[3] = {__pyx_t_18, __pyx_t_5, __pyx_t_4};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __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[3] = {__pyx_t_18, __pyx_t_5, __pyx_t_4};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else
        #endif
        {
          __pyx_t_1 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 500, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (__pyx_t_18) {
            __Pyx_GIVEREF(__pyx_t_18); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_18); __pyx_t_18 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_16, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_16, __pyx_t_4);
          __pyx_t_5 = 0;
          __pyx_t_4 = 0;
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 500, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_v_insidescore = __pyx_t_7;
+501: 				score = rule.prob + x + insidescore
        __pyx_v_score = ((__pyx_v_rule.prob + __pyx_v_x) + __pyx_v_insidescore);
+502: 				current = outside[rule.rhs1, left, right + sibsize, 0]
        __pyx_t_29 = __pyx_v_rule.rhs1;
        __pyx_t_30 = __pyx_v_left;
        __pyx_t_31 = (__pyx_v_right + __pyx_v_sibsize);
        __pyx_t_32 = 0;
        __pyx_v_current = (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_29 * __pyx_v_outside.strides[0]) ) + __pyx_t_30 * __pyx_v_outside.strides[1]) ) + __pyx_t_31 * __pyx_v_outside.strides[2]) ) + __pyx_t_32 * __pyx_v_outside.strides[3]) )));
+503: 				if score < current:
        __pyx_t_12 = ((__pyx_v_score < __pyx_v_current) != 0);
        if (__pyx_t_12) {
/* … */
        }
      }
+504: 					agenda[(rule.rhs1, left, right + sibsize)] = score
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_left); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyInt_FromSize_t((__pyx_v_right + __pyx_v_sibsize)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
          __pyx_t_2 = 0;
          __pyx_t_1 = 0;
          __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 504, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+505: 					outside[rule.rhs1, left, right + sibsize, 0] = score
          __pyx_t_33 = __pyx_v_rule.rhs1;
          __pyx_t_34 = __pyx_v_left;
          __pyx_t_35 = (__pyx_v_right + __pyx_v_sibsize);
          __pyx_t_36 = 0;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_33 * __pyx_v_outside.strides[0]) ) + __pyx_t_34 * __pyx_v_outside.strides[1]) ) + __pyx_t_35 * __pyx_v_outside.strides[2]) ) + __pyx_t_36 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
 506: 
 507: 			# item is on the right: X -> B A
+508: 			for sibsize in range(1, maxlen - left - right):
      __pyx_t_27 = ((__pyx_v_maxlen - __pyx_v_left) - __pyx_v_right);
      for (__pyx_t_28 = 1; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
        __pyx_v_sibsize = __pyx_t_28;
+509: 				insidescore = insidescores[sibsize].get(rule.rhs1, INFINITY)
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 509, __pyx_L1_error)
        }
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_sibsize), __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 509, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = NULL;
        __pyx_t_16 = 0;
        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);
            __pyx_t_16 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_1};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_1};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        } else
        #endif
        {
          __pyx_t_18 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 509, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          if (__pyx_t_2) {
            __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_2); __pyx_t_2 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_16, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_16, __pyx_t_1);
          __pyx_t_4 = 0;
          __pyx_t_1 = 0;
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 509, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_v_insidescore = __pyx_t_7;
+510: 				score = rule.prob + insidescore + x
        __pyx_v_score = ((__pyx_v_rule.prob + __pyx_v_insidescore) + __pyx_v_x);
+511: 				current = outside[rule.rhs2, left + sibsize, right, 0]
        __pyx_t_37 = __pyx_v_rule.rhs2;
        __pyx_t_38 = (__pyx_v_left + __pyx_v_sibsize);
        __pyx_t_39 = __pyx_v_right;
        __pyx_t_40 = 0;
        __pyx_v_current = (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_37 * __pyx_v_outside.strides[0]) ) + __pyx_t_38 * __pyx_v_outside.strides[1]) ) + __pyx_t_39 * __pyx_v_outside.strides[2]) ) + __pyx_t_40 * __pyx_v_outside.strides[3]) )));
+512: 				if score < current:
        __pyx_t_12 = ((__pyx_v_score < __pyx_v_current) != 0);
        if (__pyx_t_12) {
/* … */
        }
      }
+513: 					agenda[(rule.rhs2, left + sibsize, right)] = score
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_score); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_18 = __Pyx_PyInt_FromSize_t((__pyx_v_left + __pyx_v_sibsize)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_right); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_1);
          __pyx_t_5 = 0;
          __pyx_t_18 = 0;
          __pyx_t_1 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_agenda, __pyx_t_4, __pyx_t_3) < 0)) __PYX_ERR(0, 513, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+514: 					outside[rule.rhs2, left + sibsize, right, 0] = score
          __pyx_t_41 = __pyx_v_rule.rhs2;
          __pyx_t_42 = (__pyx_v_left + __pyx_v_sibsize);
          __pyx_t_43 = __pyx_v_right;
          __pyx_t_44 = 0;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_41 * __pyx_v_outside.strides[0]) ) + __pyx_t_42 * __pyx_v_outside.strides[1]) ) + __pyx_t_43 * __pyx_v_outside.strides[2]) ) + __pyx_t_44 * __pyx_v_outside.strides[3]) )) = __pyx_v_score;
 515: 
+516: 			i += 1
      __pyx_v_i = (__pyx_v_i + 1);
+517: 			rule = grammar.bylhs[state][i]
      __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_i]);
      __pyx_L8_continue:;
    }
  }
 518: 		# end while rule.lhs == state:
 519: 	# end while agenda:
+520: 	return outside.base
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_outside, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_base); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 521: 
 522: 
+523: cpdef getpcfgestimatesrec(Grammar grammar, uint32_t maxlen, Label goal,
static PyObject *__pyx_pw_8discodop_9estimates_11getpcfgestimatesrec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_9estimates_getpcfgestimatesrec(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, Label __pyx_v_goal, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_8discodop_9estimates_getpcfgestimatesrec *__pyx_optional_args) {
/* … */
  /* 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_14);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("discodop.estimates.getpcfgestimatesrec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_insidescores);
  __Pyx_XDECREF(__pyx_v_outsidescores);
  __Pyx_XDECREF(__pyx_v_lspan);
  __Pyx_XDECREF(__pyx_v_rspan);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_outside);
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_prob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_11getpcfgestimatesrec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_10getpcfgestimatesrec[] = "getpcfgestimatesrec(Grammar grammar, uint32_t maxlen, Label goal, bool debug=False)";
static PyObject *__pyx_pw_8discodop_9estimates_11getpcfgestimatesrec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  Label __pyx_v_goal;
  int __pyx_v_debug;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimatesrec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_goal,&__pyx_n_s_debug,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getpcfgestimatesrec", 0, 3, 4, 1); __PYX_ERR(0, 523, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_goal)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("getpcfgestimatesrec", 0, 3, 4, 2); __PYX_ERR(0, 523, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getpcfgestimatesrec") < 0)) __PYX_ERR(0, 523, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L3_error)
    __pyx_v_goal = __Pyx_PyInt_As_uint32_t(values[2]); if (unlikely((__pyx_v_goal == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_debug = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_debug == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 524, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_8discodop_9estimates_10getpcfgestimatesrec(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, Label __pyx_v_goal, int __pyx_v_debug) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimatesrec", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.debug = __pyx_v_debug;
  __pyx_t_1 = __pyx_f_8discodop_9estimates_getpcfgestimatesrec(__pyx_v_grammar, __pyx_v_maxlen, __pyx_v_goal, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 523, __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.estimates.getpcfgestimatesrec", __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_9estimates_getpcfgestimatesrec {
  int __pyx_n;
  int debug;
};
+524: 	bint debug=False):
  int __pyx_v_debug = ((int)0);
  PyObject *__pyx_v_insidescores = NULL;
  PyObject *__pyx_v_outsidescores = NULL;
  long __pyx_v_span;
  PyObject *__pyx_v_lspan = NULL;
  PyObject *__pyx_v_rspan = NULL;
  std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> >  __pyx_v_lhsrules;
  Label __pyx_v_lhs;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_outside = NULL;
  PyObject *__pyx_v_state = NULL;
  PyObject *__pyx_v_prob = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("getpcfgestimatesrec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_debug = __pyx_optional_args->debug;
    }
  }
/* … */
      __pyx_v_debug = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("getpcfgestimatesrec", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 523, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.getpcfgestimatesrec", __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, 523, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_10getpcfgestimatesrec(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_goal, __pyx_v_debug);
+525: 	insidescores = [{} for _ in range(maxlen + 1)]
  { /* enter inner scope */
    CYTHON_UNUSED long __pyx_8genexpr4__pyx_v__;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__pyx_v_maxlen + 1);
    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
      __pyx_8genexpr4__pyx_v__ = __pyx_t_3;
      __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 525, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 525, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  } /* exit inner scope */
  __pyx_v_insidescores = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+526: 	outsidescores = {}
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_outsidescores = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+527: 	for span in range(1, maxlen + 1):
  __pyx_t_2 = (__pyx_v_maxlen + 1);
  for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_span = __pyx_t_3;
+528: 		insidescores[span][goal] = pcfginsidesxrec(
    __pyx_t_1 = __pyx_f_8discodop_9estimates_pcfginsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_goal, __pyx_v_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_span), __pyx_v_goal, __pyx_t_1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0) < 0)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
 529: 				grammar, insidescores, goal, span)
+530: 	for lspan in range(maxlen + 1):
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 530, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 530, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 530, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_4);
      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, 530, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_lspan, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+531: 		for rspan in range(maxlen - lspan + 1):
    __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyNumber_Subtract(__pyx_t_1, __pyx_v_lspan); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_7, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
      __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 531, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_7))) {
          if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 531, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 531, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_9(__pyx_t_7);
        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, 531, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_rspan, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+532: 			for lhsrules in grammar.lexicalbylhs:
      __pyx_t_11 = &__pyx_v_grammar->lexicalbylhs;
      __pyx_t_10 = __pyx_t_11->begin();
      for (;;) {
        if (!(__pyx_t_10 != __pyx_t_11->end())) break;
        __pyx_t_12 = *__pyx_t_10;
        ++__pyx_t_10;
        __pyx_v_lhsrules = __pyx_t_12;
/* … */
        __pyx_L11_continue:;
      }
+533: 				lhs = lhsrules.first
        __pyx_t_13 = __pyx_v_lhsrules.first;
        __pyx_v_lhs = __pyx_t_13;
+534: 				if (lhs, lspan, rspan) in outsidescores:
        __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 534, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
        __Pyx_INCREF(__pyx_v_lspan);
        __Pyx_GIVEREF(__pyx_v_lspan);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_lspan);
        __Pyx_INCREF(__pyx_v_rspan);
        __Pyx_GIVEREF(__pyx_v_rspan);
        PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_rspan);
        __pyx_t_1 = 0;
        __pyx_t_15 = (__Pyx_PyDict_ContainsTF(__pyx_t_14, __pyx_v_outsidescores, Py_EQ)); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 534, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_16 = (__pyx_t_15 != 0);
        if (__pyx_t_16) {
/* … */
        }
+535: 					continue
          goto __pyx_L11_continue;
+536: 				outsidescores[lhs, lspan, rspan] = pcfgoutsidesxrec(grammar,
        __pyx_t_14 = __pyx_f_8discodop_9estimates_pcfgoutsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_outsidescores, __pyx_v_goal, __pyx_v_lhs, __pyx_t_17, __pyx_t_18); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 536, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_lhs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_19 = PyTuple_New(3); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 536, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_1);
        __Pyx_INCREF(__pyx_v_lspan);
        __Pyx_GIVEREF(__pyx_v_lspan);
        PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_v_lspan);
        __Pyx_INCREF(__pyx_v_rspan);
        __Pyx_GIVEREF(__pyx_v_rspan);
        PyTuple_SET_ITEM(__pyx_t_19, 2, __pyx_v_rspan);
        __pyx_t_1 = 0;
        if (unlikely(PyDict_SetItem(__pyx_v_outsidescores, __pyx_t_19, __pyx_t_14) < 0)) __PYX_ERR(0, 536, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+537: 						insidescores, outsidescores, goal, lhs, lspan, rspan)
        __pyx_t_17 = __Pyx_PyInt_As_int(__pyx_v_lspan); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error)
        __pyx_t_18 = __Pyx_PyInt_As_int(__pyx_v_rspan); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error)
+538: 	if debug:
  __pyx_t_16 = (__pyx_v_debug != 0);
  if (__pyx_t_16) {
/* … */
  }
+539: 		print('inside:')
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_inside); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);
+540: 		for span in range(1, maxlen + 1):
    __pyx_t_2 = (__pyx_v_maxlen + 1);
    for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
      __pyx_v_span = __pyx_t_3;
+541: 			for k, v in sorted(insidescores[span].items()):
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_span), __pyx_n_s_items); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_19 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
        __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_14);
        if (likely(__pyx_t_19)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_19);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_14, function);
        }
      }
      if (__pyx_t_19) {
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_19); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 541, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      } else {
        __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 541, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_14 = PySequence_List(__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_4 = ((PyObject*)__pyx_t_14);
      __pyx_t_14 = 0;
      __pyx_t_20 = PyList_Sort(__pyx_t_4); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 541, __pyx_L1_error)
      if (unlikely(__pyx_t_4 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 541, __pyx_L1_error)
      }
      __pyx_t_14 = __pyx_t_4; __Pyx_INCREF(__pyx_t_14); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      for (;;) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_14)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 541, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_14, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 541, __pyx_L1_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, 541, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_19 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_19 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_19);
          #else
          __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_19 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          #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, 541, __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_7 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_7)) goto __pyx_L19_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_7);
          index = 1; __pyx_t_19 = __pyx_t_21(__pyx_t_1); if (unlikely(!__pyx_t_19)) goto __pyx_L19_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_19);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_1), 2) < 0) __PYX_ERR(0, 541, __pyx_L1_error)
          __pyx_t_21 = NULL;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L20_unpacking_done;
          __pyx_L19_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, 541, __pyx_L1_error)
          __pyx_L20_unpacking_done:;
        }
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
        __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_19);
        __pyx_t_19 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
+542: 				if v < INFINITY:
        __pyx_t_4 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 542, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_19 = PyObject_RichCompare(__pyx_v_v, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_19); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 542, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_19); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 542, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        if (__pyx_t_16) {
/* … */
        }
+543: 					print("%s[%d] %g" % (
          __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_s_d_g, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 543, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 543, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 543, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+544: 							grammar.tolabel[k], span, exp(-v)))
          __pyx_t_19 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_k); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 544, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_span); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 544, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_22 = PyNumber_Negative(__pyx_v_v); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 544, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_23 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_23)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_23);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          if (!__pyx_t_23) {
            __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_22); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_GOTREF(__pyx_t_7);
          } else {
            #if CYTHON_FAST_PYCALL
            if (PyFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[2] = {__pyx_t_23, __pyx_t_22};
              __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            } else
            #endif
            #if CYTHON_FAST_PYCCALL
            if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
              PyObject *__pyx_temp[2] = {__pyx_t_23, __pyx_t_22};
              __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error)
              __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            } else
            #endif
            {
              __pyx_t_24 = PyTuple_New(1+1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 544, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_23); __pyx_t_23 = NULL;
              __Pyx_GIVEREF(__pyx_t_22);
              PyTuple_SET_ITEM(__pyx_t_24, 0+1, __pyx_t_22);
              __pyx_t_22 = 0;
              __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_24, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            }
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_19);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_19);
          __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_t_19 = 0;
          __pyx_t_4 = 0;
          __pyx_t_7 = 0;
+545: 		print('infinite:', end=' ')
    __pyx_t_14 = PyDict_New(); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 545, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__9, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_infinite); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
+546: 		for span in range(1, maxlen + 1):
    __pyx_t_2 = (__pyx_v_maxlen + 1);
    for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
      __pyx_v_span = __pyx_t_3;
+547: 			for k, v in sorted(insidescores[span].items()):
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_span), __pyx_n_s_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 547, __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_14 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 547, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_14 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 547, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PySequence_List(__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 547, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_7 = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_20 = PyList_Sort(__pyx_t_7); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 547, __pyx_L1_error)
      if (unlikely(__pyx_t_7 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 547, __pyx_L1_error)
      }
      __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      for (;;) {
        if (__pyx_t_5 >= 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_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 547, __pyx_L1_error)
        #else
        __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 547, __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, 547, __pyx_L1_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_4 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_14 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_4);
          #else
          __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 547, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 547, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        } else {
          Py_ssize_t index = -1;
          __pyx_t_19 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 547, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_21 = Py_TYPE(__pyx_t_19)->tp_iternext;
          index = 0; __pyx_t_14 = __pyx_t_21(__pyx_t_19); if (unlikely(!__pyx_t_14)) goto __pyx_L26_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_14);
          index = 1; __pyx_t_4 = __pyx_t_21(__pyx_t_19); if (unlikely(!__pyx_t_4)) goto __pyx_L26_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_19), 2) < 0) __PYX_ERR(0, 547, __pyx_L1_error)
          __pyx_t_21 = NULL;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          goto __pyx_L27_unpacking_done;
          __pyx_L26_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_21 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 547, __pyx_L1_error)
          __pyx_L27_unpacking_done:;
        }
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_14);
        __pyx_t_14 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
+548: 				if v == INFINITY:
        __pyx_t_7 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 548, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_4 = PyObject_RichCompare(__pyx_v_v, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 548, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 548, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_16) {
/* … */
        }
+549: 					print("%s[%d]" % (
          __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_s_d, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 549, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 549, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_7);
          __pyx_t_7 = 0;
/* … */
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_14, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 549, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+550: 							grammar.tolabel[k], span), end=' ')
          __pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_k); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = __Pyx_PyInt_From_long(__pyx_v_span); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_7);
          __pyx_t_4 = 0;
          __pyx_t_7 = 0;
/* … */
          __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 550, __pyx_L1_error)
 551: 
+552: 		print('\n\noutside:')
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_outside_2); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);
+553: 		for k, v in sorted(outsidescores.items()):
    __pyx_t_4 = __Pyx_PyDict_Items(__pyx_v_outsidescores); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = ((PyObject*)__pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_20 = PyList_Sort(__pyx_t_1); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 553, __pyx_L1_error)
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 553, __pyx_L1_error)
    }
    __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 553, __pyx_L1_error)
      #else
      __pyx_t_1 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __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, 553, __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_14 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_14);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 553, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 553, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        #endif
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_19 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 553, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_21 = Py_TYPE(__pyx_t_19)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_21(__pyx_t_19); if (unlikely(!__pyx_t_4)) goto __pyx_L31_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_14 = __pyx_t_21(__pyx_t_19); if (unlikely(!__pyx_t_14)) goto __pyx_L31_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_14);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_19), 2) < 0) __PYX_ERR(0, 553, __pyx_L1_error)
        __pyx_t_21 = NULL;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L32_unpacking_done;
        __pyx_L31_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_21 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 553, __pyx_L1_error)
        __pyx_L32_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_14);
      __pyx_t_14 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+554: 			if v < INFINITY:
      __pyx_t_1 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_14 = PyObject_RichCompare(__pyx_v_v, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_14); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 554, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 554, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (__pyx_t_16) {
/* … */
      }
+555: 				print("%s[%d-%d] %g" % (
        __pyx_t_19 = PyUnicode_Format(__pyx_kp_u_s_d_d_g, __pyx_t_24); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 555, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
        __pyx_t_24 = PyTuple_New(1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 555, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_24);
        __Pyx_GIVEREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_19);
        __pyx_t_19 = 0;
        __pyx_t_19 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_24, NULL); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 555, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+556: 						grammar.tolabel[k[0]], k[1], k[2],
        __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_k, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_k, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_k, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
/* … */
        __pyx_t_24 = PyTuple_New(4); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 556, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_24);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_24, 2, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_24, 3, __pyx_t_19);
        __pyx_t_1 = 0;
        __pyx_t_14 = 0;
        __pyx_t_4 = 0;
        __pyx_t_19 = 0;
+557: 						exp(-v)))
        __pyx_t_24 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 557, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_24);
        __pyx_t_22 = PyNumber_Negative(__pyx_v_v); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 557, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __pyx_t_23 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_24))) {
          __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_24);
          if (likely(__pyx_t_23)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24);
            __Pyx_INCREF(__pyx_t_23);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_24, function);
          }
        }
        if (!__pyx_t_23) {
          __pyx_t_19 = __Pyx_PyObject_CallOneArg(__pyx_t_24, __pyx_t_22); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 557, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_GOTREF(__pyx_t_19);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_24)) {
            PyObject *__pyx_temp[2] = {__pyx_t_23, __pyx_t_22};
            __pyx_t_19 = __Pyx_PyFunction_FastCall(__pyx_t_24, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 557, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_24)) {
            PyObject *__pyx_temp[2] = {__pyx_t_23, __pyx_t_22};
            __pyx_t_19 = __Pyx_PyCFunction_FastCall(__pyx_t_24, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 557, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          } else
          #endif
          {
            __pyx_t_25 = PyTuple_New(1+1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 557, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_25);
            __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_23); __pyx_t_23 = NULL;
            __Pyx_GIVEREF(__pyx_t_22);
            PyTuple_SET_ITEM(__pyx_t_25, 0+1, __pyx_t_22);
            __pyx_t_22 = 0;
            __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_24, __pyx_t_25, NULL); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 557, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
+558: 		print('infinite:', end=' ')
    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 558, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 558, __pyx_L1_error)
    __pyx_t_19 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__11, __pyx_t_7); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 558, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_infinite); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);
+559: 		for k, v in sorted(outsidescores.items()):
    __pyx_t_7 = __Pyx_PyDict_Items(__pyx_v_outsidescores); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_24 = PySequence_List(__pyx_t_7); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_24);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_19 = ((PyObject*)__pyx_t_24);
    __pyx_t_24 = 0;
    __pyx_t_20 = PyList_Sort(__pyx_t_19); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 559, __pyx_L1_error)
    if (unlikely(__pyx_t_19 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 559, __pyx_L1_error)
    }
    __pyx_t_24 = __pyx_t_19; __Pyx_INCREF(__pyx_t_24); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    for (;;) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_24)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_19 = PyList_GET_ITEM(__pyx_t_24, __pyx_t_5); __Pyx_INCREF(__pyx_t_19); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 559, __pyx_L1_error)
      #else
      __pyx_t_19 = PySequence_ITEM(__pyx_t_24, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_19);
      #endif
      if ((likely(PyTuple_CheckExact(__pyx_t_19))) || (PyList_CheckExact(__pyx_t_19))) {
        PyObject* sequence = __pyx_t_19;
        #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, 559, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        #else
        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 559, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 559, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_14 = PyObject_GetIter(__pyx_t_19); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 559, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_21 = Py_TYPE(__pyx_t_14)->tp_iternext;
        index = 0; __pyx_t_7 = __pyx_t_21(__pyx_t_14); if (unlikely(!__pyx_t_7)) goto __pyx_L36_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        index = 1; __pyx_t_4 = __pyx_t_21(__pyx_t_14); if (unlikely(!__pyx_t_4)) goto __pyx_L36_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_14), 2) < 0) __PYX_ERR(0, 559, __pyx_L1_error)
        __pyx_t_21 = NULL;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L37_unpacking_done;
        __pyx_L36_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_21 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 559, __pyx_L1_error)
        __pyx_L37_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
+560: 			if v == INFINITY:
      __pyx_t_19 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_19);
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_v, __pyx_t_19, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 560, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 560, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_16) {
/* … */
      }
+561: 				print("%s[%d-%d]" % (
        __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_s_d_d, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 561, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 561, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_14, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 561, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+562: 						grammar.tolabel[k[0]], k[1], k[2]),
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_k, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_19 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_t_4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_k, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_k, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_19);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_19);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_7);
        __pyx_t_19 = 0;
        __pyx_t_4 = 0;
        __pyx_t_7 = 0;
+563: 						end=' ')
        __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_end, __pyx_kp_u__6) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
+564: 	outside = np.empty((grammar.nonterminals, maxlen + 1, maxlen + 1, 1),
  __pyx_t_24 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_24, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  __pyx_t_24 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_19 = PyTuple_New(4); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_24);
  PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_19, 2, __pyx_t_14);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_19, 3, __pyx_int_1);
  __pyx_t_24 = 0;
  __pyx_t_7 = 0;
  __pyx_t_14 = 0;
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_19);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_19);
  __pyx_t_19 = 0;
/* … */
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_14, __pyx_t_19); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_v_outside = __pyx_t_7;
  __pyx_t_7 = 0;
+565: 			dtype='d')
  __pyx_t_19 = PyDict_New(); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 565, __pyx_L1_error)
+566: 	outside[...] = np.inf
  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inf); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_outside, Py_Ellipsis, __pyx_t_19) < 0)) __PYX_ERR(0, 566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 567: 	# convert sparse dictionary to dense numpy array
+568: 	for (state, lspan, rspan), prob in outsidescores.items():
  __pyx_t_5 = 0;
  __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_outsidescores, 1, __pyx_n_s_items, (&__pyx_t_8), (&__pyx_t_18)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_19);
  __pyx_t_19 = __pyx_t_7;
  __pyx_t_7 = 0;
  while (1) {
    __pyx_t_17 = __Pyx_dict_iter_next(__pyx_t_19, __pyx_t_8, &__pyx_t_5, &__pyx_t_7, &__pyx_t_14, NULL, __pyx_t_18);
    if (unlikely(__pyx_t_17 == 0)) break;
    if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GOTREF(__pyx_t_14);
    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 != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 568, __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_24 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_24 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_24);
      __Pyx_INCREF(__pyx_t_1);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 568, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_24 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 568, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __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_25 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 568, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_21 = Py_TYPE(__pyx_t_25)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_21(__pyx_t_25); if (unlikely(!__pyx_t_4)) goto __pyx_L41_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_24 = __pyx_t_21(__pyx_t_25); if (unlikely(!__pyx_t_24)) goto __pyx_L41_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_24);
      index = 2; __pyx_t_1 = __pyx_t_21(__pyx_t_25); if (unlikely(!__pyx_t_1)) goto __pyx_L41_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_25), 3) < 0) __PYX_ERR(0, 568, __pyx_L1_error)
      __pyx_t_21 = NULL;
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      goto __pyx_L42_unpacking_done;
      __pyx_L41_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_t_21 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 568, __pyx_L1_error)
      __pyx_L42_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_state, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_lspan, __pyx_t_24);
    __pyx_t_24 = 0;
    __Pyx_XDECREF_SET(__pyx_v_rspan, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_prob, __pyx_t_14);
    __pyx_t_14 = 0;
+569: 		outside[state, lspan, rspan, 0] = prob
    __pyx_t_14 = PyTuple_New(4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 569, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_state);
    __Pyx_INCREF(__pyx_v_lspan);
    __Pyx_GIVEREF(__pyx_v_lspan);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_lspan);
    __Pyx_INCREF(__pyx_v_rspan);
    __Pyx_GIVEREF(__pyx_v_rspan);
    PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_rspan);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_int_0);
    if (unlikely(PyObject_SetItem(__pyx_v_outside, __pyx_t_14, __pyx_v_prob) < 0)) __PYX_ERR(0, 569, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+570: 	return outside
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outside);
  __pyx_r = __pyx_v_outside;
  goto __pyx_L0;
 571: 
 572: 
+573: cdef pcfginsidesxrec(Grammar grammar, list insidescores, Label state,
static PyObject *__pyx_f_8discodop_9estimates_pcfginsidesxrec(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_insidescores, Label __pyx_v_state, int __pyx_v_span) {
  size_t __pyx_v_n;
  size_t __pyx_v_split;
  ProbRule __pyx_v_rule;
  spp::sparse_hash_map<Label,spp::sparse_hash_map<std::string,uint32_t> > ::iterator __pyx_v_it;
  PyObject *__pyx_v_score = NULL;
  PyObject *__pyx_v_inleft = NULL;
  PyObject *__pyx_v_inright = NULL;
  PyObject *__pyx_v_cost = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pcfginsidesxrec", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("discodop.estimates.pcfginsidesxrec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_score);
  __Pyx_XDECREF(__pyx_v_inleft);
  __Pyx_XDECREF(__pyx_v_inright);
  __Pyx_XDECREF(__pyx_v_cost);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 574: 		int span):
 575: 	"""Compute insideSX estimate for a PCFG.
 576: 
 577: 	Straight from Klein & Manning (2003), A* parsing: Fast Exact Viterbi Parse
 578: 	Selection."""
 579: 	# NB: does not deal correctly with unary rules.
 580: 	cdef size_t n, split
 581: 	cdef ProbRule rule
+582: 	if span == 0:
  __pyx_t_1 = ((__pyx_v_span == 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+583: 		return 0 if state == 0 else INFINITY
    __Pyx_XDECREF(__pyx_r);
    if (((__pyx_v_state == 0) != 0)) {
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_2 = __pyx_int_0;
    } else {
      __pyx_t_3 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+584: 	it = grammar.lexicalbylhs.find(state)
  __pyx_v_it = __pyx_v_grammar->lexicalbylhs.find(__pyx_v_state);
+585: 	if span == 1 and it != grammar.lexicalbylhs.end():
  __pyx_t_4 = ((__pyx_v_span == 1) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = ((__pyx_v_it != __pyx_v_grammar->lexicalbylhs.end()) != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+586: 		score = min([grammar.lexical[wordruleno.second].prob
    { /* enter inner scope */
      std::pair<std::string,uint32_t>  __pyx_8genexpr5__pyx_v_wordruleno;
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
        __pyx_t_3 = PyFloat_FromDouble((__pyx_v_grammar->lexical[__pyx_8genexpr5__pyx_v_wordruleno.second]).prob); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 586, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 586, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_score = __pyx_t_2;
    __pyx_t_2 = 0;
+587: 				for wordruleno in dereference(it).second])
      __pyx_t_6 = &(*__pyx_v_it).second;
      __pyx_t_5 = __pyx_t_6->begin();
      for (;;) {
        if (!(__pyx_t_5 != __pyx_t_6->end())) break;
        __pyx_t_7 = *__pyx_t_5;
        ++__pyx_t_5;
        __pyx_8genexpr5__pyx_v_wordruleno = __pyx_t_7;
/* … */
      }
    } /* exit inner scope */
 588: 	else:
+589: 		score = INFINITY
  /*else*/ {
    __pyx_t_2 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_score = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
+590: 	for split in range(1, span + 1):
  __pyx_t_8 = (__pyx_v_span + 1);
  for (__pyx_t_9 = 1; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_split = __pyx_t_9;
+591: 		n = 0
    __pyx_v_n = 0;
+592: 		rule = grammar.bylhs[state][n]
    __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_n]);
+593: 		while rule.lhs == state:
    while (1) {
      __pyx_t_1 = ((__pyx_v_rule.lhs == __pyx_v_state) != 0);
      if (!__pyx_t_1) break;
+594: 			if rule.rhs1 in insidescores[split]:
      __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 594, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_2, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_split), Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 594, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_4 = (__pyx_t_1 != 0);
      if (__pyx_t_4) {
/* … */
        goto __pyx_L13;
      }
+595: 				inleft = insidescores[split][rule.rhs1]
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 595, __pyx_L1_error)
        }
        __pyx_t_2 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_split), __pyx_v_rule.rhs1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 595, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_inleft, __pyx_t_2);
        __pyx_t_2 = 0;
+596: 				if inleft == -1:
        __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_inleft, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 596, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (__pyx_t_4) {
/* … */
        }
+597: 					n += 1
          __pyx_v_n = (__pyx_v_n + 1);
+598: 					rule = grammar.bylhs[state][n]
          __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_n]);
 599: 			else:
+600: 				insidescores[split][rule.rhs1] = -1  # mark to avoid cycles.
      /*else*/ {
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 600, __pyx_L1_error)
        }
        if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_split), __pyx_v_rule.rhs1, __pyx_int_neg_1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0) < 0)) __PYX_ERR(0, 600, __pyx_L1_error)
+601: 				inleft = pcfginsidesxrec(
        __pyx_t_2 = __pyx_f_8discodop_9estimates_pcfginsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_rule.rhs1, __pyx_v_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 601, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_inleft, __pyx_t_2);
        __pyx_t_2 = 0;
 602: 						grammar, insidescores, rule.rhs1, split)
+603: 				insidescores[split][rule.rhs1] = inleft
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 603, __pyx_L1_error)
        }
        if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_split), __pyx_v_rule.rhs1, __pyx_v_inleft, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0) < 0)) __PYX_ERR(0, 603, __pyx_L1_error)
      }
      __pyx_L13:;
+604: 			if rule.rhs2 == 0:
      __pyx_t_4 = ((__pyx_v_rule.rhs2 == 0) != 0);
      if (__pyx_t_4) {
/* … */
        goto __pyx_L15;
      }
+605: 				if split == span:
        __pyx_t_4 = ((__pyx_v_split == __pyx_v_span) != 0);
        if (__pyx_t_4) {
/* … */
          goto __pyx_L16;
        }
+606: 					inright = 0
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_XDECREF_SET(__pyx_v_inright, __pyx_int_0);
 607: 				else:
+608: 					n += 1
        /*else*/ {
          __pyx_v_n = (__pyx_v_n + 1);
+609: 					rule = grammar.bylhs[state][n]
          __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_n]);
+610: 					continue
          goto __pyx_L11_continue;
        }
        __pyx_L16:;
+611: 			elif rule.rhs2 in insidescores[span - split]:
      __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 611, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 611, __pyx_L1_error)
      }
      __pyx_t_10 = (__pyx_v_span - __pyx_v_split);
      __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_t_2, PyList_GET_ITEM(__pyx_v_insidescores, __pyx_t_10), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = (__pyx_t_4 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L15;
      }
+612: 				inright = insidescores[span - split][rule.rhs2]
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 612, __pyx_L1_error)
        }
        __pyx_t_10 = (__pyx_v_span - __pyx_v_split);
        __pyx_t_2 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_t_10), __pyx_v_rule.rhs2, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 612, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_inright, __pyx_t_2);
        __pyx_t_2 = 0;
 613: 			else:
+614: 				inright = pcfginsidesxrec(
      /*else*/ {
/* … */
        __pyx_t_2 = __pyx_f_8discodop_9estimates_pcfginsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_rule.rhs2, (__pyx_v_span - __pyx_v_split)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_inright, __pyx_t_2);
        __pyx_t_2 = 0;
 615: 						grammar, insidescores, rule.rhs2, span - split)
+616: 				insidescores[span - split][rule.rhs2] = inright
        if (unlikely(__pyx_v_insidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 616, __pyx_L1_error)
        }
        __pyx_t_10 = (__pyx_v_span - __pyx_v_split);
        if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_t_10), __pyx_v_rule.rhs2, __pyx_v_inright, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0) < 0)) __PYX_ERR(0, 616, __pyx_L1_error)
      }
      __pyx_L15:;
+617: 			cost = inleft + inright + rule.prob
      __pyx_t_2 = PyNumber_Add(__pyx_v_inleft, __pyx_v_inright); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 617, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 617, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_11 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 617, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_cost, __pyx_t_11);
      __pyx_t_11 = 0;
+618: 			if cost < score:
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_cost, __pyx_v_score, Py_LT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 618, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 618, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__pyx_t_1) {
/* … */
      }
+619: 				score = cost
        __Pyx_INCREF(__pyx_v_cost);
        __Pyx_DECREF_SET(__pyx_v_score, __pyx_v_cost);
+620: 			n += 1
      __pyx_v_n = (__pyx_v_n + 1);
+621: 			rule = grammar.bylhs[state][n]
      __pyx_v_rule = ((__pyx_v_grammar->bylhs[__pyx_v_state])[__pyx_v_n]);
      __pyx_L11_continue:;
    }
  }
+622: 	return score
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_score);
  __pyx_r = __pyx_v_score;
  goto __pyx_L0;
 623: 
 624: 
+625: cdef pcfgoutsidesxrec(Grammar grammar, list insidescores, dict outsidescores,
static PyObject *__pyx_f_8discodop_9estimates_pcfgoutsidesxrec(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_insidescores, PyObject *__pyx_v_outsidescores, Label __pyx_v_goal, Label __pyx_v_state, int __pyx_v_lspan, int __pyx_v_rspan) {
  size_t __pyx_v_n;
  size_t __pyx_v_sibsize;
  ProbRule __pyx_v_rule;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_score = NULL;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_cost = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pcfgoutsidesxrec", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("discodop.estimates.pcfgoutsidesxrec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XDECREF(__pyx_v_score);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_cost);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 626: 		Label goal, Label state, int lspan, int rspan):
 627: 	"""outsideSX estimate for a PCFG."""
 628: 	# NB: does not deal correctly with unary rules.
 629: 	cdef size_t n, sibsize
 630: 	cdef ProbRule rule
 631: 	cdef tuple item
+632: 	if lspan + rspan == 0:
  __pyx_t_1 = (((__pyx_v_lspan + __pyx_v_rspan) == 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+633: 		return 0 if state == goal else INFINITY
    __Pyx_XDECREF(__pyx_r);
    if (((__pyx_v_state == __pyx_v_goal) != 0)) {
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_2 = __pyx_int_0;
    } else {
      __pyx_t_3 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+634: 	score = INFINITY
  __pyx_t_2 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_score = __pyx_t_2;
  __pyx_t_2 = 0;
 635: 	# unary productions: no sibling
+636: 	n = 0
  __pyx_v_n = 0;
+637: 	rule = grammar.unary[state][n]
  __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_state])[__pyx_v_n]);
+638: 	while rule.rhs1 == state:
  while (1) {
    __pyx_t_1 = ((__pyx_v_rule.rhs1 == __pyx_v_state) != 0);
    if (!__pyx_t_1) break;
+639: 		item = (rule.lhs, lspan, rspan)
    __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_lspan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rspan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_item, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+640: 		if item in outsidescores:
    if (unlikely(__pyx_v_outsidescores == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 640, __pyx_L1_error)
    }
    __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_item, __pyx_v_outsidescores, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 640, __pyx_L1_error)
    __pyx_t_6 = (__pyx_t_1 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L6;
    }
+641: 			out = outsidescores[item]
      if (unlikely(__pyx_v_outsidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 641, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_outsidescores, __pyx_v_item); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_5);
      __pyx_t_5 = 0;
+642: 			if out == -1:
      __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_v_out, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 642, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 642, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_6) {
/* … */
      }
+643: 				n += 1
        __pyx_v_n = (__pyx_v_n + 1);
+644: 				rule = grammar.unary[state][n]
        __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_state])[__pyx_v_n]);
+645: 				continue
        goto __pyx_L4_continue;
 646: 		else:
+647: 			outsidescores[item] = -1  # mark to avoid cycles
    /*else*/ {
      if (unlikely(__pyx_v_outsidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 647, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_outsidescores, __pyx_v_item, __pyx_int_neg_1) < 0)) __PYX_ERR(0, 647, __pyx_L1_error)
+648: 			outsidescores[item] = out = pcfgoutsidesxrec(
      __pyx_t_5 = __pyx_f_8discodop_9estimates_pcfgoutsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_outsidescores, __pyx_v_goal, __pyx_v_rule.lhs, __pyx_v_lspan, __pyx_v_rspan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__pyx_v_outsidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 648, __pyx_L1_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_outsidescores, __pyx_v_item, __pyx_t_5) < 0)) __PYX_ERR(0, 648, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L6:;
 649: 					grammar, insidescores, outsidescores, goal,
 650: 					rule.lhs, lspan, rspan)
+651: 		cost = out + rule.prob
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyNumber_Add(__pyx_v_out, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_cost, __pyx_t_4);
    __pyx_t_4 = 0;
+652: 		if cost < score:
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_cost, __pyx_v_score, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 652, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_6) {
/* … */
    }
+653: 			score = cost
      __Pyx_INCREF(__pyx_v_cost);
      __Pyx_DECREF_SET(__pyx_v_score, __pyx_v_cost);
+654: 		n += 1
    __pyx_v_n = (__pyx_v_n + 1);
+655: 		rule = grammar.unary[state][n]
    __pyx_v_rule = ((__pyx_v_grammar->unary[__pyx_v_state])[__pyx_v_n]);
    __pyx_L4_continue:;
  }
 656: 	# could have a left sibling
+657: 	for sibsize in range(1, lspan + 1):
  __pyx_t_7 = (__pyx_v_lspan + 1);
  for (__pyx_t_8 = 1; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_sibsize = __pyx_t_8;
+658: 		n = 0
    __pyx_v_n = 0;
+659: 		rule = grammar.rbinary[state][n]
    __pyx_v_rule = ((__pyx_v_grammar->rbinary[__pyx_v_state])[__pyx_v_n]);
+660: 		while rule.rhs2 == state:
    while (1) {
      __pyx_t_6 = ((__pyx_v_rule.rhs2 == __pyx_v_state) != 0);
      if (!__pyx_t_6) break;
+661: 			item = (rule.lhs, lspan - sibsize, rspan)
      __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyInt_FromSize_t((__pyx_v_lspan - __pyx_v_sibsize)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rspan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 661, __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_5);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_item, ((PyObject*)__pyx_t_2));
      __pyx_t_2 = 0;
+662: 			if item in outsidescores:
      if (unlikely(__pyx_v_outsidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 662, __pyx_L1_error)
      }
      __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_v_item, __pyx_v_outsidescores, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 662, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_6 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L13;
      }
+663: 				out = outsidescores[item]
        if (unlikely(__pyx_v_outsidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 663, __pyx_L1_error)
        }
        __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_outsidescores, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 663, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_2);
        __pyx_t_2 = 0;
 664: 			else:
+665: 				outsidescores[item] = out = pcfgoutsidesxrec(
      /*else*/ {
/* … */
        __pyx_t_2 = __pyx_f_8discodop_9estimates_pcfgoutsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_outsidescores, __pyx_v_goal, __pyx_v_rule.lhs, (__pyx_v_lspan - __pyx_v_sibsize), __pyx_v_rspan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
        if (unlikely(__pyx_v_outsidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 665, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_v_outsidescores, __pyx_v_item, __pyx_t_2) < 0)) __PYX_ERR(0, 665, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_L13:;
 666: 						grammar, insidescores, outsidescores, goal,
 667: 						rule.lhs, lspan - sibsize, rspan)
+668: 			cost = (insidescores[sibsize].get(rule.rhs1, INFINITY)
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 668, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_sibsize), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 668, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 668, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 668, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_9);
          __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_9, __pyx_t_5, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 668, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_9) {
          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_4);
        __pyx_t_5 = 0;
        __pyx_t_4 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 668, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+669: 					+ out + rule.prob)
      __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_out); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_cost, __pyx_t_11);
      __pyx_t_11 = 0;
+670: 			if cost < score:
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_cost, __pyx_v_score, Py_LT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 670, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 670, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__pyx_t_1) {
/* … */
      }
+671: 				score = cost
        __Pyx_INCREF(__pyx_v_cost);
        __Pyx_DECREF_SET(__pyx_v_score, __pyx_v_cost);
+672: 			n += 1
      __pyx_v_n = (__pyx_v_n + 1);
+673: 			rule = grammar.rbinary[state][n]
      __pyx_v_rule = ((__pyx_v_grammar->rbinary[__pyx_v_state])[__pyx_v_n]);
    }
  }
 674: 	# could have a right sibling
+675: 	for sibsize in range(1, rspan + 1):
  __pyx_t_7 = (__pyx_v_rspan + 1);
  for (__pyx_t_8 = 1; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_sibsize = __pyx_t_8;
+676: 		n = 0
    __pyx_v_n = 0;
+677: 		rule = grammar.lbinary[state][n]
    __pyx_v_rule = ((__pyx_v_grammar->lbinary[__pyx_v_state])[__pyx_v_n]);
+678: 		while rule.rhs1 == state:
    while (1) {
      __pyx_t_1 = ((__pyx_v_rule.rhs1 == __pyx_v_state) != 0);
      if (!__pyx_t_1) break;
+679: 			item = (rule.lhs, lspan, rspan - sibsize)
      __pyx_t_11 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.lhs); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_lspan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_FromSize_t((__pyx_v_rspan - __pyx_v_sibsize)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
      __pyx_t_11 = 0;
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_item, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+680: 			if item in outsidescores:
      if (unlikely(__pyx_v_outsidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 680, __pyx_L1_error)
      }
      __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_item, __pyx_v_outsidescores, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 680, __pyx_L1_error)
      __pyx_t_6 = (__pyx_t_1 != 0);
      if (__pyx_t_6) {
/* … */
        goto __pyx_L19;
      }
+681: 				out = outsidescores[item]
        if (unlikely(__pyx_v_outsidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 681, __pyx_L1_error)
        }
        __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_outsidescores, __pyx_v_item); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 681, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_4);
        __pyx_t_4 = 0;
 682: 			else:
+683: 				out = pcfgoutsidesxrec(
      /*else*/ {
/* … */
        __pyx_t_4 = __pyx_f_8discodop_9estimates_pcfgoutsidesxrec(__pyx_v_grammar, __pyx_v_insidescores, __pyx_v_outsidescores, __pyx_v_goal, __pyx_v_rule.lhs, __pyx_v_lspan, (__pyx_v_rspan - __pyx_v_sibsize)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 683, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_4);
        __pyx_t_4 = 0;
 684: 						grammar, insidescores, outsidescores, goal,
 685: 						rule.lhs, lspan, rspan - sibsize)
+686: 				outsidescores[item] = out
        if (unlikely(__pyx_v_outsidescores == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(0, 686, __pyx_L1_error)
        }
        if (unlikely(PyDict_SetItem(__pyx_v_outsidescores, __pyx_v_item, __pyx_v_out) < 0)) __PYX_ERR(0, 686, __pyx_L1_error)
      }
      __pyx_L19:;
+687: 			cost = (insidescores[sibsize].get(rule.rhs2, INFINITY)
      if (unlikely(__pyx_v_insidescores == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 687, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(PyList_GET_ITEM(__pyx_v_insidescores, __pyx_v_sibsize), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_rule.rhs2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = PyFloat_FromDouble(HUGE_VAL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 687, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_5);
          __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_5, __pyx_t_2, __pyx_t_11};
        __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, 687, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_11};
        __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, 687, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else
      #endif
      {
        __pyx_t_9 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 687, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_t_11);
        __pyx_t_2 = 0;
        __pyx_t_11 = 0;
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+688: 					+ out + rule.prob)
      __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_v_out); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_rule.prob); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF_SET(__pyx_v_cost, __pyx_t_9);
      __pyx_t_9 = 0;
+689: 			if cost < score:
      __pyx_t_9 = PyObject_RichCompare(__pyx_v_cost, __pyx_v_score, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 689, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (__pyx_t_6) {
/* … */
      }
+690: 				score = cost
        __Pyx_INCREF(__pyx_v_cost);
        __Pyx_DECREF_SET(__pyx_v_score, __pyx_v_cost);
+691: 			n += 1
      __pyx_v_n = (__pyx_v_n + 1);
+692: 			rule = grammar.lbinary[state][n]
      __pyx_v_rule = ((__pyx_v_grammar->lbinary[__pyx_v_state])[__pyx_v_n]);
    }
  }
+693: 	return score
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_score);
  __pyx_r = __pyx_v_score;
  goto __pyx_L0;
 694: 
 695: 
+696: cpdef testestimates(Grammar grammar, uint32_t maxlen, str rootlabel):
static PyObject *__pyx_pw_8discodop_9estimates_13testestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_8discodop_9estimates_testestimates(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_rootlabel, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Label __pyx_v_goal;
  PyObject *__pyx_v_insidescores = NULL;
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_v_an = NULL;
  PyObject *__pyx_v_bn = NULL;
  PyObject *__pyx_v_outside = NULL;
  PyObject *__pyx_v_cnt = NULL;
  PyObject *__pyx_v_cn = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_v_dn = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("testestimates", 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("discodop.estimates.testestimates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_insidescores);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XDECREF(__pyx_v_an);
  __Pyx_XDECREF(__pyx_v_bn);
  __Pyx_XDECREF(__pyx_v_outside);
  __Pyx_XDECREF(__pyx_v_cnt);
  __Pyx_XDECREF(__pyx_v_cn);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_dn);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_13testestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_9estimates_12testestimates[] = "testestimates(Grammar grammar, uint32_t maxlen, unicode rootlabel)";
static PyObject *__pyx_pw_8discodop_9estimates_13testestimates(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
  uint32_t __pyx_v_maxlen;
  PyObject *__pyx_v_rootlabel = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("testestimates (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_maxlen,&__pyx_n_s_rootlabel,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_grammar)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxlen)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("testestimates", 1, 3, 3, 1); __PYX_ERR(0, 696, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rootlabel)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("testestimates", 1, 3, 3, 2); __PYX_ERR(0, 696, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "testestimates") < 0)) __PYX_ERR(0, 696, __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_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
    __pyx_v_maxlen = __Pyx_PyInt_As_uint32_t(values[1]); if (unlikely((__pyx_v_maxlen == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 696, __pyx_L3_error)
    __pyx_v_rootlabel = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("testestimates", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 696, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("discodop.estimates.testestimates", __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, 696, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rootlabel), (&PyUnicode_Type), 1, "rootlabel", 1))) __PYX_ERR(0, 696, __pyx_L1_error)
  __pyx_r = __pyx_pf_8discodop_9estimates_12testestimates(__pyx_self, __pyx_v_grammar, __pyx_v_maxlen, __pyx_v_rootlabel);

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

static PyObject *__pyx_pf_8discodop_9estimates_12testestimates(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, uint32_t __pyx_v_maxlen, PyObject *__pyx_v_rootlabel) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("testestimates", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_8discodop_9estimates_testestimates(__pyx_v_grammar, __pyx_v_maxlen, __pyx_v_rootlabel, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __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.estimates.testestimates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+697: 	cdef Label goal = grammar.toid[rootlabel]
  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->toid), __pyx_v_rootlabel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 697, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_goal = __pyx_t_2;
+698: 	print("getting inside")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 698, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_getting_inside); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 698, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
+699: 	insidescores = inside(grammar, maxlen, {})
  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_inside_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_grammar), __pyx_t_4, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, ((PyObject *)__pyx_v_grammar), __pyx_t_4, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, ((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_insidescores = __pyx_t_1;
  __pyx_t_1 = 0;
+700: 	for a in insidescores:
  if (likely(PyList_CheckExact(__pyx_v_insidescores)) || PyTuple_CheckExact(__pyx_v_insidescores)) {
    __pyx_t_1 = __pyx_v_insidescores; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_insidescores); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 700, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 700, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 700, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_10(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        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, 700, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+701: 		for b in insidescores[a]:
    __pyx_t_3 = PyObject_GetItem(__pyx_v_insidescores, __pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_8 = __pyx_t_3; __Pyx_INCREF(__pyx_t_8); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
    } else {
      __pyx_t_11 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 701, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 701, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_12)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 701, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 701, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 701, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_12(__pyx_t_8);
        if (unlikely(!__pyx_t_3)) {
          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, 701, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_3);
      __pyx_t_3 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+702: 			assert 0 <= a < grammar.nonterminals
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_3 = PyObject_RichCompare(__pyx_int_0, __pyx_v_a, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error)
        if (__Pyx_PyObject_IsTrue(__pyx_t_3)) {
          __Pyx_DECREF(__pyx_t_3);
          __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 702, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_3 = PyObject_RichCompare(__pyx_v_a, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 702, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_13)) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 702, __pyx_L1_error)
        }
      }
      #endif
+703: 			assert 0 <= bitlength(b) <= maxlen
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_14 = __Pyx_PyInt_As_uint64_t(__pyx_v_b); if (unlikely((__pyx_t_14 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 703, __pyx_L1_error)
        __pyx_t_7 = __pyx_f_8discodop_3bit_bitlength(__pyx_t_14);
        __pyx_t_13 = (0 <= __pyx_t_7);
        if (__pyx_t_13) {
          __pyx_t_13 = (__pyx_t_7 <= __pyx_v_maxlen);
        }
        if (unlikely(!(__pyx_t_13 != 0))) {
          PyErr_SetNone(PyExc_AssertionError);
          __PYX_ERR(0, 703, __pyx_L1_error)
        }
      }
      #endif
 704: 			# print(a, b)
 705: 			# print("%s[%d] =" % (grammar.tolabel[a], b),
 706: 			# 		exp(insidescores[a][b]))
+707: 	print(len(insidescores) * sum(map(len, insidescores.values())), '\n')
  __pyx_t_9 = PyObject_Length(__pyx_v_insidescores); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 707, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_GetBuiltinName(__pyx_n_s_len); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_insidescores, __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(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);
    }
  }
  if (__pyx_t_4) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_8 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __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 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __Pyx_INCREF(__pyx_kp_u__13);
  __Pyx_GIVEREF(__pyx_kp_u__13);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__13);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+708: 	insidescores = np.empty((grammar.nonterminals, (maxlen + 1)), dtype='d')
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF_SET(__pyx_v_insidescores, __pyx_t_5);
  __pyx_t_5 = 0;
+709: 	insidescores[...] = np.NAN
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_NAN); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_insidescores, Py_Ellipsis, __pyx_t_8) < 0)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+710: 	simpleinside(grammar, maxlen, insidescores)
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_simpleinside); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_t_1, __pyx_v_insidescores};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 710, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_t_1, __pyx_v_insidescores};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 710, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, ((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_v_insidescores);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_7, __pyx_v_insidescores);
    __pyx_t_1 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 710, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+711: 	insidescores[np.isnan(insidescores)] = np.inf
  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isnan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __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_8 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_insidescores); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_insidescores};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 711, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_8);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_insidescores};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 711, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_8);
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __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_insidescores);
      __Pyx_GIVEREF(__pyx_v_insidescores);
      PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_insidescores);
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 711, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_insidescores, __pyx_t_8, __pyx_t_5) < 0)) __PYX_ERR(0, 711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+712: 	print("inside")
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_n_u_inside_2); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
+713: 	for an, a in enumerate(insidescores):
  __Pyx_INCREF(__pyx_int_0);
  __pyx_t_5 = __pyx_int_0;
  if (likely(PyList_CheckExact(__pyx_v_insidescores)) || PyTuple_CheckExact(__pyx_v_insidescores)) {
    __pyx_t_8 = __pyx_v_insidescores; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_insidescores); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 713, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_8))) {
        if (__pyx_t_9 >= 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_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 713, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_9 >= 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_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 713, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_10(__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, 713, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_an, __pyx_t_5);
    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_1;
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+714: 		for bn, b in enumerate(a):
    __Pyx_INCREF(__pyx_int_0);
    __pyx_t_1 = __pyx_int_0;
    if (likely(PyList_CheckExact(__pyx_v_a)) || PyTuple_CheckExact(__pyx_v_a)) {
      __pyx_t_3 = __pyx_v_a; __Pyx_INCREF(__pyx_t_3); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
    } else {
      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 714, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_12)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_11 >= 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_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 714, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_11 >= 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_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 714, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_12(__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, 714, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_bn, __pyx_t_1);
      __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_4;
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+715: 			if b < np.inf:
      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 715, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_b, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 715, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_13) {
/* … */
      }
+716: 				print("%s len %d = %g" % (grammar.tolabel[an],
        __pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_an); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
/* … */
        __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_4);
        __Pyx_INCREF(__pyx_v_bn);
        __Pyx_GIVEREF(__pyx_v_bn);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_bn);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_6);
        __pyx_t_4 = 0;
        __pyx_t_6 = 0;
        __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_s_len_d_g, __pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_15, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+717: 						bn, exp(-b)))
        __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 717, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = PyNumber_Negative(__pyx_v_b); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 717, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_17)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_17);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
          }
        }
        if (!__pyx_t_17) {
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_16); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 717, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_GOTREF(__pyx_t_6);
        } else {
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[2] = {__pyx_t_17, __pyx_t_16};
            __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 717, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
            PyObject *__pyx_temp[2] = {__pyx_t_17, __pyx_t_16};
            __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 717, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          } else
          #endif
          {
            __pyx_t_18 = PyTuple_New(1+1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 717, __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 = NULL;
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_18, 0+1, __pyx_t_16);
            __pyx_t_16 = 0;
            __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 717, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 718: 	# print(insidescores)
 719: 	# for a in range(maxlen):
 720: 	# 	print(grammar.tolabel[goal], "len", a, "=",
 721: 	# 			exp(-insidescores[goal, a]))
 722: 
+723: 	print("getting outside")
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_getting_outside); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
+724: 	outside = np.empty((grammar.nonterminals, ) + 3 * (maxlen + 1, ), dtype='d')
  __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->nonterminals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __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_PyInt_From_long((__pyx_v_maxlen + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(1 * 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  { Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < 3; __pyx_temp++) {
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_t_5);
    }
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_n_u_d) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_outside = __pyx_t_1;
  __pyx_t_1 = 0;
+725: 	outside[...] = np.inf
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_outside, Py_Ellipsis, __pyx_t_5) < 0)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+726: 	outsidelr(grammar, insidescores, maxlen, goal, outside)
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_outsidelr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_maxlen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyInt_From_uint32_t(__pyx_v_goal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_6, ((PyObject *)__pyx_v_grammar), __pyx_v_insidescores, __pyx_t_3, __pyx_t_8, __pyx_v_outside};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_6, ((PyObject *)__pyx_v_grammar), __pyx_v_insidescores, __pyx_t_3, __pyx_t_8, __pyx_v_outside};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_grammar));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_7, ((PyObject *)__pyx_v_grammar));
    __Pyx_INCREF(__pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_v_insidescores);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_7, __pyx_v_insidescores);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_15, 3+__pyx_t_7, __pyx_t_8);
    __Pyx_INCREF(__pyx_v_outside);
    __Pyx_GIVEREF(__pyx_v_outside);
    PyTuple_SET_ITEM(__pyx_t_15, 4+__pyx_t_7, __pyx_v_outside);
    __pyx_t_3 = 0;
    __pyx_t_8 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 727: 	# print(outside)
+728: 	cnt = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_cnt = __pyx_int_0;
+729: 	for an, a in enumerate(outside):
  __Pyx_INCREF(__pyx_int_0);
  __pyx_t_5 = __pyx_int_0;
  if (likely(PyList_CheckExact(__pyx_v_outside)) || PyTuple_CheckExact(__pyx_v_outside)) {
    __pyx_t_1 = __pyx_v_outside; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_outside); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 729, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_15 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_15); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 729, __pyx_L1_error)
        #else
        __pyx_t_15 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        #endif
      } else {
        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_15); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 729, __pyx_L1_error)
        #else
        __pyx_t_15 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        #endif
      }
    } else {
      __pyx_t_15 = __pyx_t_10(__pyx_t_1);
      if (unlikely(!__pyx_t_15)) {
        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, 729, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_15);
    }
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_15);
    __pyx_t_15 = 0;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_an, __pyx_t_5);
    __pyx_t_15 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_15;
    __pyx_t_15 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+730: 		for bn, b in enumerate(a):
    __Pyx_INCREF(__pyx_int_0);
    __pyx_t_15 = __pyx_int_0;
    if (likely(PyList_CheckExact(__pyx_v_a)) || PyTuple_CheckExact(__pyx_v_a)) {
      __pyx_t_8 = __pyx_v_a; __Pyx_INCREF(__pyx_t_8); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
    } else {
      __pyx_t_11 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_a); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 730, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 730, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_12)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 730, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 730, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 730, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_8, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 730, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_12(__pyx_t_8);
        if (unlikely(!__pyx_t_3)) {
          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, 730, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_XDECREF_SET(__pyx_v_bn, __pyx_t_15);
      __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_15, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 730, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_15);
      __pyx_t_15 = __pyx_t_3;
      __pyx_t_3 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+731: 			for cn, c in enumerate(b):
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_3 = __pyx_int_0;
      if (likely(PyList_CheckExact(__pyx_v_b)) || PyTuple_CheckExact(__pyx_v_b)) {
        __pyx_t_6 = __pyx_v_b; __Pyx_INCREF(__pyx_t_6); __pyx_t_19 = 0;
        __pyx_t_20 = NULL;
      } else {
        __pyx_t_19 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_b); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 731, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_20 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 731, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_20)) {
          if (likely(PyList_CheckExact(__pyx_t_6))) {
            if (__pyx_t_19 >= 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_19); __Pyx_INCREF(__pyx_t_4); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 731, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 731, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          } else {
            if (__pyx_t_19 >= 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_19); __Pyx_INCREF(__pyx_t_4); __pyx_t_19++; if (unlikely(0 < 0)) __PYX_ERR(0, 731, __pyx_L1_error)
            #else
            __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_19); __pyx_t_19++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 731, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            #endif
          }
        } else {
          __pyx_t_4 = __pyx_t_20(__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, 731, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_4);
        __pyx_t_4 = 0;
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_cn, __pyx_t_3);
        __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 731, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3);
        __pyx_t_3 = __pyx_t_4;
        __pyx_t_4 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+732: 				for dn, d in enumerate(c):
        __Pyx_INCREF(__pyx_int_0);
        __pyx_t_4 = __pyx_int_0;
        if (likely(PyList_CheckExact(__pyx_v_c)) || PyTuple_CheckExact(__pyx_v_c)) {
          __pyx_t_18 = __pyx_v_c; __Pyx_INCREF(__pyx_t_18); __pyx_t_21 = 0;
          __pyx_t_22 = NULL;
        } else {
          __pyx_t_21 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_v_c); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 732, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_22 = Py_TYPE(__pyx_t_18)->tp_iternext; if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 732, __pyx_L1_error)
        }
        for (;;) {
          if (likely(!__pyx_t_22)) {
            if (likely(PyList_CheckExact(__pyx_t_18))) {
              if (__pyx_t_21 >= PyList_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_16 = PyList_GET_ITEM(__pyx_t_18, __pyx_t_21); __Pyx_INCREF(__pyx_t_16); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 732, __pyx_L1_error)
              #else
              __pyx_t_16 = PySequence_ITEM(__pyx_t_18, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 732, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              #endif
            } else {
              if (__pyx_t_21 >= PyTuple_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_16 = PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_21); __Pyx_INCREF(__pyx_t_16); __pyx_t_21++; if (unlikely(0 < 0)) __PYX_ERR(0, 732, __pyx_L1_error)
              #else
              __pyx_t_16 = PySequence_ITEM(__pyx_t_18, __pyx_t_21); __pyx_t_21++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 732, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_16);
              #endif
            }
          } else {
            __pyx_t_16 = __pyx_t_22(__pyx_t_18);
            if (unlikely(!__pyx_t_16)) {
              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, 732, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_16);
          }
          __Pyx_XDECREF_SET(__pyx_v_d, __pyx_t_16);
          __pyx_t_16 = 0;
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_v_dn, __pyx_t_4);
          __pyx_t_16 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 732, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_4);
          __pyx_t_4 = __pyx_t_16;
          __pyx_t_16 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+733: 					if d < np.inf:
          __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 733, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_inf); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 733, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_16 = PyObject_RichCompare(__pyx_v_d, __pyx_t_17, Py_LT); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 733, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 733, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (__pyx_t_13) {
/* … */
          }
+734: 						print("%s length %d lr %d gaps %d = %g" % (
            __pyx_t_17 = PyUnicode_Format(__pyx_kp_u_s_length_d_lr_d_gaps_d_g, __pyx_t_23); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 734, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __pyx_t_23 = PyTuple_New(1); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 734, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_23);
            __Pyx_GIVEREF(__pyx_t_17);
            PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_17);
            __pyx_t_17 = 0;
            __pyx_t_17 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_23, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 734, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+735: 								grammar.tolabel[an],
            __pyx_t_16 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_an); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 735, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_16);
/* … */
            __pyx_t_23 = PyTuple_New(5); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 735, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_23);
            __Pyx_GIVEREF(__pyx_t_16);
            PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_16);
            __Pyx_INCREF(__pyx_v_bn);
            __Pyx_GIVEREF(__pyx_v_bn);
            PyTuple_SET_ITEM(__pyx_t_23, 1, __pyx_v_bn);
            __Pyx_INCREF(__pyx_v_cn);
            __Pyx_GIVEREF(__pyx_v_cn);
            PyTuple_SET_ITEM(__pyx_t_23, 2, __pyx_v_cn);
            __Pyx_INCREF(__pyx_v_dn);
            __Pyx_GIVEREF(__pyx_v_dn);
            PyTuple_SET_ITEM(__pyx_t_23, 3, __pyx_v_dn);
            __Pyx_GIVEREF(__pyx_t_17);
            PyTuple_SET_ITEM(__pyx_t_23, 4, __pyx_t_17);
            __pyx_t_16 = 0;
            __pyx_t_17 = 0;
+736: 								bn, cn, dn, exp(-d)))
            __pyx_t_23 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 736, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_23);
            __pyx_t_24 = PyNumber_Negative(__pyx_v_d); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 736, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_25 = NULL;
            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_23))) {
              __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_23);
              if (likely(__pyx_t_25)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_23);
                __Pyx_INCREF(__pyx_t_25);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_23, function);
              }
            }
            if (!__pyx_t_25) {
              __pyx_t_17 = __Pyx_PyObject_CallOneArg(__pyx_t_23, __pyx_t_24); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 736, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_GOTREF(__pyx_t_17);
            } else {
              #if CYTHON_FAST_PYCALL
              if (PyFunction_Check(__pyx_t_23)) {
                PyObject *__pyx_temp[2] = {__pyx_t_25, __pyx_t_24};
                __pyx_t_17 = __Pyx_PyFunction_FastCall(__pyx_t_23, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 736, __pyx_L1_error)
                __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              } else
              #endif
              #if CYTHON_FAST_PYCCALL
              if (__Pyx_PyFastCFunction_Check(__pyx_t_23)) {
                PyObject *__pyx_temp[2] = {__pyx_t_25, __pyx_t_24};
                __pyx_t_17 = __Pyx_PyCFunction_FastCall(__pyx_t_23, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 736, __pyx_L1_error)
                __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              } else
              #endif
              {
                __pyx_t_26 = PyTuple_New(1+1); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 736, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_26);
                __Pyx_GIVEREF(__pyx_t_25); PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_25); __pyx_t_25 = NULL;
                __Pyx_GIVEREF(__pyx_t_24);
                PyTuple_SET_ITEM(__pyx_t_26, 0+1, __pyx_t_24);
                __pyx_t_24 = 0;
                __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_23, __pyx_t_26, NULL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 736, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
              }
            }
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
+737: 						cnt += 1
            __pyx_t_17 = __Pyx_PyInt_AddObjC(__pyx_v_cnt, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 737, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF_SET(__pyx_v_cnt, __pyx_t_17);
            __pyx_t_17 = 0;
+738: 	print(cnt)
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_cnt);
  __Pyx_GIVEREF(__pyx_v_cnt);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_cnt);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+739: 	print("done")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_n_u_done); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
+740: 	return outside
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_outside);
  __pyx_r = __pyx_v_outside;
  goto __pyx_L0;
 741: 
 742: 
+743: def test():
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_9estimates_15test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_9estimates_14test[] = "test()";
static PyMethodDef __pyx_mdef_8discodop_9estimates_15test = {"test", (PyCFunction)__pyx_pw_8discodop_9estimates_15test, METH_NOARGS, __pyx_doc_8discodop_9estimates_14test};
static PyObject *__pyx_pw_8discodop_9estimates_15test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("test (wrapper)", 0);
  __pyx_r = __pyx_pf_8discodop_9estimates_14test(__pyx_self);

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

static PyObject *__pyx_pf_8discodop_9estimates_14test(CYTHON_UNUSED PyObject *__pyx_self) {
  struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_chart = 0;
  struct __pyx_obj_8discodop_10containers_Chart *__pyx_v_estchart = 0;
  PyObject *__pyx_v_plcfrs = NULL;
  PyObject *__pyx_v_treebankgrammar = NULL;
  PyObject *__pyx_v_Grammar = NULL;
  PyObject *__pyx_v_Tree = NULL;
  PyObject *__pyx_v_NegraCorpusReader = NULL;
  PyObject *__pyx_v_addfanoutmarkers = NULL;
  PyObject *__pyx_v_binarize = NULL;
  PyObject *__pyx_v_corpus = NULL;
  PyObject *__pyx_v_trees = NULL;
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_grammar = NULL;
  PyObject *__pyx_v_sents = NULL;
  PyObject *__pyx_v_outside = NULL;
  PyObject *__pyx_v_sent = NULL;
  PyObject *__pyx_v_msg = 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("discodop.estimates.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_chart);
  __Pyx_XDECREF((PyObject *)__pyx_v_estchart);
  __Pyx_XDECREF(__pyx_v_plcfrs);
  __Pyx_XDECREF(__pyx_v_treebankgrammar);
  __Pyx_XDECREF(__pyx_v_Grammar);
  __Pyx_XDECREF(__pyx_v_Tree);
  __Pyx_XDECREF(__pyx_v_NegraCorpusReader);
  __Pyx_XDECREF(__pyx_v_addfanoutmarkers);
  __Pyx_XDECREF(__pyx_v_binarize);
  __Pyx_XDECREF(__pyx_v_corpus);
  __Pyx_XDECREF(__pyx_v_trees);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_grammar);
  __Pyx_XDECREF(__pyx_v_sents);
  __Pyx_XDECREF(__pyx_v_outside);
  __Pyx_XDECREF(__pyx_v_sent);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__59 = PyTuple_Pack(17, __pyx_n_s_chart, __pyx_n_s_estchart, __pyx_n_s_plcfrs, __pyx_n_s_treebankgrammar, __pyx_n_s_Grammar, __pyx_n_s_Tree, __pyx_n_s_NegraCorpusReader, __pyx_n_s_addfanoutmarkers, __pyx_n_s_binarize, __pyx_n_s_corpus, __pyx_n_s_trees, __pyx_n_s_a, __pyx_n_s_grammar, __pyx_n_s_sents, __pyx_n_s_outside, __pyx_n_s_sent, __pyx_n_s_msg); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__59);
  __Pyx_GIVEREF(__pyx_tuple__59);
/* … */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_9estimates_15test, NULL, __pyx_n_s_discodop_estimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 743, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(0, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_estimates_pyx, __pyx_n_s_test, 743, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 743, __pyx_L1_error)
 744: 	cdef Chart chart, estchart
+745: 	from . import plcfrs
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __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__17, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __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, 745, __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;
+746: 	from .grammar import treebankgrammar
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_treebankgrammar);
  __Pyx_GIVEREF(__pyx_n_s_treebankgrammar);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_treebankgrammar);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_grammar, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __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_treebankgrammar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_treebankgrammar = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+747: 	from .containers import Grammar
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Grammar);
  __Pyx_GIVEREF(__pyx_n_s_Grammar);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Grammar);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_containers, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 747, __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_Grammar); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_Grammar = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+748: 	from .tree import Tree
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Tree);
  __Pyx_GIVEREF(__pyx_n_s_Tree);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Tree);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_tree, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 748, __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_Tree); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_Tree = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+749: 	from .treebank import NegraCorpusReader
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_NegraCorpusReader);
  __Pyx_GIVEREF(__pyx_n_s_NegraCorpusReader);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_NegraCorpusReader);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_treebank, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __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_NegraCorpusReader); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_NegraCorpusReader = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+750: 	from .treetransforms import addfanoutmarkers, binarize
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_addfanoutmarkers);
  __Pyx_GIVEREF(__pyx_n_s_addfanoutmarkers);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_addfanoutmarkers);
  __Pyx_INCREF(__pyx_n_s_binarize);
  __Pyx_GIVEREF(__pyx_n_s_binarize);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_binarize);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_treetransforms, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __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_addfanoutmarkers); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_addfanoutmarkers = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_binarize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_binarize = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+751: 	corpus = NegraCorpusReader('alpinosample.export')
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_NegraCorpusReader, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_corpus = __pyx_t_1;
  __pyx_t_1 = 0;
/* … */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_alpinosample_export); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
+752: 	trees = list(corpus.trees().values())
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_corpus, __pyx_n_s_trees); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 752, __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_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(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);
    }
  }
  if (__pyx_t_2) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_trees = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+753: 	for a in trees:
  __pyx_t_3 = __pyx_v_trees; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
  for (;;) {
    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, 753, __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, 753, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+754: 		binarize(a, vertmarkov=1, horzmarkov=1)
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __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_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_vertmarkov, __pyx_int_1) < 0) __PYX_ERR(0, 754, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_horzmarkov, __pyx_int_1) < 0) __PYX_ERR(0, 754, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_binarize, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 754, __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+755: 		addfanoutmarkers(a)
    __Pyx_INCREF(__pyx_v_addfanoutmarkers);
    __pyx_t_2 = __pyx_v_addfanoutmarkers; __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    if (!__pyx_t_1) {
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_a); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    } else {
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_a};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __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_2)) {
        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_a};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 755, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
        __Pyx_INCREF(__pyx_v_a);
        __Pyx_GIVEREF(__pyx_v_a);
        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_a);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+756: 	grammar = Grammar(treebankgrammar(trees, list(corpus.sents().values())))
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_corpus, __pyx_n_s_sents); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(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_6 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else {
    __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 756, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  if (__pyx_t_6) {
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_v_treebankgrammar);
  __pyx_t_2 = __pyx_v_treebankgrammar; __pyx_t_6 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_trees, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 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_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_trees, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 756, __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_trees);
    __Pyx_GIVEREF(__pyx_v_trees);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_v_trees);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_v_Grammar);
  __pyx_t_2 = __pyx_v_Grammar; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (!__pyx_t_7) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __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_7, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); __pyx_t_7 = NULL;
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_grammar = __pyx_t_3;
  __pyx_t_3 = 0;
+757: 	trees = [Tree('(ROOT (A (a 0) (b 1)))'),
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_Tree, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_u_ROOT_A_a_0_b_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
/* … */
  __pyx_t_7 = PyList_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_7, 2, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_7, 3, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __Pyx_DECREF_SET(__pyx_v_trees, ((PyObject*)__pyx_t_7));
  __pyx_t_7 = 0;
+758: 			Tree('(ROOT (B (a 0) (c 2)) (b 1))'),
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_Tree, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_u_ROOT_B_a_0_c_2_b_1); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
+759: 			Tree('(ROOT (B (a 0) (c 2)) (b 1))'),
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_Tree, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_u_ROOT_B_a_0_c_2_b_1); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
+760: 			Tree('(ROOT (C (a 0) (c 2)) (b 1))')]
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_Tree, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_u_ROOT_C_a_0_c_2_b_1); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
+761: 	sents =[["a", "b"],
  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_n_u_b);
/* … */
  __pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_7);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_3, 3, __pyx_t_2);
  __pyx_t_7 = 0;
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_v_sents = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+762: 			["a", "b", "c"],
  __pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_4, 2, __pyx_n_u_c);
+763: 			["a", "b", "c"],
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_c);
+764: 			["a", "b", "c"]]
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_u_c);
+765: 	print("treebank:")
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_u_treebank_2); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
+766: 	for a in trees:
  __pyx_t_3 = __pyx_v_trees; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
  for (;;) {
    if (__pyx_t_5 >= 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_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 766, __pyx_L1_error)
    #else
    __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+767: 		print(a)
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_a);
    __Pyx_GIVEREF(__pyx_v_a);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __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;
+768: 	print("\ngrammar:")
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_u_grammar_2); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
+769: 	grammar = Grammar(treebankgrammar(trees, sents))
  __Pyx_INCREF(__pyx_v_treebankgrammar);
  __pyx_t_2 = __pyx_v_treebankgrammar; __pyx_t_4 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(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_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_trees, __pyx_v_sents};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __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[3] = {__pyx_t_4, __pyx_v_trees, __pyx_v_sents};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 769, __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_trees);
    __Pyx_GIVEREF(__pyx_v_trees);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_v_trees);
    __Pyx_INCREF(__pyx_v_sents);
    __Pyx_GIVEREF(__pyx_v_sents);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, __pyx_v_sents);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_v_Grammar);
  __pyx_t_2 = __pyx_v_Grammar; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (!__pyx_t_7) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __pyx_t_7 = NULL;
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_grammar, __pyx_t_3);
  __pyx_t_3 = 0;
+770: 	print(grammar, '\n')
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_grammar);
  __Pyx_INCREF(__pyx_kp_u__13);
  __Pyx_GIVEREF(__pyx_kp_u__13);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_kp_u__13);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+771: 	testestimates(grammar, 4, 'ROOT')
  if (!(likely(((__pyx_v_grammar) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_grammar, __pyx_ptype_8discodop_10containers_Grammar))))) __PYX_ERR(0, 771, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_8discodop_9estimates_testestimates(((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_v_grammar), 4, __pyx_n_u_ROOT, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+772: 	outside = getestimates(grammar, 4, 'ROOT')
  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_getestimates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_8 = 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_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_grammar, __pyx_int_4, __pyx_n_u_ROOT};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __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_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_grammar, __pyx_int_4, __pyx_n_u_ROOT};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_8, 3+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(3+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __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_INCREF(__pyx_v_grammar);
    __Pyx_GIVEREF(__pyx_v_grammar);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_8, __pyx_v_grammar);
    __Pyx_INCREF(__pyx_int_4);
    __Pyx_GIVEREF(__pyx_int_4);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_8, __pyx_int_4);
    __Pyx_INCREF(__pyx_n_u_ROOT);
    __Pyx_GIVEREF(__pyx_n_u_ROOT);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_8, __pyx_n_u_ROOT);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_outside = __pyx_t_2;
  __pyx_t_2 = 0;
+773: 	sent = ["a", "b", "c"]
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_u_c);
  __pyx_v_sent = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+774: 	print("\nwithout estimates")
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_u_without_estimates); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
+775: 	chart, msg = plcfrs.parse(sent, grammar, estimates=None)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plcfrs, __pyx_n_s_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_sent);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_grammar);
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_estimates, Py_None) < 0) __PYX_ERR(0, 775, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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, 775, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 775, __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_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_3 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_2), 2) < 0) __PYX_ERR(0, 775, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_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, 775, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 775, __pyx_L1_error)
  __pyx_v_chart = ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_msg = __pyx_t_3;
  __pyx_t_3 = 0;
+776: 	print(msg)
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_msg);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+777: 	print(chart)
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __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_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+778: 	print("\nwith estimates")
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_u_with_estimates); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);
+779: 	estchart, msg = plcfrs.parse(sent, grammar,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_plcfrs, __pyx_n_s_parse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_sent);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_grammar);
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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, 779, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_3 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 2) < 0) __PYX_ERR(0, 779, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 779, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 779, __pyx_L1_error)
  __pyx_v_estchart = ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_3);
  __pyx_t_3 = 0;
+780: 			estimates=('SXlrgaps', outside))
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_SXlrgaps);
  __Pyx_GIVEREF(__pyx_n_u_SXlrgaps);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_SXlrgaps);
  __Pyx_INCREF(__pyx_v_outside);
  __Pyx_GIVEREF(__pyx_v_outside);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_outside);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_estimates, __pyx_t_2) < 0) __PYX_ERR(0, 780, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+781: 	print(msg)
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_msg);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+782: 	print(estchart)
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_estchart));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_estchart));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_estchart));
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+783: 	print('items avoided:', chart.numitems() - estchart.numitems())
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_numitems); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  if (__pyx_t_1) {
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_estchart), __pyx_n_s_numitems); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __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_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_kp_u_items_avoided);
  __Pyx_GIVEREF(__pyx_kp_u_items_avoided);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_items_avoided);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 784: 
+785: 	trees = [Tree(a) for a in '''\
  { /* enter inner scope */
    PyObject *__pyx_8genexpr6__pyx_v_a = NULL;
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L13_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
    __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 785, __pyx_L13_error)
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_a, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_v_Tree);
      __pyx_t_4 = __pyx_v_Tree; __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      if (!__pyx_t_7) {
        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_8genexpr6__pyx_v_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_3);
      } else {
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_8genexpr6__pyx_v_a};
          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L13_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_8genexpr6__pyx_v_a};
          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L13_error)
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_GOTREF(__pyx_t_3);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 785, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
          __Pyx_INCREF(__pyx_8genexpr6__pyx_v_a);
          __Pyx_GIVEREF(__pyx_8genexpr6__pyx_v_a);
          PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_8genexpr6__pyx_v_a);
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 785, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_a);
    goto __pyx_L16_exit_scope;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_a);
    goto __pyx_L1_error;
    __pyx_L16_exit_scope:;
  } /* exit inner scope */
  __Pyx_DECREF_SET(__pyx_v_trees, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;
 786: 			(ROOT (A (a 0) (b 1)))
 787: 			(ROOT (A (B (A (B (a 0) (b 1))))) (c 2))
 788: 			(ROOT (A (B (A (B (a 0) (b 1))))) (c 2))
 789: 			(ROOT (A (B (A (B (a 0) (b 1))))) (c 2))
 790: 			(ROOT (A (B (A (B (a 0) (b 1))))) (c 2))
 791: 			(ROOT (A (B (A (B (a 0) (b 1))))) (c 2))
+792: 			(ROOT (C (a 0) (b 1)) (c 2))'''.splitlines()]
    __pyx_t_3 = PyUnicode_Splitlines(__pyx_kp_u_ROOT_A_a_0_b_1_ROOT_A_B_A_B_a_0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 792, __pyx_L13_error)
    __Pyx_GOTREF(__pyx_t_3);
+793: 	sents =[["a", "b"],
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_b);
/* … */
  __pyx_t_11 = PyList_New(7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_11, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_11, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_11, 3, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_11, 4, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyList_SET_ITEM(__pyx_t_11, 5, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_10);
  PyList_SET_ITEM(__pyx_t_11, 6, __pyx_t_10);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v_sents, ((PyObject*)__pyx_t_11));
  __pyx_t_11 = 0;
+794: 			["a", "b", "c"],
  __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_u_c);
+795: 			["a", "b", "c"],
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_u_c);
+796: 			["a", "b", "c"],
  __pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_4, 2, __pyx_n_u_c);
+797: 			["a", "b", "c"],
  __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_6, 2, __pyx_n_u_c);
+798: 			["a", "b", "c"],
  __pyx_t_7 = PyList_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_7, 2, __pyx_n_u_c);
+799: 			["a", "b", "c"]]
  __pyx_t_10 = PyList_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_10, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_10, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_10, 2, __pyx_n_u_c);
+800: 	print("treebank:")
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 800, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_treebank_2); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 800, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
+801: 	for a in trees:
  __pyx_t_11 = __pyx_v_trees; __Pyx_INCREF(__pyx_t_11); __pyx_t_5 = 0;
  for (;;) {
    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_11)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_10 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_5); __Pyx_INCREF(__pyx_t_10); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 801, __pyx_L1_error)
    #else
    __pyx_t_10 = PySequence_ITEM(__pyx_t_11, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 801, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_10);
    __pyx_t_10 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+802: 		print(a)
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_v_a);
    __Pyx_GIVEREF(__pyx_v_a);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_a);
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_10, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+803: 	print("\npcfg grammar:")
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u_pcfg_grammar); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
+804: 	grammar = Grammar(treebankgrammar(trees, sents))
  __Pyx_INCREF(__pyx_v_treebankgrammar);
  __pyx_t_10 = __pyx_v_treebankgrammar; __pyx_t_6 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_trees, __pyx_v_sents};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 804, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_trees, __pyx_v_sents};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 804, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 804, __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_trees);
    __Pyx_GIVEREF(__pyx_v_trees);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_8, __pyx_v_trees);
    __Pyx_INCREF(__pyx_v_sents);
    __Pyx_GIVEREF(__pyx_v_sents);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_8, __pyx_v_sents);
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_INCREF(__pyx_v_Grammar);
  __pyx_t_10 = __pyx_v_Grammar; __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  if (!__pyx_t_4) {
    __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_11);
  } else {
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_7};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_7};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v_grammar, __pyx_t_11);
  __pyx_t_11 = 0;
+805: 	print(grammar, '\n')
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_grammar);
  __Pyx_INCREF(__pyx_kp_u__13);
  __Pyx_GIVEREF(__pyx_kp_u__13);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_kp_u__13);
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+806: 	outside = getpcfgestimates(grammar, 4, 'ROOT', debug=True)
  if (!(likely(((__pyx_v_grammar) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_grammar, __pyx_ptype_8discodop_10containers_Grammar))))) __PYX_ERR(0, 806, __pyx_L1_error)
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.debug = 1;
  __pyx_t_10 = __pyx_f_8discodop_9estimates_getpcfgestimates(((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_v_grammar), 4, __pyx_n_u_ROOT, 0, &__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF_SET(__pyx_v_outside, __pyx_t_10);
  __pyx_t_10 = 0;
+807: 	sent = ["a", "b", "c"]
  __pyx_t_10 = PyList_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_n_u_a);
  __Pyx_GIVEREF(__pyx_n_u_a);
  PyList_SET_ITEM(__pyx_t_10, 0, __pyx_n_u_a);
  __Pyx_INCREF(__pyx_n_u_b);
  __Pyx_GIVEREF(__pyx_n_u_b);
  PyList_SET_ITEM(__pyx_t_10, 1, __pyx_n_u_b);
  __Pyx_INCREF(__pyx_n_u_c);
  __Pyx_GIVEREF(__pyx_n_u_c);
  PyList_SET_ITEM(__pyx_t_10, 2, __pyx_n_u_c);
  __Pyx_DECREF_SET(__pyx_v_sent, ((PyObject*)__pyx_t_10));
  __pyx_t_10 = 0;
+808: 	print("\nwithout estimates")
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u_without_estimates); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
+809: 	chart, msg = plcfrs.parse(sent, grammar, estimates=None)
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_plcfrs, __pyx_n_s_parse); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_sent);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_grammar);
  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_estimates, Py_None) < 0) __PYX_ERR(0, 809, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  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, 809, __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_11 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_11);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 809, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 809, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    #endif
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_10 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 809, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_10)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L19_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_11 = __pyx_t_9(__pyx_t_10); if (unlikely(!__pyx_t_11)) goto __pyx_L19_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_10), 2) < 0) __PYX_ERR(0, 809, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L20_unpacking_done;
    __pyx_L19_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 809, __pyx_L1_error)
    __pyx_L20_unpacking_done:;
  }
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_chart, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_t_6));
  __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_11);
  __pyx_t_11 = 0;
+810: 	print(msg)
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_msg);
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_7, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+811: 	print(chart)
  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(((PyObject *)__pyx_v_chart));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_chart));
  PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_v_chart));
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+812: 	print("\nwith estimates")
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_u_with_estimates); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
+813: 	estchart, msg = plcfrs.parse(sent, grammar, estimates=('SX', outside))
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_plcfrs, __pyx_n_s_parse); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(__pyx_v_sent);
  __Pyx_GIVEREF(__pyx_v_sent);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_sent);
  __Pyx_INCREF(__pyx_v_grammar);
  __Pyx_GIVEREF(__pyx_v_grammar);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_grammar);
  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_n_u_SX);
  __Pyx_GIVEREF(__pyx_n_u_SX);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_n_u_SX);
  __Pyx_INCREF(__pyx_v_outside);
  __Pyx_GIVEREF(__pyx_v_outside);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_outside);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_estimates, __pyx_t_10) < 0) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) {
    PyObject* sequence = __pyx_t_10;
    #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, 813, __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_11 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_11);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    #endif
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_7 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L21_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_11 = __pyx_t_9(__pyx_t_7); if (unlikely(!__pyx_t_11)) goto __pyx_L21_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) __PYX_ERR(0, 813, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L22_unpacking_done;
    __pyx_L21_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 813, __pyx_L1_error)
    __pyx_L22_unpacking_done:;
  }
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8discodop_10containers_Chart))))) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_estchart, ((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_t_6));
  __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_11);
  __pyx_t_11 = 0;
+814: 	print(msg)
  __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_msg);
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+815: 	print(estchart)
  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(((PyObject *)__pyx_v_estchart));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_estchart));
  PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_v_estchart));
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+816: 	print('items avoided:')
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_items_avoided); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
+817: 	print('items avoided:', chart.numitems() - estchart.numitems())
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_numitems); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  if (__pyx_t_6) {
    __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 817, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __pyx_t_10 = __Pyx_PyObject_CallNoArg(__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 817, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_estchart), __pyx_n_s_numitems); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __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_11 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 817, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else {
    __pyx_t_11 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 817, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Subtract(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_INCREF(__pyx_kp_u_items_avoided);
  __Pyx_GIVEREF(__pyx_kp_u_items_avoided);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_u_items_avoided);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 818: 
+819: __all__ = ['Item', 'getestimates', 'getpcfgestimates', 'inside', 'outsidelr',
  __pyx_t_3 = PyList_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_u_Item);
  __Pyx_GIVEREF(__pyx_n_u_Item);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_Item);
  __Pyx_INCREF(__pyx_n_u_getestimates);
  __Pyx_GIVEREF(__pyx_n_u_getestimates);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_getestimates);
  __Pyx_INCREF(__pyx_n_u_getpcfgestimates);
  __Pyx_GIVEREF(__pyx_n_u_getpcfgestimates);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_u_getpcfgestimates);
  __Pyx_INCREF(__pyx_n_u_inside_2);
  __Pyx_GIVEREF(__pyx_n_u_inside_2);
  PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_u_inside_2);
  __Pyx_INCREF(__pyx_n_u_outsidelr);
  __Pyx_GIVEREF(__pyx_n_u_outsidelr);
  PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_u_outsidelr);
  __Pyx_INCREF(__pyx_n_u_simpleinside);
  __Pyx_GIVEREF(__pyx_n_u_simpleinside);
  PyList_SET_ITEM(__pyx_t_3, 5, __pyx_n_u_simpleinside);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_3) < 0) __PYX_ERR(0, 819, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 820: 		'simpleinside']