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: plcfrs.cpp
+0001: """Parser for string-rewriting Linear Context-Free Rewriting Systems.
__pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0002:
0003: Expects binarized, epsilon-free, monotone LCFRS grammars."""
0004: from __future__ import print_function
+0005: import re
__pyx_t_4 = __Pyx_Import(__pyx_n_s_re, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_4) < 0) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0006: import logging
__pyx_t_4 = __Pyx_Import(__pyx_n_s_logging, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_logging, __pyx_t_4) < 0) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0007: import numpy as np
__pyx_t_4 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_4) < 0) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
0008: cimport cython
0009: from cython.operator cimport postincrement, dereference
0010: from libc.math cimport HUGE_VAL as INFINITY
0011: include "constants.pxi"
0012:
+0013: cdef SmallChartItem COMPONENT = SmallChartItem(0, 0)
__pyx_v_8discodop_6plcfrs_COMPONENT = SmallChartItem(0, 0);
+0014: cdef SmallChartItem NONE = SmallChartItem(0, 0)
__pyx_v_8discodop_6plcfrs_NONE = SmallChartItem(0, 0);
+0015: cdef FatChartItem FATNONE = FatChartItem(0)
__pyx_v_8discodop_6plcfrs_FATNONE = FatChartItem(0);
+0016: cdef FatChartItem FATCOMPONENT = FatChartItem(0)
__pyx_v_8discodop_6plcfrs_FATCOMPONENT = FatChartItem(0);
0017:
+0018: cdef class LCFRSChart(Chart):
struct __pyx_vtabstruct_8discodop_6plcfrs_LCFRSChart {
struct __pyx_vtabstruct_8discodop_10containers_Chart __pyx_base;
void (*addlexedge)(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *, ItemNo, short);
void (*updateprob)(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *, ItemNo, Prob);
void (*addprob)(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *, ItemNo, Prob);
Prob (*_subtreeprob)(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *, ItemNo);
};
static struct __pyx_vtabstruct_8discodop_6plcfrs_LCFRSChart *__pyx_vtabptr_8discodop_6plcfrs_LCFRSChart;
0019: """A chart for LCFRS grammars. An item is a ChartItem object."""
+0020: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_6plcfrs_10LCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_6plcfrs_10LCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_start = 0;
PyObject *__pyx_v_logprob = 0;
PyObject *__pyx_v_viterbi = 0;
CYTHON_UNUSED PyObject *__pyx_v_itemsestimate = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_sent,&__pyx_n_s_start,&__pyx_n_s_logprob,&__pyx_n_s_viterbi,&__pyx_n_s_itemsestimate,0};
PyObject* values[6] = {0,0,0,0,0,0};
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_8discodop_6plcfrs_10LCFRSChart___init__(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_sent, PyObject *__pyx_v_start, PyObject *__pyx_v_logprob, PyObject *__pyx_v_viterbi, CYTHON_UNUSED PyObject *__pyx_v_itemsestimate) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("discodop.plcfrs.LCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0021: start=None, logprob=True, viterbi=True,
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
+0022: itemsestimate=None):
values[5] = ((PyObject *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_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_sent)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, 1); __PYX_ERR(0, 20, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start);
if (value) { values[2] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 3:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_logprob);
if (value) { values[3] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viterbi);
if (value) { values[4] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 5:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsestimate);
if (value) { values[5] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 20, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
__pyx_v_sent = ((PyObject*)values[1]);
__pyx_v_start = values[2];
__pyx_v_logprob = values[3];
__pyx_v_viterbi = values[4];
__pyx_v_itemsestimate = values[5];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 20, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.LCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_grammar), __pyx_ptype_8discodop_10containers_Grammar, 1, "grammar", 0))) __PYX_ERR(0, 20, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 20, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_10LCFRSChart___init__(((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi, __pyx_v_itemsestimate);
+0023: self.grammar = grammar
__Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); __Pyx_GOTREF(__pyx_v_self->__pyx_base.grammar); __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.grammar)); __pyx_v_self->__pyx_base.grammar = __pyx_v_grammar;
+0024: self.sent = sent
__Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); __Pyx_GOTREF(__pyx_v_self->__pyx_base.sent); __Pyx_DECREF(__pyx_v_self->__pyx_base.sent); __pyx_v_self->__pyx_base.sent = __pyx_v_sent;
+0025: self.lensent = len(sent)
if (unlikely(__pyx_v_sent == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
__PYX_ERR(0, 25, __pyx_L1_error)
}
__pyx_t_1 = PyList_GET_SIZE(__pyx_v_sent); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 25, __pyx_L1_error)
__pyx_v_self->__pyx_base.lensent = __pyx_t_1;
+0026: self.start = grammar.toid[grammar.start if start is None else start]
__pyx_t_3 = (__pyx_v_start == Py_None);
if ((__pyx_t_3 != 0)) {
__Pyx_INCREF(__pyx_v_grammar->start);
__pyx_t_2 = __pyx_v_grammar->start;
} else {
__Pyx_INCREF(__pyx_v_start);
__pyx_t_2 = __pyx_v_start;
}
__pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_grammar->toid), __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_5 = __Pyx_PyInt_As_uint32_t(__pyx_t_4); if (unlikely((__pyx_t_5 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_self->__pyx_base.start = __pyx_t_5;
+0027: self.logprob = logprob
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_logprob); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) __pyx_v_self->__pyx_base.logprob = __pyx_t_3;
+0028: self.viterbi = viterbi
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_viterbi); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error) __pyx_v_self->__pyx_base.viterbi = __pyx_t_3;
0029:
+0030: cdef void addlexedge(self, ItemNo itemidx, short wordidx):
static void __pyx_f_8discodop_6plcfrs_10LCFRSChart_addlexedge(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, short __pyx_v_wordidx) {
Edge __pyx_v_edge;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("addlexedge", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.LCFRSChart.addlexedge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
0031: """Add lexical edge."""
0032: cdef Edge edge
+0033: edge.rule = NULL
__pyx_v_edge.rule = NULL;
+0034: edge.pos.mid = wordidx + 1
__pyx_v_edge.pos.mid = (__pyx_v_wordidx + 1);
+0035: self.parseforest[itemidx].push_back(edge)
try {
(__pyx_v_self->__pyx_base.parseforest[__pyx_v_itemidx]).push_back(__pyx_v_edge);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 35, __pyx_L1_error)
}
0036:
+0037: cdef void updateprob(self, ItemNo itemidx, Prob prob):
static void __pyx_f_8discodop_6plcfrs_10LCFRSChart_updateprob(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Prob __pyx_v_prob) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("updateprob", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
+0038: if prob < self.probs[itemidx]:
__pyx_t_1 = ((__pyx_v_prob < (__pyx_v_self->__pyx_base.probs[__pyx_v_itemidx])) != 0);
if (__pyx_t_1) {
/* … */
}
+0039: self.probs[itemidx] = prob
(__pyx_v_self->__pyx_base.probs[__pyx_v_itemidx]) = __pyx_v_prob;
0040:
+0041: cdef void addprob(self, ItemNo itemidx, Prob prob):
static void __pyx_f_8discodop_6plcfrs_10LCFRSChart_addprob(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Prob __pyx_v_prob) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("addprob", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
+0042: self.probs[itemidx] += prob
__pyx_t_1 = __pyx_v_itemidx; (__pyx_v_self->__pyx_base.probs[__pyx_t_1]) = ((__pyx_v_self->__pyx_base.probs[__pyx_t_1]) + __pyx_v_prob);
0043:
+0044: cdef Prob _subtreeprob(self, ItemNo itemidx):
static Prob __pyx_f_8discodop_6plcfrs_10LCFRSChart__subtreeprob(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0045: return self.probs[itemidx]
__pyx_r = (__pyx_v_self->__pyx_base.probs[__pyx_v_itemidx]); goto __pyx_L0;
0046:
+0047: cdef Prob subtreeprob(self, ItemNo itemidx):
static Prob __pyx_f_8discodop_6plcfrs_10LCFRSChart_subtreeprob(struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0048: return self.probs[itemidx]
__pyx_r = (__pyx_v_self->__pyx_base.probs[__pyx_v_itemidx]); goto __pyx_L0;
0049:
+0050: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_6plcfrs_10LCFRSChart_label(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("label", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.LCFRSChart.label", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0051: raise NotImplementedError
__Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
__PYX_ERR(0, 51, __pyx_L1_error)
0052:
0053:
0054: @cython.final
+0055: cdef class SmallLCFRSChart(LCFRSChart):
struct __pyx_vtabstruct_8discodop_6plcfrs_SmallLCFRSChart {
struct __pyx_vtabstruct_8discodop_6plcfrs_LCFRSChart __pyx_base;
SmallChartItem (*_root)(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *);
Label (*_label)(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *, ItemNo);
void (*addedge)(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *, ItemNo, ItemNo, SmallChartItem &, ProbRule *);
};
static struct __pyx_vtabstruct_8discodop_6plcfrs_SmallLCFRSChart *__pyx_vtabptr_8discodop_6plcfrs_SmallLCFRSChart;
static SmallChartItem __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__root(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *);
static Label __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__label(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *, ItemNo);
static void __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_addedge(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *, ItemNo, ItemNo, SmallChartItem &, ProbRule *);
0056: """For sentences that fit into a single machine word."""
+0057: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_start = 0;
PyObject *__pyx_v_logprob = 0;
PyObject *__pyx_v_viterbi = 0;
PyObject *__pyx_v_itemsestimate = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_sent,&__pyx_n_s_start,&__pyx_n_s_logprob,&__pyx_n_s_viterbi,&__pyx_n_s_itemsestimate,0};
PyObject* values[6] = {0,0,0,0,0,0};
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart___init__(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_sent, PyObject *__pyx_v_start, PyObject *__pyx_v_logprob, PyObject *__pyx_v_viterbi, PyObject *__pyx_v_itemsestimate) {
SmallChartItem __pyx_v_tmp;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
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_5);
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0058: start=None, logprob=True, viterbi=True,
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
+0059: itemsestimate=None):
values[5] = ((PyObject *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_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_sent)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, 1); __PYX_ERR(0, 57, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start);
if (value) { values[2] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 3:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_logprob);
if (value) { values[3] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viterbi);
if (value) { values[4] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 5:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsestimate);
if (value) { values[5] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 57, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
__pyx_v_sent = ((PyObject*)values[1]);
__pyx_v_start = values[2];
__pyx_v_logprob = values[3];
__pyx_v_viterbi = values[4];
__pyx_v_itemsestimate = values[5];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 57, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_grammar), __pyx_ptype_8discodop_10containers_Grammar, 1, "grammar", 0))) __PYX_ERR(0, 57, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 57, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart___init__(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi, __pyx_v_itemsestimate);
+0060: cdef SmallChartItem tmp = SmallChartItem(0, 0)
__pyx_v_tmp = SmallChartItem(0, 0);
+0061: super(SmallLCFRSChart, self).__init__(
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_ptype_8discodop_6plcfrs_SmallLCFRSChart)); __Pyx_GIVEREF(((PyObject *)__pyx_ptype_8discodop_6plcfrs_SmallLCFRSChart)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_8discodop_6plcfrs_SmallLCFRSChart)); __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0062: grammar, sent, start, logprob, viterbi)
__pyx_t_3 = NULL; __pyx_t_4 = 0; 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); __pyx_t_4 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[6] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[6] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_3) { __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; } __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_grammar)); __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_sent); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_start); __Pyx_INCREF(__pyx_v_logprob); __Pyx_GIVEREF(__pyx_v_logprob); PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_logprob); __Pyx_INCREF(__pyx_v_viterbi); __Pyx_GIVEREF(__pyx_v_viterbi); PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_viterbi); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0063: if itemsestimate is not None:
__pyx_t_6 = (__pyx_v_itemsestimate != Py_None);
__pyx_t_7 = (__pyx_t_6 != 0);
if (__pyx_t_7) {
/* … */
}
+0064: self.items.reserve(itemsestimate)
__pyx_t_8 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L1_error) __pyx_v_self->items.reserve(__pyx_t_8);
0065: # NB: self.itemindex does not support reserve
+0066: self.parseforest.reserve(itemsestimate)
__pyx_t_9 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.parseforest.reserve(__pyx_t_9);
+0067: self.probs.reserve(itemsestimate)
__pyx_t_10 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.probs.reserve(__pyx_t_10);
0068: # first item is a sentinel
+0069: self.items.push_back(tmp)
try {
__pyx_v_self->items.push_back(__pyx_v_tmp);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 69, __pyx_L1_error)
}
+0070: self.itemindex[tmp] = 0
(__pyx_v_self->itemindex[__pyx_v_tmp]) = 0;
+0071: self.probs.push_back(INFINITY)
try {
__pyx_v_self->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 71, __pyx_L1_error)
}
0072:
+0073: cdef void addedge(self, ItemNo itemidx, ItemNo leftitemidx,
static void __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_addedge(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, CYTHON_UNUSED ItemNo __pyx_v_leftitemidx, SmallChartItem &__pyx_v_left, ProbRule *__pyx_v_rule) {
Edge __pyx_v_edge;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("addedge", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.SmallLCFRSChart.addedge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
0074: SmallChartItem& left, ProbRule *rule):
0075: """Add new edge."""
0076: cdef Edge edge
+0077: edge.rule = rule
__pyx_v_edge.rule = __pyx_v_rule;
+0078: edge.pos.lvec = 0UL
__pyx_v_edge.pos.lvec = 0UL;
+0079: edge.pos.lvec = left.vec
__pyx_t_1 = __pyx_v_left.vec; __pyx_v_edge.pos.lvec = __pyx_t_1;
+0080: self.parseforest[itemidx].push_back(edge)
try {
(__pyx_v_self->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).push_back(__pyx_v_edge);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 80, __pyx_L1_error)
}
0081:
+0082: cdef ItemNo _left(self, ItemNo itemidx_unused, Edge edge):
static ItemNo __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__left(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx_unused, Edge __pyx_v_edge) {
SmallChartItem __pyx_v_tmp;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_left", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0083: cdef SmallChartItem tmp
+0084: if edge.rule is NULL:
__pyx_t_1 = ((__pyx_v_edge.rule == NULL) != 0);
if (__pyx_t_1) {
/* … */
}
+0085: return 0
__pyx_r = 0;
goto __pyx_L0;
+0086: tmp.label = edge.rule.rhs1
__pyx_t_2 = __pyx_v_edge.rule->rhs1; __pyx_v_tmp.label = __pyx_t_2;
+0087: tmp.vec = edge.pos.lvec
__pyx_t_3 = __pyx_v_edge.pos.lvec; __pyx_v_tmp.vec = __pyx_t_3;
+0088: return self.itemindex[tmp]
__pyx_r = (__pyx_v_self->itemindex[__pyx_v_tmp]); goto __pyx_L0;
0089:
+0090: cdef ItemNo _right(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__right(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
SmallChartItem __pyx_v_tmp;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_right", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0091: cdef SmallChartItem tmp
+0092: if edge.rule is NULL or edge.rule.rhs2 == 0:
__pyx_t_2 = ((__pyx_v_edge.rule == NULL) != 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = ((__pyx_v_edge.rule->rhs2 == 0) != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0093: return 0
__pyx_r = 0;
goto __pyx_L0;
+0094: tmp.label = edge.rule.rhs2
__pyx_t_3 = __pyx_v_edge.rule->rhs2; __pyx_v_tmp.label = __pyx_t_3;
+0095: tmp.vec = self.items[itemidx].vec ^ edge.pos.lvec
__pyx_v_tmp.vec = ((__pyx_v_self->items[__pyx_v_itemidx]).vec ^ __pyx_v_edge.pos.lvec);
+0096: return self.itemindex[tmp]
__pyx_r = (__pyx_v_self->itemindex[__pyx_v_tmp]); goto __pyx_L0;
0097:
+0098: cdef SmallChartItem _root(self):
static SmallChartItem __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__root(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self) {
SmallChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_root", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0099: return SmallChartItem(self.start, (1UL << self.lensent) - 1)
__pyx_r = SmallChartItem(__pyx_v_self->__pyx_base.__pyx_base.start, ((1UL << __pyx_v_self->__pyx_base.__pyx_base.lensent) - 1)); goto __pyx_L0;
0100:
+0101: def root(self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_15SmallLCFRSChart_2root[] = "SmallLCFRSChart.root(self)";
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_2root(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_2root(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.root", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0102: if self.itemindex.find(self._root()) == self.itemindex.end():
__pyx_t_1 = ((__pyx_v_self->itemindex.find(__pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__root(__pyx_v_self)) == __pyx_v_self->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
}
+0103: return 0
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_0); __pyx_r = __pyx_int_0; goto __pyx_L0;
+0104: return self.itemindex[self._root()]
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->itemindex[__pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__root(__pyx_v_self)])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
0105:
+0106: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_label(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0107: return self.items[itemidx].label
__pyx_r = (__pyx_v_self->items[__pyx_v_itemidx]).label; goto __pyx_L0;
0108:
+0109: cdef Label _label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__label(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0110: return self.items[itemidx].label
__pyx_r = (__pyx_v_self->items[__pyx_v_itemidx]).label; goto __pyx_L0;
0111:
+0112: cdef ItemNo getitemidx(self, uint64_t n):
static ItemNo __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_getitemidx(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, uint64_t __pyx_v_n) {
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("getitemidx", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0113: """Get itemidx of n'th item."""
+0114: return n
__pyx_r = __pyx_v_n; goto __pyx_L0;
0115:
+0116: def indices(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_15SmallLCFRSChart_4indices[] = "SmallLCFRSChart.indices(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx) {
ItemNo __pyx_v_itemidx;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("indices (wrapper)", 0);
assert(__pyx_arg_itemidx); {
__pyx_v_itemidx = __Pyx_PyInt_As_uint32_t(__pyx_arg_itemidx); if (unlikely((__pyx_v_itemidx == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_4indices(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_4indices(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
SmallChartItem __pyx_v_item;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("indices", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0117: cdef SmallChartItem item = self.items[itemidx]
__pyx_v_item = (__pyx_v_self->items[__pyx_v_itemidx]);
+0118: return [n for n in range(len(self.sent)) if testbit(item.vec, n)]
__Pyx_XDECREF(__pyx_r); { /* enter inner scope */ Py_ssize_t __pyx_7genexpr__pyx_v_n; __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_v_self->__pyx_base.__pyx_base.sent; __Pyx_INCREF(__pyx_t_2); if (unlikely(__pyx_t_2 == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 118, __pyx_L1_error) } __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_7genexpr__pyx_v_n = __pyx_t_4; __pyx_t_5 = (__pyx_fuse_3__pyx_f_8discodop_3bit_testbit(__pyx_v_item.vec, __pyx_7genexpr__pyx_v_n) != 0); if (__pyx_t_5) { __pyx_t_2 = PyInt_FromSsize_t(__pyx_7genexpr__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } } } /* exit inner scope */ __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
0119:
+0120: def itemstr(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_15SmallLCFRSChart_6itemstr[] = "SmallLCFRSChart.itemstr(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx) {
ItemNo __pyx_v_itemidx;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr (wrapper)", 0);
assert(__pyx_arg_itemidx); {
__pyx_v_itemidx = __Pyx_PyInt_As_uint32_t(__pyx_arg_itemidx); if (unlikely((__pyx_v_itemidx == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 120, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_6itemstr(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_6itemstr(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr", 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_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0121: return '%s[%s]' % (
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 121, __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;
+0122: self.grammar.tolabel[self._label(itemidx)],
__pyx_t_1 = __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__label(__pyx_v_self, __pyx_v_itemidx); __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->tolabel), __pyx_t_1, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0;
+0123: bin(self.items[itemidx].vec)[2:].zfill(self.lensent)[::-1])
__pyx_t_4 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->items[__pyx_v_itemidx]).vec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_bin, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_4, 2, 0, NULL, NULL, &__pyx_slice_, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zfill); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyInt_From_short(__pyx_v_self->__pyx_base.__pyx_base.lensent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } if (!__pyx_t_6) { __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_3); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif { __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_slice_ = PySlice_New(__pyx_int_2, Py_None, Py_None); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice_); __Pyx_GIVEREF(__pyx_slice_); __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_slice__2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_slice__2 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__2); __Pyx_GIVEREF(__pyx_slice__2);
0124:
+0125: def hasnode(self, node, Whitelist whitelist=None):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_9hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_15SmallLCFRSChart_8hasnode[] = "SmallLCFRSChart.hasnode(self, node, Whitelist whitelist=None)";
static PyObject *__pyx_pw_8discodop_6plcfrs_15SmallLCFRSChart_9hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_node = 0;
struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_node,&__pyx_n_s_whitelist,0};
PyObject* values[2] = {0,0};
values[1] = (PyObject *)((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_node)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_whitelist);
if (value) { values[1] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hasnode") < 0)) __PYX_ERR(0, 125, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_node = values[0];
__pyx_v_whitelist = ((struct __pyx_obj_8discodop_10containers_Whitelist *)values[1]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("hasnode", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 125, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_whitelist), __pyx_ptype_8discodop_10containers_Whitelist, 1, "whitelist", 0))) __PYX_ERR(0, 125, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_8hasnode(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_self), __pyx_v_node, __pyx_v_whitelist);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_8discodop_6plcfrs_15SmallLCFRSChart_7hasnode_2generator(__pyx_CoroutineObject *__pyx_generator, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_8hasnode(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, PyObject *__pyx_v_node, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode *__pyx_cur_scope;
SmallChartItem __pyx_v_tmp;
PyObject *__pyx_v_label = NULL;
PyObject *__pyx_v_vec = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode", 0);
__pyx_cur_scope = (struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode *)__pyx_tp_new_8discodop_6plcfrs___pyx_scope_struct__hasnode(__pyx_ptype_8discodop_6plcfrs___pyx_scope_struct__hasnode, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 125, __pyx_L1_error)
} else {
__Pyx_GOTREF(__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_v_node = __pyx_v_node;
__Pyx_INCREF(__pyx_cur_scope->__pyx_v_node);
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_node);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_label);
__Pyx_XDECREF(__pyx_v_vec);
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode {
PyObject_HEAD
PyObject *__pyx_v_node;
};
0126: cdef SmallChartItem tmp
+0127: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_PyThreadState_assign
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L6_except_return:;
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+0128: label = self.grammar.toid[node.label]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 128, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->toid), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_label = __pyx_t_5; __pyx_t_5 = 0;
+0129: except KeyError:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); if (__pyx_t_6) { __Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 129, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_7);
+0130: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_except_return; } goto __pyx_L5_except_error; __pyx_L5_except_error:;
+0131: vec = sum(1 << n for n in node.leaves())
static PyObject *__pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_7hasnode_genexpr(PyObject *__pyx_self) {
struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("genexpr", 0);
__pyx_cur_scope = (struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct_1_genexpr *)__pyx_tp_new_8discodop_6plcfrs___pyx_scope_struct_1_genexpr(__pyx_ptype_8discodop_6plcfrs___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct_1_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
__PYX_ERR(0, 131, __pyx_L1_error)
} else {
__Pyx_GOTREF(__pyx_cur_scope);
}
__pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode *) __pyx_self;
__Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
{
__pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_8discodop_6plcfrs_15SmallLCFRSChart_7hasnode_2generator, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_hasnode_locals_genexpr, __pyx_n_s_discodop_plcfrs); if (unlikely(!gen)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
}
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("discodop.plcfrs.SmallLCFRSChart.hasnode.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_gb_8discodop_6plcfrs_15SmallLCFRSChart_7hasnode_2generator(__pyx_CoroutineObject *__pyx_generator, PyObject *__pyx_sent_value) /* generator body */
{
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("None", 0);
__pyx_L3_first_run:;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 131, __pyx_L1_error)
if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_node)) { __Pyx_RaiseClosureNameError("node"); __PYX_ERR(0, 131, __pyx_L1_error) }
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __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, 131, __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, 131, __pyx_L1_error)
}
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
__pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
__pyx_t_5 = NULL;
} else {
__pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 131, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
for (;;) {
if (likely(!__pyx_t_5)) {
if (likely(PyList_CheckExact(__pyx_t_2))) {
if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 131, __pyx_L1_error)
#else
__pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
#endif
} else {
if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
__pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 131, __pyx_L1_error)
#else
__pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
#endif
}
} else {
__pyx_t_1 = __pyx_t_5(__pyx_t_2);
if (unlikely(!__pyx_t_1)) {
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
else __PYX_ERR(0, 131, __pyx_L1_error)
}
break;
}
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_n);
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_n, __pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_t_1 = 0;
__pyx_t_1 = PyNumber_Lshift(__pyx_int_1, __pyx_cur_scope->__pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
__Pyx_XGIVEREF(__pyx_t_2);
__pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
__pyx_cur_scope->__pyx_t_1 = __pyx_t_4;
__pyx_cur_scope->__pyx_t_2 = __pyx_t_5;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
/* return from generator, yielding value */
__pyx_generator->resume_label = 1;
return __pyx_r;
__pyx_L6_resume_from_yield:;
__pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
__pyx_cur_scope->__pyx_t_0 = 0;
__Pyx_XGOTREF(__pyx_t_2);
__pyx_t_4 = __pyx_cur_scope->__pyx_t_1;
__pyx_t_5 = __pyx_cur_scope->__pyx_t_2;
if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 131, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
/* function exit code */
PyErr_SetNone(PyExc_StopIteration);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_L0:;
__Pyx_XDECREF(__pyx_r); __pyx_r = 0;
__pyx_generator->resume_label = -1;
__Pyx_Coroutine_clear((PyObject*)__pyx_generator);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_7 = __pyx_pf_8discodop_6plcfrs_15SmallLCFRSChart_7hasnode_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 131, __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 = 0;
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_vec = __pyx_t_7;
__pyx_t_7 = 0;
/* … */
struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct_1_genexpr {
PyObject_HEAD
struct __pyx_obj_8discodop_6plcfrs___pyx_scope_struct__hasnode *__pyx_outer_scope;
PyObject *__pyx_v_n;
PyObject *__pyx_t_0;
Py_ssize_t __pyx_t_1;
PyObject *(*__pyx_t_2)(PyObject *);
};
+0132: tmp = SmallChartItem(label, vec)
__pyx_t_8 = __Pyx_PyInt_As_uint32_t(__pyx_v_label); if (unlikely((__pyx_t_8 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 132, __pyx_L1_error) __pyx_t_9 = __Pyx_PyInt_As_uint64_t(__pyx_v_vec); if (unlikely((__pyx_t_9 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 132, __pyx_L1_error) __pyx_v_tmp = SmallChartItem(__pyx_t_8, __pyx_t_9);
+0133: if whitelist is not None:
__pyx_t_10 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_11 = (__pyx_t_10 != 0);
if (__pyx_t_11) {
/* … */
}
+0134: tmp.label = whitelist.mapping[label]
__pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_v_label); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 134, __pyx_L1_error) __pyx_v_tmp.label = (__pyx_v_whitelist->mapping[__pyx_t_12]);
+0135: return whitelist.small[tmp.label].count(tmp) != 0
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __Pyx_PyBool_FromLong(((__pyx_v_whitelist->small[__pyx_v_tmp.label]).count(__pyx_v_tmp) != 0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0;
+0136: return self.itemindex[tmp] != 0
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __Pyx_PyBool_FromLong(((__pyx_v_self->itemindex[__pyx_v_tmp]) != 0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0;
0137:
+0138: cdef SmallChartItem asSmallChartItem(self, ItemNo itemidx):
static SmallChartItem __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_asSmallChartItem(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
SmallChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asSmallChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0139: return self.items[itemidx]
__pyx_r = (__pyx_v_self->items[__pyx_v_itemidx]); goto __pyx_L0;
0140:
+0141: cdef FatChartItem asFatChartItem(self, ItemNo itemidx):
static FatChartItem __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_asFatChartItem(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx) {
FatChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asFatChartItem", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.SmallLCFRSChart.asFatChartItem", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_pretend_to_initialize(&__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0142: raise ValueError
__Pyx_Raise(__pyx_builtin_ValueError, 0, 0, 0);
__PYX_ERR(0, 142, __pyx_L1_error)
0143:
+0144: cdef size_t asCFGspan(self, ItemNo itemidx):
static size_t __pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_asCFGspan(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
SmallChartItem __pyx_v_sitem;
int __pyx_v_start;
int __pyx_v_end;
size_t __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asCFGspan", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.SmallLCFRSChart.asCFGspan", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0145: cdef SmallChartItem sitem = self.items[itemidx]
__pyx_v_sitem = (__pyx_v_self->items[__pyx_v_itemidx]);
+0146: cdef int start = nextset(sitem.vec, 0)
__pyx_v_start = __pyx_f_8discodop_3bit_nextset(__pyx_v_sitem.vec, 0);
+0147: cdef int end = nextunset(sitem.vec, start)
__pyx_v_end = __pyx_f_8discodop_3bit_nextunset(__pyx_v_sitem.vec, __pyx_v_start);
+0148: assert nextset(sitem.vec, end) == -1
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((__pyx_f_8discodop_3bit_nextset(__pyx_v_sitem.vec, __pyx_v_end) == -1L) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 148, __pyx_L1_error)
}
}
#endif
+0149: assert 0 <= start < end <= self.lensent
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_1 = (0 <= __pyx_v_start);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_start < __pyx_v_end);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_end <= __pyx_v_self->__pyx_base.__pyx_base.lensent);
}
}
if (unlikely(!(__pyx_t_1 != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 149, __pyx_L1_error)
}
}
#endif
+0150: return compactcellidx(start, end, self.lensent, 1)
__pyx_r = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_start, __pyx_v_end, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1); goto __pyx_L0;
0151:
0152:
0153: @cython.final
+0154: cdef class FatLCFRSChart(LCFRSChart):
struct __pyx_vtabstruct_8discodop_6plcfrs_FatLCFRSChart {
struct __pyx_vtabstruct_8discodop_6plcfrs_LCFRSChart __pyx_base;
FatChartItem (*_root)(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *);
Label (*_label)(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *, ItemNo);
void (*addedge)(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *, ItemNo, ItemNo, FatChartItem &, ProbRule *);
};
static struct __pyx_vtabstruct_8discodop_6plcfrs_FatLCFRSChart *__pyx_vtabptr_8discodop_6plcfrs_FatLCFRSChart;
static FatChartItem __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__root(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *);
static Label __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__label(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *, ItemNo);
static void __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_addedge(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *, ItemNo, ItemNo, FatChartItem &, ProbRule *);
0155: """LCFRS chart that supports longer sentences."""
+0156: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_start = 0;
PyObject *__pyx_v_logprob = 0;
PyObject *__pyx_v_viterbi = 0;
PyObject *__pyx_v_itemsestimate = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_grammar,&__pyx_n_s_sent,&__pyx_n_s_start,&__pyx_n_s_logprob,&__pyx_n_s_viterbi,&__pyx_n_s_itemsestimate,0};
PyObject* values[6] = {0,0,0,0,0,0};
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart___init__(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_sent, PyObject *__pyx_v_start, PyObject *__pyx_v_logprob, PyObject *__pyx_v_viterbi, PyObject *__pyx_v_itemsestimate) {
FatChartItem __pyx_v_tmp;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
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_5);
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0157: start=None, logprob=True, viterbi=True,
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
+0158: itemsestimate=None):
values[5] = ((PyObject *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_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_sent)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, 1); __PYX_ERR(0, 156, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start);
if (value) { values[2] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 3:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_logprob);
if (value) { values[3] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viterbi);
if (value) { values[4] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 5:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsestimate);
if (value) { values[5] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 156, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[0]);
__pyx_v_sent = ((PyObject*)values[1]);
__pyx_v_start = values[2];
__pyx_v_logprob = values[3];
__pyx_v_viterbi = values[4];
__pyx_v_itemsestimate = values[5];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 156, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__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_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 156, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart___init__(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi, __pyx_v_itemsestimate);
+0159: super(FatLCFRSChart, self).__init__(
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_ptype_8discodop_6plcfrs_FatLCFRSChart)); __Pyx_GIVEREF(((PyObject *)__pyx_ptype_8discodop_6plcfrs_FatLCFRSChart)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_8discodop_6plcfrs_FatLCFRSChart)); __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0160: grammar, sent, start, logprob, viterbi)
__pyx_t_3 = NULL; __pyx_t_4 = 0; 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); __pyx_t_4 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[6] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[6] = {__pyx_t_3, ((PyObject *)__pyx_v_grammar), __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_3) { __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; } __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_grammar)); __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_sent); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_start); __Pyx_INCREF(__pyx_v_logprob); __Pyx_GIVEREF(__pyx_v_logprob); PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_logprob); __Pyx_INCREF(__pyx_v_viterbi); __Pyx_GIVEREF(__pyx_v_viterbi); PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_viterbi); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0161: cdef FatChartItem tmp = FatChartItem(0)
__pyx_v_tmp = FatChartItem(0);
+0162: if itemsestimate is not None:
__pyx_t_6 = (__pyx_v_itemsestimate != Py_None);
__pyx_t_7 = (__pyx_t_6 != 0);
if (__pyx_t_7) {
/* … */
}
+0163: self.items.reserve(itemsestimate)
__pyx_t_8 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 163, __pyx_L1_error) __pyx_v_self->items.reserve(__pyx_t_8);
0164: # NB: self.itemindex does not support reserve
+0165: self.parseforest.reserve(itemsestimate)
__pyx_t_9 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.parseforest.reserve(__pyx_t_9);
+0166: self.probs.reserve(itemsestimate)
__pyx_t_10 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 166, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.probs.reserve(__pyx_t_10);
+0167: self.items.push_back(tmp) # sentinel
try {
__pyx_v_self->items.push_back(__pyx_v_tmp);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 167, __pyx_L1_error)
}
+0168: self.itemindex[tmp] = 0 # sentinel
(__pyx_v_self->itemindex[__pyx_v_tmp]) = 0;
+0169: self.probs.push_back(INFINITY)
try {
__pyx_v_self->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 169, __pyx_L1_error)
}
0170:
+0171: cdef void addedge(self, ItemNo itemidx, ItemNo leftitemidx,
static void __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_addedge(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, ItemNo __pyx_v_leftitemidx, CYTHON_UNUSED FatChartItem &__pyx_v_left, ProbRule *__pyx_v_rule) {
Edge __pyx_v_edge;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("addedge", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.FatLCFRSChart.addedge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
0172: FatChartItem& left, ProbRule *rule):
0173: """Add new edge and update viterbi probability."""
0174: cdef Edge edge
+0175: edge.rule = rule
__pyx_v_edge.rule = __pyx_v_rule;
+0176: edge.pos.lvec = 0UL
__pyx_v_edge.pos.lvec = 0UL;
+0177: edge.pos.lidx = leftitemidx
__pyx_v_edge.pos.lidx = __pyx_v_leftitemidx;
+0178: self.parseforest[itemidx].push_back(edge)
try {
(__pyx_v_self->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).push_back(__pyx_v_edge);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 178, __pyx_L1_error)
}
0179:
+0180: cdef ItemNo _left(self, ItemNo itemidx_unused, Edge edge):
static ItemNo __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__left(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx_unused, Edge __pyx_v_edge) {
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_left", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0181: if edge.rule is NULL:
__pyx_t_1 = ((__pyx_v_edge.rule == NULL) != 0);
if (__pyx_t_1) {
/* … */
}
+0182: return 0
__pyx_r = 0;
goto __pyx_L0;
+0183: return edge.pos.lidx
__pyx_r = __pyx_v_edge.pos.lidx; goto __pyx_L0;
0184:
+0185: cdef ItemNo _right(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__right(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
FatChartItem __pyx_v_tmp;
size_t __pyx_v_n;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_right", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0186: cdef FatChartItem tmp
0187: cdef size_t n
+0188: if edge.rule is NULL or edge.rule.rhs2 == 0:
__pyx_t_2 = ((__pyx_v_edge.rule == NULL) != 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = ((__pyx_v_edge.rule->rhs2 == 0) != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+0189: return 0
__pyx_r = 0;
goto __pyx_L0;
+0190: tmp = self.items[edge.pos.lidx]
__pyx_v_tmp = (__pyx_v_self->items[__pyx_v_edge.pos.lidx]);
+0191: tmp.label = edge.rule.rhs2
__pyx_t_3 = __pyx_v_edge.rule->rhs2; __pyx_v_tmp.label = __pyx_t_3;
+0192: for n in range(SLOTS):
for (__pyx_t_4 = 0; __pyx_t_4 < 2; __pyx_t_4+=1) {
__pyx_v_n = __pyx_t_4;
+0193: tmp.vec[n] ^= self.items[itemidx].vec[n]
__pyx_t_5 = __pyx_v_n;
(__pyx_v_tmp.vec[__pyx_t_5]) = ((__pyx_v_tmp.vec[__pyx_t_5]) ^ ((__pyx_v_self->items[__pyx_v_itemidx]).vec[__pyx_v_n]));
}
+0194: return self.itemindex[tmp]
__pyx_r = (__pyx_v_self->itemindex[__pyx_v_tmp]); goto __pyx_L0;
0195:
+0196: cdef FatChartItem _root(self):
static FatChartItem __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__root(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self) {
FatChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_root", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0197: return CFGtoFatChartItem(self.start, 0, self.lensent)
__pyx_r = __pyx_f_8discodop_10containers_CFGtoFatChartItem(__pyx_v_self->__pyx_base.__pyx_base.start, 0, __pyx_v_self->__pyx_base.__pyx_base.lensent); goto __pyx_L0;
0198:
+0199: def root(self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_13FatLCFRSChart_2root[] = "FatLCFRSChart.root(self)";
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_2root(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_2root(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self) {
FatChartItem __pyx_v_tmp;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.root", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0200: cdef FatChartItem tmp = self._root()
__pyx_v_tmp = __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__root(__pyx_v_self);
+0201: if self.itemindex.find(tmp) == self.itemindex.end():
__pyx_t_1 = ((__pyx_v_self->itemindex.find(__pyx_v_tmp) == __pyx_v_self->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
}
+0202: return 0
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_0); __pyx_r = __pyx_int_0; goto __pyx_L0;
+0203: return self.itemindex[tmp]
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->itemindex[__pyx_v_tmp])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
0204:
+0205: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_label(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0206: return self._label(itemidx) # somehow needed
__pyx_r = __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__label(__pyx_v_self, __pyx_v_itemidx); goto __pyx_L0;
0207:
+0208: cdef Label _label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__label(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0209: return self.items[itemidx].label
__pyx_r = (__pyx_v_self->items[__pyx_v_itemidx]).label; goto __pyx_L0;
0210:
+0211: cdef ItemNo getitemidx(self, uint64_t n):
static ItemNo __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_getitemidx(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, uint64_t __pyx_v_n) {
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("getitemidx", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0212: """Get itemidx of n'th item."""
+0213: return n
__pyx_r = __pyx_v_n; goto __pyx_L0;
0214:
+0215: def indices(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_13FatLCFRSChart_4indices[] = "FatLCFRSChart.indices(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx) {
ItemNo __pyx_v_itemidx;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("indices (wrapper)", 0);
assert(__pyx_arg_itemidx); {
__pyx_v_itemidx = __Pyx_PyInt_As_uint32_t(__pyx_arg_itemidx); if (unlikely((__pyx_v_itemidx == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 215, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_4indices(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_4indices(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
FatChartItem __pyx_v_item;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("indices", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0216: cdef FatChartItem item = self.items[itemidx]
__pyx_v_item = (__pyx_v_self->items[__pyx_v_itemidx]);
+0217: return [n for n in range(len(self.sent)) if TESTBIT(item.vec, n)]
__Pyx_XDECREF(__pyx_r); { /* enter inner scope */ Py_ssize_t __pyx_8genexpr2__pyx_v_n; __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_v_self->__pyx_base.__pyx_base.sent; __Pyx_INCREF(__pyx_t_2); if (unlikely(__pyx_t_2 == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 217, __pyx_L1_error) } __pyx_t_3 = PyList_GET_SIZE(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_8genexpr2__pyx_v_n = __pyx_t_4; __pyx_t_5 = (TESTBIT(__pyx_v_item.vec, __pyx_8genexpr2__pyx_v_n) != 0); if (__pyx_t_5) { __pyx_t_2 = PyInt_FromSsize_t(__pyx_8genexpr2__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } } } /* exit inner scope */ __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
0218:
+0219: def itemstr(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_13FatLCFRSChart_6itemstr[] = "FatLCFRSChart.itemstr(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx) {
ItemNo __pyx_v_itemidx;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr (wrapper)", 0);
assert(__pyx_arg_itemidx); {
__pyx_v_itemidx = __Pyx_PyInt_As_uint32_t(__pyx_arg_itemidx); if (unlikely((__pyx_v_itemidx == ((ItemNo)-1)) && PyErr_Occurred())) __PYX_ERR(0, 219, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_6itemstr(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_6itemstr(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
int __pyx_v_n;
PyObject *__pyx_v_result = 0;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr", 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_6);
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_result);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0220: cdef int n
+0221: cdef str result = ''
__Pyx_INCREF(__pyx_kp_u__3);
__pyx_v_result = __pyx_kp_u__3;
+0222: for n in range(SLOTS):
for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
__pyx_v_n = __pyx_t_1;
+0223: result += bin(self.items[itemidx].vec[n])[2:].zfill(BITSIZE)[::-1]
__pyx_t_3 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->items[__pyx_v_itemidx]).vec[__pyx_v_n])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
__pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_bin, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_3, 2, 0, NULL, NULL, &__pyx_slice__4, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zfill); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_4 = __Pyx_PyInt_From_int(BITSIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = NULL;
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);
}
}
if (!__pyx_t_5) {
__pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_GOTREF(__pyx_t_2);
} else {
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_4};
__pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_2);
__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[2] = {__pyx_t_5, __pyx_t_4};
__pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else
#endif
{
__pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
__Pyx_GIVEREF(__pyx_t_4);
PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_4);
__pyx_t_4 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
}
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
__pyx_slice__4 = PySlice_New(__pyx_int_2, Py_None, Py_None); if (unlikely(!__pyx_slice__4)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_slice__4);
__Pyx_GIVEREF(__pyx_slice__4);
__pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_slice__5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_result, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_2));
__pyx_t_2 = 0;
}
__pyx_slice__5 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 223, __pyx_L1_error)
__Pyx_GOTREF(__pyx_slice__5);
__Pyx_GIVEREF(__pyx_slice__5);
+0224: result = result[:self.lensent]
if (unlikely(__pyx_v_result == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 224, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyUnicode_Substring(__pyx_v_result, 0, __pyx_v_self->__pyx_base.__pyx_base.lensent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_2));
__pyx_t_2 = 0;
+0225: return '%s[%s]' % (self.grammar.tolabel[self._label(itemidx)],
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = __pyx_f_8discodop_6plcfrs_13FatLCFRSChart__label(__pyx_v_self, __pyx_v_itemidx); __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->tolabel), __pyx_t_7, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_INCREF(__pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_result); __pyx_t_2 = 0; /* … */ __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_s_s, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
0226: result)
0227:
+0228: def hasnode(self, node, Whitelist whitelist=None):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_9hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_13FatLCFRSChart_8hasnode[] = "FatLCFRSChart.hasnode(self, node, Whitelist whitelist=None)";
static PyObject *__pyx_pw_8discodop_6plcfrs_13FatLCFRSChart_9hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_node = 0;
struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_node,&__pyx_n_s_whitelist,0};
PyObject* values[2] = {0,0};
values[1] = (PyObject *)((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_node)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_whitelist);
if (value) { values[1] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hasnode") < 0)) __PYX_ERR(0, 228, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_node = values[0];
__pyx_v_whitelist = ((struct __pyx_obj_8discodop_10containers_Whitelist *)values[1]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("hasnode", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 228, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_whitelist), __pyx_ptype_8discodop_10containers_Whitelist, 1, "whitelist", 0))) __PYX_ERR(0, 228, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_8hasnode(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_self), __pyx_v_node, __pyx_v_whitelist);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_13FatLCFRSChart_8hasnode(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, PyObject *__pyx_v_node, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
FatChartItem __pyx_v_tmp;
uint64_t __pyx_v_n;
PyObject *__pyx_v_label = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_label);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0229: cdef FatChartItem tmp
0230: cdef uint64_t n
+0231: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_PyThreadState_assign
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L1_error;
__pyx_L6_except_return:;
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_1);
__Pyx_XGIVEREF(__pyx_t_2);
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+0232: label = self.grammar.toid[node.label]
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 232, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->toid), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_label = __pyx_t_5; __pyx_t_5 = 0;
+0233: except KeyError:
__pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); if (__pyx_t_6) { __Pyx_AddTraceback("discodop.plcfrs.FatLCFRSChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 233, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_7);
+0234: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_except_return; } goto __pyx_L5_except_error; __pyx_L5_except_error:;
+0235: tmp = FatChartItem(label)
__pyx_t_8 = __Pyx_PyInt_As_uint32_t(__pyx_v_label); if (unlikely((__pyx_t_8 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 235, __pyx_L1_error)
__pyx_v_tmp = FatChartItem(__pyx_t_8);
+0236: for n in node.leaves():
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } if (__pyx_t_5) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 236, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 236, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_4))) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 236, __pyx_L1_error) #else __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif } else { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 236, __pyx_L1_error) #else __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif } } else { __pyx_t_7 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 236, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_7); } __pyx_t_11 = __Pyx_PyInt_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_11 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_n = __pyx_t_11; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0237: if n >= SLOTS * sizeof(unsigned long) * 8:
__pyx_t_12 = ((__pyx_v_n >= ((2 * (sizeof(unsigned long))) * 8)) != 0);
if (__pyx_t_12) {
/* … */
}
+0238: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0;
+0239: SETBIT(tmp.vec, n)
SETBIT(__pyx_v_tmp.vec, __pyx_v_n);
+0240: if whitelist is not None:
__pyx_t_12 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_13 = (__pyx_t_12 != 0);
if (__pyx_t_13) {
/* … */
}
+0241: tmp.label = whitelist.mapping[label]
__pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_v_label); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error) __pyx_v_tmp.label = (__pyx_v_whitelist->mapping[__pyx_t_9]);
+0242: return whitelist.fat[tmp.label].count(tmp) != 0
__Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyBool_FromLong(((__pyx_v_whitelist->fat[__pyx_v_tmp.label]).count(__pyx_v_tmp) != 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
+0243: return self.itemindex[tmp] != 0
__Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyBool_FromLong(((__pyx_v_self->itemindex[__pyx_v_tmp]) != 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
0244:
+0245: cdef SmallChartItem asSmallChartItem(self, ItemNo itemidx):
static SmallChartItem __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_asSmallChartItem(CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx) {
SmallChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asSmallChartItem", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.FatLCFRSChart.asSmallChartItem", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_pretend_to_initialize(&__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0246: raise ValueError
__Pyx_Raise(__pyx_builtin_ValueError, 0, 0, 0);
__PYX_ERR(0, 246, __pyx_L1_error)
0247:
+0248: cdef FatChartItem asFatChartItem(self, ItemNo itemidx):
static FatChartItem __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_asFatChartItem(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
FatChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asFatChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0249: return self.items[itemidx]
__pyx_r = (__pyx_v_self->items[__pyx_v_itemidx]); goto __pyx_L0;
0250:
+0251: cdef size_t asCFGspan(self, ItemNo itemidx):
static size_t __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_asCFGspan(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
FatChartItem __pyx_v_fitem;
int __pyx_v_start;
int __pyx_v_end;
size_t __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asCFGspan", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.plcfrs.FatLCFRSChart.asCFGspan", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+0252: cdef FatChartItem fitem = self.items[itemidx]
__pyx_v_fitem = (__pyx_v_self->items[__pyx_v_itemidx]);
+0253: cdef int start = anextset(fitem.vec, 0, SLOTS)
__pyx_v_start = __pyx_f_8discodop_3bit_anextset(__pyx_v_fitem.vec, 0, 2);
+0254: cdef int end = anextunset(fitem.vec, start, SLOTS)
__pyx_v_end = __pyx_f_8discodop_3bit_anextunset(__pyx_v_fitem.vec, __pyx_v_start, 2);
+0255: assert anextset(fitem.vec, end, SLOTS) == -1
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((__pyx_f_8discodop_3bit_anextset(__pyx_v_fitem.vec, __pyx_v_end, 2) == -1L) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 255, __pyx_L1_error)
}
}
#endif
+0256: assert 0 <= start < end <= self.lensent
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_1 = (0 <= __pyx_v_start);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_start < __pyx_v_end);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_end <= __pyx_v_self->__pyx_base.__pyx_base.lensent);
}
}
if (unlikely(!(__pyx_t_1 != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 256, __pyx_L1_error)
}
}
#endif
+0257: return compactcellidx(start, end, self.lensent, 1)
__pyx_r = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_start, __pyx_v_end, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1); goto __pyx_L0;
0258:
0259:
+0260: def parse(sent, Grammar grammar, tags=None, bint exhaustive=True,
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_1parse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_parse[] = "parse(sent, Grammar grammar, tags=None, bool exhaustive=True, start=None, Whitelist whitelist=None, bool splitprune=False, bool markorigin=False, estimates=None, Prob beam_beta=0.0, int beam_delta=50, itemsestimate=None)\nParse sentence and produce a chart.\n\n\t:param sent: A sequence of tokens that will be parsed.\n\t:param grammar: A ``Grammar`` object.\n\t:returns: a tuple (chart, msg); a ``Chart`` object and status message.\n\t:param tags: Optionally, a sequence of POS tags to use instead of\n\t\tattempting to apply all possible POS tags.\n\t:param exhaustive: don't stop at viterbi parse, return a full chart\n\t:param start: integer corresponding to the start symbol that complete\n\t\tderivations should be headed by; e.g., ``grammar.toid['ROOT']``.\n\t\tIf not given, the default specified by ``grammar`` is used.\n\t:param whitelist: a whitelist of allowed ChartItems. Anything else is not\n\t\tadded to the agenda.\n\t:param splitprune: coarse stage used a split-PCFG where discontinuous node\n\t\tappear as multiple CFG nodes. Every discontinuous node will result\n\t\tin multiple lookups into whitelist to see whether it should be\n\t\tallowed on the agenda.\n\t:param markorigin: in combination with splitprune, coarse labels include an\n\t\tinteger to distinguish components; e.g., CFG nodes NP*0 and NP*1\n\t\tmap to the discontinuous node NP_2\n\t:param estimates: use context-summary estimates (heuristics, figures of\n\t\tmerit) to order agenda. should be a tuple with the kind of\n\t\testimates ('SX' or 'SXlrgaps'), and the estimates themselves in a\n\t\t4-dimensional numpy matrix. If estimates are not consistent, it is\n\t\tno longer guaranteed that the optimal parse will be found.\n\t\texperimental.\n\t:param beam_beta: keep track of the best score in each cell and only allow\n\t\titems which are within a multiple of ``beam_beta`` of the best score.\n\t\tShould be a negative log probability. Pass ``0.0`` to disable.\n\t:param beam_delta: the maximum span length t""o which beam search is applied.\n\t:param itemsestimate: the number of chart items to pre-allocate.\n\t";
static PyMethodDef __pyx_mdef_8discodop_6plcfrs_1parse = {"parse", (PyCFunction)__pyx_pw_8discodop_6plcfrs_1parse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_6plcfrs_parse};
static PyObject *__pyx_pw_8discodop_6plcfrs_1parse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_sent = 0;
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
PyObject *__pyx_v_tags = 0;
int __pyx_v_exhaustive;
PyObject *__pyx_v_start = 0;
struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist = 0;
int __pyx_v_splitprune;
int __pyx_v_markorigin;
PyObject *__pyx_v_estimates = 0;
Prob __pyx_v_beam_beta;
int __pyx_v_beam_delta;
PyObject *__pyx_v_itemsestimate = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("parse (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sent,&__pyx_n_s_grammar,&__pyx_n_s_tags,&__pyx_n_s_exhaustive,&__pyx_n_s_start,&__pyx_n_s_whitelist,&__pyx_n_s_splitprune,&__pyx_n_s_markorigin,&__pyx_n_s_estimates,&__pyx_n_s_beam_beta,&__pyx_n_s_beam_delta,&__pyx_n_s_itemsestimate,0};
PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
values[2] = ((PyObject *)Py_None);
/* … */
__pyx_v_exhaustive = ((int)1);
}
__pyx_v_start = values[4];
__pyx_v_whitelist = ((struct __pyx_obj_8discodop_10containers_Whitelist *)values[5]);
if (values[6]) {
__pyx_v_splitprune = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_splitprune == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 261, __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_6plcfrs_parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_tags, int __pyx_v_exhaustive, PyObject *__pyx_v_start, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin, PyObject *__pyx_v_estimates, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta, PyObject *__pyx_v_itemsestimate) {
struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *__pyx_v_chart = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("parse", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("discodop.plcfrs.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_chart);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__65 = PyTuple_Pack(13, __pyx_n_s_sent, __pyx_n_s_grammar, __pyx_n_s_tags, __pyx_n_s_exhaustive, __pyx_n_s_start, __pyx_n_s_whitelist, __pyx_n_s_splitprune, __pyx_n_s_markorigin, __pyx_n_s_estimates, __pyx_n_s_beam_beta, __pyx_n_s_beam_delta, __pyx_n_s_itemsestimate, __pyx_n_s_chart); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 260, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__65);
__Pyx_GIVEREF(__pyx_tuple__65);
/* … */
__pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_8discodop_6plcfrs_1parse, NULL, __pyx_n_s_discodop_plcfrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse, __pyx_t_4) < 0) __PYX_ERR(0, 260, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(12, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_plcfrs_pyx, __pyx_n_s_parse, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 260, __pyx_L1_error)
+0261: start=None, Whitelist whitelist=None, bint splitprune=False,
values[4] = ((PyObject *)Py_None);
values[5] = (PyObject *)((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None);
/* … */
__pyx_v_splitprune = ((int)0);
}
if (values[7]) {
__pyx_v_markorigin = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_markorigin == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error)
} else {
+0262: bint markorigin=False, estimates=None,
values[8] = ((PyObject *)Py_None);
/* … */
__pyx_v_markorigin = ((int)0);
}
__pyx_v_estimates = values[8];
if (values[9]) {
__pyx_v_beam_beta = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_beam_beta == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 263, __pyx_L3_error)
} else {
__pyx_v_beam_beta = ((Prob)0.0);
}
if (values[10]) {
__pyx_v_beam_delta = __Pyx_PyInt_As_int(values[10]); if (unlikely((__pyx_v_beam_delta == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 263, __pyx_L3_error)
} else {
__pyx_v_beam_delta = ((int)50);
}
__pyx_v_itemsestimate = values[11];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("parse", 0, 2, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 260, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.parse", __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, 260, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_whitelist), __pyx_ptype_8discodop_10containers_Whitelist, 1, "whitelist", 0))) __PYX_ERR(0, 261, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_6plcfrs_parse(__pyx_self, __pyx_v_sent, __pyx_v_grammar, __pyx_v_tags, __pyx_v_exhaustive, __pyx_v_start, __pyx_v_whitelist, __pyx_v_splitprune, __pyx_v_markorigin, __pyx_v_estimates, __pyx_v_beam_beta, __pyx_v_beam_delta, __pyx_v_itemsestimate);
+0263: Prob beam_beta=0.0, int beam_delta=50, itemsestimate=None):
values[11] = ((PyObject *)Py_None);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
CYTHON_FALLTHROUGH;
case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
CYTHON_FALLTHROUGH;
case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
CYTHON_FALLTHROUGH;
case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
CYTHON_FALLTHROUGH;
case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
CYTHON_FALLTHROUGH;
case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
CYTHON_FALLTHROUGH;
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_grammar)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("parse", 0, 2, 12, 1); __PYX_ERR(0, 260, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tags);
if (value) { values[2] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 3:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exhaustive);
if (value) { values[3] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_start);
if (value) { values[4] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 5:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_whitelist);
if (value) { values[5] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 6:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_splitprune);
if (value) { values[6] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 7:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_markorigin);
if (value) { values[7] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 8:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_estimates);
if (value) { values[8] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 9:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beam_beta);
if (value) { values[9] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 10:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beam_delta);
if (value) { values[10] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 11:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsestimate);
if (value) { values[11] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "parse") < 0)) __PYX_ERR(0, 260, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
CYTHON_FALLTHROUGH;
case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
CYTHON_FALLTHROUGH;
case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
CYTHON_FALLTHROUGH;
case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
CYTHON_FALLTHROUGH;
case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
CYTHON_FALLTHROUGH;
case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
CYTHON_FALLTHROUGH;
case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
CYTHON_FALLTHROUGH;
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_sent = values[0];
__pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)values[1]);
__pyx_v_tags = values[2];
if (values[3]) {
__pyx_v_exhaustive = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_exhaustive == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 260, __pyx_L3_error)
} else {
0264: """Parse sentence and produce a chart.
0265:
0266: :param sent: A sequence of tokens that will be parsed.
0267: :param grammar: A ``Grammar`` object.
0268: :returns: a tuple (chart, msg); a ``Chart`` object and status message.
0269: :param tags: Optionally, a sequence of POS tags to use instead of
0270: attempting to apply all possible POS tags.
0271: :param exhaustive: don't stop at viterbi parse, return a full chart
0272: :param start: integer corresponding to the start symbol that complete
0273: derivations should be headed by; e.g., ``grammar.toid['ROOT']``.
0274: If not given, the default specified by ``grammar`` is used.
0275: :param whitelist: a whitelist of allowed ChartItems. Anything else is not
0276: added to the agenda.
0277: :param splitprune: coarse stage used a split-PCFG where discontinuous node
0278: appear as multiple CFG nodes. Every discontinuous node will result
0279: in multiple lookups into whitelist to see whether it should be
0280: allowed on the agenda.
0281: :param markorigin: in combination with splitprune, coarse labels include an
0282: integer to distinguish components; e.g., CFG nodes NP*0 and NP*1
0283: map to the discontinuous node NP_2
0284: :param estimates: use context-summary estimates (heuristics, figures of
0285: merit) to order agenda. should be a tuple with the kind of
0286: estimates ('SX' or 'SXlrgaps'), and the estimates themselves in a
0287: 4-dimensional numpy matrix. If estimates are not consistent, it is
0288: no longer guaranteed that the optimal parse will be found.
0289: experimental.
0290: :param beam_beta: keep track of the best score in each cell and only allow
0291: items which are within a multiple of ``beam_beta`` of the best score.
0292: Should be a negative log probability. Pass ``0.0`` to disable.
0293: :param beam_delta: the maximum span length to which beam search is applied.
0294: :param itemsestimate: the number of chart items to pre-allocate.
0295: """
+0296: if <unsigned>len(sent) < sizeof(COMPONENT.vec) * 8:
__pyx_t_1 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 296, __pyx_L1_error)
__pyx_t_2 = ((((unsigned int)__pyx_t_1) < ((sizeof(__pyx_v_8discodop_6plcfrs_COMPONENT.vec)) * 8)) != 0);
if (__pyx_t_2) {
/* … */
}
+0297: chart = SmallLCFRSChart(grammar, list(sent), start,
__pyx_t_3 = PySequence_List(__pyx_v_sent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_start); __pyx_t_3 = 0; /* … */ __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_6plcfrs_SmallLCFRSChart), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_chart = ((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_t_5); __pyx_t_5 = 0;
+0298: itemsestimate=itemsestimate)
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_itemsestimate, __pyx_v_itemsestimate) < 0) __PYX_ERR(0, 298, __pyx_L1_error)
+0299: return parse_main[SmallLCFRSChart, SmallChartItem](
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_5 = __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_parse_main(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_chart), ((SmallChartItem)__pyx_f_8discodop_6plcfrs_15SmallLCFRSChart__root(((struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_chart))), __pyx_v_sent, __pyx_v_grammar, __pyx_v_tags, __pyx_v_exhaustive, __pyx_v_whitelist, __pyx_v_splitprune, __pyx_v_markorigin, __pyx_v_estimates, __pyx_v_beam_beta, __pyx_v_beam_delta); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 299, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
0300: <SmallLCFRSChart>chart,
0301: <SmallChartItem>(<SmallLCFRSChart>chart)._root(),
0302: sent, grammar, tags, exhaustive, whitelist,
0303: splitprune, markorigin, estimates, beam_beta, beam_delta)
+0304: chart = FatLCFRSChart(grammar, list(sent), start,
__pyx_t_5 = PySequence_List(__pyx_v_sent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_start); __pyx_t_5 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_6plcfrs_FatLCFRSChart), __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_chart = ((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_t_4); __pyx_t_4 = 0;
+0305: itemsestimate=itemsestimate)
__pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_itemsestimate, __pyx_v_itemsestimate) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
+0306: return parse_main[FatLCFRSChart, FatChartItem](
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_4 = __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_parse_main(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_chart), ((FatChartItem)__pyx_f_8discodop_6plcfrs_13FatLCFRSChart__root(((struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_chart))), __pyx_v_sent, __pyx_v_grammar, __pyx_v_tags, __pyx_v_exhaustive, __pyx_v_whitelist, __pyx_v_splitprune, __pyx_v_markorigin, __pyx_v_estimates, __pyx_v_beam_beta, __pyx_v_beam_delta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
0307: <FatLCFRSChart>chart, <FatChartItem>(<FatLCFRSChart>chart)._root(),
0308: sent, grammar, tags, exhaustive, whitelist,
0309: splitprune, markorigin, estimates, beam_beta, beam_delta)
0310:
0311:
+0312: cdef parse_main(LCFRSChart_fused chart, LCFRSItem_fused goal, sent,
static PyObject *__pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_parse_main(struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_chart, SmallChartItem __pyx_v_goal, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_tags, int __pyx_v_exhaustive, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin, PyObject *__pyx_v_estimates, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta) {
Agenda<ItemNo,std::pair<Prob,Prob> > __pyx_v_agenda;
std::pair<ItemNo,std::pair<Prob,Prob> > __pyx_v_entry;
std::vector<ItemNo> __pyx_v_sibvec;
ProbRule *__pyx_v_rule;
SmallChartItem __pyx_v_item;
SmallChartItem __pyx_v_sib;
SmallChartItem __pyx_v_newitem;
SmallChartItem __pyx_v_tmpitem;
__Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
Prob __pyx_v_siblingprob;
Prob __pyx_v_score;
Prob __pyx_v_prob;
Prob __pyx_v_newprob;
short __pyx_v_lensent;
short __pyx_v_estimatetype;
int __pyx_v_length;
int __pyx_v_left;
int __pyx_v_right;
int __pyx_v_gaps;
ItemNo __pyx_v_itemidx;
ItemNo __pyx_v_sibidx;
size_t __pyx_v_blocked;
size_t __pyx_v_maxA;
size_t __pyx_v_n;
PyObject *__pyx_v_estimatetypestr = NULL;
PyObject *__pyx_v_covered = NULL;
PyObject *__pyx_v_msg = NULL;
SmallChartItemBtreeMap<ItemNo> ::iterator __pyx_v_itemidxit;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0_0parse_main", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_43);
__Pyx_AddTraceback("discodop.plcfrs.parse_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
__Pyx_XDECREF(__pyx_v_estimatetypestr);
__Pyx_XDECREF(__pyx_v_covered);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_parse_main(struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_chart, FatChartItem __pyx_v_goal, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_tags, int __pyx_v_exhaustive, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin, PyObject *__pyx_v_estimates, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta) {
Agenda<ItemNo,std::pair<Prob,Prob> > __pyx_v_agenda;
std::pair<ItemNo,std::pair<Prob,Prob> > __pyx_v_entry;
std::vector<ItemNo> __pyx_v_sibvec;
ProbRule *__pyx_v_rule;
FatChartItem __pyx_v_item;
FatChartItem __pyx_v_sib;
FatChartItem __pyx_v_newitem;
FatChartItem __pyx_v_tmpitem;
__Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
Prob __pyx_v_siblingprob;
Prob __pyx_v_score;
Prob __pyx_v_prob;
Prob __pyx_v_newprob;
short __pyx_v_lensent;
short __pyx_v_estimatetype;
int __pyx_v_length;
int __pyx_v_left;
int __pyx_v_right;
int __pyx_v_gaps;
ItemNo __pyx_v_itemidx;
ItemNo __pyx_v_sibidx;
size_t __pyx_v_blocked;
size_t __pyx_v_maxA;
size_t __pyx_v_n;
PyObject *__pyx_v_estimatetypestr = NULL;
PyObject *__pyx_v_covered = NULL;
PyObject *__pyx_v_msg = NULL;
FatChartItemBtreeMap<ItemNo> ::iterator __pyx_v_itemidxit;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1_1parse_main", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_42);
__Pyx_AddTraceback("discodop.plcfrs.parse_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
__Pyx_XDECREF(__pyx_v_estimatetypestr);
__Pyx_XDECREF(__pyx_v_covered);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0313: Grammar grammar, tags, bint exhaustive, Whitelist whitelist,
0314: bint splitprune, bint markorigin, estimates,
0315: Prob beam_beta, int beam_delta):
0316: cdef:
0317: Agenda[ItemNo, pair[Prob, Prob]] agenda # prioritized items to explore
0318: pair[ItemNo, pair[Prob, Prob]] entry
0319: vector[ItemNo] sibvec
0320: ProbRule *rule
0321: LCFRSItem_fused item, sib, newitem, tmpitem
+0322: double [:, :, :, :] outside = None # outside estimates, if provided
__pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(Py_None); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 322, __pyx_L1_error) __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; /* … */ __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(Py_None); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 322, __pyx_L1_error) __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL;
0323: Prob siblingprob, score, prob, newprob
+0324: short lensent = len(sent), estimatetype = 0
__pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 324, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2; __pyx_v_estimatetype = 0; /* … */ __pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 324, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2; __pyx_v_estimatetype = 0;
+0325: int length = 1, left = 0, right = 0, gaps = 0
__pyx_v_length = 1; __pyx_v_left = 0; __pyx_v_right = 0; __pyx_v_gaps = 0; /* … */ __pyx_v_length = 1; __pyx_v_left = 0; __pyx_v_right = 0; __pyx_v_gaps = 0;
0326: ItemNo itemidx, sibidx
+0327: size_t blocked = 0, maxA = 0, n
__pyx_v_blocked = 0; __pyx_v_maxA = 0; /* … */ __pyx_v_blocked = 0; __pyx_v_maxA = 0;
0328: # avoid generating code for spurious fused type combinations
0329: if ((LCFRSItem_fused is SmallChartItem
0330: and LCFRSChart_fused is FatLCFRSChart)
0331: or (LCFRSItem_fused is FatChartItem
0332: and LCFRSChart_fused is SmallLCFRSChart)):
0333: return
+0334: if estimates is not None:
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
+0335: estimatetypestr, outside = estimates
if ((likely(PyTuple_CheckExact(__pyx_v_estimates))) || (PyList_CheckExact(__pyx_v_estimates))) { PyObject* sequence = __pyx_v_estimates; #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, 335, __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_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_estimates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 335, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 335, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_6); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_estimatetypestr = __pyx_t_5; __pyx_t_5 = 0; __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1); __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; /* … */ if ((likely(PyTuple_CheckExact(__pyx_v_estimates))) || (PyList_CheckExact(__pyx_v_estimates))) { PyObject* sequence = __pyx_v_estimates; #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, 335, __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_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_estimates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 335, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 335, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_6); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_estimatetypestr = __pyx_t_5; __pyx_t_5 = 0; __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1); __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL;
+0336: estimatetype = {'SX': SX, 'SXlrgaps': SXlrgaps}[estimatetypestr]
__pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SX, __pyx_int_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SXlrgaps, __pyx_int_2) < 0) __PYX_ERR(0, 336, __pyx_L1_error) __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_t_6, __pyx_v_estimatetypestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_9 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_estimatetype = __pyx_t_9; /* … */ __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SX, __pyx_int_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SXlrgaps, __pyx_int_2) < 0) __PYX_ERR(0, 336, __pyx_L1_error) __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_t_6, __pyx_v_estimatetypestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_9 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_estimatetype = __pyx_t_9;
0337: if LCFRSItem_fused is SmallChartItem:
+0338: newitem = SmallChartItem(0, 0)
__pyx_v_newitem = SmallChartItem(0, 0);
+0339: tmpitem = SmallChartItem(0, 0)
__pyx_v_tmpitem = SmallChartItem(0, 0);
0340: elif LCFRSItem_fused is FatChartItem:
+0341: newitem = FatChartItem(0)
__pyx_v_newitem = FatChartItem(0);
+0342: tmpitem = FatChartItem(0)
__pyx_v_tmpitem = FatChartItem(0);
0343:
0344: # assign POS tags
+0345: covered, msg = populatepos[LCFRSChart_fused, LCFRSItem_fused](
__pyx_t_5 = __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_populatepos(__pyx_v_grammar, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_newitem, __pyx_v_sent, __pyx_v_tags, __pyx_v_whitelist, __pyx_v_estimates); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 345, __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, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_10)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < 0) __PYX_ERR(0, 345, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 345, __pyx_L1_error) __pyx_L7_unpacking_done:; } __pyx_v_covered = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_msg = __pyx_t_7; __pyx_t_7 = 0; /* … */ __pyx_t_5 = __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_populatepos(__pyx_v_grammar, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_newitem, __pyx_v_sent, __pyx_v_tags, __pyx_v_whitelist, __pyx_v_estimates); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 345, __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, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_10)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 2) < 0) __PYX_ERR(0, 345, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 345, __pyx_L1_error) __pyx_L7_unpacking_done:; } __pyx_v_covered = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_msg = __pyx_t_7; __pyx_t_7 = 0;
0346: grammar, agenda, chart, newitem,
0347: sent, tags, whitelist, estimates)
+0348: if not covered:
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_covered); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 348, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_4) != 0); if (__pyx_t_3) { /* … */ } /* … */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_covered); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 348, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_4) != 0); if (__pyx_t_3) { /* … */ }
+0349: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_msg); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_msg); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
+0350: assert not agenda.empty()
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((!(__pyx_v_agenda.empty() != 0)) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 350, __pyx_L1_error)
}
}
#endif
/* … */
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((!(__pyx_v_agenda.empty() != 0)) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 350, __pyx_L1_error)
}
}
#endif
0351:
+0352: while not agenda.empty(): # main parsing loop
while (1) {
__pyx_t_3 = ((!(__pyx_v_agenda.empty() != 0)) != 0);
if (!__pyx_t_3) break;
/* … */
while (1) {
__pyx_t_3 = ((!(__pyx_v_agenda.empty() != 0)) != 0);
if (!__pyx_t_3) break;
+0353: entry = agenda.pop()
__pyx_v_entry = __pyx_v_agenda.pop();
/* … */
__pyx_v_entry = __pyx_v_agenda.pop();
+0354: itemidx = entry.first
__pyx_t_11 = __pyx_v_entry.first;
__pyx_v_itemidx = __pyx_t_11;
/* … */
__pyx_t_11 = __pyx_v_entry.first;
__pyx_v_itemidx = __pyx_t_11;
+0355: prob = entry.second.second
__pyx_t_12 = __pyx_v_entry.second.second;
__pyx_v_prob = __pyx_t_12;
/* … */
__pyx_t_12 = __pyx_v_entry.second.second;
__pyx_v_prob = __pyx_t_12;
+0356: item = chart.items[itemidx]
__pyx_v_item = (__pyx_v_chart->items[__pyx_v_itemidx]);
/* … */
__pyx_v_item = (__pyx_v_chart->items[__pyx_v_itemidx]);
0357: # store viterbi probability; cannot do this when this item is added to
0358: # the agenda because that would give rise to duplicate edges.
+0359: chart.updateprob(itemidx, prob)
((struct __pyx_vtabstruct_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.updateprob(((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_v_chart), __pyx_v_itemidx, __pyx_v_prob);
/* … */
((struct __pyx_vtabstruct_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.updateprob(((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_v_chart), __pyx_v_itemidx, __pyx_v_prob);
+0360: if item == goal:
__pyx_t_3 = ((__pyx_v_item == __pyx_v_goal) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L11;
}
/* … */
__pyx_t_3 = ((__pyx_v_item == __pyx_v_goal) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L11;
}
+0361: if not exhaustive:
__pyx_t_3 = ((!(__pyx_v_exhaustive != 0)) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((!(__pyx_v_exhaustive != 0)) != 0);
if (__pyx_t_3) {
/* … */
}
+0362: break
goto __pyx_L10_break;
/* … */
goto __pyx_L10_break;
0363: else:
0364: # unary
+0365: if LCFRSItem_fused is SmallChartItem:
/*else*/ {
/* … */
/*else*/ {
+0366: length = bitcount(item.vec)
__pyx_v_length = __pyx_f_8discodop_3bit_bitcount(__pyx_v_item.vec, 0);
+0367: newitem.vec = item.vec
__pyx_t_13 = __pyx_v_item.vec;
__pyx_v_newitem.vec = __pyx_t_13;
0368: elif LCFRSItem_fused is FatChartItem:
+0369: length = abitcount(item.vec, SLOTS)
__pyx_v_length = __pyx_f_8discodop_3bit_abitcount(__pyx_v_item.vec, 2);
+0370: memcpy(<void *>newitem.vec, <void *>item.vec,
memcpy(((void *)__pyx_v_newitem.vec), ((void *)__pyx_v_item.vec), (2 * (sizeof(uint64_t))));
0371: SLOTS * sizeof(uint64_t))
+0372: if estimates is not None:
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
0373: if LCFRSItem_fused is SmallChartItem:
+0374: left = nextset(item.vec, 0)
__pyx_v_left = __pyx_f_8discodop_3bit_nextset(__pyx_v_item.vec, 0);
+0375: gaps = bitlength(item.vec) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_bitlength(__pyx_v_item.vec) - __pyx_v_length) - __pyx_v_left);
+0376: right = lensent - length - left - gaps
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
0377: elif LCFRSItem_fused is FatChartItem:
+0378: left = anextset(item.vec, 0, SLOTS)
__pyx_v_left = __pyx_f_8discodop_3bit_anextset(__pyx_v_item.vec, 0, 2);
+0379: gaps = abitlength(item.vec, SLOTS) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_abitlength(__pyx_v_item.vec, 2) - __pyx_v_length) - __pyx_v_left);
+0380: right = lensent - length - left - gaps
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
+0381: for n in range(grammar.numunary):
__pyx_t_14 = __pyx_v_grammar->numunary;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_n = __pyx_t_15;
/* … */
__pyx_t_13 = __pyx_v_grammar->numunary;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_n = __pyx_t_14;
+0382: rule = &(grammar.unary[item.label][n])
__pyx_v_rule = (&((__pyx_v_grammar->unary[__pyx_v_item.label])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->unary[__pyx_v_item.label])[__pyx_v_n]));
+0383: if rule.rhs1 != item.label:
__pyx_t_4 = ((__pyx_v_rule->rhs1 != __pyx_v_item.label) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_rule->rhs1 != __pyx_v_item.label) != 0);
if (__pyx_t_4) {
/* … */
}
+0384: break
goto __pyx_L15_break;
/* … */
goto __pyx_L15_break;
+0385: elif TESTBIT(grammar.mask, rule.no):
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_4) {
/* … */
}
+0386: continue
goto __pyx_L14_continue;
/* … */
goto __pyx_L14_continue;
+0387: score = newprob = prob + rule.prob
__pyx_t_12 = (__pyx_v_prob + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
/* … */
__pyx_t_12 = (__pyx_v_prob + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
+0388: if estimatetype == SX:
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
/* … */
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
+0389: score += outside[rule.lhs, left, right, 0]
__pyx_t_16 = __pyx_v_rule->lhs;
__pyx_t_17 = __pyx_v_left;
__pyx_t_18 = __pyx_v_right;
__pyx_t_19 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_16 * __pyx_v_outside.strides[0]) ) + __pyx_t_17 * __pyx_v_outside.strides[1]) ) + __pyx_t_18 * __pyx_v_outside.strides[2]) ) + __pyx_t_19 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_15 = __pyx_v_rule->lhs;
__pyx_t_16 = __pyx_v_left;
__pyx_t_17 = __pyx_v_right;
__pyx_t_18 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_15 * __pyx_v_outside.strides[0]) ) + __pyx_t_16 * __pyx_v_outside.strides[1]) ) + __pyx_t_17 * __pyx_v_outside.strides[2]) ) + __pyx_t_18 * __pyx_v_outside.strides[3]) ))));
+0390: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0391: continue
goto __pyx_L14_continue;
/* … */
goto __pyx_L14_continue;
+0392: elif estimatetype == SXlrgaps:
case 2:
/* … */
break;
default:
/* … */
case 2:
/* … */
break;
default:
+0393: score += outside[
__pyx_t_20 = __pyx_v_rule->lhs;
__pyx_t_21 = __pyx_v_length;
__pyx_t_22 = (__pyx_v_left + __pyx_v_right);
__pyx_t_23 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_20 * __pyx_v_outside.strides[0]) ) + __pyx_t_21 * __pyx_v_outside.strides[1]) ) + __pyx_t_22 * __pyx_v_outside.strides[2]) ) + __pyx_t_23 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_19 = __pyx_v_rule->lhs;
__pyx_t_20 = __pyx_v_length;
__pyx_t_21 = (__pyx_v_left + __pyx_v_right);
__pyx_t_22 = __pyx_v_gaps;
__pyx_v_score = (__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]) ))));
0394: rule.lhs, length, left + right, gaps]
+0395: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0396: continue
goto __pyx_L14_continue;
/* … */
goto __pyx_L14_continue;
0397: else:
0398: # add length of span to score so that all items of length n
0399: # have a strictly lower score than items with length n + 1.
+0400: score += length * MAX_LOGPROB
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
/* … */
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
+0401: newitem.label = rule.lhs
__pyx_t_24 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_24;
/* … */
__pyx_t_23 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_23;
+0402: if process_edge[LCFRSItem_fused, LCFRSChart_fused](
__pyx_t_3 = (__pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_itemidx, __pyx_v_item, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_4, __pyx_v_markorigin, 0.0) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L19;
}
/* … */
__pyx_t_3 = (__pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_itemidx, __pyx_v_item, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_4, __pyx_v_markorigin, 0.0) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L19;
}
0403: newitem, newprob, score, rule, itemidx, item,
0404: agenda, chart, estimatetype, whitelist,
+0405: splitprune and grammar.fanout[rule.lhs] != 1,
__pyx_t_3 = (__pyx_v_splitprune != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L20_bool_binop_done;
}
__pyx_t_3 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L20_bool_binop_done:;
/* … */
__pyx_t_3 = (__pyx_v_splitprune != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L20_bool_binop_done;
}
__pyx_t_3 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L20_bool_binop_done:;
0406: markorigin, 0.0):
0407: if LCFRSItem_fused is SmallChartItem:
+0408: newitem.vec = item.vec
__pyx_t_13 = __pyx_v_item.vec;
__pyx_v_newitem.vec = __pyx_t_13;
0409: elif LCFRSItem_fused is FatChartItem:
+0410: memcpy(<void *>newitem.vec, <void *>item.vec,
memcpy(((void *)__pyx_v_newitem.vec), ((void *)__pyx_v_item.vec), (2 * (sizeof(uint64_t))));
0411: SLOTS * sizeof(uint64_t))
0412: else:
+0413: blocked += 1
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L19:;
__pyx_L14_continue:;
}
__pyx_L15_break:;
/* … */
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L19:;
__pyx_L14_continue:;
}
__pyx_L15_break:;
0414: # binary production, item from agenda is on the right
+0415: for n in range(grammar.numbinary):
__pyx_t_14 = __pyx_v_grammar->numbinary;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_n = __pyx_t_15;
/* … */
__pyx_t_13 = __pyx_v_grammar->numbinary;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_n = __pyx_t_14;
+0416: rule = &(grammar.rbinary[item.label][n])
__pyx_v_rule = (&((__pyx_v_grammar->rbinary[__pyx_v_item.label])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->rbinary[__pyx_v_item.label])[__pyx_v_n]));
+0417: if rule.rhs2 != item.label:
__pyx_t_3 = ((__pyx_v_rule->rhs2 != __pyx_v_item.label) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_rule->rhs2 != __pyx_v_item.label) != 0);
if (__pyx_t_3) {
/* … */
}
+0418: break
goto __pyx_L23_break;
/* … */
goto __pyx_L23_break;
0419: # elif chart.probs[rule.rhs1] is None:
0420: # continue
+0421: elif TESTBIT(grammar.mask, rule.no):
__pyx_t_3 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_3) {
/* … */
}
+0422: continue
goto __pyx_L22_continue;
/* … */
goto __pyx_L22_continue;
+0423: tmpitem.label = rule.rhs1
__pyx_t_24 = __pyx_v_rule->rhs1;
__pyx_v_tmpitem.label = __pyx_t_24;
/* … */
__pyx_t_23 = __pyx_v_rule->rhs1;
__pyx_v_tmpitem.label = __pyx_t_23;
+0424: itemidxit = chart.itemindex.lower_bound(tmpitem)
__pyx_v_itemidxit = __pyx_v_chart->itemindex.lower_bound(__pyx_v_tmpitem);
/* … */
__pyx_v_itemidxit = __pyx_v_chart->itemindex.lower_bound(__pyx_v_tmpitem);
+0425: sibvec.clear()
__pyx_v_sibvec.clear();
/* … */
__pyx_v_sibvec.clear();
+0426: while (itemidxit != chart.itemindex.end()
while (1) {
/* … */
__pyx_t_4 = ((__pyx_v_itemidxit != __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L27_bool_binop_done;
}
/* … */
while (1) {
/* … */
__pyx_t_4 = ((__pyx_v_itemidxit != __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L27_bool_binop_done;
}
+0427: and dereference(itemidxit).first.label == rule.rhs1):
__pyx_t_4 = (((*__pyx_v_itemidxit).first.label == __pyx_v_rule->rhs1) != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L27_bool_binop_done:;
if (!__pyx_t_3) break;
__pyx_t_4 = (((*__pyx_v_itemidxit).first.label == __pyx_v_rule->rhs1) != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L27_bool_binop_done:;
if (!__pyx_t_3) break;
+0428: sib = dereference(itemidxit).first
__pyx_t_25 = (*__pyx_v_itemidxit).first;
__pyx_v_sib = __pyx_t_25;
/* … */
__pyx_t_24 = (*__pyx_v_itemidxit).first;
__pyx_v_sib = __pyx_t_24;
+0429: sibidx = dereference(itemidxit).second
__pyx_t_11 = (*__pyx_v_itemidxit).second;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_t_11 = (*__pyx_v_itemidxit).second;
__pyx_v_sibidx = __pyx_t_11;
+0430: sibvec.push_back(sibidx)
try {
__pyx_v_sibvec.push_back(__pyx_v_sibidx);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 430, __pyx_L1_error)
}
/* … */
try {
__pyx_v_sibvec.push_back(__pyx_v_sibidx);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 430, __pyx_L1_error)
}
+0431: postincrement(itemidxit)
(__pyx_v_itemidxit++);
}
/* … */
(__pyx_v_itemidxit++);
}
+0432: for sibidx in sibvec:
__pyx_t_26 = __pyx_v_sibvec.begin();
for (;;) {
if (!(__pyx_t_26 != __pyx_v_sibvec.end())) break;
__pyx_t_11 = *__pyx_t_26;
++__pyx_t_26;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_L29_continue:;
}
__pyx_L22_continue:;
}
__pyx_L23_break:;
/* … */
__pyx_t_25 = __pyx_v_sibvec.begin();
for (;;) {
if (!(__pyx_t_25 != __pyx_v_sibvec.end())) break;
__pyx_t_11 = *__pyx_t_25;
++__pyx_t_25;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_L29_continue:;
}
__pyx_L22_continue:;
}
__pyx_L23_break:;
+0433: sib = chart.items[sibidx]
__pyx_v_sib = (__pyx_v_chart->items[__pyx_v_sibidx]);
/* … */
__pyx_v_sib = (__pyx_v_chart->items[__pyx_v_sibidx]);
+0434: postincrement(itemidxit)
(__pyx_v_itemidxit++);
/* … */
(__pyx_v_itemidxit++);
+0435: if concat[LCFRSItem_fused](rule, &sib, &item):
__pyx_t_3 = (__pyx_fuse_0__pyx_f_8discodop_6plcfrs_concat(__pyx_v_rule, (&__pyx_v_sib), (&__pyx_v_item)) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_fuse_1__pyx_f_8discodop_6plcfrs_concat(__pyx_v_rule, (&__pyx_v_sib), (&__pyx_v_item)) != 0);
if (__pyx_t_3) {
/* … */
}
+0436: newitem.label = rule.lhs
__pyx_t_24 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_24;
/* … */
__pyx_t_23 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_23;
+0437: combine_item[LCFRSItem_fused](&newitem, &sib, &item)
__pyx_fuse_0__pyx_f_8discodop_6plcfrs_combine_item((&__pyx_v_newitem), (&__pyx_v_sib), (&__pyx_v_item));
/* … */
__pyx_fuse_1__pyx_f_8discodop_6plcfrs_combine_item((&__pyx_v_newitem), (&__pyx_v_sib), (&__pyx_v_item));
+0438: siblingprob = chart.probs[sibidx]
__pyx_v_siblingprob = (__pyx_v_chart->__pyx_base.__pyx_base.probs[__pyx_v_sibidx]);
/* … */
__pyx_v_siblingprob = (__pyx_v_chart->__pyx_base.__pyx_base.probs[__pyx_v_sibidx]);
+0439: if siblingprob == INFINITY:
__pyx_t_3 = ((__pyx_v_siblingprob == HUGE_VAL) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_siblingprob == HUGE_VAL) != 0);
if (__pyx_t_3) {
/* … */
}
+0440: continue
goto __pyx_L29_continue;
/* … */
goto __pyx_L29_continue;
+0441: score = newprob = prob + siblingprob + rule.prob
__pyx_t_12 = ((__pyx_v_prob + __pyx_v_siblingprob) + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
/* … */
__pyx_t_12 = ((__pyx_v_prob + __pyx_v_siblingprob) + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
0442: if LCFRSItem_fused is SmallChartItem:
+0443: length = bitcount(newitem.vec)
__pyx_v_length = __pyx_f_8discodop_3bit_bitcount(__pyx_v_newitem.vec, 0);
0444: elif LCFRSItem_fused is FatChartItem:
+0445: length = abitcount(newitem.vec, SLOTS)
__pyx_v_length = __pyx_f_8discodop_3bit_abitcount(__pyx_v_newitem.vec, 2);
+0446: if estimatetype == SX or estimatetype == SXlrgaps:
switch (__pyx_v_estimatetype) {
case 1:
case 2:
/* … */
break;
default: break;
}
/* … */
switch (__pyx_v_estimatetype) {
case 1:
case 2:
/* … */
break;
default: break;
}
0447: if LCFRSItem_fused is SmallChartItem:
+0448: left = nextset(newitem.vec, 0)
__pyx_v_left = __pyx_f_8discodop_3bit_nextset(__pyx_v_newitem.vec, 0);
0449: elif LCFRSItem_fused is FatChartItem:
+0450: left = anextset(newitem.vec, 0, SLOTS)
__pyx_v_left = __pyx_f_8discodop_3bit_anextset(__pyx_v_newitem.vec, 0, 2);
+0451: if estimatetype == SX:
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
/* … */
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
+0452: right = lensent - length - left
__pyx_v_right = ((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left);
/* … */
__pyx_v_right = ((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left);
+0453: score += outside[rule.lhs, left, right, 0]
__pyx_t_27 = __pyx_v_rule->lhs;
__pyx_t_28 = __pyx_v_left;
__pyx_t_29 = __pyx_v_right;
__pyx_t_30 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_27 * __pyx_v_outside.strides[0]) ) + __pyx_t_28 * __pyx_v_outside.strides[1]) ) + __pyx_t_29 * __pyx_v_outside.strides[2]) ) + __pyx_t_30 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_26 = __pyx_v_rule->lhs;
__pyx_t_27 = __pyx_v_left;
__pyx_t_28 = __pyx_v_right;
__pyx_t_29 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_26 * __pyx_v_outside.strides[0]) ) + __pyx_t_27 * __pyx_v_outside.strides[1]) ) + __pyx_t_28 * __pyx_v_outside.strides[2]) ) + __pyx_t_29 * __pyx_v_outside.strides[3]) ))));
+0454: if score > MAX_LOGPROB:
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
+0455: continue
goto __pyx_L29_continue;
/* … */
goto __pyx_L29_continue;
+0456: elif estimatetype == SXlrgaps:
case 2:
/* … */
break;
default:
/* … */
case 2:
/* … */
break;
default:
0457: if LCFRSItem_fused is SmallChartItem:
+0458: gaps = bitlength(newitem.vec) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_bitlength(__pyx_v_newitem.vec) - __pyx_v_length) - __pyx_v_left);
0459: elif LCFRSItem_fused is FatChartItem:
0460: gaps = abitlength(newitem.vec, SLOTS
+0461: ) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_abitlength(__pyx_v_newitem.vec, 2) - __pyx_v_length) - __pyx_v_left);
+0462: right = lensent - length - left - gaps
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
/* … */
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
+0463: score += outside[
__pyx_t_31 = __pyx_v_rule->lhs;
__pyx_t_32 = __pyx_v_length;
__pyx_t_33 = (__pyx_v_left + __pyx_v_right);
__pyx_t_34 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_31 * __pyx_v_outside.strides[0]) ) + __pyx_t_32 * __pyx_v_outside.strides[1]) ) + __pyx_t_33 * __pyx_v_outside.strides[2]) ) + __pyx_t_34 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_30 = __pyx_v_rule->lhs;
__pyx_t_31 = __pyx_v_length;
__pyx_t_32 = (__pyx_v_left + __pyx_v_right);
__pyx_t_33 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_30 * __pyx_v_outside.strides[0]) ) + __pyx_t_31 * __pyx_v_outside.strides[1]) ) + __pyx_t_32 * __pyx_v_outside.strides[2]) ) + __pyx_t_33 * __pyx_v_outside.strides[3]) ))));
0464: rule.lhs, length, left + right, gaps]
+0465: if score > MAX_LOGPROB:
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
+0466: continue
goto __pyx_L29_continue;
/* … */
goto __pyx_L29_continue;
0467: else:
+0468: score += length * MAX_LOGPROB
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
/* … */
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
+0469: if process_edge[LCFRSItem_fused, LCFRSChart_fused](
__pyx_t_4 = (__pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_sibidx, __pyx_v_sib, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_3, __pyx_v_markorigin, __pyx_t_12) != 0);
if (__pyx_t_4) {
goto __pyx_L35;
}
/* … */
__pyx_t_4 = (__pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_sibidx, __pyx_v_sib, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_3, __pyx_v_markorigin, __pyx_t_12) != 0);
if (__pyx_t_4) {
goto __pyx_L35;
}
0470: newitem, newprob, score, rule, sibidx, sib,
0471: agenda, chart, estimatetype, whitelist,
+0472: splitprune and grammar.fanout[rule.lhs] != 1,
__pyx_t_4 = (__pyx_v_splitprune != 0);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_4 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L36_bool_binop_done:;
/* … */
__pyx_t_4 = (__pyx_v_splitprune != 0);
if (__pyx_t_4) {
} else {
__pyx_t_3 = __pyx_t_4;
goto __pyx_L36_bool_binop_done;
}
__pyx_t_4 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L36_bool_binop_done:;
0473: markorigin,
+0474: beam_beta if length <= beam_delta else 0.0):
if (((__pyx_v_length <= __pyx_v_beam_delta) != 0)) {
__pyx_t_12 = __pyx_v_beam_beta;
} else {
__pyx_t_12 = 0.0;
}
/* … */
if (((__pyx_v_length <= __pyx_v_beam_delta) != 0)) {
__pyx_t_12 = __pyx_v_beam_beta;
} else {
__pyx_t_12 = 0.0;
}
0475: pass
0476: else:
+0477: blocked += 1
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L35:;
/* … */
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L35:;
0478: # binary production, item from agenda is on the left
+0479: for n in range(grammar.numbinary):
__pyx_t_14 = __pyx_v_grammar->numbinary;
for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_n = __pyx_t_15;
/* … */
__pyx_t_13 = __pyx_v_grammar->numbinary;
for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
__pyx_v_n = __pyx_t_14;
+0480: rule = &(grammar.lbinary[item.label][n])
__pyx_v_rule = (&((__pyx_v_grammar->lbinary[__pyx_v_item.label])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->lbinary[__pyx_v_item.label])[__pyx_v_n]));
+0481: if rule.rhs1 != item.label:
__pyx_t_4 = ((__pyx_v_rule->rhs1 != __pyx_v_item.label) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_rule->rhs1 != __pyx_v_item.label) != 0);
if (__pyx_t_4) {
/* … */
}
+0482: break
goto __pyx_L39_break;
/* … */
goto __pyx_L39_break;
0483: # elif chart.probs[rule.rhs2] is None:
0484: # continue
+0485: elif TESTBIT(grammar.mask, rule.no):
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (__pyx_t_4) {
/* … */
}
+0486: continue
goto __pyx_L38_continue;
/* … */
goto __pyx_L38_continue;
+0487: tmpitem.label = rule.rhs2
__pyx_t_24 = __pyx_v_rule->rhs2;
__pyx_v_tmpitem.label = __pyx_t_24;
/* … */
__pyx_t_23 = __pyx_v_rule->rhs2;
__pyx_v_tmpitem.label = __pyx_t_23;
+0488: itemidxit = chart.itemindex.lower_bound(tmpitem)
__pyx_v_itemidxit = __pyx_v_chart->itemindex.lower_bound(__pyx_v_tmpitem);
/* … */
__pyx_v_itemidxit = __pyx_v_chart->itemindex.lower_bound(__pyx_v_tmpitem);
+0489: sibvec.clear()
__pyx_v_sibvec.clear();
/* … */
__pyx_v_sibvec.clear();
+0490: while (itemidxit != chart.itemindex.end()
while (1) {
/* … */
__pyx_t_3 = ((__pyx_v_itemidxit != __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L43_bool_binop_done;
}
/* … */
while (1) {
/* … */
__pyx_t_3 = ((__pyx_v_itemidxit != __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L43_bool_binop_done;
}
+0491: and dereference(itemidxit).first.label == rule.rhs2):
__pyx_t_3 = (((*__pyx_v_itemidxit).first.label == __pyx_v_rule->rhs2) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L43_bool_binop_done:;
if (!__pyx_t_4) break;
__pyx_t_3 = (((*__pyx_v_itemidxit).first.label == __pyx_v_rule->rhs2) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L43_bool_binop_done:;
if (!__pyx_t_4) break;
+0492: sib = dereference(itemidxit).first
__pyx_t_25 = (*__pyx_v_itemidxit).first;
__pyx_v_sib = __pyx_t_25;
/* … */
__pyx_t_24 = (*__pyx_v_itemidxit).first;
__pyx_v_sib = __pyx_t_24;
+0493: sibidx = dereference(itemidxit).second
__pyx_t_11 = (*__pyx_v_itemidxit).second;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_t_11 = (*__pyx_v_itemidxit).second;
__pyx_v_sibidx = __pyx_t_11;
+0494: sibvec.push_back(sibidx)
try {
__pyx_v_sibvec.push_back(__pyx_v_sibidx);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 494, __pyx_L1_error)
}
/* … */
try {
__pyx_v_sibvec.push_back(__pyx_v_sibidx);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 494, __pyx_L1_error)
}
+0495: postincrement(itemidxit)
(__pyx_v_itemidxit++);
}
/* … */
(__pyx_v_itemidxit++);
}
+0496: for sibidx in sibvec:
__pyx_t_26 = __pyx_v_sibvec.begin();
for (;;) {
if (!(__pyx_t_26 != __pyx_v_sibvec.end())) break;
__pyx_t_11 = *__pyx_t_26;
++__pyx_t_26;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_L45_continue:;
}
__pyx_L38_continue:;
}
__pyx_L39_break:;
}
__pyx_L11:;
/* … */
__pyx_t_25 = __pyx_v_sibvec.begin();
for (;;) {
if (!(__pyx_t_25 != __pyx_v_sibvec.end())) break;
__pyx_t_11 = *__pyx_t_25;
++__pyx_t_25;
__pyx_v_sibidx = __pyx_t_11;
/* … */
__pyx_L45_continue:;
}
__pyx_L38_continue:;
}
__pyx_L39_break:;
}
__pyx_L11:;
+0497: sib = chart.items[sibidx]
__pyx_v_sib = (__pyx_v_chart->items[__pyx_v_sibidx]);
/* … */
__pyx_v_sib = (__pyx_v_chart->items[__pyx_v_sibidx]);
+0498: if concat[LCFRSItem_fused](rule, &item, &sib):
__pyx_t_4 = (__pyx_fuse_0__pyx_f_8discodop_6plcfrs_concat(__pyx_v_rule, (&__pyx_v_item), (&__pyx_v_sib)) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = (__pyx_fuse_1__pyx_f_8discodop_6plcfrs_concat(__pyx_v_rule, (&__pyx_v_item), (&__pyx_v_sib)) != 0);
if (__pyx_t_4) {
/* … */
}
+0499: newitem.label = rule.lhs
__pyx_t_24 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_24;
/* … */
__pyx_t_23 = __pyx_v_rule->lhs;
__pyx_v_newitem.label = __pyx_t_23;
+0500: combine_item[LCFRSItem_fused](&newitem, &item, &sib)
__pyx_fuse_0__pyx_f_8discodop_6plcfrs_combine_item((&__pyx_v_newitem), (&__pyx_v_item), (&__pyx_v_sib));
/* … */
__pyx_fuse_1__pyx_f_8discodop_6plcfrs_combine_item((&__pyx_v_newitem), (&__pyx_v_item), (&__pyx_v_sib));
+0501: siblingprob = chart.probs[sibidx]
__pyx_v_siblingprob = (__pyx_v_chart->__pyx_base.__pyx_base.probs[__pyx_v_sibidx]);
/* … */
__pyx_v_siblingprob = (__pyx_v_chart->__pyx_base.__pyx_base.probs[__pyx_v_sibidx]);
+0502: if siblingprob == INFINITY:
__pyx_t_4 = ((__pyx_v_siblingprob == HUGE_VAL) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_siblingprob == HUGE_VAL) != 0);
if (__pyx_t_4) {
/* … */
}
+0503: continue
goto __pyx_L45_continue;
/* … */
goto __pyx_L45_continue;
+0504: score = newprob = prob + siblingprob + rule.prob
__pyx_t_12 = ((__pyx_v_prob + __pyx_v_siblingprob) + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
/* … */
__pyx_t_12 = ((__pyx_v_prob + __pyx_v_siblingprob) + __pyx_v_rule->prob);
__pyx_v_score = __pyx_t_12;
__pyx_v_newprob = __pyx_t_12;
0505: if LCFRSItem_fused is SmallChartItem:
+0506: length = bitcount(newitem.vec)
__pyx_v_length = __pyx_f_8discodop_3bit_bitcount(__pyx_v_newitem.vec, 0);
0507: elif LCFRSItem_fused is FatChartItem:
+0508: length = abitcount(newitem.vec, SLOTS)
__pyx_v_length = __pyx_f_8discodop_3bit_abitcount(__pyx_v_newitem.vec, 2);
+0509: if estimatetype == SX or estimatetype == SXlrgaps:
switch (__pyx_v_estimatetype) {
case 1:
case 2:
/* … */
break;
default: break;
}
/* … */
switch (__pyx_v_estimatetype) {
case 1:
case 2:
/* … */
break;
default: break;
}
0510: if LCFRSItem_fused is SmallChartItem:
+0511: left = nextset(newitem.vec, 0)
__pyx_v_left = __pyx_f_8discodop_3bit_nextset(__pyx_v_newitem.vec, 0);
0512: elif LCFRSItem_fused is FatChartItem:
+0513: left = anextset(newitem.vec, 0, SLOTS)
__pyx_v_left = __pyx_f_8discodop_3bit_anextset(__pyx_v_newitem.vec, 0, 2);
+0514: if estimatetype == SX:
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
/* … */
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
+0515: right = lensent - length - left
__pyx_v_right = ((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left);
/* … */
__pyx_v_right = ((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left);
+0516: score += outside[rule.lhs, left, right, 0]
__pyx_t_35 = __pyx_v_rule->lhs;
__pyx_t_36 = __pyx_v_left;
__pyx_t_37 = __pyx_v_right;
__pyx_t_38 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_35 * __pyx_v_outside.strides[0]) ) + __pyx_t_36 * __pyx_v_outside.strides[1]) ) + __pyx_t_37 * __pyx_v_outside.strides[2]) ) + __pyx_t_38 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_34 = __pyx_v_rule->lhs;
__pyx_t_35 = __pyx_v_left;
__pyx_t_36 = __pyx_v_right;
__pyx_t_37 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_34 * __pyx_v_outside.strides[0]) ) + __pyx_t_35 * __pyx_v_outside.strides[1]) ) + __pyx_t_36 * __pyx_v_outside.strides[2]) ) + __pyx_t_37 * __pyx_v_outside.strides[3]) ))));
+0517: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0518: continue
goto __pyx_L45_continue;
/* … */
goto __pyx_L45_continue;
+0519: elif estimatetype == SXlrgaps:
case 2:
/* … */
break;
default:
/* … */
case 2:
/* … */
break;
default:
0520: if LCFRSItem_fused is SmallChartItem:
+0521: gaps = bitlength(newitem.vec) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_bitlength(__pyx_v_newitem.vec) - __pyx_v_length) - __pyx_v_left);
0522: elif LCFRSItem_fused is FatChartItem:
0523: gaps = abitlength(newitem.vec, SLOTS
+0524: ) - length - left
__pyx_v_gaps = ((__pyx_f_8discodop_3bit_abitlength(__pyx_v_newitem.vec, 2) - __pyx_v_length) - __pyx_v_left);
+0525: right = lensent - length - left - gaps
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
/* … */
__pyx_v_right = (((__pyx_v_lensent - __pyx_v_length) - __pyx_v_left) - __pyx_v_gaps);
+0526: score += outside[rule.lhs, length,
__pyx_t_39 = __pyx_v_rule->lhs;
__pyx_t_40 = __pyx_v_length;
__pyx_t_41 = (__pyx_v_left + __pyx_v_right);
__pyx_t_42 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_39 * __pyx_v_outside.strides[0]) ) + __pyx_t_40 * __pyx_v_outside.strides[1]) ) + __pyx_t_41 * __pyx_v_outside.strides[2]) ) + __pyx_t_42 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_38 = __pyx_v_rule->lhs;
__pyx_t_39 = __pyx_v_length;
__pyx_t_40 = (__pyx_v_left + __pyx_v_right);
__pyx_t_41 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_38 * __pyx_v_outside.strides[0]) ) + __pyx_t_39 * __pyx_v_outside.strides[1]) ) + __pyx_t_40 * __pyx_v_outside.strides[2]) ) + __pyx_t_41 * __pyx_v_outside.strides[3]) ))));
0527: left + right, gaps]
+0528: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0529: continue
goto __pyx_L45_continue;
/* … */
goto __pyx_L45_continue;
0530: else:
+0531: score += length * MAX_LOGPROB
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
/* … */
__pyx_v_score = (__pyx_v_score + (__pyx_v_length * 300.0));
break;
}
+0532: if process_edge[LCFRSItem_fused, LCFRSChart_fused](
__pyx_t_3 = (__pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_itemidx, __pyx_v_item, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_4, __pyx_v_markorigin, __pyx_t_12) != 0);
if (__pyx_t_3) {
goto __pyx_L51;
}
/* … */
__pyx_t_3 = (__pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_edge(__pyx_v_newitem, __pyx_v_newprob, __pyx_v_score, __pyx_v_rule, __pyx_v_itemidx, __pyx_v_item, ((Agenda<ItemNo,std::pair<Prob,Prob> > &)__pyx_v_agenda), __pyx_v_chart, __pyx_v_estimatetype, __pyx_v_whitelist, __pyx_t_4, __pyx_v_markorigin, __pyx_t_12) != 0);
if (__pyx_t_3) {
goto __pyx_L51;
}
0533: newitem, newprob, score, rule, itemidx, item,
0534: agenda, chart, estimatetype, whitelist,
+0535: splitprune and grammar.fanout[rule.lhs] != 1,
__pyx_t_3 = (__pyx_v_splitprune != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L52_bool_binop_done;
}
__pyx_t_3 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L52_bool_binop_done:;
/* … */
__pyx_t_3 = (__pyx_v_splitprune != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L52_bool_binop_done;
}
__pyx_t_3 = (((__pyx_v_grammar->fanout[__pyx_v_rule->lhs]) != 1) != 0);
__pyx_t_4 = __pyx_t_3;
__pyx_L52_bool_binop_done:;
0536: markorigin,
+0537: beam_beta if length <= beam_delta else 0.0):
if (((__pyx_v_length <= __pyx_v_beam_delta) != 0)) {
__pyx_t_12 = __pyx_v_beam_beta;
} else {
__pyx_t_12 = 0.0;
}
/* … */
if (((__pyx_v_length <= __pyx_v_beam_delta) != 0)) {
__pyx_t_12 = __pyx_v_beam_beta;
} else {
__pyx_t_12 = 0.0;
}
0538: pass
0539: else:
+0540: blocked += 1
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L51:;
/* … */
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L51:;
+0541: if agenda.size() > maxA:
__pyx_t_3 = ((__pyx_v_agenda.size() > __pyx_v_maxA) != 0);
if (__pyx_t_3) {
/* … */
}
}
__pyx_L10_break:;
/* … */
__pyx_t_3 = ((__pyx_v_agenda.size() > __pyx_v_maxA) != 0);
if (__pyx_t_3) {
/* … */
}
}
__pyx_L10_break:;
+0542: maxA = agenda.size()
__pyx_v_maxA = __pyx_v_agenda.size();
/* … */
__pyx_v_maxA = __pyx_v_agenda.size();
+0543: msg = ('%s, blocked %d, agenda max %d, now %d' % (
__pyx_t_10 = PyUnicode_Format(__pyx_kp_u_s_blocked_d_agenda_max_d_now_d, __pyx_t_43); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_43); __pyx_t_43 = 0; __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_10); __pyx_t_10 = 0; /* … */ __pyx_t_10 = PyUnicode_Format(__pyx_kp_u_s_blocked_d_agenda_max_d_now_d, __pyx_t_42); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_42); __pyx_t_42 = 0; __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_10); __pyx_t_10 = 0;
+0544: chart.stats(), blocked, maxA, agenda.size()))
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_stats); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); } } if (__pyx_t_6) { __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_blocked); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyInt_FromSize_t(__pyx_v_maxA); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = __Pyx_PyInt_FromSize_t(__pyx_v_agenda.size()); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_43 = PyTuple_New(4); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_43); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_43, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_43, 1, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_43, 2, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_43, 3, __pyx_t_10); __pyx_t_5 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0; /* … */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_stats); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); } } if (__pyx_t_6) { __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_blocked); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyInt_FromSize_t(__pyx_v_maxA); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = __Pyx_PyInt_FromSize_t(__pyx_v_agenda.size()); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_42 = PyTuple_New(4); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_42); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_42, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_42, 1, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_42, 2, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_42, 3, __pyx_t_10); __pyx_t_5 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_10 = 0;
+0545: if not chart:
__pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 545, __pyx_L1_error) __pyx_t_4 = ((!__pyx_t_3) != 0); if (__pyx_t_4) { /* … */ } /* … */ __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 545, __pyx_L1_error) __pyx_t_4 = ((!__pyx_t_3) != 0); if (__pyx_t_4) { /* … */ }
+0546: return chart, 'no parse; ' + msg
__Pyx_XDECREF(__pyx_r); __pyx_t_10 = PyNumber_Add(__pyx_kp_u_no_parse, __pyx_v_msg); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_43 = PyTuple_New(2); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_43); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_43, 0, ((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_43, 1, __pyx_t_10); __pyx_t_10 = 0; __pyx_r = __pyx_t_43; __pyx_t_43 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_10 = PyNumber_Add(__pyx_kp_u_no_parse, __pyx_v_msg); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_42 = PyTuple_New(2); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_42); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_42, 0, ((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_42, 1, __pyx_t_10); __pyx_t_10 = 0; __pyx_r = __pyx_t_42; __pyx_t_42 = 0; goto __pyx_L0;
+0547: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_43 = PyTuple_New(2); if (unlikely(!__pyx_t_43)) __PYX_ERR(0, 547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_43); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_43, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_43, 1, __pyx_v_msg); __pyx_r = __pyx_t_43; __pyx_t_43 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_42 = PyTuple_New(2); if (unlikely(!__pyx_t_42)) __PYX_ERR(0, 547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_42); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_42, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_42, 1, __pyx_v_msg); __pyx_r = __pyx_t_42; __pyx_t_42 = 0; goto __pyx_L0;
0548:
0549:
+0550: cdef inline bint process_edge(LCFRSItem_fused newitem,
static CYTHON_INLINE int __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_edge(SmallChartItem __pyx_v_newitem, Prob __pyx_v_prob, Prob __pyx_v_score, ProbRule *__pyx_v_rule, ItemNo __pyx_v_leftitemidx, SmallChartItem &__pyx_v_left, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_chart, int __pyx_v_estimatetype, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin, Prob __pyx_v_beam) {
Label __pyx_v_label;
ItemNo __pyx_v_itemidx;
int __pyx_v_inagenda;
int __pyx_v_inchart;
std::pair<Prob,Prob> __pyx_v_scoreprob;
Prob __pyx_v_curprob;
SmallChartItemBtreeMap<ItemNo> ::iterator __pyx_v_itemidxit;
CYTHON_UNUSED double __pyx_v_cuprob;
SmallChartItemBtreeMap<Prob> ::iterator __pyx_v_it;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0_0process_edge", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_WriteUnraisable("discodop.plcfrs.process_edge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_edge(FatChartItem __pyx_v_newitem, Prob __pyx_v_prob, Prob __pyx_v_score, ProbRule *__pyx_v_rule, ItemNo __pyx_v_leftitemidx, FatChartItem &__pyx_v_left, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_chart, int __pyx_v_estimatetype, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin, Prob __pyx_v_beam) {
Label __pyx_v_label;
ItemNo __pyx_v_itemidx;
int __pyx_v_inagenda;
int __pyx_v_inchart;
std::pair<Prob,Prob> __pyx_v_scoreprob;
Prob __pyx_v_curprob;
FatChartItemBtreeMap<ItemNo> ::iterator __pyx_v_itemidxit;
CYTHON_UNUSED double __pyx_v_cuprob;
FatChartItemBtreeMap<Prob> ::iterator __pyx_v_it;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1_1process_edge", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_WriteUnraisable("discodop.plcfrs.process_edge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0551: Prob prob, Prob score, ProbRule *rule,
0552: ItemNo leftitemidx, LCFRSItem_fused& left,
0553: Agenda[ItemNo, pair[Prob, Prob]]& agenda, LCFRSChart_fused chart,
0554: int estimatetype, Whitelist whitelist, bint splitprune,
0555: bint markorigin, Prob beam):
0556: """Decide what to do with a newly derived edge.
0557:
0558: :returns: ``True`` when edge is accepted in the chart, ``False`` when
0559: blocked. When ``False``, ``newitem`` may be reused."""
0560: cdef Label label
0561: cdef ItemNo itemidx
0562: cdef bint inagenda, inchart
0563: cdef pair[Prob, Prob] scoreprob
0564: cdef Prob curprob
0565: # avoid generating code for spurious fused type combinations
0566: if ((LCFRSItem_fused is SmallChartItem
0567: and LCFRSChart_fused is FatLCFRSChart)
0568: or (LCFRSItem_fused is FatChartItem
0569: and LCFRSChart_fused is SmallLCFRSChart)):
0570: return False
+0571: itemidxit = chart.itemindex.find(newitem)
__pyx_v_itemidxit = __pyx_v_chart->itemindex.find(__pyx_v_newitem); /* … */ __pyx_v_itemidxit = __pyx_v_chart->itemindex.find(__pyx_v_newitem);
+0572: if itemidxit == chart.itemindex.end():
__pyx_t_1 = ((__pyx_v_itemidxit == __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
/* … */
__pyx_t_1 = ((__pyx_v_itemidxit == __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+0573: cuprob = INFINITY
__pyx_v_cuprob = HUGE_VAL;
/* … */
__pyx_v_cuprob = HUGE_VAL;
+0574: inagenda = inchart = False
__pyx_v_inagenda = 0;
__pyx_v_inchart = 0;
/* … */
__pyx_v_inagenda = 0;
__pyx_v_inchart = 0;
+0575: itemidx = curprob = 0
__pyx_v_itemidx = 0;
__pyx_v_curprob = 0.0;
/* … */
__pyx_v_itemidx = 0;
__pyx_v_curprob = 0.0;
0576: else:
+0577: itemidx = dereference(itemidxit).second
/*else*/ {
__pyx_t_2 = (*__pyx_v_itemidxit).second;
__pyx_v_itemidx = __pyx_t_2;
/* … */
/*else*/ {
__pyx_t_2 = (*__pyx_v_itemidxit).second;
__pyx_v_itemidx = __pyx_t_2;
+0578: curprob = chart.subtreeprob(itemidx)
__pyx_v_curprob = ((struct __pyx_vtabstruct_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.subtreeprob(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_itemidx);
/* … */
__pyx_v_curprob = ((struct __pyx_vtabstruct_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.subtreeprob(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_itemidx);
+0579: inagenda = agenda.member(itemidx)
__pyx_v_inagenda = __pyx_v_agenda.member(__pyx_v_itemidx);
/* … */
__pyx_v_inagenda = __pyx_v_agenda.member(__pyx_v_itemidx);
+0580: inchart = chart.parseforest[itemidx].size() != 0
__pyx_v_inchart = ((__pyx_v_chart->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).size() != 0);
}
__pyx_L3:;
/* … */
__pyx_v_inchart = ((__pyx_v_chart->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).size() != 0);
}
__pyx_L3:;
+0581: scoreprob.first = score
__pyx_v_scoreprob.first = __pyx_v_score; /* … */ __pyx_v_scoreprob.first = __pyx_v_score;
+0582: scoreprob.second = prob
__pyx_v_scoreprob.second = __pyx_v_prob; /* … */ __pyx_v_scoreprob.second = __pyx_v_prob;
+0583: if not inagenda and not inchart:
__pyx_t_3 = ((!(__pyx_v_inagenda != 0)) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = ((!(__pyx_v_inchart != 0)) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
/* … */
__pyx_t_3 = ((!(__pyx_v_inagenda != 0)) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3 = ((!(__pyx_v_inchart != 0)) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
0584: # check if we need to prune this item
+0585: if whitelist is not None and not checkwhitelist(
__pyx_t_3 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L8_bool_binop_done;
}
/* … */
__pyx_t_4 = ((!(__pyx_fuse_0__pyx_f_8discodop_6plcfrs_checkwhitelist(__pyx_v_newitem, __pyx_v_whitelist, __pyx_v_splitprune, __pyx_v_markorigin) != 0)) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L8_bool_binop_done:;
/* … */
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_3 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L8_bool_binop_done;
}
/* … */
__pyx_t_4 = ((!(__pyx_fuse_1__pyx_f_8discodop_6plcfrs_checkwhitelist(__pyx_v_newitem, __pyx_v_whitelist, __pyx_v_splitprune, __pyx_v_markorigin) != 0)) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L8_bool_binop_done:;
/* … */
if (__pyx_t_1) {
/* … */
}
0586: newitem, whitelist, splitprune, markorigin):
+0587: return False
__pyx_r = 0;
goto __pyx_L0;
/* … */
__pyx_r = 0;
goto __pyx_L0;
+0588: elif beam:
__pyx_t_1 = (__pyx_v_beam != 0);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_beam != 0);
if (__pyx_t_1) {
/* … */
}
+0589: label = newitem.label
__pyx_t_5 = __pyx_v_newitem.label;
__pyx_v_label = __pyx_t_5;
/* … */
__pyx_t_5 = __pyx_v_newitem.label;
__pyx_v_label = __pyx_t_5;
+0590: newitem.label = 0
__pyx_v_newitem.label = 0;
/* … */
__pyx_v_newitem.label = 0;
+0591: it = chart.beambuckets.find(newitem)
__pyx_v_it = __pyx_v_chart->beambuckets.find(__pyx_v_newitem);
/* … */
__pyx_v_it = __pyx_v_chart->beambuckets.find(__pyx_v_newitem);
+0592: if (it == chart.beambuckets.end()
__pyx_t_4 = ((__pyx_v_it == __pyx_v_chart->beambuckets.end()) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L11_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
goto __pyx_L10;
}
/* … */
__pyx_t_4 = ((__pyx_v_it == __pyx_v_chart->beambuckets.end()) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L11_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
goto __pyx_L10;
}
+0593: or prob + beam < dereference(it).second):
__pyx_t_4 = (((__pyx_v_prob + __pyx_v_beam) < (*__pyx_v_it).second) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L11_bool_binop_done:;
/* … */
__pyx_t_4 = (((__pyx_v_prob + __pyx_v_beam) < (*__pyx_v_it).second) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L11_bool_binop_done:;
+0594: chart.beambuckets[newitem] = prob + beam
(__pyx_v_chart->beambuckets[__pyx_v_newitem]) = (__pyx_v_prob + __pyx_v_beam);
/* … */
(__pyx_v_chart->beambuckets[__pyx_v_newitem]) = (__pyx_v_prob + __pyx_v_beam);
+0595: elif prob > dereference(it).second:
__pyx_t_1 = ((__pyx_v_prob > (*__pyx_v_it).second) != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L10:;
/* … */
__pyx_t_1 = ((__pyx_v_prob > (*__pyx_v_it).second) != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L10:;
+0596: return False
__pyx_r = 0;
goto __pyx_L0;
/* … */
__pyx_r = 0;
goto __pyx_L0;
+0597: newitem.label = label
__pyx_v_newitem.label = __pyx_v_label;
/* … */
__pyx_v_newitem.label = __pyx_v_label;
0598: # haven't seen this item before, won't prune, add to agenda
+0599: itemidx = chart.itemindex[newitem] = chart.items.size()
__pyx_t_6 = __pyx_v_chart->items.size();
__pyx_v_itemidx = __pyx_t_6;
(__pyx_v_chart->itemindex[__pyx_v_newitem]) = __pyx_t_6;
/* … */
__pyx_t_6 = __pyx_v_chart->items.size();
__pyx_v_itemidx = __pyx_t_6;
(__pyx_v_chart->itemindex[__pyx_v_newitem]) = __pyx_t_6;
+0600: chart.items.push_back(newitem)
try {
__pyx_v_chart->items.push_back(__pyx_v_newitem);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 600, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->items.push_back(__pyx_v_newitem);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 600, __pyx_L1_error)
}
+0601: chart.parseforest.resize(chart.items.size())
try {
__pyx_v_chart->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_chart->items.size());
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 601, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_chart->items.size());
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 601, __pyx_L1_error)
}
+0602: chart.probs.push_back(INFINITY)
try {
__pyx_v_chart->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 602, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 602, __pyx_L1_error)
}
+0603: agenda.setitem(itemidx, scoreprob)
__pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob);
/* … */
__pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob);
0604: # in agenda (maybe in chart)
+0605: elif inagenda:
__pyx_t_1 = (__pyx_v_inagenda != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
/* … */
__pyx_t_1 = (__pyx_v_inagenda != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
0606: # lower score? => decrease-key in agenda
+0607: agenda.setifbetter(itemidx, scoreprob)
__pyx_v_agenda.setifbetter(__pyx_v_itemidx, __pyx_v_scoreprob);
/* … */
__pyx_v_agenda.setifbetter(__pyx_v_itemidx, __pyx_v_scoreprob);
0608: # not in agenda => must be in chart
+0609: elif not inagenda and prob < curprob:
__pyx_t_4 = ((!(__pyx_v_inagenda != 0)) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_4 = ((__pyx_v_prob < __pyx_v_curprob) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
__pyx_L4:;
/* … */
__pyx_t_4 = ((!(__pyx_v_inagenda != 0)) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L13_bool_binop_done;
}
__pyx_t_4 = ((__pyx_v_prob < __pyx_v_curprob) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L13_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
__pyx_L4:;
0610: # re-add to agenda because we found a better score.
+0611: agenda.setitem(itemidx, scoreprob)
__pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob);
/* … */
__pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob);
+0612: if estimatetype != SXlrgaps:
__pyx_t_1 = ((__pyx_v_estimatetype != 2) != 0);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = ((__pyx_v_estimatetype != 2) != 0);
if (__pyx_t_1) {
/* … */
}
0613: # This should only happen because of an inconsistent or
0614: # non-monotonic estimate.
+0615: logging.warning('WARN: re-adding item to agenda already in chart:'
__pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_warning); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* … */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_warning); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0616: ' %s', chart.itemstr(itemidx))
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); } } if (!__pyx_t_12) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12); __pyx_t_12 = NULL; __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = NULL; __pyx_t_14 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_9, function); __pyx_t_14 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_9)) { PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_WARN_re_adding_item_to_agenda_al, __pyx_t_8}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_WARN_re_adding_item_to_agenda_al, __pyx_t_8}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else #endif { __pyx_t_13 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); if (__pyx_t_10) { __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL; } __Pyx_INCREF(__pyx_kp_u_WARN_re_adding_item_to_agenda_al); __Pyx_GIVEREF(__pyx_kp_u_WARN_re_adding_item_to_agenda_al); PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_14, __pyx_kp_u_WARN_re_adding_item_to_agenda_al); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_14, __pyx_t_8); __pyx_t_8 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* … */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); } } if (!__pyx_t_12) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_11}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12); __pyx_t_12 = NULL; __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = NULL; __pyx_t_14 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_9, function); __pyx_t_14 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_9)) { PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_WARN_re_adding_item_to_agenda_al, __pyx_t_8}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_WARN_re_adding_item_to_agenda_al, __pyx_t_8}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_14, 2+__pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else #endif { __pyx_t_13 = PyTuple_New(2+__pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); if (__pyx_t_10) { __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL; } __Pyx_INCREF(__pyx_kp_u_WARN_re_adding_item_to_agenda_al); __Pyx_GIVEREF(__pyx_kp_u_WARN_re_adding_item_to_agenda_al); PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_14, __pyx_kp_u_WARN_re_adding_item_to_agenda_al); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_14, __pyx_t_8); __pyx_t_8 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 615, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
0617: # store this edge, regardless of whether the item was new (unary chains)
+0618: chart.addedge(itemidx, leftitemidx, left, rule)
__pyx_f_8discodop_6plcfrs_15SmallLCFRSChart_addedge(__pyx_v_chart, __pyx_v_itemidx, __pyx_v_leftitemidx, __pyx_v_left, __pyx_v_rule); /* … */ __pyx_f_8discodop_6plcfrs_13FatLCFRSChart_addedge(__pyx_v_chart, __pyx_v_itemidx, __pyx_v_leftitemidx, __pyx_v_left, __pyx_v_rule);
+0619: return True
__pyx_r = 1; goto __pyx_L0; /* … */ __pyx_r = 1; goto __pyx_L0;
0620:
0621:
+0622: cdef populatepos(Grammar grammar,
static PyObject *__pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_populatepos(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_chart, CYTHON_UNUSED SmallChartItem __pyx_v_item, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, PyObject *__pyx_v_estimates) {
LexicalRule __pyx_v_lexrule;
SmallChartItem __pyx_v_newitem;
__Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
Prob __pyx_v_score;
short __pyx_v_wordidx;
short __pyx_v_lensent;
short __pyx_v_estimatetype;
int __pyx_v_length;
int __pyx_v_left;
int __pyx_v_right;
int __pyx_v_gaps;
Label __pyx_v_lhs;
int __pyx_v_recognized;
PyObject *__pyx_v_estimatetypestr = NULL;
PyObject *__pyx_v_word = NULL;
PyObject *__pyx_v_tag = NULL;
PyObject *__pyx_v_tagre = NULL;
spp::sparse_hash_map<std::string,std::vector<uint32_t> > ::iterator __pyx_v_it;
uint32_t __pyx_v_n;
std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> > __pyx_v_x;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0_0populatepos", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("discodop.plcfrs.populatepos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
__Pyx_XDECREF(__pyx_v_estimatetypestr);
__Pyx_XDECREF(__pyx_v_word);
__Pyx_XDECREF(__pyx_v_tag);
__Pyx_XDECREF(__pyx_v_tagre);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_populatepos(struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_chart, FatChartItem __pyx_v_item, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, PyObject *__pyx_v_estimates) {
LexicalRule __pyx_v_lexrule;
FatChartItem __pyx_v_newitem;
__Pyx_memviewslice __pyx_v_outside = { 0, 0, { 0 }, { 0 }, { 0 } };
Prob __pyx_v_score;
short __pyx_v_wordidx;
short __pyx_v_lensent;
short __pyx_v_estimatetype;
int __pyx_v_length;
int __pyx_v_left;
int __pyx_v_right;
int __pyx_v_gaps;
Label __pyx_v_lhs;
int __pyx_v_recognized;
PyObject *__pyx_v_estimatetypestr = NULL;
PyObject *__pyx_v_word = NULL;
PyObject *__pyx_v_tag = NULL;
PyObject *__pyx_v_tagre = NULL;
spp::sparse_hash_map<std::string,std::vector<uint32_t> > ::iterator __pyx_v_it;
uint32_t __pyx_v_n;
std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> > __pyx_v_x;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1_1populatepos", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_14);
__Pyx_XDECREF(__pyx_t_15);
__Pyx_AddTraceback("discodop.plcfrs.populatepos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1);
__Pyx_XDECREF(__pyx_v_estimatetypestr);
__Pyx_XDECREF(__pyx_v_word);
__Pyx_XDECREF(__pyx_v_tag);
__Pyx_XDECREF(__pyx_v_tagre);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0623: Agenda[ItemNo, pair[Prob, Prob]]& agenda, LCFRSChart_fused chart,
0624: LCFRSItem_fused item, sent, tags, Whitelist whitelist, estimates):
0625: """Apply all possible lexical and unary rules on each lexical span.
0626:
0627: :returns: a tuple ``(success, msg)`` where ``success`` is True if a POS tag
0628: was found for every word in the sentence."""
0629: cdef:
0630: LexicalRule lexrule
0631: LCFRSItem_fused newitem
+0632: double [:, :, :, :] outside = None # outside estimates, if provided
__pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(Py_None); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 632, __pyx_L1_error) __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; /* … */ __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(Py_None); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 632, __pyx_L1_error) __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL;
0633: Prob score
+0634: short wordidx, lensent = len(sent), estimatetype = 0
__pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 634, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2; __pyx_v_estimatetype = 0; /* … */ __pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 634, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2; __pyx_v_estimatetype = 0;
+0635: int length = 1, left = 0, right = 0, gaps = 0
__pyx_v_length = 1; __pyx_v_left = 0; __pyx_v_right = 0; __pyx_v_gaps = 0; /* … */ __pyx_v_length = 1; __pyx_v_left = 0; __pyx_v_right = 0; __pyx_v_gaps = 0;
0636: Label lhs
0637: bint recognized
+0638: if estimates is not None:
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_estimates != Py_None);
__pyx_t_4 = (__pyx_t_3 != 0);
if (__pyx_t_4) {
/* … */
}
+0639: estimatetypestr, outside = estimates
if ((likely(PyTuple_CheckExact(__pyx_v_estimates))) || (PyList_CheckExact(__pyx_v_estimates))) { PyObject* sequence = __pyx_v_estimates; #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, 639, __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_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_estimates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 639, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 639, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_6); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_estimatetypestr = __pyx_t_5; __pyx_t_5 = 0; __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1); __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; /* … */ if ((likely(PyTuple_CheckExact(__pyx_v_estimates))) || (PyList_CheckExact(__pyx_v_estimates))) { PyObject* sequence = __pyx_v_estimates; #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, 639, __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_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_estimates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 639, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 639, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_6); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 639, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_estimatetypestr = __pyx_t_5; __pyx_t_5 = 0; __PYX_XDEC_MEMVIEW(&__pyx_v_outside, 1); __pyx_v_outside = __pyx_t_1; __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL;
+0640: estimatetype = {'SX': SX, 'SXlrgaps': SXlrgaps}[estimatetypestr]
__pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SX, __pyx_int_1) < 0) __PYX_ERR(0, 640, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SXlrgaps, __pyx_int_2) < 0) __PYX_ERR(0, 640, __pyx_L1_error) __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_t_6, __pyx_v_estimatetypestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_9 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_estimatetype = __pyx_t_9; /* … */ __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SX, __pyx_int_1) < 0) __PYX_ERR(0, 640, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_6, __pyx_n_u_SXlrgaps, __pyx_int_2) < 0) __PYX_ERR(0, 640, __pyx_L1_error) __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_t_6, __pyx_v_estimatetypestr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_9 = __Pyx_PyInt_As_short(__pyx_t_5); if (unlikely((__pyx_t_9 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_estimatetype = __pyx_t_9;
0641: # newitem will be recycled until it is added to the chart
0642: if LCFRSItem_fused is SmallChartItem:
+0643: newitem = SmallChartItem(0, 0)
__pyx_v_newitem = SmallChartItem(0, 0);
0644: elif LCFRSItem_fused is FatChartItem:
+0645: newitem = FatChartItem(0)
__pyx_v_newitem = FatChartItem(0);
0646:
+0647: for wordidx, word in enumerate(sent): # add preterminals to chart
__pyx_t_9 = 0; if (likely(PyList_CheckExact(__pyx_v_sent)) || PyTuple_CheckExact(__pyx_v_sent)) { __pyx_t_5 = __pyx_v_sent; __Pyx_INCREF(__pyx_t_5); __pyx_t_2 = 0; __pyx_t_10 = NULL; } else { __pyx_t_2 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_sent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_10 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 647, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 647, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 647, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } } else { __pyx_t_6 = __pyx_t_10(__pyx_t_5); if (unlikely(!__pyx_t_6)) { 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, 647, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_6); } __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_6); __pyx_t_6 = 0; __pyx_v_wordidx = __pyx_t_9; __pyx_t_9 = (__pyx_t_9 + 1); /* … */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_t_9 = 0; if (likely(PyList_CheckExact(__pyx_v_sent)) || PyTuple_CheckExact(__pyx_v_sent)) { __pyx_t_5 = __pyx_v_sent; __Pyx_INCREF(__pyx_t_5); __pyx_t_2 = 0; __pyx_t_10 = NULL; } else { __pyx_t_2 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_sent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_10 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 647, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 647, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_2); __Pyx_INCREF(__pyx_t_6); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 647, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } } else { __pyx_t_6 = __pyx_t_10(__pyx_t_5); if (unlikely(!__pyx_t_6)) { 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, 647, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_6); } __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_6); __pyx_t_6 = 0; __pyx_v_wordidx = __pyx_t_9; __pyx_t_9 = (__pyx_t_9 + 1); /* … */ } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0648: recognized = False
__pyx_v_recognized = 0;
/* … */
__pyx_v_recognized = 0;
0649: if LCFRSItem_fused is SmallChartItem:
+0650: item = SmallChartItem(0, wordidx)
__pyx_v_item = SmallChartItem(0, __pyx_v_wordidx);
0651: elif LCFRSItem_fused is FatChartItem:
+0652: item = FatChartItem(0)
__pyx_v_item = FatChartItem(0);
+0653: item.vec[0] = wordidx
(__pyx_v_item.vec[0]) = __pyx_v_wordidx;
+0654: tag = tags[wordidx] if tags else None
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 654, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tags, __pyx_v_wordidx, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __pyx_t_7; __pyx_t_7 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tag, __pyx_t_6); __pyx_t_6 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 654, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tags, __pyx_v_wordidx, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __pyx_t_7; __pyx_t_7 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tag, __pyx_t_6); __pyx_t_6 = 0;
0655: # if we are given gold tags, make sure we only allow matching
0656: # tags - after removing addresses introduced by the DOP reduction
0657: # and other state splits.
+0658: tagre = re.compile('%s($|[-@^/])' % re.escape(tag)) if tags else None
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 658, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_compile); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_escape); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); if (likely(__pyx_t_13)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_13); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_14, function); } } if (!__pyx_t_13) { __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_tag); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_14)) { PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_tag}; __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_11); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) { PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_tag}; __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_11); } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13); __pyx_t_13 = NULL; __Pyx_INCREF(__pyx_v_tag); __Pyx_GIVEREF(__pyx_v_tag); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_v_tag); __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_15, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_14 = PyUnicode_Format(__pyx_kp_u_s, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_12, function); } } if (!__pyx_t_11) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_14}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_14}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_11); __pyx_t_11 = NULL; __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_14); __pyx_t_14 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_6 = __pyx_t_7; __pyx_t_7 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tagre, __pyx_t_6); __pyx_t_6 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 658, __pyx_L1_error) if (__pyx_t_4) { __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_compile); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_escape); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) { __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); if (likely(__pyx_t_13)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); __Pyx_INCREF(__pyx_t_13); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_14, function); } } if (!__pyx_t_13) { __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_tag); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_14)) { PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_tag}; __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_11); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) { PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_tag}; __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_GOTREF(__pyx_t_11); } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13); __pyx_t_13 = NULL; __Pyx_INCREF(__pyx_v_tag); __Pyx_GIVEREF(__pyx_v_tag); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_v_tag); __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_15, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_14 = PyUnicode_Format(__pyx_kp_u_s, __pyx_t_11); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_12, function); } } if (!__pyx_t_11) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_14}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_t_14}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_11); __pyx_t_11 = NULL; __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_14); __pyx_t_14 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 658, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_6 = __pyx_t_7; __pyx_t_7 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tagre, __pyx_t_6); __pyx_t_6 = 0;
+0659: if estimates is not None:
__pyx_t_4 = (__pyx_v_estimates != Py_None);
__pyx_t_3 = (__pyx_t_4 != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_4 = (__pyx_v_estimates != Py_None);
__pyx_t_3 = (__pyx_t_4 != 0);
if (__pyx_t_3) {
/* … */
}
+0660: left = wordidx
__pyx_v_left = __pyx_v_wordidx;
/* … */
__pyx_v_left = __pyx_v_wordidx;
+0661: gaps = 0
__pyx_v_gaps = 0;
/* … */
__pyx_v_gaps = 0;
+0662: right = lensent - 1 - wordidx
__pyx_v_right = ((__pyx_v_lensent - 1) - __pyx_v_wordidx);
/* … */
__pyx_v_right = ((__pyx_v_lensent - 1) - __pyx_v_wordidx);
0663: # for n in grammar.lexicalbyword.get(word, ()):
+0664: it = grammar.lexicalbyword.find(word.encode('utf8'))
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_word, __pyx_n_s_encode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_16 = __pyx_convert_string_from_py_std__in_string(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_it = __pyx_v_grammar->lexicalbyword.find(__pyx_t_16); /* … */ __pyx_tuple__6 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6); /* … */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_word, __pyx_n_s_encode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_16 = __pyx_convert_string_from_py_std__in_string(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_it = __pyx_v_grammar->lexicalbyword.find(__pyx_t_16); /* … */ __pyx_tuple__8 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8);
+0665: if it != grammar.lexicalbyword.end():
__pyx_t_3 = ((__pyx_v_it != __pyx_v_grammar->lexicalbyword.end()) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_it != __pyx_v_grammar->lexicalbyword.end()) != 0);
if (__pyx_t_3) {
/* … */
}
+0666: for n in dereference(it).second:
__pyx_t_18 = &(*__pyx_v_it).second;
__pyx_t_17 = __pyx_t_18->begin();
for (;;) {
if (!(__pyx_t_17 != __pyx_t_18->end())) break;
__pyx_t_19 = *__pyx_t_17;
++__pyx_t_17;
__pyx_v_n = __pyx_t_19;
/* … */
__pyx_L10_continue:;
}
/* … */
__pyx_t_18 = &(*__pyx_v_it).second;
__pyx_t_17 = __pyx_t_18->begin();
for (;;) {
if (!(__pyx_t_17 != __pyx_t_18->end())) break;
__pyx_t_19 = *__pyx_t_17;
++__pyx_t_17;
__pyx_v_n = __pyx_t_19;
/* … */
__pyx_L10_continue:;
}
+0667: lexrule = grammar.lexical[n]
__pyx_v_lexrule = (__pyx_v_grammar->lexical[__pyx_v_n]);
/* … */
__pyx_v_lexrule = (__pyx_v_grammar->lexical[__pyx_v_n]);
+0668: if not tags or tagre.match(grammar.tolabel[lexrule.lhs]):
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 668, __pyx_L1_error) __pyx_t_20 = ((!__pyx_t_4) != 0); if (!__pyx_t_20) { } else { __pyx_t_3 = __pyx_t_20; goto __pyx_L13_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lexrule.lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_15 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_15)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_15) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_12}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_12}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 668, __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_12); PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_20 < 0)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = __pyx_t_20; __pyx_L13_bool_binop_done:; if (__pyx_t_3) { /* … */ } /* … */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 668, __pyx_L1_error) __pyx_t_20 = ((!__pyx_t_4) != 0); if (!__pyx_t_20) { } else { __pyx_t_3 = __pyx_t_20; goto __pyx_L13_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lexrule.lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_15 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_15)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_15); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_15) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_12}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_12}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 668, __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_12); PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_20 < 0)) __PYX_ERR(0, 668, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_3 = __pyx_t_20; __pyx_L13_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+0669: score = lexrule.prob
__pyx_t_21 = __pyx_v_lexrule.prob;
__pyx_v_score = __pyx_t_21;
/* … */
__pyx_t_21 = __pyx_v_lexrule.prob;
__pyx_v_score = __pyx_t_21;
+0670: if estimatetype == SX:
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
/* … */
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
+0671: score += outside[lexrule.lhs, left, right, 0]
__pyx_t_22 = __pyx_v_lexrule.lhs;
__pyx_t_23 = __pyx_v_left;
__pyx_t_24 = __pyx_v_right;
__pyx_t_25 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_22 * __pyx_v_outside.strides[0]) ) + __pyx_t_23 * __pyx_v_outside.strides[1]) ) + __pyx_t_24 * __pyx_v_outside.strides[2]) ) + __pyx_t_25 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_22 = __pyx_v_lexrule.lhs;
__pyx_t_23 = __pyx_v_left;
__pyx_t_24 = __pyx_v_right;
__pyx_t_25 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_22 * __pyx_v_outside.strides[0]) ) + __pyx_t_23 * __pyx_v_outside.strides[1]) ) + __pyx_t_24 * __pyx_v_outside.strides[2]) ) + __pyx_t_25 * __pyx_v_outside.strides[3]) ))));
+0672: if score > MAX_LOGPROB:
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
+0673: continue
goto __pyx_L10_continue;
/* … */
goto __pyx_L10_continue;
+0674: elif estimatetype == SXlrgaps:
case 2:
/* … */
break;
default: break;
}
/* … */
case 2:
/* … */
break;
default: break;
}
+0675: score += outside[
__pyx_t_26 = __pyx_v_lexrule.lhs;
__pyx_t_27 = __pyx_v_length;
__pyx_t_28 = (__pyx_v_left + __pyx_v_right);
__pyx_t_29 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_26 * __pyx_v_outside.strides[0]) ) + __pyx_t_27 * __pyx_v_outside.strides[1]) ) + __pyx_t_28 * __pyx_v_outside.strides[2]) ) + __pyx_t_29 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_26 = __pyx_v_lexrule.lhs;
__pyx_t_27 = __pyx_v_length;
__pyx_t_28 = (__pyx_v_left + __pyx_v_right);
__pyx_t_29 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_26 * __pyx_v_outside.strides[0]) ) + __pyx_t_27 * __pyx_v_outside.strides[1]) ) + __pyx_t_28 * __pyx_v_outside.strides[2]) ) + __pyx_t_29 * __pyx_v_outside.strides[3]) ))));
0676: lexrule.lhs, length, left + right, gaps]
+0677: if score > MAX_LOGPROB:
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_3 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_3) {
/* … */
}
+0678: continue
goto __pyx_L10_continue;
/* … */
goto __pyx_L10_continue;
0679: # NB: do NOT add length of span to score, so that the
0680: # scores of POS tags are all strictly smaller than any
0681: # unaries on them.
+0682: newitem.label = lexrule.lhs
__pyx_t_30 = __pyx_v_lexrule.lhs;
__pyx_v_newitem.label = __pyx_t_30;
/* … */
__pyx_t_30 = __pyx_v_lexrule.lhs;
__pyx_v_newitem.label = __pyx_t_30;
0683: if LCFRSItem_fused is SmallChartItem:
+0684: newitem.vec = 1UL << wordidx
__pyx_v_newitem.vec = (1UL << __pyx_v_wordidx);
0685: elif LCFRSItem_fused is FatChartItem:
+0686: memset(<void *>newitem.vec, 0, SLOTS * sizeof(uint64_t))
memset(((void *)__pyx_v_newitem.vec), 0, (2 * (sizeof(uint64_t))));
+0687: SETBIT(newitem.vec, wordidx)
SETBIT(__pyx_v_newitem.vec, __pyx_v_wordidx);
+0688: if process_lexedge[LCFRSItem_fused, LCFRSChart_fused](
__pyx_t_31 = __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_lexedge(__pyx_v_newitem, __pyx_v_lexrule.prob, __pyx_v_score, __pyx_v_wordidx, __pyx_v_agenda, __pyx_v_chart, __pyx_v_whitelist); if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 688, __pyx_L1_error)
__pyx_t_3 = (__pyx_t_31 != 0);
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_31 = __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_lexedge(__pyx_v_newitem, __pyx_v_lexrule.prob, __pyx_v_score, __pyx_v_wordidx, __pyx_v_agenda, __pyx_v_chart, __pyx_v_whitelist); if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 688, __pyx_L1_error)
__pyx_t_3 = (__pyx_t_31 != 0);
if (__pyx_t_3) {
/* … */
}
0689: newitem, lexrule.prob, score, wordidx, agenda, chart,
0690: whitelist):
0691: if LCFRSItem_fused is SmallChartItem:
+0692: newitem = SmallChartItem(0, 0)
__pyx_v_newitem = SmallChartItem(0, 0);
0693: elif LCFRSItem_fused is FatChartItem:
+0694: newitem = FatChartItem(0)
__pyx_v_newitem = FatChartItem(0);
+0695: recognized = True
__pyx_v_recognized = 1;
/* … */
__pyx_v_recognized = 1;
0696: # NB: use gold tags if given, even if (word, tag) was not part of
0697: # training data, modulo state splits etc.
+0698: if not recognized and tag is not None:
__pyx_t_20 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_20) {
} else {
__pyx_t_3 = __pyx_t_20;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_20 = (__pyx_v_tag != Py_None);
__pyx_t_4 = (__pyx_t_20 != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L19_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
/* … */
__pyx_t_20 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_20) {
} else {
__pyx_t_3 = __pyx_t_20;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_20 = (__pyx_v_tag != Py_None);
__pyx_t_4 = (__pyx_t_20 != 0);
__pyx_t_3 = __pyx_t_4;
__pyx_L19_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+0699: for x in grammar.lexicalbylhs:
__pyx_t_33 = &__pyx_v_grammar->lexicalbylhs;
__pyx_t_32 = __pyx_t_33->begin();
for (;;) {
if (!(__pyx_t_32 != __pyx_t_33->end())) break;
__pyx_t_34 = *__pyx_t_32;
++__pyx_t_32;
__pyx_v_x = __pyx_t_34;
/* … */
__pyx_L21_continue:;
}
/* … */
__pyx_t_33 = &__pyx_v_grammar->lexicalbylhs;
__pyx_t_32 = __pyx_t_33->begin();
for (;;) {
if (!(__pyx_t_32 != __pyx_t_33->end())) break;
__pyx_t_34 = *__pyx_t_32;
++__pyx_t_32;
__pyx_v_x = __pyx_t_34;
/* … */
__pyx_L21_continue:;
}
+0700: lhs = x.first
__pyx_t_30 = __pyx_v_x.first;
__pyx_v_lhs = __pyx_t_30;
/* … */
__pyx_t_30 = __pyx_v_x.first;
__pyx_v_lhs = __pyx_t_30;
+0701: if tagre.match(grammar.tolabel[lhs]) is not None:
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_12) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_12); __pyx_t_12 = NULL; __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_14); __pyx_t_14 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = (__pyx_t_7 != Py_None); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* … */ } /* … */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_14 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_12) { __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_GOTREF(__pyx_t_7); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14}; __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } else #endif { __pyx_t_15 = PyTuple_New(1+1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_12); __pyx_t_12 = NULL; __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0+1, __pyx_t_14); __pyx_t_14 = 0; __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = (__pyx_t_7 != Py_None); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* … */ }
+0702: score = 0.0
__pyx_v_score = 0.0;
/* … */
__pyx_v_score = 0.0;
+0703: if estimatetype == SX:
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
/* … */
switch (__pyx_v_estimatetype) {
case 1:
/* … */
break;
+0704: score += outside[lhs, left, right, 0]
__pyx_t_35 = __pyx_v_lhs;
__pyx_t_36 = __pyx_v_left;
__pyx_t_37 = __pyx_v_right;
__pyx_t_38 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_35 * __pyx_v_outside.strides[0]) ) + __pyx_t_36 * __pyx_v_outside.strides[1]) ) + __pyx_t_37 * __pyx_v_outside.strides[2]) ) + __pyx_t_38 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_35 = __pyx_v_lhs;
__pyx_t_36 = __pyx_v_left;
__pyx_t_37 = __pyx_v_right;
__pyx_t_38 = 0;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_35 * __pyx_v_outside.strides[0]) ) + __pyx_t_36 * __pyx_v_outside.strides[1]) ) + __pyx_t_37 * __pyx_v_outside.strides[2]) ) + __pyx_t_38 * __pyx_v_outside.strides[3]) ))));
+0705: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0706: continue
goto __pyx_L21_continue;
/* … */
goto __pyx_L21_continue;
+0707: elif estimatetype == SXlrgaps:
case 2:
/* … */
break;
default: break;
}
/* … */
case 2:
/* … */
break;
default: break;
}
+0708: score += outside[lhs, length, left + right, gaps]
__pyx_t_39 = __pyx_v_lhs;
__pyx_t_40 = __pyx_v_length;
__pyx_t_41 = (__pyx_v_left + __pyx_v_right);
__pyx_t_42 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_39 * __pyx_v_outside.strides[0]) ) + __pyx_t_40 * __pyx_v_outside.strides[1]) ) + __pyx_t_41 * __pyx_v_outside.strides[2]) ) + __pyx_t_42 * __pyx_v_outside.strides[3]) ))));
/* … */
__pyx_t_39 = __pyx_v_lhs;
__pyx_t_40 = __pyx_v_length;
__pyx_t_41 = (__pyx_v_left + __pyx_v_right);
__pyx_t_42 = __pyx_v_gaps;
__pyx_v_score = (__pyx_v_score + (*((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_outside.data + __pyx_t_39 * __pyx_v_outside.strides[0]) ) + __pyx_t_40 * __pyx_v_outside.strides[1]) ) + __pyx_t_41 * __pyx_v_outside.strides[2]) ) + __pyx_t_42 * __pyx_v_outside.strides[3]) ))));
+0709: if score > MAX_LOGPROB:
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_score > 300.0) != 0);
if (__pyx_t_4) {
/* … */
}
+0710: continue
goto __pyx_L21_continue;
/* … */
goto __pyx_L21_continue;
+0711: newitem.label = lhs
__pyx_v_newitem.label = __pyx_v_lhs;
/* … */
__pyx_v_newitem.label = __pyx_v_lhs;
0712: if LCFRSItem_fused is SmallChartItem:
+0713: newitem.vec = 1UL << wordidx
__pyx_v_newitem.vec = (1UL << __pyx_v_wordidx);
0714: elif LCFRSItem_fused is FatChartItem:
+0715: memset(
memset(((void *)__pyx_v_newitem.vec), 0, (2 * (sizeof(uint64_t))));
0716: <void *>newitem.vec, 0,
0717: SLOTS * sizeof(uint64_t))
+0718: SETBIT(newitem.vec, wordidx)
SETBIT(__pyx_v_newitem.vec, __pyx_v_wordidx);
0719: # prevent pruning of provided tags in whitelist
+0720: if process_lexedge[LCFRSItem_fused, LCFRSChart_fused](
__pyx_t_31 = __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_lexedge(__pyx_v_newitem, 0.0, __pyx_v_score, __pyx_v_wordidx, __pyx_v_agenda, __pyx_v_chart, ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None)); if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 720, __pyx_L1_error)
__pyx_t_4 = (__pyx_t_31 != 0);
if (__pyx_t_4) {
/* … */
goto __pyx_L26;
}
/* … */
__pyx_t_31 = __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_lexedge(__pyx_v_newitem, 0.0, __pyx_v_score, __pyx_v_wordidx, __pyx_v_agenda, __pyx_v_chart, ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None)); if (unlikely(__pyx_t_31 == -1)) __PYX_ERR(0, 720, __pyx_L1_error)
__pyx_t_4 = (__pyx_t_31 != 0);
if (__pyx_t_4) {
/* … */
goto __pyx_L26;
}
+0721: newitem, 0.0, score, wordidx, agenda, chart, None):
if (!(likely(((Py_None) == Py_None) || likely(__Pyx_TypeTest(Py_None, __pyx_ptype_8discodop_10containers_Whitelist))))) __PYX_ERR(0, 721, __pyx_L1_error) /* … */ if (!(likely(((Py_None) == Py_None) || likely(__Pyx_TypeTest(Py_None, __pyx_ptype_8discodop_10containers_Whitelist))))) __PYX_ERR(0, 721, __pyx_L1_error)
0722: if LCFRSItem_fused is SmallChartItem:
+0723: newitem = SmallChartItem(0, 0)
__pyx_v_newitem = SmallChartItem(0, 0);
0724: elif LCFRSItem_fused is FatChartItem:
+0725: newitem = FatChartItem(0)
__pyx_v_newitem = FatChartItem(0);
+0726: recognized = True
__pyx_v_recognized = 1;
/* … */
__pyx_v_recognized = 1;
0727: else:
+0728: raise ValueError('tag %r is blocked.' % tag)
/*else*/ {
__pyx_t_7 = PyUnicode_Format(__pyx_kp_u_tag_r_is_blocked, __pyx_v_tag); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
__pyx_t_7 = 0;
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 728, __pyx_L1_error)
}
__pyx_L26:;
/* … */
/*else*/ {
__pyx_t_7 = PyUnicode_Format(__pyx_kp_u_tag_r_is_blocked, __pyx_v_tag); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
__pyx_t_7 = 0;
__pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_Raise(__pyx_t_7, 0, 0, 0);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__PYX_ERR(0, 728, __pyx_L1_error)
}
__pyx_L26:;
+0729: if not recognized:
__pyx_t_4 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_4) {
/* … */
}
+0730: if tag is None and it == grammar.lexicalbyword.end():
__pyx_t_3 = (__pyx_v_tag == Py_None);
__pyx_t_20 = (__pyx_t_3 != 0);
if (__pyx_t_20) {
} else {
__pyx_t_4 = __pyx_t_20;
goto __pyx_L29_bool_binop_done;
}
__pyx_t_20 = ((__pyx_v_it == __pyx_v_grammar->lexicalbyword.end()) != 0);
__pyx_t_4 = __pyx_t_20;
__pyx_L29_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_3 = (__pyx_v_tag == Py_None);
__pyx_t_20 = (__pyx_t_3 != 0);
if (__pyx_t_20) {
} else {
__pyx_t_4 = __pyx_t_20;
goto __pyx_L29_bool_binop_done;
}
__pyx_t_20 = ((__pyx_v_it == __pyx_v_grammar->lexicalbyword.end()) != 0);
__pyx_t_4 = __pyx_t_20;
__pyx_L29_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
+0731: return False, ('no parse: no gold POS tag given '
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_6, 0, Py_False); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); __pyx_t_7 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 731, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_6, 0, Py_False); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); __pyx_t_7 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0;
+0732: 'and word %r not in lexicon' % word)
__pyx_t_7 = PyUnicode_Format(__pyx_kp_u_no_parse_no_gold_POS_tag_given_a, __pyx_v_word); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); /* … */ __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_no_parse_no_gold_POS_tag_given_a, __pyx_v_word); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+0733: elif tag is not None and tag not in grammar.toid:
__pyx_t_20 = (__pyx_v_tag != Py_None);
__pyx_t_3 = (__pyx_t_20 != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_tag, ((PyObject *)__pyx_v_grammar->toid), Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 733, __pyx_L1_error)
__pyx_t_20 = (__pyx_t_3 != 0);
__pyx_t_4 = __pyx_t_20;
__pyx_L31_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_20 = (__pyx_v_tag != Py_None);
__pyx_t_3 = (__pyx_t_20 != 0);
if (__pyx_t_3) {
} else {
__pyx_t_4 = __pyx_t_3;
goto __pyx_L31_bool_binop_done;
}
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_tag, ((PyObject *)__pyx_v_grammar->toid), Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 733, __pyx_L1_error)
__pyx_t_20 = (__pyx_t_3 != 0);
__pyx_t_4 = __pyx_t_20;
__pyx_L31_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
+0734: return False, ('no parse: gold POS tag given '
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_7, 0, Py_False); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_7, 0, Py_False); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0;
+0735: 'but tag %r not in grammar' % tag)
__pyx_t_6 = PyUnicode_Format(__pyx_kp_u_no_parse_gold_POS_tag_given_but, __pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); /* … */ __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_no_parse_gold_POS_tag_given_but, __pyx_v_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 735, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
+0736: return False, 'no parse: all tags for word %r blocked' % word
__Pyx_XDECREF(__pyx_r); __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_no_parse_all_tags_for_word_r_blo, __pyx_v_word); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_6, 0, Py_False); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); __pyx_t_7 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_7 = PyUnicode_Format(__pyx_kp_u_no_parse_all_tags_for_word_r_blo, __pyx_v_word); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_6, 0, Py_False); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); __pyx_t_7 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0;
+0737: return True, ''
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_tuple__7); __pyx_r = __pyx_tuple__7; goto __pyx_L0; /* … */ __pyx_tuple__7 = PyTuple_Pack(2, Py_True, __pyx_kp_u__3); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7); /* … */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_tuple__9); __pyx_r = __pyx_tuple__9; goto __pyx_L0; /* … */ __pyx_tuple__9 = PyTuple_Pack(2, Py_True, __pyx_kp_u__3); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9);
0738:
0739:
+0740: cdef inline int process_lexedge(LCFRSItem_fused newitem,
static CYTHON_INLINE int __pyx_fuse_0_0__pyx_f_8discodop_6plcfrs_process_lexedge(SmallChartItem __pyx_v_newitem, Prob __pyx_v_prob, Prob __pyx_v_score, short __pyx_v_wordidx, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_chart, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
int __pyx_v_inagenda;
int __pyx_v_inchart;
ItemNo __pyx_v_itemidx;
std::pair<Prob,Prob> __pyx_v_scoreprob;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0_0process_lexedge", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.process_lexedge", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_0_1__pyx_f_8discodop_6plcfrs_process_lexedge(CYTHON_UNUSED SmallChartItem __pyx_v_newitem, CYTHON_UNUSED Prob __pyx_v_prob, CYTHON_UNUSED Prob __pyx_v_score, CYTHON_UNUSED short __pyx_v_wordidx, CYTHON_UNUSED Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_chart, CYTHON_UNUSED struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0_1process_lexedge", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_1_0__pyx_f_8discodop_6plcfrs_process_lexedge(CYTHON_UNUSED FatChartItem __pyx_v_newitem, CYTHON_UNUSED Prob __pyx_v_prob, CYTHON_UNUSED Prob __pyx_v_score, CYTHON_UNUSED short __pyx_v_wordidx, CYTHON_UNUSED Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, CYTHON_UNUSED struct __pyx_obj_8discodop_6plcfrs_SmallLCFRSChart *__pyx_v_chart, CYTHON_UNUSED struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1_0process_lexedge", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_1_1__pyx_f_8discodop_6plcfrs_process_lexedge(FatChartItem __pyx_v_newitem, Prob __pyx_v_prob, Prob __pyx_v_score, short __pyx_v_wordidx, Agenda<ItemNo,std::pair<Prob,Prob> > &__pyx_v_agenda, struct __pyx_obj_8discodop_6plcfrs_FatLCFRSChart *__pyx_v_chart, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
int __pyx_v_inagenda;
int __pyx_v_inchart;
ItemNo __pyx_v_itemidx;
std::pair<Prob,Prob> __pyx_v_scoreprob;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1_1process_lexedge", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.process_lexedge", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0741: Prob prob, Prob score, short wordidx,
0742: Agenda[ItemNo, pair[Prob, Prob]]& agenda, LCFRSChart_fused chart,
0743: Whitelist whitelist) except -1:
0744: """Decide whether to accept a lexical edge ``(POS, word)``.
0745:
0746: :returns: ``True`` when edge is accepted in the chart, ``False`` when
0747: blocked. When ``False``, ``newitem`` may be reused."""
0748: cdef bint inagenda, inchart
0749: cdef ItemNo itemidx
0750: cdef pair[Prob, Prob] scoreprob
0751: # avoid generating code for spurious fused type combinations
0752: if LCFRSItem_fused is SmallChartItem and LCFRSChart_fused is FatLCFRSChart:
+0753: return -1
__pyx_r = -1; goto __pyx_L0;
0754: elif (LCFRSItem_fused is FatChartItem
0755: and LCFRSChart_fused is SmallLCFRSChart):
+0756: return -1
__pyx_r = -1; goto __pyx_L0;
+0757: if chart.itemindex.find(newitem) == chart.itemindex.end():
__pyx_t_1 = ((__pyx_v_chart->itemindex.find(__pyx_v_newitem) == __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
/* … */
__pyx_t_1 = ((__pyx_v_chart->itemindex.find(__pyx_v_newitem) == __pyx_v_chart->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+0758: itemidx = chart.itemindex[newitem] = chart.itemindex.size()
__pyx_t_2 = __pyx_v_chart->itemindex.size();
__pyx_v_itemidx = __pyx_t_2;
(__pyx_v_chart->itemindex[__pyx_v_newitem]) = __pyx_t_2;
/* … */
__pyx_t_2 = __pyx_v_chart->itemindex.size();
__pyx_v_itemidx = __pyx_t_2;
(__pyx_v_chart->itemindex[__pyx_v_newitem]) = __pyx_t_2;
+0759: chart.items.push_back(newitem)
try {
__pyx_v_chart->items.push_back(__pyx_v_newitem);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 759, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->items.push_back(__pyx_v_newitem);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 759, __pyx_L1_error)
}
+0760: chart.parseforest.resize(chart.itemindex.size())
try {
__pyx_v_chart->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_chart->itemindex.size());
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 760, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_chart->itemindex.size());
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 760, __pyx_L1_error)
}
0761: # chart.probs.resize(chart.itemindex.size())
+0762: chart.probs.push_back(INFINITY)
try {
__pyx_v_chart->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 762, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 762, __pyx_L1_error)
}
+0763: inagenda = inchart = False
__pyx_v_inagenda = 0;
__pyx_v_inchart = 0;
/* … */
__pyx_v_inagenda = 0;
__pyx_v_inchart = 0;
0764: else:
+0765: itemidx = chart.itemindex[newitem]
/*else*/ {
__pyx_v_itemidx = (__pyx_v_chart->itemindex[__pyx_v_newitem]);
/* … */
/*else*/ {
__pyx_v_itemidx = (__pyx_v_chart->itemindex[__pyx_v_newitem]);
+0766: inchart = chart.parseforest[itemidx].size() != 0
__pyx_v_inchart = ((__pyx_v_chart->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).size() != 0);
/* … */
__pyx_v_inchart = ((__pyx_v_chart->__pyx_base.__pyx_base.parseforest[__pyx_v_itemidx]).size() != 0);
+0767: inagenda = agenda.member(itemidx)
__pyx_v_inagenda = __pyx_v_agenda.member(__pyx_v_itemidx);
}
__pyx_L3:;
/* … */
__pyx_v_inagenda = __pyx_v_agenda.member(__pyx_v_itemidx);
}
__pyx_L3:;
+0768: if inagenda:
__pyx_t_1 = (__pyx_v_inagenda != 0);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_inagenda != 0);
if (__pyx_t_1) {
/* … */
}
+0769: raise ValueError('lexical edge already in agenda: %s' %
__pyx_t_4 = PyUnicode_Format(__pyx_kp_u_lexical_edge_already_in_agenda_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __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 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 769, __pyx_L1_error) /* … */ __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_lexical_edge_already_in_agenda_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __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 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(0, 769, __pyx_L1_error)
+0770: chart.itemstr(itemidx))
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } if (!__pyx_t_6) { __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_3); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif { __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } if (!__pyx_t_6) { __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_3); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_5}; __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else #endif { __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0771: elif inchart:
__pyx_t_1 = (__pyx_v_inchart != 0);
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_1 = (__pyx_v_inchart != 0);
if (__pyx_t_1) {
/* … */
}
+0772: raise ValueError('lexical edge already in chart: %s' %
__pyx_t_3 = PyUnicode_Format(__pyx_kp_u_lexical_edge_already_in_chart_s, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 772, __pyx_L1_error) /* … */ __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_lexical_edge_already_in_chart_s, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 772, __pyx_L1_error)
+0773: chart.itemstr(itemidx))
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = NULL; 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); } } if (!__pyx_t_5) { __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __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; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __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; } else #endif { __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_itemstr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_itemidx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = NULL; 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); } } if (!__pyx_t_5) { __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_4); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __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; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __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; } else #endif { __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
0774: # check if we need to prune this item
+0775: elif whitelist is not None and not checkwhitelist(
__pyx_t_8 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L5_bool_binop_done;
}
/* … */
__pyx_t_9 = ((!(__pyx_fuse_0__pyx_f_8discodop_6plcfrs_checkwhitelist(__pyx_v_newitem, __pyx_v_whitelist, 0, 0) != 0)) != 0);
__pyx_t_1 = __pyx_t_9;
__pyx_L5_bool_binop_done:;
/* … */
if (__pyx_t_1) {
/* … */
}
/* … */
__pyx_t_8 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
} else {
__pyx_t_1 = __pyx_t_9;
goto __pyx_L5_bool_binop_done;
}
/* … */
__pyx_t_9 = ((!(__pyx_fuse_1__pyx_f_8discodop_6plcfrs_checkwhitelist(__pyx_v_newitem, __pyx_v_whitelist, 0, 0) != 0)) != 0);
__pyx_t_1 = __pyx_t_9;
__pyx_L5_bool_binop_done:;
/* … */
if (__pyx_t_1) {
/* … */
}
0776: newitem, whitelist, False, False):
+0777: return False
__pyx_r = 0;
goto __pyx_L0;
/* … */
__pyx_r = 0;
goto __pyx_L0;
0778: # haven't seen this item before, won't prune
+0779: scoreprob.first = score
__pyx_v_scoreprob.first = __pyx_v_score; /* … */ __pyx_v_scoreprob.first = __pyx_v_score;
+0780: scoreprob.second = prob
__pyx_v_scoreprob.second = __pyx_v_prob; /* … */ __pyx_v_scoreprob.second = __pyx_v_prob;
+0781: agenda.setitem(itemidx, scoreprob)
__pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob); /* … */ __pyx_v_agenda.setitem(__pyx_v_itemidx, __pyx_v_scoreprob);
+0782: assert not agenda.empty(), agenda.size()
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((!(__pyx_v_agenda.empty() != 0)) != 0))) {
__pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_agenda.size()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
__pyx_t_3 = 0;
PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 782, __pyx_L1_error)
}
}
#endif
/* … */
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
if (unlikely(!((!(__pyx_v_agenda.empty() != 0)) != 0))) {
__pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_agenda.size()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
__pyx_t_3 = 0;
PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__PYX_ERR(0, 782, __pyx_L1_error)
}
}
#endif
+0783: chart.addlexedge(itemidx, wordidx)
((struct __pyx_vtabstruct_8discodop_6plcfrs_SmallLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.addlexedge(((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_v_chart), __pyx_v_itemidx, __pyx_v_wordidx); /* … */ ((struct __pyx_vtabstruct_8discodop_6plcfrs_FatLCFRSChart *)__pyx_v_chart->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.addlexedge(((struct __pyx_obj_8discodop_6plcfrs_LCFRSChart *)__pyx_v_chart), __pyx_v_itemidx, __pyx_v_wordidx);
+0784: return True
__pyx_r = 1; goto __pyx_L0; /* … */ __pyx_r = 1; goto __pyx_L0;
0785:
0786:
+0787: cdef inline bint checkwhitelist(LCFRSItem_fused newitem, Whitelist whitelist,
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_8discodop_6plcfrs_checkwhitelist(SmallChartItem __pyx_v_newitem, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin) {
uint32_t __pyx_v_cnt;
Label __pyx_v_label;
int __pyx_v_a;
int __pyx_v_b;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0checkwhitelist", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_8discodop_6plcfrs_checkwhitelist(FatChartItem __pyx_v_newitem, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, int __pyx_v_splitprune, int __pyx_v_markorigin) {
uint32_t __pyx_v_n;
uint32_t __pyx_v_cnt;
Label __pyx_v_label;
int __pyx_v_a;
int __pyx_v_b;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1checkwhitelist", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0788: bint splitprune, bint markorigin):
0789: """Return False if item is not on whitelist."""
0790: cdef uint32_t n, cnt
0791: cdef Label label
0792: cdef int a, b
+0793: if whitelist is None:
__pyx_t_1 = (((PyObject *)__pyx_v_whitelist) == Py_None);
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_1 = (((PyObject *)__pyx_v_whitelist) == Py_None);
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
+0794: return True
__pyx_r = 1;
goto __pyx_L0;
/* … */
__pyx_r = 1;
goto __pyx_L0;
+0795: elif splitprune: # disc. item to be treated as several split items?
__pyx_t_2 = (__pyx_v_splitprune != 0);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
/* … */
__pyx_t_2 = (__pyx_v_splitprune != 0);
if (__pyx_t_2) {
/* … */
goto __pyx_L3;
}
+0796: b = cnt = 0
__pyx_v_b = 0;
__pyx_v_cnt = 0;
/* … */
__pyx_v_b = 0;
__pyx_v_cnt = 0;
+0797: if markorigin:
__pyx_t_2 = (__pyx_v_markorigin != 0);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
/* … */
__pyx_t_2 = (__pyx_v_markorigin != 0);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+0798: if whitelist.splitmapping[newitem.label] is NULL:
__pyx_t_2 = (((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label]) == NULL) != 0);
if (__pyx_t_2) {
/* … */
}
/* … */
__pyx_t_2 = (((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label]) == NULL) != 0);
if (__pyx_t_2) {
/* … */
}
+0799: return True
__pyx_r = 1;
goto __pyx_L0;
/* … */
__pyx_r = 1;
goto __pyx_L0;
0800: else:
+0801: if whitelist.mapping[newitem.label] != 0:
/*else*/ {
__pyx_t_2 = (((__pyx_v_whitelist->mapping[__pyx_v_newitem.label]) != 0) != 0);
if (__pyx_t_2) {
/* … */
}
/* … */
/*else*/ {
__pyx_t_2 = (((__pyx_v_whitelist->mapping[__pyx_v_newitem.label]) != 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0802: return True
__pyx_r = 1;
goto __pyx_L0;
/* … */
__pyx_r = 1;
goto __pyx_L0;
0803: if LCFRSItem_fused is SmallChartItem:
+0804: COMPONENT.label = whitelist.splitmapping[
__pyx_v_8discodop_6plcfrs_COMPONENT.label = ((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label])[__pyx_v_cnt]);
}
__pyx_L4:;
0805: newitem.label][cnt]
0806: elif LCFRSItem_fused is FatChartItem:
+0807: FATCOMPONENT.label = whitelist.splitmapping[
__pyx_v_8discodop_6plcfrs_FATCOMPONENT.label = ((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label])[__pyx_v_cnt]);
}
__pyx_L4:;
0808: newitem.label][cnt]
0809: if LCFRSItem_fused is SmallChartItem:
+0810: a = nextset(newitem.vec, b)
__pyx_v_a = __pyx_f_8discodop_3bit_nextset(__pyx_v_newitem.vec, __pyx_v_b);
0811: elif LCFRSItem_fused is FatChartItem:
+0812: a = anextset(newitem.vec, b, SLOTS)
__pyx_v_a = __pyx_f_8discodop_3bit_anextset(__pyx_v_newitem.vec, __pyx_v_b, 2);
+0813: while a != -1:
while (1) {
__pyx_t_2 = ((__pyx_v_a != -1L) != 0);
if (!__pyx_t_2) break;
/* … */
while (1) {
__pyx_t_2 = ((__pyx_v_a != -1L) != 0);
if (!__pyx_t_2) break;
0814: if LCFRSItem_fused is SmallChartItem:
+0815: b = nextunset(newitem.vec, a)
__pyx_v_b = __pyx_f_8discodop_3bit_nextunset(__pyx_v_newitem.vec, __pyx_v_a);
0816: # given a=3, b=6, make bitvector: 1000000 - 1000 = 111000
+0817: COMPONENT.vec = (1UL << b) - (1UL << a)
__pyx_v_8discodop_6plcfrs_COMPONENT.vec = ((1UL << __pyx_v_b) - (1UL << __pyx_v_a));
+0818: if markorigin:
__pyx_t_2 = (__pyx_v_markorigin != 0);
if (__pyx_t_2) {
/* … */
}
+0819: COMPONENT.label = whitelist.splitmapping[
__pyx_v_8discodop_6plcfrs_COMPONENT.label = ((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label])[__pyx_v_cnt]);
0820: newitem.label][cnt]
+0821: if whitelist.small[COMPONENT.label].count(COMPONENT) == 0:
__pyx_t_2 = (((__pyx_v_whitelist->small[__pyx_v_8discodop_6plcfrs_COMPONENT.label]).count(__pyx_v_8discodop_6plcfrs_COMPONENT) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0822: return False
__pyx_r = 0;
goto __pyx_L0;
+0823: a = nextset(newitem.vec, b)
__pyx_v_a = __pyx_f_8discodop_3bit_nextset(__pyx_v_newitem.vec, __pyx_v_b);
0824: elif LCFRSItem_fused is FatChartItem:
+0825: b = anextunset(newitem.vec, a, SLOTS)
__pyx_v_b = __pyx_f_8discodop_3bit_anextunset(__pyx_v_newitem.vec, __pyx_v_a, 2);
0826: # given a=3, b=6, make bitvector: 1000000 - 1000 = 111000
+0827: memset(<void *>FATCOMPONENT.vec, 0, SLOTS * sizeof(uint64_t))
memset(((void *)__pyx_v_8discodop_6plcfrs_FATCOMPONENT.vec), 0, (2 * (sizeof(uint64_t))));
+0828: for n in range(a, b):
__pyx_t_3 = __pyx_v_b;
for (__pyx_t_4 = __pyx_v_a; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_n = __pyx_t_4;
+0829: SETBIT(FATCOMPONENT.vec, n)
SETBIT(__pyx_v_8discodop_6plcfrs_FATCOMPONENT.vec, __pyx_v_n);
}
+0830: if markorigin:
__pyx_t_2 = (__pyx_v_markorigin != 0);
if (__pyx_t_2) {
/* … */
}
+0831: FATCOMPONENT.label = whitelist.splitmapping[
__pyx_v_8discodop_6plcfrs_FATCOMPONENT.label = ((__pyx_v_whitelist->splitmapping[__pyx_v_newitem.label])[__pyx_v_cnt]);
0832: newitem.label][cnt]
+0833: if whitelist.fat[FATCOMPONENT.label].count(
if (__pyx_t_2) {
/* … */
}
+0834: FATCOMPONENT) == 0:
__pyx_t_2 = (((__pyx_v_whitelist->fat[__pyx_v_8discodop_6plcfrs_FATCOMPONENT.label]).count(__pyx_v_8discodop_6plcfrs_FATCOMPONENT) == 0) != 0);
+0835: return False
__pyx_r = 0;
goto __pyx_L0;
+0836: a = anextset(newitem.vec, b, SLOTS)
__pyx_v_a = __pyx_f_8discodop_3bit_anextset(__pyx_v_newitem.vec, __pyx_v_b, 2);
+0837: cnt += 1
__pyx_v_cnt = (__pyx_v_cnt + 1);
}
/* … */
__pyx_v_cnt = (__pyx_v_cnt + 1);
}
+0838: elif whitelist.mapping[newitem.label] != 0:
__pyx_t_2 = (((__pyx_v_whitelist->mapping[__pyx_v_newitem.label]) != 0) != 0);
if (__pyx_t_2) {
/* … */
}
__pyx_L3:;
/* … */
__pyx_t_2 = (((__pyx_v_whitelist->mapping[__pyx_v_newitem.label]) != 0) != 0);
if (__pyx_t_2) {
/* … */
}
__pyx_L3:;
+0839: label = newitem.label
__pyx_t_3 = __pyx_v_newitem.label;
__pyx_v_label = __pyx_t_3;
/* … */
__pyx_t_5 = __pyx_v_newitem.label;
__pyx_v_label = __pyx_t_5;
+0840: newitem.label = whitelist.mapping[label]
__pyx_v_newitem.label = (__pyx_v_whitelist->mapping[__pyx_v_label]);
/* … */
__pyx_v_newitem.label = (__pyx_v_whitelist->mapping[__pyx_v_label]);
0841: if LCFRSItem_fused is SmallChartItem:
+0842: if whitelist.small[newitem.label].count(newitem) == 0:
__pyx_t_2 = (((__pyx_v_whitelist->small[__pyx_v_newitem.label]).count(__pyx_v_newitem) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0843: return False
__pyx_r = 0;
goto __pyx_L0;
0844: elif LCFRSItem_fused is FatChartItem:
+0845: if whitelist.fat[newitem.label].count(newitem) == 0:
__pyx_t_2 = (((__pyx_v_whitelist->fat[__pyx_v_newitem.label]).count(__pyx_v_newitem) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0846: return False
__pyx_r = 0;
goto __pyx_L0;
+0847: newitem.label = label
__pyx_v_newitem.label = __pyx_v_label;
/* … */
__pyx_v_newitem.label = __pyx_v_label;
+0848: return True
__pyx_r = 1; goto __pyx_L0; /* … */ __pyx_r = 1; goto __pyx_L0;
0849:
0850:
+0851: cdef inline void combine_item(LCFRSItem_fused *newitem,
static CYTHON_INLINE void __pyx_fuse_0__pyx_f_8discodop_6plcfrs_combine_item(SmallChartItem *__pyx_v_newitem, SmallChartItem *__pyx_v_left, SmallChartItem *__pyx_v_right) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0combine_item", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static CYTHON_INLINE void __pyx_fuse_1__pyx_f_8discodop_6plcfrs_combine_item(FatChartItem *__pyx_v_newitem, FatChartItem *__pyx_v_left, FatChartItem *__pyx_v_right) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1combine_item", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
0852: LCFRSItem_fused *left, LCFRSItem_fused *right):
0853: if LCFRSItem_fused is SmallChartItem:
+0854: newitem[0].vec = left[0].vec ^ right[0].vec
(__pyx_v_newitem[0]).vec = ((__pyx_v_left[0]).vec ^ (__pyx_v_right[0]).vec);
0855: elif LCFRSItem_fused is FatChartItem:
+0856: setunion(newitem[0].vec, left[0].vec, right[0].vec, SLOTS)
__pyx_f_8discodop_3bit_setunion((__pyx_v_newitem[0]).vec, (__pyx_v_left[0]).vec, (__pyx_v_right[0]).vec, 2);
0857:
0858:
+0859: cdef inline bint concat(ProbRule *rule,
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_8discodop_6plcfrs_concat(ProbRule *__pyx_v_rule, SmallChartItem *__pyx_v_left, SmallChartItem *__pyx_v_right) {
uint64_t __pyx_v_lvec;
uint64_t __pyx_v_rvec;
uint64_t __pyx_v_mask;
int __pyx_v_n;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0concat", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_8discodop_6plcfrs_concat(ProbRule *__pyx_v_rule, FatChartItem *__pyx_v_left, FatChartItem *__pyx_v_right) {
uint64_t *__pyx_v_alvec;
uint64_t *__pyx_v_arvec;
int __pyx_v_lpos;
int __pyx_v_rpos;
int __pyx_v_n;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1concat", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
0860: LCFRSItem_fused *left, LCFRSItem_fused *right):
0861: """Test whether two bitvectors combine according to a given rule.
0862:
0863: Ranges should be non-overlapping, continuous when they are concatenated,
0864: and adhere to the ordering in the yield function. The yield function
0865: indicates for each span whether it should come from the left or right
0866: non-terminal (0 meaning left and 1 right), and whether it is contiguous
0867: with the previous span.
0868:
0869: >>> lvec = 0b0011; rvec = 0b1000
0870: >>> concat(((0, ), (1, )), lvec, rvec)
0871: True # discontinuous, non-overlapping, linearly ordered.
0872: >>> concat(((0, 1), ), lvec, rvec)
0873: False # lvec and rvec are not contiguous
0874: >>> concat(((1, ), (0, )), lvec, rvec)
0875: False # rvec's span should come after lvec's span
0876:
0877: The actual yield functions are encoded in a binary format
0878: (cf. containers.pyx)::
0879: ((0, 1, 0), (1, 0)) ==> args=0b10010; lengths=0b00101
0880: NB: note reversal due to the way binary numbers are represented
0881: the least significant bit (rightmost) corresponds to the lowest
0882: index in the sentence / constituent (leftmost)."""
0883: cdef uint64_t lvec, rvec, mask
0884: cdef uint64_t *alvec
0885: cdef uint64_t *arvec
0886: cdef int lpos, rpos, n
0887: if LCFRSItem_fused is SmallChartItem:
+0888: lvec = left[0].vec
__pyx_t_1 = (__pyx_v_left[0]).vec; __pyx_v_lvec = __pyx_t_1;
+0889: rvec = right[0].vec
__pyx_t_1 = (__pyx_v_right[0]).vec; __pyx_v_rvec = __pyx_t_1;
+0890: if lvec & rvec:
__pyx_t_2 = ((__pyx_v_lvec & __pyx_v_rvec) != 0);
if (__pyx_t_2) {
/* … */
}
+0891: return False
__pyx_r = 0;
goto __pyx_L0;
+0892: mask = rvec if testbit(rule.args, 0) else lvec
if ((__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->args, 0) != 0)) {
__pyx_t_1 = __pyx_v_rvec;
} else {
__pyx_t_1 = __pyx_v_lvec;
}
__pyx_v_mask = __pyx_t_1;
+0893: for n in range(bitlength(rule.lengths)):
__pyx_t_3 = __pyx_f_8discodop_3bit_bitlength(__pyx_v_rule->lengths);
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_n = __pyx_t_4;
+0894: if testbit(rule.args, n): # component from right vector
__pyx_t_2 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->args, __pyx_v_n) != 0);
if (__pyx_t_2) {
/* … */
goto __pyx_L6;
}
+0895: if rvec & mask == 0:
__pyx_t_2 = (((__pyx_v_rvec & __pyx_v_mask) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0896: return False # check for expected component
__pyx_r = 0;
goto __pyx_L0;
+0897: rvec |= rvec - 1 # trailing 0 bits => 1 bits
__pyx_v_rvec = (__pyx_v_rvec | (__pyx_v_rvec - 1));
+0898: mask = rvec & (~rvec - 1) # mask of 1 bits up to first 0 bit
__pyx_v_mask = (__pyx_v_rvec & ((~__pyx_v_rvec) - 1));
0899: else: # component from left vector
+0900: if lvec & mask == 0:
/*else*/ {
__pyx_t_2 = (((__pyx_v_lvec & __pyx_v_mask) == 0) != 0);
if (__pyx_t_2) {
/* … */
}
+0901: return False # check for expected component
__pyx_r = 0;
goto __pyx_L0;
+0902: lvec |= lvec - 1 # trailing 0 bits => 1 bits
__pyx_v_lvec = (__pyx_v_lvec | (__pyx_v_lvec - 1));
+0903: mask = lvec & (~lvec - 1) # mask of 1 bits up to first 0 bit
__pyx_v_mask = (__pyx_v_lvec & ((~__pyx_v_lvec) - 1));
}
__pyx_L6:;
0904: # zero out component
+0905: lvec &= ~mask
__pyx_v_lvec = (__pyx_v_lvec & (~__pyx_v_mask));
+0906: rvec &= ~mask
__pyx_v_rvec = (__pyx_v_rvec & (~__pyx_v_mask));
+0907: if testbit(rule.lengths, n): # a gap
__pyx_t_2 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->lengths, __pyx_v_n) != 0);
if (__pyx_t_2) {
/* … */
}
0908: # check that there is a gap in both vectors
+0909: if (lvec ^ rvec) & (mask + 1):
__pyx_t_2 = (((__pyx_v_lvec ^ __pyx_v_rvec) & (__pyx_v_mask + 1)) != 0);
if (__pyx_t_2) {
/* … */
}
+0910: return False
__pyx_r = 0;
goto __pyx_L0;
0911: # increase mask to cover gap
0912: # get minimum of trailing zero bits of lvec & rvec
+0913: mask = (~lvec & (lvec - 1)) & (~rvec & (rvec - 1))
__pyx_v_mask = (((~__pyx_v_lvec) & (__pyx_v_lvec - 1)) & ((~__pyx_v_rvec) & (__pyx_v_rvec - 1)));
+0914: mask += 1 # e.g., 00111 => 01000
__pyx_v_mask = (__pyx_v_mask + 1); }
0915: # success if we've reached the end of both left and right vector
+0916: return lvec == rvec == 0
__pyx_t_2 = (__pyx_v_lvec == __pyx_v_rvec);
if (__pyx_t_2) {
__pyx_t_2 = (__pyx_v_rvec == 0);
}
__pyx_r = __pyx_t_2;
goto __pyx_L0;
0917: elif LCFRSItem_fused is FatChartItem:
+0918: alvec = left[0].vec
__pyx_t_1 = (__pyx_v_left[0]).vec; __pyx_v_alvec = __pyx_t_1;
+0919: arvec = right[0].vec
__pyx_t_1 = (__pyx_v_right[0]).vec; __pyx_v_arvec = __pyx_t_1;
+0920: for n in range(SLOTS):
for (__pyx_t_2 = 0; __pyx_t_2 < 2; __pyx_t_2+=1) {
__pyx_v_n = __pyx_t_2;
+0921: if alvec[n] & arvec[n]:
__pyx_t_3 = (((__pyx_v_alvec[__pyx_v_n]) & (__pyx_v_arvec[__pyx_v_n])) != 0);
if (__pyx_t_3) {
/* … */
}
}
+0922: return False
__pyx_r = 0;
goto __pyx_L0;
+0923: lpos = anextset(alvec, 0, SLOTS)
__pyx_v_lpos = __pyx_f_8discodop_3bit_anextset(__pyx_v_alvec, 0, 2);
+0924: rpos = anextset(arvec, 0, SLOTS)
__pyx_v_rpos = __pyx_f_8discodop_3bit_anextset(__pyx_v_arvec, 0, 2);
0925: # this algorithm was adapted from rparse, FastYFComposer.
+0926: for n in range(bitlength(rule.lengths)):
__pyx_t_2 = __pyx_f_8discodop_3bit_bitlength(__pyx_v_rule->lengths);
for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_2; __pyx_t_4+=1) {
__pyx_v_n = __pyx_t_4;
+0927: if testbit(rule.args, n):
__pyx_t_3 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->args, __pyx_v_n) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L8;
}
0928: # check if there are any bits left, and
0929: # if any bits on the right should have gone before
0930: # ones on this side
+0931: if rpos == -1 or (lpos != -1 and lpos <= rpos):
__pyx_t_5 = ((__pyx_v_rpos == -1L) != 0);
if (!__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_lpos != -1L) != 0);
if (__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_lpos <= __pyx_v_rpos) != 0);
__pyx_t_3 = __pyx_t_5;
__pyx_L10_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+0932: return False
__pyx_r = 0;
goto __pyx_L0;
0933: # jump to next gap
+0934: rpos = anextunset(arvec, rpos, SLOTS)
__pyx_v_rpos = __pyx_f_8discodop_3bit_anextunset(__pyx_v_arvec, __pyx_v_rpos, 2);
+0935: if lpos != -1 and lpos < rpos:
__pyx_t_5 = ((__pyx_v_lpos != -1L) != 0);
if (__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_lpos < __pyx_v_rpos) != 0);
__pyx_t_3 = __pyx_t_5;
__pyx_L14_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+0936: return False
__pyx_r = 0;
goto __pyx_L0;
0937: # there should be a gap if and only if
0938: # this is the last element of this argument
+0939: if testbit(rule.lengths, n):
__pyx_t_3 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->lengths, __pyx_v_n) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L16;
}
+0940: if TESTBIT(alvec, rpos):
__pyx_t_3 = (TESTBIT(__pyx_v_alvec, __pyx_v_rpos) != 0);
if (__pyx_t_3) {
/* … */
}
+0941: return False
__pyx_r = 0;
goto __pyx_L0;
+0942: elif not TESTBIT(alvec, rpos):
__pyx_t_3 = ((!(TESTBIT(__pyx_v_alvec, __pyx_v_rpos) != 0)) != 0);
if (__pyx_t_3) {
/* … */
}
__pyx_L16:;
+0943: return False
__pyx_r = 0;
goto __pyx_L0;
0944: # jump to next argument
+0945: rpos = anextset(arvec, rpos, SLOTS)
__pyx_v_rpos = __pyx_f_8discodop_3bit_anextset(__pyx_v_arvec, __pyx_v_rpos, 2);
0946: else: # if bit == 0:
0947: # vice versa to the above
+0948: if lpos == -1 or (rpos != -1 and rpos <= lpos):
/*else*/ {
__pyx_t_5 = ((__pyx_v_lpos == -1L) != 0);
if (!__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_rpos != -1L) != 0);
if (__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L19_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_rpos <= __pyx_v_lpos) != 0);
__pyx_t_3 = __pyx_t_5;
__pyx_L19_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+0949: return False
__pyx_r = 0;
goto __pyx_L0;
+0950: lpos = anextunset(alvec, lpos, SLOTS)
__pyx_v_lpos = __pyx_f_8discodop_3bit_anextunset(__pyx_v_alvec, __pyx_v_lpos, 2);
+0951: if rpos != -1 and rpos < lpos:
__pyx_t_5 = ((__pyx_v_rpos != -1L) != 0);
if (__pyx_t_5) {
} else {
__pyx_t_3 = __pyx_t_5;
goto __pyx_L23_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_rpos < __pyx_v_lpos) != 0);
__pyx_t_3 = __pyx_t_5;
__pyx_L23_bool_binop_done:;
if (__pyx_t_3) {
/* … */
}
+0952: return False
__pyx_r = 0;
goto __pyx_L0;
+0953: if testbit(rule.lengths, n):
__pyx_t_3 = (__pyx_fuse_2__pyx_f_8discodop_3bit_testbit(__pyx_v_rule->lengths, __pyx_v_n) != 0);
if (__pyx_t_3) {
/* … */
goto __pyx_L25;
}
+0954: if TESTBIT(arvec, lpos):
__pyx_t_3 = (TESTBIT(__pyx_v_arvec, __pyx_v_lpos) != 0);
if (__pyx_t_3) {
/* … */
}
+0955: return False
__pyx_r = 0;
goto __pyx_L0;
+0956: elif not TESTBIT(arvec, lpos):
__pyx_t_3 = ((!(TESTBIT(__pyx_v_arvec, __pyx_v_lpos) != 0)) != 0);
if (__pyx_t_3) {
/* … */
}
__pyx_L25:;
+0957: return False
__pyx_r = 0;
goto __pyx_L0;
+0958: lpos = anextset(alvec, lpos, SLOTS)
__pyx_v_lpos = __pyx_f_8discodop_3bit_anextset(__pyx_v_alvec, __pyx_v_lpos, 2);
}
__pyx_L8:;
}
+0959: return lpos == rpos == -1
__pyx_t_3 = (__pyx_v_lpos == __pyx_v_rpos);
if (__pyx_t_3) {
__pyx_t_3 = (__pyx_v_rpos == -1L);
}
__pyx_r = __pyx_t_3;
goto __pyx_L0;
0960:
0961:
+0962: def testsent(sent, grammar):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_3testsent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_2testsent[] = "testsent(sent, grammar)\nParse sentence with grammar and print 10 best derivations.";
static PyMethodDef __pyx_mdef_8discodop_6plcfrs_3testsent = {"testsent", (PyCFunction)__pyx_pw_8discodop_6plcfrs_3testsent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_6plcfrs_2testsent};
static PyObject *__pyx_pw_8discodop_6plcfrs_3testsent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_grammar = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("testsent (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sent,&__pyx_n_s_grammar,0};
PyObject* values[2] = {0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sent)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_grammar)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("testsent", 1, 2, 2, 1); __PYX_ERR(0, 962, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "testsent") < 0)) __PYX_ERR(0, 962, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
}
__pyx_v_sent = values[0];
__pyx_v_grammar = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("testsent", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 962, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.plcfrs.testsent", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_6plcfrs_2testsent(__pyx_self, __pyx_v_sent, __pyx_v_grammar);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_2testsent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sent, PyObject *__pyx_v_grammar) {
PyObject *__pyx_v_exp = NULL;
PyObject *__pyx_v_lazykbest = NULL;
PyObject *__pyx_v_chart = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_v_derivations = NULL;
PyObject *__pyx_v_a = NULL;
PyObject *__pyx_v_p = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("testsent", 0);
__Pyx_INCREF(__pyx_v_sent);
/* … */
/* 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_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("discodop.plcfrs.testsent", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_exp);
__Pyx_XDECREF(__pyx_v_lazykbest);
__Pyx_XDECREF(__pyx_v_chart);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XDECREF(__pyx_v_derivations);
__Pyx_XDECREF(__pyx_v_a);
__Pyx_XDECREF(__pyx_v_p);
__Pyx_XDECREF(__pyx_v_sent);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__67 = PyTuple_Pack(9, __pyx_n_s_sent, __pyx_n_s_grammar, __pyx_n_s_exp, __pyx_n_s_lazykbest, __pyx_n_s_chart, __pyx_n_s_msg, __pyx_n_s_derivations, __pyx_n_s_a, __pyx_n_s_p); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 962, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__67);
__Pyx_GIVEREF(__pyx_tuple__67);
/* … */
__pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_8discodop_6plcfrs_3testsent, NULL, __pyx_n_s_discodop_plcfrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 962, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_testsent, __pyx_t_4) < 0) __PYX_ERR(0, 962, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_plcfrs_pyx, __pyx_n_s_testsent, 962, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 962, __pyx_L1_error)
0963: """Parse sentence with grammar and print 10 best derivations."""
+0964: from math import exp
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_exp); __Pyx_GIVEREF(__pyx_n_s_exp); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_exp); __pyx_t_2 = __Pyx_Import(__pyx_n_s_math, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 964, __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_exp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v_exp = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0965: from .kbest import lazykbest
__pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_lazykbest); __Pyx_GIVEREF(__pyx_n_s_lazykbest); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_lazykbest); __pyx_t_1 = __Pyx_Import(__pyx_n_s_kbest, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __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_lazykbest); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_2); __pyx_v_lazykbest = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0966: print('len', len(sent.split()), 'sentence:', sent)
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sent, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __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, 966, __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, 966, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_u_len); __Pyx_GIVEREF(__pyx_n_u_len); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_len); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); __Pyx_INCREF(__pyx_kp_u_sentence); __Pyx_GIVEREF(__pyx_kp_u_sentence); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_sentence); __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_sent); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __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;
+0967: sent = sent.split()
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sent, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __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, 967, __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, 967, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_sent, __pyx_t_1); __pyx_t_1 = 0;
+0968: chart, msg = parse(sent, grammar)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; __pyx_t_5 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_5 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_sent, __pyx_v_grammar}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_sent, __pyx_v_grammar}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else #endif { __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__pyx_t_3) { __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL; } __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_sent); __Pyx_INCREF(__pyx_v_grammar); __Pyx_GIVEREF(__pyx_v_grammar); PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_grammar); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 968, __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_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 968, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) __PYX_ERR(0, 968, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 968, __pyx_L1_error) __pyx_L4_unpacking_done:; } __pyx_v_chart = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_msg = __pyx_t_6; __pyx_t_6 = 0;
+0969: if len(sent) < 10:
__pyx_t_4 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 969, __pyx_L1_error)
__pyx_t_8 = ((__pyx_t_4 < 10) != 0);
if (__pyx_t_8) {
/* … */
}
+0970: print(chart)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_chart); __Pyx_GIVEREF(__pyx_v_chart); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chart); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 970, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0971: if chart:
__pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_chart); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
if (__pyx_t_8) {
/* … */
}
+0972: print('10 best parse trees (1 expected):')
__pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 972, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* … */ __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_10_best_parse_trees_1_expected); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 972, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10);
+0973: derivations = lazykbest(chart, 10)
__Pyx_INCREF(__pyx_v_lazykbest); __pyx_t_1 = __pyx_v_lazykbest; __pyx_t_2 = NULL; __pyx_t_5 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); __pyx_t_5 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_chart, __pyx_int_10}; __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 973, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_6); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_chart, __pyx_int_10}; __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 973, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_6); } else #endif { __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__pyx_t_2) { __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL; } __Pyx_INCREF(__pyx_v_chart); __Pyx_GIVEREF(__pyx_v_chart); PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_v_chart); __Pyx_INCREF(__pyx_int_10); __Pyx_GIVEREF(__pyx_int_10); PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_int_10); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 973, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_derivations = __pyx_t_6; __pyx_t_6 = 0;
+0974: for a, p in derivations:
if (likely(PyList_CheckExact(__pyx_v_derivations)) || PyTuple_CheckExact(__pyx_v_derivations)) { __pyx_t_6 = __pyx_v_derivations; __Pyx_INCREF(__pyx_t_6); __pyx_t_4 = 0; __pyx_t_9 = NULL; } else { __pyx_t_4 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_derivations); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 974, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_9)) { if (likely(PyList_CheckExact(__pyx_t_6))) { if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 974, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 974, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } } else { __pyx_t_1 = __pyx_t_9(__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, 974, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_1); } if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 974, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 974, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_10)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_3)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(0, 974, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 974, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_a, __pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_p, __pyx_t_2); __pyx_t_2 = 0; /* … */ } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0975: print(exp(-p), a)
__pyx_t_2 = PyNumber_Negative(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_exp); __pyx_t_3 = __pyx_v_exp; __pyx_t_10 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } if (!__pyx_t_10) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_2}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_1); __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_10, __pyx_t_2}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else #endif { __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 975, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_INCREF(__pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_a); __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, 975, __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;
+0976: print()
__pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_builtin_print); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0977: assert len(derivations) == 1
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_4 = PyObject_Length(__pyx_v_derivations); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 977, __pyx_L1_error)
if (unlikely(!((__pyx_t_4 == 1) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 977, __pyx_L1_error)
}
}
#endif
+0978: return True
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_True); __pyx_r = Py_True; goto __pyx_L0;
+0979: print(msg)
__pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_msg); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0980: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; goto __pyx_L0;
0981:
0982:
+0983: def test():
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_6plcfrs_5test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_6plcfrs_4test[] = "test()";
static PyMethodDef __pyx_mdef_8discodop_6plcfrs_5test = {"test", (PyCFunction)__pyx_pw_8discodop_6plcfrs_5test, METH_NOARGS, __pyx_doc_8discodop_6plcfrs_4test};
static PyObject *__pyx_pw_8discodop_6plcfrs_5test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("test (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_6plcfrs_4test(__pyx_self);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_6plcfrs_4test(CYTHON_UNUSED PyObject *__pyx_self) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 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_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.plcfrs.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__69 = PyTuple_Pack(1, __pyx_n_s_grammar); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 983, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__69);
__Pyx_GIVEREF(__pyx_tuple__69);
/* … */
__pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_8discodop_6plcfrs_5test, NULL, __pyx_n_s_discodop_plcfrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 983, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 983, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_plcfrs_pyx, __pyx_n_s_test, 983, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 983, __pyx_L1_error)
+0984: grammar = Grammar([
__pyx_t_1 = PyList_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_tuple__15); __Pyx_INCREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); PyList_SET_ITEM(__pyx_t_1, 1, __pyx_tuple__21); __Pyx_INCREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); PyList_SET_ITEM(__pyx_t_1, 2, __pyx_tuple__27); __Pyx_INCREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); PyList_SET_ITEM(__pyx_t_1, 3, __pyx_tuple__31); __Pyx_INCREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); PyList_SET_ITEM(__pyx_t_1, 4, __pyx_tuple__35); __Pyx_INCREF(__pyx_tuple__39); __Pyx_GIVEREF(__pyx_tuple__39); PyList_SET_ITEM(__pyx_t_1, 5, __pyx_tuple__39); __Pyx_INCREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); PyList_SET_ITEM(__pyx_t_1, 6, __pyx_tuple__43); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_10containers_Grammar), __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 984, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_3); __pyx_t_3 = 0;
+0985: ((('S', 'VP_2', 'VMFIN'), ((0, 1, 0), )), 1),
__pyx_tuple__11 = PyTuple_Pack(3, __pyx_n_u_S, __pyx_n_u_VP_2, __pyx_n_u_VMFIN); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11); __pyx_tuple__12 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_1, __pyx_int_0); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); __pyx_tuple__13 = PyTuple_Pack(1, __pyx_tuple__12); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); __pyx_tuple__14 = PyTuple_Pack(2, __pyx_tuple__11, __pyx_tuple__13); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); __pyx_tuple__15 = PyTuple_Pack(2, __pyx_tuple__14, __pyx_int_1); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15);
+0986: ((('VP_2', 'VP_2', 'VAINF'), ((0, ), (0, 1))), 0.5),
__pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_u_VP_2, __pyx_n_u_VP_2, __pyx_n_u_VAINF); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); __pyx_tuple__17 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); __pyx_tuple__18 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18); __pyx_tuple__19 = PyTuple_Pack(2, __pyx_tuple__17, __pyx_tuple__18); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); __pyx_tuple__20 = PyTuple_Pack(2, __pyx_tuple__16, __pyx_tuple__19); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20); __pyx_tuple__21 = PyTuple_Pack(2, __pyx_tuple__20, __pyx_float_0_5); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 986, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21);
+0987: ((('VP_2', 'PROAV', 'VVPP'), ((0, ), (1, ))), 0.5),
__pyx_tuple__22 = PyTuple_Pack(3, __pyx_n_u_VP_2, __pyx_n_u_PROAV, __pyx_n_u_VVPP); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); __pyx_tuple__23 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); __pyx_tuple__24 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); __pyx_tuple__25 = PyTuple_Pack(2, __pyx_tuple__23, __pyx_tuple__24); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); __pyx_tuple__26 = PyTuple_Pack(2, __pyx_tuple__22, __pyx_tuple__25); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); __pyx_tuple__27 = PyTuple_Pack(2, __pyx_tuple__26, __pyx_float_0_5); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 987, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27);
+0988: ((('PROAV', 'Epsilon'), ('Darueber', )), 1),
__pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_u_PROAV, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); __Pyx_GIVEREF(__pyx_tuple__28); __pyx_tuple__29 = PyTuple_Pack(1, __pyx_n_u_Darueber); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); __pyx_tuple__30 = PyTuple_Pack(2, __pyx_tuple__28, __pyx_tuple__29); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); __pyx_tuple__31 = PyTuple_Pack(2, __pyx_tuple__30, __pyx_int_1); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 988, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31);
+0989: ((('VAINF', 'Epsilon'), ('werden', )), 1),
__pyx_tuple__32 = PyTuple_Pack(2, __pyx_n_u_VAINF, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_u_werden); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); __pyx_tuple__34 = PyTuple_Pack(2, __pyx_tuple__32, __pyx_tuple__33); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); __pyx_tuple__35 = PyTuple_Pack(2, __pyx_tuple__34, __pyx_int_1); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 989, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35);
+0990: ((('VMFIN', 'Epsilon'), ('muss', )), 1),
__pyx_tuple__36 = PyTuple_Pack(2, __pyx_n_u_VMFIN, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 990, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__36); __Pyx_GIVEREF(__pyx_tuple__36); __pyx_tuple__37 = PyTuple_Pack(1, __pyx_n_u_muss); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 990, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37); __pyx_tuple__38 = PyTuple_Pack(2, __pyx_tuple__36, __pyx_tuple__37); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 990, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); __pyx_tuple__39 = PyTuple_Pack(2, __pyx_tuple__38, __pyx_int_1); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 990, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__39); __Pyx_GIVEREF(__pyx_tuple__39);
+0991: ((('VVPP', 'Epsilon'), ('nachgedacht', )), 1)], start='S')
__pyx_tuple__40 = PyTuple_Pack(2, __pyx_n_u_VVPP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__40); __Pyx_GIVEREF(__pyx_tuple__40); __pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_u_nachgedacht); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__41); __Pyx_GIVEREF(__pyx_tuple__41); __pyx_tuple__42 = PyTuple_Pack(2, __pyx_tuple__40, __pyx_tuple__41); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); /* … */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_start, __pyx_n_u_S) < 0) __PYX_ERR(0, 991, __pyx_L1_error) __pyx_tuple__43 = PyTuple_Pack(2, __pyx_tuple__42, __pyx_int_1); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43);
+0992: print(grammar)
__pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 992, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_grammar)); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __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;
+0993: assert testsent('Darueber muss nachgedacht werden', grammar)
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
if (likely(__pyx_t_2)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_3, function);
__pyx_t_4 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Darueber_muss_nachgedacht_werden, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_Darueber_muss_nachgedacht_werden, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
{
__pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (__pyx_t_2) {
__Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
}
__Pyx_INCREF(__pyx_kp_u_Darueber_muss_nachgedacht_werden);
__Pyx_GIVEREF(__pyx_kp_u_Darueber_muss_nachgedacht_werden);
PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_Darueber_muss_nachgedacht_werden);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, ((PyObject *)__pyx_v_grammar));
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 993, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 993, __pyx_L1_error)
}
}
#endif
+0994: assert testsent('Darueber muss nachgedacht werden werden werden', grammar)
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 994, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(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_4 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_kp_u_Darueber_muss_nachgedacht_werden_2, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_kp_u_Darueber_muss_nachgedacht_werden_2, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
{
__pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 994, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (__pyx_t_5) {
__Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
}
__Pyx_INCREF(__pyx_kp_u_Darueber_muss_nachgedacht_werden_2);
__Pyx_GIVEREF(__pyx_kp_u_Darueber_muss_nachgedacht_werden_2);
PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_kp_u_Darueber_muss_nachgedacht_werden_2);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, ((PyObject *)__pyx_v_grammar));
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __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_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 994, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 994, __pyx_L1_error)
}
}
#endif
+0995: print('ungrammatical sentence (\'no parse\' expected):')
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_u_ungrammatical_sentence_no_parse); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 995, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__44); __Pyx_GIVEREF(__pyx_tuple__44);
+0996: assert not testsent('muss Darueber nachgedacht werden', grammar)
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
if (likely(__pyx_t_2)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_3, function);
__pyx_t_4 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_muss_Darueber_nachgedacht_werden, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_u_muss_Darueber_nachgedacht_werden, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
} else
#endif
{
__pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
if (__pyx_t_2) {
__Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
}
__Pyx_INCREF(__pyx_kp_u_muss_Darueber_nachgedacht_werden);
__Pyx_GIVEREF(__pyx_kp_u_muss_Darueber_nachgedacht_werden);
PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_muss_Darueber_nachgedacht_werden);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, ((PyObject *)__pyx_v_grammar));
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 996, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!((!__pyx_t_6) != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 996, __pyx_L1_error)
}
}
#endif
+0997: assert testsent('Darueber muss nachgedacht ' + ' '.join(32 * ['werden']),
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = PyList_New(1 * 32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
{ Py_ssize_t __pyx_temp;
for (__pyx_temp=0; __pyx_temp < 32; __pyx_temp++) {
__Pyx_INCREF(__pyx_n_u_werden);
__Pyx_GIVEREF(__pyx_n_u_werden);
PyList_SET_ITEM(__pyx_t_5, __pyx_temp, __pyx_n_u_werden);
}
}
__pyx_t_2 = PyUnicode_Join(__pyx_kp_u__45, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Darueber_muss_nachgedacht, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 997, __pyx_L1_error)
}
}
#endif
+0998: grammar)
__pyx_t_2 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
if (likely(__pyx_t_2)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_2);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_3, function);
__pyx_t_4 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_5, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
__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[3] = {__pyx_t_2, __pyx_t_5, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
} else
#endif
{
__pyx_t_7 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
if (__pyx_t_2) {
__Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); __pyx_t_2 = NULL;
}
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_4, __pyx_t_5);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_4, ((PyObject *)__pyx_v_grammar));
__pyx_t_5 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0999: assert testsent('Darueber muss nachgedacht ' + ' '.join(64 * ['werden']),
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_7 = PyList_New(1 * 64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
{ Py_ssize_t __pyx_temp;
for (__pyx_temp=0; __pyx_temp < 64; __pyx_temp++) {
__Pyx_INCREF(__pyx_n_u_werden);
__Pyx_GIVEREF(__pyx_n_u_werden);
PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_n_u_werden);
}
}
__pyx_t_5 = PyUnicode_Join(__pyx_kp_u__45, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Darueber_muss_nachgedacht, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_6)) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 999, __pyx_L1_error)
}
}
#endif
+1000: grammar)
__pyx_t_5 = NULL;
__pyx_t_4 = 0;
if (CYTHON_UNPACK_METHODS && unlikely(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_4 = 1;
}
}
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, ((PyObject *)__pyx_v_grammar)};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
} else
#endif
{
__pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 999, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (__pyx_t_5) {
__Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
}
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_t_7);
__Pyx_INCREF(((PyObject *)__pyx_v_grammar));
__Pyx_GIVEREF(((PyObject *)__pyx_v_grammar));
PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, ((PyObject *)__pyx_v_grammar));
__pyx_t_7 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __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;
1001:
+1002: __all__ = ['LCFRSChart', 'SmallLCFRSChart', 'FatLCFRSChart', 'parse']
__pyx_t_4 = PyList_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1002, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_u_LCFRSChart); __Pyx_GIVEREF(__pyx_n_u_LCFRSChart); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_u_LCFRSChart); __Pyx_INCREF(__pyx_n_u_SmallLCFRSChart); __Pyx_GIVEREF(__pyx_n_u_SmallLCFRSChart); PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_u_SmallLCFRSChart); __Pyx_INCREF(__pyx_n_u_FatLCFRSChart); __Pyx_GIVEREF(__pyx_n_u_FatLCFRSChart); PyList_SET_ITEM(__pyx_t_4, 2, __pyx_n_u_FatLCFRSChart); __Pyx_INCREF(__pyx_n_u_parse); __Pyx_GIVEREF(__pyx_n_u_parse); PyList_SET_ITEM(__pyx_t_4, 3, __pyx_n_u_parse); if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_4) < 0) __PYX_ERR(0, 1002, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;