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: pcfg.cpp
+001: """CKY parser for Probabilistic Context-Free Grammar (PCFG)."""
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
002: from __future__ import print_function
+003: import re
__pyx_t_3 = __Pyx_Import(__pyx_n_s_re, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+004: import sys
__pyx_t_3 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_3) < 0) __PYX_ERR(0, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+005: import subprocess
__pyx_t_3 = __Pyx_Import(__pyx_n_s_subprocess, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_subprocess, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+006: from os import unlink
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_unlink); __Pyx_GIVEREF(__pyx_n_s_unlink); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_unlink); __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, __pyx_t_3, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_unlink); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_unlink, __pyx_t_3) < 0) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+007: from math import exp, log as pylog
__pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_exp); __Pyx_GIVEREF(__pyx_n_s_exp); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_exp); __Pyx_INCREF(__pyx_n_s_log); __Pyx_GIVEREF(__pyx_n_s_log); PyList_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_log); __pyx_t_3 = __Pyx_Import(__pyx_n_s_math, __pyx_t_4, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_exp); 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_exp, __pyx_t_4) < 0) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_log); 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_pylog, __pyx_t_4) < 0) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+008: from itertools import count
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_count); __Pyx_GIVEREF(__pyx_n_s_count); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_count); __pyx_t_4 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_3, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_count, __pyx_t_3) < 0) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+009: import numpy as np
__pyx_t_4 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_4) < 0) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+010: from .tree import Tree
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_Tree); __Pyx_GIVEREF(__pyx_n_s_Tree); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_Tree); __pyx_t_3 = __Pyx_Import(__pyx_n_s_tree, __pyx_t_4, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Tree); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tree, __pyx_t_4) < 0) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+011: from .util import which
__pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_which); __Pyx_GIVEREF(__pyx_n_s_which); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_which); __pyx_t_4 = __Pyx_Import(__pyx_n_s_util, __pyx_t_3, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_which); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_which, __pyx_t_3) < 0) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+012: from .treebank import TERMINALSRE
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_TERMINALSRE); __Pyx_GIVEREF(__pyx_n_s_TERMINALSRE); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_TERMINALSRE); __pyx_t_3 = __Pyx_Import(__pyx_n_s_treebank, __pyx_t_4, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_TERMINALSRE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TERMINALSRE, __pyx_t_4) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
013:
014: cimport cython
015: from cython.operator cimport postincrement, dereference
016: from libc.math cimport HUGE_VAL as INFINITY
017: from libcpp.algorithm cimport binary_search
018: cdef extern from "<algorithm>" namespace "std" nogil:
019: vector[Label].iterator lower_bound(
020: vector[Label].iterator first,
021: vector[Label].iterator last,
022: const Label& value)
023: include "constants.pxi"
024:
025:
+026: cdef inline uint64_t cellstruct(Idx start, Idx end):
static CYTHON_INLINE uint64_t __pyx_f_8discodop_4pcfg_cellstruct(__pyx_t_8discodop_10containers_Idx __pyx_v_start, __pyx_t_8discodop_10containers_Idx __pyx_v_end) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_result;
uint64_t __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("cellstruct", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
027: cdef CFGItem result
+028: result.st.start = start
__pyx_v_result.st.start = __pyx_v_start;
+029: result.st.end = end
__pyx_v_result.st.end = __pyx_v_end;
+030: result.st.label = 0
__pyx_v_result.st.label = 0;
+031: return result.dt
__pyx_r = __pyx_v_result.dt; goto __pyx_L0;
032:
033:
+034: cdef class CFGChart(Chart):
struct __pyx_vtabstruct_8discodop_4pcfg_CFGChart {
struct __pyx_vtabstruct_8discodop_10containers_Chart __pyx_base;
};
static struct __pyx_vtabstruct_8discodop_4pcfg_CFGChart *__pyx_vtabptr_8discodop_4pcfg_CFGChart;
035: """A Chart for context-free grammars (CFG).
036:
037: An item is a triple ``(start, end, label)``."""
+038: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_4pcfg_8CFGChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_4pcfg_8CFGChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
CYTHON_UNUSED struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
CYTHON_UNUSED PyObject *__pyx_v_sent = 0;
CYTHON_UNUSED PyObject *__pyx_v_start = 0;
CYTHON_UNUSED PyObject *__pyx_v_logprob = 0;
CYTHON_UNUSED PyObject *__pyx_v_viterbi = 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,0};
PyObject* values[5] = {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_4pcfg_8CFGChart___init__(CYTHON_UNUSED struct __pyx_obj_8discodop_4pcfg_CFGChart *__pyx_v_self, CYTHON_UNUSED struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, CYTHON_UNUSED PyObject *__pyx_v_sent, CYTHON_UNUSED PyObject *__pyx_v_start, CYTHON_UNUSED PyObject *__pyx_v_logprob, CYTHON_UNUSED PyObject *__pyx_v_viterbi) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_AddTraceback("discodop.pcfg.CFGChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+039: start=None, logprob=True, viterbi=True):
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 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, 5, 1); __PYX_ERR(0, 38, __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--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 38, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
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];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 38, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.CFGChart.__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, 38, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 38, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_8CFGChart___init__(((struct __pyx_obj_8discodop_4pcfg_CFGChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi);
+040: raise NotImplementedError
__Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
__PYX_ERR(0, 40, __pyx_L1_error)
041:
+042: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_4pcfg_8CFGChart_label(CYTHON_UNUSED struct __pyx_obj_8discodop_4pcfg_CFGChart *__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.pcfg.CFGChart.label", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+043: raise NotImplementedError
__Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
__PYX_ERR(0, 43, __pyx_L1_error)
044:
+045: cdef Prob subtreeprob(self, ItemNo itemidx):
static Prob __pyx_f_8discodop_4pcfg_8CFGChart_subtreeprob(CYTHON_UNUSED struct __pyx_obj_8discodop_4pcfg_CFGChart *__pyx_v_self, CYTHON_UNUSED ItemNo __pyx_v_itemidx) {
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.CFGChart.subtreeprob", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
046: """Return probability of subtree headed by item."""
+047: raise NotImplementedError
__Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
__PYX_ERR(0, 47, __pyx_L1_error)
048:
049:
050: @cython.final
+051: cdef class DenseCFGChart(CFGChart):
struct __pyx_vtabstruct_8discodop_4pcfg_DenseCFGChart {
struct __pyx_vtabstruct_8discodop_4pcfg_CFGChart __pyx_base;
void (*addedge)(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t, __pyx_t_8discodop_10containers_Idx, ProbRule *);
int (*updateprob)(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t, Prob, Prob);
Label (*_label)(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
Prob (*_subtreeprob)(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
int (*_hasitem)(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
};
static struct __pyx_vtabstruct_8discodop_4pcfg_DenseCFGChart *__pyx_vtabptr_8discodop_4pcfg_DenseCFGChart;
static void __pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t, __pyx_t_8discodop_10containers_Idx, ProbRule *);
static int __pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t, Prob, Prob);
static Label __pyx_f_8discodop_4pcfg_13DenseCFGChart__label(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
static Prob __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
static int __pyx_f_8discodop_4pcfg_13DenseCFGChart__hasitem(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *, uint64_t);
052: """A CFG chart with fixed, pre-allocated arrays.
053:
054: All possible chart items are stored in dense, pre-allocated arrays; i.e.,
055: array is contiguous and all valid combinations of indices ``0 <= start <=
056: mid <= end`` and ``label`` can be addressed. Whether it is feasible to use
057: this chart depends on the grammar constant, specifically the number of
058: non-terminal labels (and to a lesser extent the sentence length)."""
+059: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_4pcfg_13DenseCFGChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_4pcfg_13DenseCFGChart_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;
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,0};
PyObject* values[5] = {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_4pcfg_13DenseCFGChart___init__(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__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) {
size_t __pyx_v_entries;
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.pcfg.DenseCFGChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+060: start=None, logprob=True, viterbi=True):
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 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, 5, 1); __PYX_ERR(0, 59, __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--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 59, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
CYTHON_FALLTHROUGH;
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
CYTHON_FALLTHROUGH;
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
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];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 59, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.__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, 59, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 59, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_13DenseCFGChart___init__(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi);
+061: self.grammar = grammar
__Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); __Pyx_GOTREF(__pyx_v_self->__pyx_base.__pyx_base.grammar); __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar)); __pyx_v_self->__pyx_base.__pyx_base.grammar = __pyx_v_grammar;
+062: self.sent = sent
__Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); __Pyx_GOTREF(__pyx_v_self->__pyx_base.__pyx_base.sent); __Pyx_DECREF(__pyx_v_self->__pyx_base.__pyx_base.sent); __pyx_v_self->__pyx_base.__pyx_base.sent = __pyx_v_sent;
+063: 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, 63, __pyx_L1_error)
}
__pyx_t_1 = PyList_GET_SIZE(__pyx_v_sent); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 63, __pyx_L1_error)
__pyx_v_self->__pyx_base.__pyx_base.lensent = __pyx_t_1;
+064: 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, 64, __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, 64, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_self->__pyx_base.__pyx_base.start = __pyx_t_5;
+065: self.logprob = logprob
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_logprob); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.logprob = __pyx_t_3;
+066: self.viterbi = viterbi
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_viterbi); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.viterbi = __pyx_t_3;
067: # FIXME: use compactcellidx?
068: # entries = compactcellidx(self.lensent - 1, self.lensent,
069: # self.lensent, grammar.nonterminals) + grammar.nonterminals
070: entries = cellidx(self.lensent - 1, self.lensent, self.lensent,
+071: grammar.nonterminals) + grammar.nonterminals
__pyx_v_entries = (__pyx_f_8discodop_10containers_cellidx((__pyx_v_self->__pyx_base.__pyx_base.lensent - 1), __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_grammar->nonterminals) + __pyx_v_grammar->nonterminals);
+072: self.items.reserve(entries)
__pyx_v_self->__pyx_base.items.reserve(__pyx_v_entries);
+073: self.items.push_back(0)
try {
__pyx_v_self->__pyx_base.items.push_back(0);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 73, __pyx_L1_error)
}
074: # NB: resize not reserve; will not resize again.
+075: self.probs.resize(entries, INFINITY)
try {
__pyx_v_self->__pyx_base.__pyx_base.probs.resize(__pyx_v_entries, HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 75, __pyx_L1_error)
}
+076: self.parseforest.resize(entries)
try {
__pyx_v_self->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_entries);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 76, __pyx_L1_error)
}
077:
+078: def root(self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_4pcfg_13DenseCFGChart_2root[] = "DenseCFGChart.root(self)";
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_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_4pcfg_13DenseCFGChart_2root(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_13DenseCFGChart_2root(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.root", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+079: return cellidx(0, self.lensent, self.lensent,
__Pyx_XDECREF(__pyx_r);
+080: self.grammar.nonterminals) + self.start
__pyx_t_1 = __Pyx_PyInt_FromSize_t((__pyx_f_8discodop_10containers_cellidx(0, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) + __pyx_v_self->__pyx_base.__pyx_base.start)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
081:
+082: cdef void addedge(self, uint64_t item, Idx mid, ProbRule *rule):
static void __pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, uint64_t __pyx_v_item, __pyx_t_8discodop_10containers_Idx __pyx_v_mid, 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.pcfg.DenseCFGChart.addedge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
083: """Add new edge to parse forest."""
084: cdef Edge edge
+085: edge.rule = rule
__pyx_v_edge.rule = __pyx_v_rule;
+086: edge.pos.lvec = mid
__pyx_v_edge.pos.lvec = __pyx_v_mid;
+087: self.parseforest[item].push_back(edge)
try {
(__pyx_v_self->__pyx_base.__pyx_base.parseforest[__pyx_v_item]).push_back(__pyx_v_edge);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 87, __pyx_L1_error)
}
088:
+089: cdef bint updateprob(self, uint64_t item, Prob prob, Prob beam):
static int __pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, uint64_t __pyx_v_item, Prob __pyx_v_prob, Prob __pyx_v_beam) {
uint64_t __pyx_v_beamitem;
uint64_t __pyx_v_itemx;
int __pyx_v_newitem;
uint64_t __pyx_v_start;
uint64_t __pyx_v_end;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("updateprob", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.DenseCFGChart.updateprob", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
090: """Update probability for item if better than current one.
091:
092: Add item if not seen before; return False if pruned."""
093: cdef uint64_t beamitem, itemx
+094: cdef bint newitem = self.probs[item] == INFINITY
__pyx_v_newitem = ((__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]) == HUGE_VAL);
+095: if beam:
__pyx_t_1 = (__pyx_v_beam != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+096: itemx = item - item % self.grammar.nonterminals
__pyx_v_itemx = (__pyx_v_item - (__pyx_v_item % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals));
+097: start = itemx // (self.grammar.nonterminals * self.lensent)
__pyx_v_start = (__pyx_v_itemx / (__pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals * __pyx_v_self->__pyx_base.__pyx_base.lensent));
+098: end = itemx // self.grammar.nonterminals % self.lensent + 1
__pyx_v_end = (((__pyx_v_itemx / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+099: beamitem = compactcellidx(start, end, self.lensent, 1)
__pyx_v_beamitem = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_start, __pyx_v_end, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1);
+100: if prob > self.beambuckets[beamitem]: # prob falls outside of beam
__pyx_t_1 = ((__pyx_v_prob > (__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem])) != 0);
if (__pyx_t_1) {
/* … */
}
+101: return False
__pyx_r = 0;
goto __pyx_L0;
+102: elif prob + beam < self.beambuckets[beamitem]: # shrink beam
__pyx_t_1 = (((__pyx_v_prob + __pyx_v_beam) < (__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem])) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+103: self.beambuckets[beamitem] = prob + beam
(__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem]) = (__pyx_v_prob + __pyx_v_beam);
+104: self.probs[item] = prob
(__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]) = __pyx_v_prob;
+105: elif prob < self.probs[item]: # prob falls within beam
__pyx_t_1 = ((__pyx_v_prob < (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item])) != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L4:;
+106: self.probs[item] = prob
(__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]) = __pyx_v_prob;
+107: elif prob < self.probs[item]:
__pyx_t_1 = ((__pyx_v_prob < (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item])) != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L3:;
+108: self.probs[item] = prob
(__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]) = __pyx_v_prob;
109: # can infer order of binary rules, but need to track unaries explicitly
+110: if newitem:
__pyx_t_1 = (__pyx_v_newitem != 0);
if (__pyx_t_1) {
/* … */
}
+111: self.items.push_back(item)
try {
__pyx_v_self->__pyx_base.items.push_back(__pyx_v_item);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 111, __pyx_L1_error)
}
+112: return True
__pyx_r = 1; goto __pyx_L0;
113:
+114: cdef ItemNo _left(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_4pcfg_13DenseCFGChart__left(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
uint64_t __pyx_v_item;
short __pyx_v_start;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_left", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+115: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
116: cdef short start
+117: if edge.rule is NULL:
__pyx_t_1 = ((__pyx_v_edge.rule == NULL) != 0);
if (__pyx_t_1) {
/* … */
}
+118: return 0
__pyx_r = 0;
goto __pyx_L0;
+119: start = item // (self.grammar.nonterminals * self.lensent)
__pyx_v_start = (__pyx_v_item / (__pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals * __pyx_v_self->__pyx_base.__pyx_base.lensent));
120: return cellidx(start, edge.pos.mid, self.lensent,
+121: self.grammar.nonterminals) + edge.rule.rhs1
__pyx_r = (__pyx_f_8discodop_10containers_cellidx(__pyx_v_start, __pyx_v_edge.pos.mid, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) + __pyx_v_edge.rule->rhs1); goto __pyx_L0;
122:
+123: cdef ItemNo _right(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_4pcfg_13DenseCFGChart__right(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
uint64_t __pyx_v_item;
short __pyx_v_end;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_right", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+124: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
125: cdef short end
+126: 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) {
/* … */
}
+127: return 0
__pyx_r = 0;
goto __pyx_L0;
+128: end = item // self.grammar.nonterminals % self.lensent + 1
__pyx_v_end = (((__pyx_v_item / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
129: return cellidx(edge.pos.mid, end, self.lensent,
+130: self.grammar.nonterminals) + edge.rule.rhs2
__pyx_r = (__pyx_f_8discodop_10containers_cellidx(__pyx_v_edge.pos.mid, __pyx_v_end, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) + __pyx_v_edge.rule->rhs2); goto __pyx_L0;
131:
+132: cdef Label _label(self, uint64_t item):
static Label __pyx_f_8discodop_4pcfg_13DenseCFGChart__label(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+133: return item % self.grammar.nonterminals
__pyx_r = (__pyx_v_item % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals); goto __pyx_L0;
134:
+135: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_4pcfg_13DenseCFGChart_label(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
uint64_t __pyx_v_item;
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+136: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
+137: return item % self.grammar.nonterminals
__pyx_r = (__pyx_v_item % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals); goto __pyx_L0;
138:
+139: cdef Prob _subtreeprob(self, uint64_t item):
static Prob __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
140: """Get viterbi / inside probability of a subtree headed by `item`."""
+141: return self.probs[item]
__pyx_r = (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]); goto __pyx_L0;
142:
+143: cdef Prob subtreeprob(self, ItemNo itemidx):
static Prob __pyx_f_8discodop_4pcfg_13DenseCFGChart_subtreeprob(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
uint64_t __pyx_v_item;
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+144: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
+145: return self.probs[item]
__pyx_r = (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]); goto __pyx_L0;
146:
+147: cdef bint _hasitem(self, uint64_t item):
static int __pyx_f_8discodop_4pcfg_13DenseCFGChart__hasitem(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_hasitem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
148: """Test if item is in chart."""
+149: return self.probs[item] != INFINITY
__pyx_r = ((__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_item]) != HUGE_VAL); goto __pyx_L0;
150: # return self.parseforest[item].size() != 0
151:
+152: def indices(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_4pcfg_13DenseCFGChart_4indices[] = "DenseCFGChart.indices(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_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, 152, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_4pcfg_13DenseCFGChart_4indices(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_13DenseCFGChart_4indices(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
uint64_t __pyx_v_item;
short __pyx_v_start;
short __pyx_v_end;
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_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+153: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
+154: cdef short start = (item // self.grammar.nonterminals) // self.lensent
__pyx_v_start = ((__pyx_v_item / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) / __pyx_v_self->__pyx_base.__pyx_base.lensent);
+155: cdef short end = (item // self.grammar.nonterminals) % self.lensent + 1
__pyx_v_end = (((__pyx_v_item / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+156: return list(range(start, end))
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_short(__pyx_v_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_short(__pyx_v_end); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
157:
+158: def itemstr(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_4pcfg_13DenseCFGChart_6itemstr[] = "DenseCFGChart.itemstr(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_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, 158, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_4pcfg_13DenseCFGChart_6itemstr(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_13DenseCFGChart_6itemstr(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
uint64_t __pyx_v_item;
Label __pyx_v_lhs;
short __pyx_v_start;
short __pyx_v_end;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+159: cdef uint64_t item = itemidx
__pyx_v_item = __pyx_v_itemidx;
+160: cdef Label lhs = item % self.grammar.nonterminals
__pyx_v_lhs = (__pyx_v_item % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+161: cdef short start = (item // self.grammar.nonterminals) // self.lensent
__pyx_v_start = ((__pyx_v_item / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) / __pyx_v_self->__pyx_base.__pyx_base.lensent);
+162: cdef short end = (item // self.grammar.nonterminals) % self.lensent + 1
__pyx_v_end = (((__pyx_v_item / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+163: return '%s[%d:%d]' % (self.grammar.tolabel[lhs], start, end)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_short(__pyx_v_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_short(__pyx_v_end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s_d_d, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
164:
+165: def numitems(self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_9numitems(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_4pcfg_13DenseCFGChart_8numitems[] = "DenseCFGChart.numitems(self)";
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_9numitems(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("numitems (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_4pcfg_13DenseCFGChart_8numitems(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_13DenseCFGChart_8numitems(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("numitems", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.numitems", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+166: return self.items.size()
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_self->__pyx_base.items.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
167:
+168: cdef ItemNo getitemidx(self, uint64_t n):
static ItemNo __pyx_f_8discodop_4pcfg_13DenseCFGChart_getitemidx(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__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;
}
169: """Get itemidx of n'th item.
170:
171: With the other charts the n'th item simply has itemidx n,
172: but for this chart with need a level of indirection because
173: itemidx is the item itself."""
+174: return self.items[n]
__pyx_r = (__pyx_v_self->__pyx_base.items[__pyx_v_n]); goto __pyx_L0;
175:
+176: def hasnode(self, node, Whitelist whitelist=None):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_11hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_4pcfg_13DenseCFGChart_10hasnode[] = "DenseCFGChart.hasnode(self, node, Whitelist whitelist=None)";
static PyObject *__pyx_pw_8discodop_4pcfg_13DenseCFGChart_11hasnode(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, 176, __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, 176, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.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, 176, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_13DenseCFGChart_10hasnode(((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__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_4pcfg_13DenseCFGChart_10hasnode(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, PyObject *__pyx_v_node, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
short __pyx_v_left;
short __pyx_v_right;
Label __pyx_v_label;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+177: cdef short left = min(node.leaves())
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __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, 177, __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, 177, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_As_short(__pyx_t_1); if (unlikely((__pyx_t_4 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_left = __pyx_t_4;
+178: cdef short right = max(node.leaves()) + 1
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __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, 178, __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, 178, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyInt_As_short(__pyx_t_2); if (unlikely((__pyx_t_4 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_right = __pyx_t_4;
179: cdef Label label
+180: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_PyThreadState_assign
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L6_except_return:;
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+181: label = self.grammar.toid[node.label]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->toid), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __Pyx_PyInt_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_8 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_label = __pyx_t_8;
+182: except KeyError:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); if (__pyx_t_9) { __Pyx_AddTraceback("discodop.pcfg.DenseCFGChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 182, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_3);
+183: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L6_except_return; } goto __pyx_L5_except_error; __pyx_L5_except_error:;
+184: 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) {
/* … */
}
+185: return whitelist.cfg[compactcellidx(left, right, self.lensent, 1)
__Pyx_XDECREF(__pyx_r);
+186: ].count(whitelist.mapping[label]) != 0
__pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_whitelist->cfg[__pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1)]).count((__pyx_v_whitelist->mapping[__pyx_v_label])) != 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
+187: return self.parseforest[
__Pyx_XDECREF(__pyx_r);
188: cellidx(left, right, self.lensent, self.grammar.nonterminals)
+189: + label].size() != 0
__pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_self->__pyx_base.__pyx_base.parseforest[(__pyx_f_8discodop_10containers_cellidx(__pyx_v_left, __pyx_v_right, __pyx_v_self->__pyx_base.__pyx_base.lensent, __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals) + __pyx_v_label)]).size() != 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
190:
+191: cdef SmallChartItem asSmallChartItem(self, ItemNo itemidx):
static SmallChartItem __pyx_f_8discodop_4pcfg_13DenseCFGChart_asSmallChartItem(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
uint64_t __pyx_v_label;
uint64_t __pyx_v_start;
uint64_t __pyx_v_end;
SmallChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asSmallChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
192: cdef CFGItem item
+193: item.dt = itemidx
__pyx_v_item.dt = __pyx_v_itemidx;
+194: label = item.dt % self.grammar.nonterminals
__pyx_v_label = (__pyx_v_item.dt % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+195: item.dt //= self.grammar.nonterminals
__pyx_v_item.dt = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+196: start = item.dt // self.lensent
__pyx_v_start = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.lensent);
+197: end = item.dt % self.lensent + 1
__pyx_v_end = ((__pyx_v_item.dt % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+198: return CFGtoSmallChartItem(label, start, end)
__pyx_r = __pyx_f_8discodop_10containers_CFGtoSmallChartItem(__pyx_v_label, __pyx_v_start, __pyx_v_end); goto __pyx_L0;
199:
+200: cdef FatChartItem asFatChartItem(self, ItemNo itemidx):
static FatChartItem __pyx_f_8discodop_4pcfg_13DenseCFGChart_asFatChartItem(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
uint64_t __pyx_v_label;
uint64_t __pyx_v_start;
uint64_t __pyx_v_end;
FatChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asFatChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
201: cdef CFGItem item
+202: item.dt = itemidx
__pyx_v_item.dt = __pyx_v_itemidx;
+203: label = item.dt % self.grammar.nonterminals
__pyx_v_label = (__pyx_v_item.dt % __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+204: item.dt //= self.grammar.nonterminals
__pyx_v_item.dt = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+205: start = item.dt // self.lensent
__pyx_v_start = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.lensent);
+206: end = item.dt % self.lensent + 1
__pyx_v_end = ((__pyx_v_item.dt % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+207: return CFGtoFatChartItem(label, start, end)
__pyx_r = __pyx_f_8discodop_10containers_CFGtoFatChartItem(__pyx_v_label, __pyx_v_start, __pyx_v_end); goto __pyx_L0;
208:
+209: cdef size_t asCFGspan(self, ItemNo itemidx):
static size_t __pyx_f_8discodop_4pcfg_13DenseCFGChart_asCFGspan(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
uint64_t __pyx_v_start;
uint64_t __pyx_v_end;
size_t __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asCFGspan", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.DenseCFGChart.asCFGspan", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
210: cdef CFGItem item
+211: item.dt = itemidx
__pyx_v_item.dt = __pyx_v_itemidx;
+212: item.dt //= self.grammar.nonterminals
__pyx_v_item.dt = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.grammar->nonterminals);
+213: start = item.dt // self.lensent
__pyx_v_start = (__pyx_v_item.dt / __pyx_v_self->__pyx_base.__pyx_base.lensent);
+214: end = item.dt % self.lensent + 1
__pyx_v_end = ((__pyx_v_item.dt % __pyx_v_self->__pyx_base.__pyx_base.lensent) + 1);
+215: 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, 215, __pyx_L1_error)
}
}
#endif
+216: 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;
217:
218:
219: @cython.final
+220: cdef class SparseCFGChart(CFGChart):
struct __pyx_vtabstruct_8discodop_4pcfg_SparseCFGChart {
struct __pyx_vtabstruct_8discodop_4pcfg_CFGChart __pyx_base;
void (*addedge)(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *, uint64_t, __pyx_t_8discodop_10containers_Idx, ProbRule *);
int (*updateprob)(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *, uint64_t, Prob, Prob);
Label (*_label)(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *, uint64_t);
Prob (*_subtreeprob)(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *, uint64_t);
int (*_hasitem)(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *, uint64_t);
};
static struct __pyx_vtabstruct_8discodop_4pcfg_SparseCFGChart *__pyx_vtabptr_8discodop_4pcfg_SparseCFGChart;
221: """A CFG chart which uses a hash table suitable for large grammars."""
+222: def __init__(self, Grammar grammar, list sent,
/* Python wrapper */
static int __pyx_pw_8discodop_4pcfg_14SparseCFGChart_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8discodop_4pcfg_14SparseCFGChart_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_4pcfg_14SparseCFGChart___init__(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__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) {
uint64_t __pyx_v_sentinel;
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.pcfg.SparseCFGChart.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+223: start=None, logprob=True, viterbi=True, itemsestimate=None):
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_True);
values[4] = ((PyObject *)Py_True);
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, 222, __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, 222, __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, 222, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.__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, 222, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sent), (&PyList_Type), 1, "sent", 1))) __PYX_ERR(0, 222, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_14SparseCFGChart___init__(((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_self), __pyx_v_grammar, __pyx_v_sent, __pyx_v_start, __pyx_v_logprob, __pyx_v_viterbi, __pyx_v_itemsestimate);
+224: cdef uint64_t sentinel = cellstruct(0, 0)
__pyx_v_sentinel = __pyx_f_8discodop_4pcfg_cellstruct(0, 0);
+225: self.grammar = grammar
__Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); __Pyx_GOTREF(__pyx_v_self->__pyx_base.__pyx_base.grammar); __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar)); __pyx_v_self->__pyx_base.__pyx_base.grammar = __pyx_v_grammar;
+226: self.sent = sent
__Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); __Pyx_GOTREF(__pyx_v_self->__pyx_base.__pyx_base.sent); __Pyx_DECREF(__pyx_v_self->__pyx_base.__pyx_base.sent); __pyx_v_self->__pyx_base.__pyx_base.sent = __pyx_v_sent;
+227: 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, 227, __pyx_L1_error)
}
__pyx_t_1 = PyList_GET_SIZE(__pyx_v_sent); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 227, __pyx_L1_error)
__pyx_v_self->__pyx_base.__pyx_base.lensent = __pyx_t_1;
+228: 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, 228, __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, 228, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_v_self->__pyx_base.__pyx_base.start = __pyx_t_5;
+229: self.logprob = logprob
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_logprob); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 229, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.logprob = __pyx_t_3;
+230: self.viterbi = viterbi
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_viterbi); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 230, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.viterbi = __pyx_t_3;
+231: if itemsestimate is not None:
__pyx_t_3 = (__pyx_v_itemsestimate != Py_None);
__pyx_t_6 = (__pyx_t_3 != 0);
if (__pyx_t_6) {
/* … */
}
+232: self.items.reserve(itemsestimate)
__pyx_t_7 = __Pyx_PyInt_As_size_t(__pyx_v_itemsestimate); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 232, __pyx_L1_error) __pyx_v_self->__pyx_base.items.reserve(__pyx_t_7);
+233: self.itemindex.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, 233, __pyx_L1_error) __pyx_v_self->itemindex.reserve(__pyx_t_8);
+234: 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, 234, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.parseforest.reserve(__pyx_t_9);
+235: 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, 235, __pyx_L1_error) __pyx_v_self->__pyx_base.__pyx_base.probs.reserve(__pyx_t_10);
+236: self.items.push_back(sentinel)
try {
__pyx_v_self->__pyx_base.items.push_back(__pyx_v_sentinel);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 236, __pyx_L1_error)
}
+237: self.itemindex[sentinel] = 0
(__pyx_v_self->itemindex[__pyx_v_sentinel]) = 0;
+238: self.probs.push_back(INFINITY)
try {
__pyx_v_self->__pyx_base.__pyx_base.probs.push_back(HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 238, __pyx_L1_error)
}
239:
+240: def root(self):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_3root(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_4pcfg_14SparseCFGChart_2root[] = "SparseCFGChart.root(self)";
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_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_4pcfg_14SparseCFGChart_2root(((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_14SparseCFGChart_2root(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("root", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.root", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+241: return self.itemindex[cellstruct(0, self.lensent) + self.start]
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->itemindex[(__pyx_f_8discodop_4pcfg_cellstruct(0, __pyx_v_self->__pyx_base.__pyx_base.lensent) + __pyx_v_self->__pyx_base.__pyx_base.start)])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
242:
+243: cdef void addedge(self, uint64_t item, Idx mid, ProbRule *rule):
static void __pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, uint64_t __pyx_v_item, __pyx_t_8discodop_10containers_Idx __pyx_v_mid, ProbRule *__pyx_v_rule) {
ItemNo __pyx_v_itemidx;
Edge __pyx_v_edge;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("addedge", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.SparseCFGChart.addedge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_L0:;
__Pyx_RefNannyFinishContext();
}
244: """Add new edge to parse forest."""
+245: cdef ItemNo itemidx = self.itemindex[item]
__pyx_v_itemidx = (__pyx_v_self->itemindex[__pyx_v_item]);
246: cdef Edge edge
+247: edge.rule = rule
__pyx_v_edge.rule = __pyx_v_rule;
+248: edge.pos.lvec = 0UL
__pyx_v_edge.pos.lvec = 0UL;
+249: edge.pos.mid = mid
__pyx_v_edge.pos.mid = __pyx_v_mid;
+250: 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, 250, __pyx_L1_error)
}
251:
+252: cdef bint updateprob(self, uint64_t item, Prob prob, Prob beam):
static int __pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, uint64_t __pyx_v_item, Prob __pyx_v_prob, Prob __pyx_v_beam) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_itemx;
uint64_t __pyx_v_beamitem;
ItemNo __pyx_v_itemidx;
int __pyx_v_newitem;
int __pyx_v_updateitem;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("updateprob", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.SparseCFGChart.updateprob", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
253: """Update probability for item if better than current one.
254:
255: Add item if not seen before; return False if pruned."""
256: cdef CFGItem itemx
257: cdef uint64_t beamitem
+258: cdef ItemNo itemidx = self.itemindex[item]
__pyx_v_itemidx = (__pyx_v_self->itemindex[__pyx_v_item]);
+259: cdef bint newitem = itemidx == 0
__pyx_v_newitem = (__pyx_v_itemidx == 0);
+260: cdef bint updateitem = newitem
__pyx_v_updateitem = __pyx_v_newitem;
+261: if beam:
__pyx_t_1 = (__pyx_v_beam != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+262: itemx.dt = item
__pyx_v_itemx.dt = __pyx_v_item;
+263: beamitem = compactcellidx(
__pyx_v_beamitem = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_itemx.st.start, __pyx_v_itemx.st.end, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1);
264: itemx.st.start, itemx.st.end, self.lensent, 1)
+265: if prob > self.beambuckets[beamitem]: # prob falls outside of beam
__pyx_t_1 = ((__pyx_v_prob > (__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem])) != 0);
if (__pyx_t_1) {
/* … */
}
+266: return False
__pyx_r = 0;
goto __pyx_L0;
+267: elif prob + beam < self.beambuckets[beamitem]: # shrink beam
__pyx_t_1 = (((__pyx_v_prob + __pyx_v_beam) < (__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem])) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+268: self.beambuckets[beamitem] = prob + beam
(__pyx_v_self->__pyx_base.beambuckets[__pyx_v_beamitem]) = (__pyx_v_prob + __pyx_v_beam);
+269: updateitem = True
__pyx_v_updateitem = 1;
+270: elif newitem or prob < self.probs[itemidx]: # prob falls within beam
__pyx_t_2 = (__pyx_v_newitem != 0);
if (!__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_2 = ((__pyx_v_prob < (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_itemidx])) != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
__pyx_L4:;
+271: updateitem = True
__pyx_v_updateitem = 1;
+272: elif prob < self.probs[itemidx]:
__pyx_t_1 = ((__pyx_v_prob < (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_itemidx])) != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L3:;
+273: updateitem = True
__pyx_v_updateitem = 1;
+274: if newitem:
__pyx_t_1 = (__pyx_v_newitem != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L7;
}
+275: itemidx = self.itemindex[item] = self.items.size()
__pyx_t_3 = __pyx_v_self->__pyx_base.items.size();
__pyx_v_itemidx = __pyx_t_3;
(__pyx_v_self->itemindex[__pyx_v_item]) = __pyx_t_3;
+276: self.items.push_back(item)
try {
__pyx_v_self->__pyx_base.items.push_back(__pyx_v_item);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 276, __pyx_L1_error)
}
+277: self.parseforest.resize(self.items.size())
try {
__pyx_v_self->__pyx_base.__pyx_base.parseforest.resize(__pyx_v_self->__pyx_base.items.size());
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 277, __pyx_L1_error)
}
+278: self.probs.push_back(prob)
try {
__pyx_v_self->__pyx_base.__pyx_base.probs.push_back(__pyx_v_prob);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 278, __pyx_L1_error)
}
+279: elif updateitem:
__pyx_t_1 = (__pyx_v_updateitem != 0);
if (__pyx_t_1) {
/* … */
}
__pyx_L7:;
+280: self.probs[itemidx] = prob
(__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_itemidx]) = __pyx_v_prob;
+281: return True
__pyx_r = 1; goto __pyx_L0;
282:
+283: cdef ItemNo _left(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_4pcfg_14SparseCFGChart__left(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_left", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
284: cdef CFGItem item
+285: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+286: if edge.rule is NULL:
__pyx_t_1 = ((__pyx_v_edge.rule == NULL) != 0);
if (__pyx_t_1) {
/* … */
}
+287: return 0
__pyx_r = 0;
goto __pyx_L0;
+288: return self.itemindex[cellstruct(
__pyx_r = (__pyx_v_self->itemindex[(__pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_item.st.start, __pyx_v_edge.pos.mid) + __pyx_v_edge.rule->rhs1)]); goto __pyx_L0;
289: item.st.start, edge.pos.mid) + edge.rule.rhs1]
290:
+291: cdef ItemNo _right(self, ItemNo itemidx, Edge edge):
static ItemNo __pyx_f_8discodop_4pcfg_14SparseCFGChart__right(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx, Edge __pyx_v_edge) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
ItemNo __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_right", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
292: cdef CFGItem item
+293: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+294: 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) {
/* … */
}
+295: return 0
__pyx_r = 0;
goto __pyx_L0;
+296: return self.itemindex[cellstruct(
__pyx_r = (__pyx_v_self->itemindex[(__pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_edge.pos.mid, __pyx_v_item.st.end) + __pyx_v_edge.rule->rhs2)]); goto __pyx_L0;
297: edge.pos.mid, item.st.end) + edge.rule.rhs2]
298:
+299: cdef Label _label(self, uint64_t item):
static Label __pyx_f_8discodop_4pcfg_14SparseCFGChart__label(CYTHON_UNUSED struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_itemx;
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
300: cdef CFGItem itemx
+301: itemx.dt = item
__pyx_v_itemx.dt = __pyx_v_item;
+302: return itemx.st.label
__pyx_r = __pyx_v_itemx.st.label; goto __pyx_L0;
303:
+304: cdef Label label(self, ItemNo itemidx):
static Label __pyx_f_8discodop_4pcfg_14SparseCFGChart_label(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
Label __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("label", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
305: cdef CFGItem item
+306: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+307: return item.st.label
__pyx_r = __pyx_v_item.st.label; goto __pyx_L0;
308:
+309: cdef Prob _subtreeprob(self, uint64_t item):
static Prob __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
spp::sparse_hash_map<uint64_t,ItemNo> ::iterator __pyx_v_it;
Prob __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_subtreeprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
310: """Get viterbi / inside probability of a subtree headed by `item`."""
+311: it = self.itemindex.find(item)
__pyx_v_it = __pyx_v_self->itemindex.find(__pyx_v_item);
+312: if it == self.itemindex.end():
__pyx_t_1 = ((__pyx_v_it == __pyx_v_self->itemindex.end()) != 0);
if (__pyx_t_1) {
/* … */
}
+313: return INFINITY
__pyx_r = HUGE_VAL;
goto __pyx_L0;
+314: return self.probs[dereference(it).second]
__pyx_r = (__pyx_v_self->__pyx_base.__pyx_base.probs[(*__pyx_v_it).second]); goto __pyx_L0;
315:
+316: cdef Prob subtreeprob(self, ItemNo itemidx):
static Prob __pyx_f_8discodop_4pcfg_14SparseCFGChart_subtreeprob(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__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;
}
+317: return self.probs[itemidx]
__pyx_r = (__pyx_v_self->__pyx_base.__pyx_base.probs[__pyx_v_itemidx]); goto __pyx_L0;
318:
+319: cdef bint _hasitem(self, uint64_t item):
static int __pyx_f_8discodop_4pcfg_14SparseCFGChart__hasitem(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, uint64_t __pyx_v_item) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_hasitem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
320: """Test if item is in chart."""
+321: return self.itemindex.find(item) != self.itemindex.end()
__pyx_r = (__pyx_v_self->itemindex.find(__pyx_v_item) != __pyx_v_self->itemindex.end()); goto __pyx_L0;
322:
+323: def indices(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_5indices(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_4pcfg_14SparseCFGChart_4indices[] = "SparseCFGChart.indices(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_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, 323, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_4pcfg_14SparseCFGChart_4indices(((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_14SparseCFGChart_4indices(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __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_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
324: cdef CFGItem item
+325: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+326: return list(range(item.st.start, item.st.end))
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_uint16_t(__pyx_v_item.st.start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_item.st.end); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
327:
+328: def itemstr(self, ItemNo itemidx):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_7itemstr(PyObject *__pyx_v_self, PyObject *__pyx_arg_itemidx); /*proto*/
static char __pyx_doc_8discodop_4pcfg_14SparseCFGChart_6itemstr[] = "SparseCFGChart.itemstr(self, ItemNo itemidx)";
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_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, 328, __pyx_L3_error)
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_4pcfg_14SparseCFGChart_6itemstr(((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_self), ((ItemNo)__pyx_v_itemidx));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_14SparseCFGChart_6itemstr(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("itemstr", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.itemstr", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
329: cdef CFGItem item
+330: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+331: return '%s[%d:%d]' % (
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s_d_d, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
+332: self.grammar.tolabel[item.st.label],
__pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->tolabel), __pyx_v_item.st.label, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); /* … */ __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 332, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0;
+333: item.st.start, item.st.end)
__pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_item.st.start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_uint16_t(__pyx_v_item.st.end); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3);
334:
+335: def hasnode(self, node, Whitelist whitelist=None):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_9hasnode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_4pcfg_14SparseCFGChart_8hasnode[] = "SparseCFGChart.hasnode(self, node, Whitelist whitelist=None)";
static PyObject *__pyx_pw_8discodop_4pcfg_14SparseCFGChart_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, 335, __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, 335, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.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, 335, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_14SparseCFGChart_8hasnode(((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__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_4pcfg_14SparseCFGChart_8hasnode(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, PyObject *__pyx_v_node, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
short __pyx_v_left;
short __pyx_v_right;
Label __pyx_v_label;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("hasnode", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+336: cdef short left = min(node.leaves())
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __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, 336, __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, 336, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_As_short(__pyx_t_1); if (unlikely((__pyx_t_4 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_left = __pyx_t_4;
+337: cdef short right = max(node.leaves()) + 1
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_leaves); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __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, 337, __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, 337, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyInt_As_short(__pyx_t_2); if (unlikely((__pyx_t_4 == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_right = __pyx_t_4;
338: cdef Label label
+339: try:
{
/*try:*/ {
/* … */
}
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L8_try_end;
__pyx_L3_error:;
__Pyx_PyThreadState_assign
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L1_error;
__pyx_L6_except_return:;
__Pyx_PyThreadState_assign
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_XGIVEREF(__pyx_t_6);
__Pyx_XGIVEREF(__pyx_t_7);
__Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
goto __pyx_L0;
__pyx_L8_try_end:;
}
+340: label = self.grammar.toid[node.label]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->__pyx_base.__pyx_base.grammar->toid), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __Pyx_PyInt_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_8 == ((Label)-1)) && PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_label = __pyx_t_8;
+341: except KeyError:
__pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); if (__pyx_t_9) { __Pyx_AddTraceback("discodop.pcfg.SparseCFGChart.hasnode", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 341, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_3);
+342: return False
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L6_except_return; } goto __pyx_L5_except_error; __pyx_L5_except_error:;
+343: 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) {
/* … */
}
+344: return whitelist.cfg[compactcellidx(left, right, self.lensent, 1)
__Pyx_XDECREF(__pyx_r);
+345: ].count(whitelist.mapping[label]) != 0
__pyx_t_3 = __Pyx_PyBool_FromLong(((__pyx_v_whitelist->cfg[__pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1)]).count((__pyx_v_whitelist->mapping[__pyx_v_label])) != 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
+346: return self.itemindex.find(
__Pyx_XDECREF(__pyx_r);
+347: cellstruct(left, right) + label) != self.itemindex.end()
__pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_self->itemindex.find((__pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_left, __pyx_v_right) + __pyx_v_label)) != __pyx_v_self->itemindex.end())); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 347, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
348:
+349: cdef SmallChartItem asSmallChartItem(self, ItemNo itemidx):
static SmallChartItem __pyx_f_8discodop_4pcfg_14SparseCFGChart_asSmallChartItem(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
SmallChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asSmallChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
350: cdef CFGItem item
+351: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+352: return CFGtoSmallChartItem(item.st.label, item.st.start, item.st.end)
__pyx_r = __pyx_f_8discodop_10containers_CFGtoSmallChartItem(__pyx_v_item.st.label, __pyx_v_item.st.start, __pyx_v_item.st.end); goto __pyx_L0;
353:
+354: cdef FatChartItem asFatChartItem(self, ItemNo itemidx):
static FatChartItem __pyx_f_8discodop_4pcfg_14SparseCFGChart_asFatChartItem(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
FatChartItem __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asFatChartItem", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
355: cdef CFGItem item
+356: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+357: return CFGtoFatChartItem(item.st.label, item.st.start, item.st.end)
__pyx_r = __pyx_f_8discodop_10containers_CFGtoFatChartItem(__pyx_v_item.st.label, __pyx_v_item.st.start, __pyx_v_item.st.end); goto __pyx_L0;
358:
+359: cdef size_t asCFGspan(self, ItemNo itemidx):
static size_t __pyx_f_8discodop_4pcfg_14SparseCFGChart_asCFGspan(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_self, ItemNo __pyx_v_itemidx) {
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_item;
size_t __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("asCFGspan", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_WriteUnraisable("discodop.pcfg.SparseCFGChart.asCFGspan", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
360: cdef CFGItem item
+361: item.dt = self.items[itemidx]
__pyx_v_item.dt = (__pyx_v_self->__pyx_base.items[__pyx_v_itemidx]);
+362: assert 0 <= item.st.start < item.st.end <= self.lensent
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_1 = (0 <= __pyx_v_item.st.start);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_item.st.start < __pyx_v_item.st.end);
if (__pyx_t_1) {
__pyx_t_1 = (__pyx_v_item.st.end <= __pyx_v_self->__pyx_base.__pyx_base.lensent);
}
}
if (unlikely(!(__pyx_t_1 != 0))) {
PyErr_SetNone(PyExc_AssertionError);
__PYX_ERR(0, 362, __pyx_L1_error)
}
}
#endif
+363: return compactcellidx(item.st.start, item.st.end, self.lensent, 1)
__pyx_r = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_item.st.start, __pyx_v_item.st.end, __pyx_v_self->__pyx_base.__pyx_base.lensent, 1); goto __pyx_L0;
364:
365:
+366: def parse(sent, Grammar grammar, tags=None, start=None, whitelist=None,
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_1parse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_4pcfg_parse[] = "parse(sent, Grammar grammar, tags=None, start=None, whitelist=None, Prob beam_beta=0.0, int beam_delta=50, itemsestimate=None)\nPCFG parsing using CKY.\n\n\t:param sent: A sequence of tokens that will be parsed.\n\t:param grammar: A ``Grammar`` object.\n\t:returns: a ``Chart`` object.\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 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 list of items that may enter the chart.\n\t\tThe whitelist is a list of cells consisting of sets of labels:\n\t\t``whitelist = [{label1, label2, ...}, ...]``;\n\t\tThe cells are indexed as compact spans; label is an integer for a\n\t\tnon-terminal label. The presence of a label means the span with that\n\t\tlabel will not be pruned.\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 to which beam search is applied.\n\t:param itemsestimate: the number of chart items to pre-allocate.\n\t";
static PyMethodDef __pyx_mdef_8discodop_4pcfg_1parse = {"parse", (PyCFunction)__pyx_pw_8discodop_4pcfg_1parse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_4pcfg_parse};
static PyObject *__pyx_pw_8discodop_4pcfg_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;
PyObject *__pyx_v_start = 0;
PyObject *__pyx_v_whitelist = 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_start,&__pyx_n_s_whitelist,&__pyx_n_s_beam_beta,&__pyx_n_s_beam_delta,&__pyx_n_s_itemsestimate,0};
PyObject* values[8] = {0,0,0,0,0,0,0,0};
values[2] = ((PyObject *)Py_None);
values[3] = ((PyObject *)Py_None);
values[4] = ((PyObject *)Py_None);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar, PyObject *__pyx_v_tags, PyObject *__pyx_v_start, PyObject *__pyx_v_whitelist, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta, PyObject *__pyx_v_itemsestimate) {
struct __pyx_obj_8discodop_4pcfg_CFGChart *__pyx_v_chart = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("parse", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("discodop.pcfg.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__160 = PyTuple_Pack(9, __pyx_n_s_sent, __pyx_n_s_grammar, __pyx_n_s_tags, __pyx_n_s_start, __pyx_n_s_whitelist, __pyx_n_s_beam_beta, __pyx_n_s_beam_delta, __pyx_n_s_itemsestimate, __pyx_n_s_chart); if (unlikely(!__pyx_tuple__160)) __PYX_ERR(0, 366, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__160);
__Pyx_GIVEREF(__pyx_tuple__160);
/* … */
__pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_4pcfg_1parse, NULL, __pyx_n_s_discodop_pcfg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 366, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse, __pyx_t_3) < 0) __PYX_ERR(0, 366, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(8, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_pcfg_pyx, __pyx_n_s_parse, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) __PYX_ERR(0, 366, __pyx_L1_error)
+367: Prob beam_beta=0.0, int beam_delta=50, itemsestimate=None):
values[7] = ((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 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, 8, 1); __PYX_ERR(0, 366, __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_start);
if (value) { values[3] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_whitelist);
if (value) { values[4] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 5:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beam_beta);
if (value) { values[5] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 6:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beam_delta);
if (value) { values[6] = value; kw_args--; }
}
CYTHON_FALLTHROUGH;
case 7:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsestimate);
if (value) { values[7] = 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, 366, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
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];
__pyx_v_start = values[3];
__pyx_v_whitelist = values[4];
if (values[5]) {
__pyx_v_beam_beta = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_beam_beta == ((Prob)-1)) && PyErr_Occurred())) __PYX_ERR(0, 367, __pyx_L3_error)
} else {
__pyx_v_beam_beta = ((Prob)0.0);
}
if (values[6]) {
__pyx_v_beam_delta = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_beam_delta == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 367, __pyx_L3_error)
} else {
__pyx_v_beam_delta = ((int)50);
}
__pyx_v_itemsestimate = values[7];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("parse", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 366, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.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, 366, __pyx_L1_error)
__pyx_r = __pyx_pf_8discodop_4pcfg_parse(__pyx_self, __pyx_v_sent, __pyx_v_grammar, __pyx_v_tags, __pyx_v_start, __pyx_v_whitelist, __pyx_v_beam_beta, __pyx_v_beam_delta, __pyx_v_itemsestimate);
368: """PCFG parsing using CKY.
369:
370: :param sent: A sequence of tokens that will be parsed.
371: :param grammar: A ``Grammar`` object.
372: :returns: a ``Chart`` object.
373: :param tags: Optionally, a sequence of POS tags to use instead of
374: attempting to apply all possible POS tags.
375: :param start: integer corresponding to the start symbol that complete
376: derivations should be headed by; e.g., ``grammar.toid['ROOT']``.
377: If not given, the default specified by ``grammar`` is used.
378: :param whitelist: a list of items that may enter the chart.
379: The whitelist is a list of cells consisting of sets of labels:
380: ``whitelist = [{label1, label2, ...}, ...]``;
381: The cells are indexed as compact spans; label is an integer for a
382: non-terminal label. The presence of a label means the span with that
383: label will not be pruned.
384: :param beam_beta: keep track of the best score in each cell and only allow
385: items which are within a multiple of ``beam_beta`` of the best score.
386: Should be a negative log probability. Pass ``0.0`` to disable.
387: :param beam_delta: the maximum span length to which beam search is applied.
388: :param itemsestimate: the number of chart items to pre-allocate.
389: """
+390: if grammar.maxfanout != 1:
__pyx_t_1 = ((__pyx_v_grammar->maxfanout != 1) != 0);
if (__pyx_t_1) {
/* … */
}
+391: raise ValueError('Not a PCFG! fanout: %d' % grammar.maxfanout)
__pyx_t_2 = __Pyx_PyInt_FromSize_t(__pyx_v_grammar->maxfanout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_Not_a_PCFG_fanout_d, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 391, __pyx_L1_error)
+392: if not grammar.logprob:
__pyx_t_1 = ((!(__pyx_v_grammar->logprob != 0)) != 0);
if (__pyx_t_1) {
/* … */
}
+393: raise ValueError('Expected grammar with log probabilities.')
__pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(0, 393, __pyx_L1_error) /* … */ __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Expected_grammar_with_log_probab); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_);
+394: if whitelist is None and grammar.nonterminals < 20000:
__pyx_t_4 = (__pyx_v_whitelist == Py_None);
__pyx_t_5 = (__pyx_t_4 != 0);
if (__pyx_t_5) {
} else {
__pyx_t_1 = __pyx_t_5;
goto __pyx_L6_bool_binop_done;
}
__pyx_t_5 = ((__pyx_v_grammar->nonterminals < 0x4E20) != 0);
__pyx_t_1 = __pyx_t_5;
__pyx_L6_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+395: chart = DenseCFGChart(grammar, sent, start)
__pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __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_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_sent); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_start); __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_4pcfg_DenseCFGChart), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_chart = ((struct __pyx_obj_8discodop_4pcfg_CFGChart *)__pyx_t_2); __pyx_t_2 = 0;
+396: return parse_grammarloop[DenseCFGChart](
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_2 = __pyx_fuse_0__pyx_f_8discodop_4pcfg_parse_grammarloop(__pyx_v_sent, ((struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *)__pyx_v_chart), __pyx_v_tags, __pyx_v_beam_beta, __pyx_v_beam_delta); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
397: sent, <DenseCFGChart>chart, tags, beam_beta, beam_delta)
+398: chart = SparseCFGChart(grammar, sent, start, itemsestimate=itemsestimate)
__pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_grammar)); __Pyx_GIVEREF(((PyObject *)__pyx_v_grammar)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_grammar)); __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_sent); __Pyx_INCREF(__pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_start); __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 398, __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, 398, __pyx_L1_error) __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8discodop_4pcfg_SparseCFGChart), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_chart = ((struct __pyx_obj_8discodop_4pcfg_CFGChart *)__pyx_t_6); __pyx_t_6 = 0;
+399: if whitelist is None:
__pyx_t_1 = (__pyx_v_whitelist == Py_None);
__pyx_t_5 = (__pyx_t_1 != 0);
if (__pyx_t_5) {
/* … */
}
+400: return parse_grammarloop[SparseCFGChart](
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_6 = __pyx_fuse_1__pyx_f_8discodop_4pcfg_parse_grammarloop(__pyx_v_sent, ((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_chart), __pyx_v_tags, __pyx_v_beam_beta, __pyx_v_beam_delta); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0;
401: sent, <SparseCFGChart>chart, tags, beam_beta, beam_delta)
+402: return parse_leftchildloop(
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_6 = __pyx_f_8discodop_4pcfg_parse_leftchildloop(__pyx_v_sent, ((struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *)__pyx_v_chart), __pyx_v_tags, ((struct __pyx_obj_8discodop_10containers_Whitelist *)__pyx_v_whitelist), __pyx_v_beam_beta, __pyx_v_beam_delta); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 402, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0;
+403: sent, chart, tags, whitelist, beam_beta, beam_delta)
if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_v_chart), __pyx_ptype_8discodop_4pcfg_SparseCFGChart)))) __PYX_ERR(0, 403, __pyx_L1_error) if (!(likely(((__pyx_v_whitelist) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_whitelist, __pyx_ptype_8discodop_10containers_Whitelist))))) __PYX_ERR(0, 403, __pyx_L1_error)
404:
405:
+406: cdef parse_grammarloop(sent, CFGChart_fused chart, tags,
static PyObject *__pyx_fuse_0__pyx_f_8discodop_4pcfg_parse_grammarloop(PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_chart, PyObject *__pyx_v_tags, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
Agenda<Label,Prob> __pyx_v_unaryagenda;
struct __pyx_t_8discodop_4pcfg_MidFilter __pyx_v_midfilter;
ProbRule *__pyx_v_rule;
short __pyx_v_left;
short __pyx_v_right;
short __pyx_v_mid;
short __pyx_v_span;
short __pyx_v_lensent;
short __pyx_v_narrowl;
short __pyx_v_narrowr;
short __pyx_v_widel;
short __pyx_v_wider;
short __pyx_v_minmid;
short __pyx_v_maxmid;
Prob __pyx_v_prevprob;
Prob __pyx_v_prob;
Label __pyx_v_lhs;
uint32_t __pyx_v_n;
uint64_t __pyx_v_item;
uint64_t __pyx_v_leftitem;
uint64_t __pyx_v_rightitem;
uint64_t __pyx_v_cell;
uint64_t __pyx_v_blocked;
ItemNo __pyx_v_lastidx;
size_t __pyx_v_nts;
PyObject *__pyx_v_covered = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0parse_grammarloop", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.pcfg.parse_grammarloop", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_XDECREF(__pyx_v_covered);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_fuse_1__pyx_f_8discodop_4pcfg_parse_grammarloop(PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_chart, PyObject *__pyx_v_tags, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
Agenda<Label,Prob> __pyx_v_unaryagenda;
struct __pyx_t_8discodop_4pcfg_MidFilter __pyx_v_midfilter;
ProbRule *__pyx_v_rule;
short __pyx_v_left;
short __pyx_v_right;
short __pyx_v_mid;
short __pyx_v_span;
short __pyx_v_lensent;
short __pyx_v_narrowl;
short __pyx_v_narrowr;
short __pyx_v_widel;
short __pyx_v_wider;
short __pyx_v_minmid;
short __pyx_v_maxmid;
Prob __pyx_v_prevprob;
Prob __pyx_v_prob;
Label __pyx_v_lhs;
uint32_t __pyx_v_n;
uint64_t __pyx_v_item;
uint64_t __pyx_v_leftitem;
uint64_t __pyx_v_rightitem;
uint64_t __pyx_v_cell;
uint64_t __pyx_v_blocked;
ItemNo __pyx_v_lastidx;
size_t __pyx_v_nts;
PyObject *__pyx_v_covered = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1parse_grammarloop", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("discodop.pcfg.parse_grammarloop", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_XDECREF(__pyx_v_covered);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
407: Prob beam_beta, int beam_delta):
408: """A CKY parser modeled after Bodenstab's 'fast grammar loop'."""
409: cdef:
+410: Grammar grammar = chart.grammar
__pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0;
411: Agenda[Label, Prob] unaryagenda
412: MidFilter midfilter
413: ProbRule *rule
+414: short left, right, mid, span, lensent = len(sent)
__pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 414, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2; /* … */ __pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 414, __pyx_L1_error) __pyx_v_lensent = __pyx_t_2;
415: short narrowl, narrowr, widel, wider, minmid, maxmid
416: Prob prevprob, prob
+417: Label lhs = 0
__pyx_v_lhs = 0; /* … */ __pyx_v_lhs = 0;
418: uint32_t n
+419: uint64_t item, leftitem, rightitem, cell, blocked = 0
__pyx_v_blocked = 0; /* … */ __pyx_v_blocked = 0;
420: ItemNo lastidx
+421: size_t nts = grammar.nonterminals
__pyx_t_3 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_3; /* … */ __pyx_t_3 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_3;
422: # Create matrices to track minima and maxima for binary splits.
+423: n = (lensent + 1) * nts + 1
__pyx_v_n = (((__pyx_v_lensent + 1) * __pyx_v_nts) + 1); /* … */ __pyx_v_n = (((__pyx_v_lensent + 1) * __pyx_v_nts) + 1);
+424: midfilter.minleft.resize(n, -1)
try {
__pyx_v_midfilter.minleft.resize(__pyx_v_n, -1);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 424, __pyx_L1_error)
}
/* … */
try {
__pyx_v_midfilter.minleft.resize(__pyx_v_n, -1);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 424, __pyx_L1_error)
}
+425: midfilter.maxright.resize(n, -1)
try {
__pyx_v_midfilter.maxright.resize(__pyx_v_n, -1);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 425, __pyx_L1_error)
}
/* … */
try {
__pyx_v_midfilter.maxright.resize(__pyx_v_n, -1);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 425, __pyx_L1_error)
}
+426: midfilter.maxleft.resize(n, lensent + 1)
try {
__pyx_v_midfilter.maxleft.resize(__pyx_v_n, (__pyx_v_lensent + 1));
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 426, __pyx_L1_error)
}
/* … */
try {
__pyx_v_midfilter.maxleft.resize(__pyx_v_n, (__pyx_v_lensent + 1));
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 426, __pyx_L1_error)
}
+427: midfilter.minright.resize(n, lensent + 1)
try {
__pyx_v_midfilter.minright.resize(__pyx_v_n, (__pyx_v_lensent + 1));
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 427, __pyx_L1_error)
}
/* … */
try {
__pyx_v_midfilter.minright.resize(__pyx_v_n, (__pyx_v_lensent + 1));
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 427, __pyx_L1_error)
}
428:
+429: if beam_beta:
__pyx_t_4 = (__pyx_v_beam_beta != 0);
if (__pyx_t_4) {
/* … */
}
/* … */
__pyx_t_4 = (__pyx_v_beam_beta != 0);
if (__pyx_t_4) {
/* … */
}
+430: chart.beambuckets.resize(
try {
__pyx_v_chart->__pyx_base.beambuckets.resize((__pyx_f_8discodop_10containers_compactcellidx((__pyx_v_lensent - 1), __pyx_v_lensent, __pyx_v_lensent, 1) + 1), HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 430, __pyx_L1_error)
}
/* … */
try {
__pyx_v_chart->__pyx_base.beambuckets.resize((__pyx_f_8discodop_10containers_compactcellidx((__pyx_v_lensent - 1), __pyx_v_lensent, __pyx_v_lensent, 1) + 1), HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 430, __pyx_L1_error)
}
431: compactcellidx(lensent - 1, lensent, lensent, 1) + 1,
432: INFINITY)
433: # assign POS tags
+434: covered, msg = populatepos[CFGChart_fused](chart, sent, tags,
__pyx_t_1 = __pyx_fuse_0__pyx_f_8discodop_4pcfg_populatepos(__pyx_v_chart, __pyx_v_sent, __pyx_v_tags, __pyx_v_unaryagenda, ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None), (&__pyx_v_blocked), (&__pyx_v_midfilter), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 434, __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, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 434, __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_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __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, 434, __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, 434, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_v_covered = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_msg = __pyx_t_6; __pyx_t_6 = 0; /* … */ __pyx_t_1 = __pyx_fuse_1__pyx_f_8discodop_4pcfg_populatepos(__pyx_v_chart, __pyx_v_sent, __pyx_v_tags, __pyx_v_unaryagenda, ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None), (&__pyx_v_blocked), (&__pyx_v_midfilter), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 434, __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, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 434, __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_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __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, 434, __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, 434, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_v_covered = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_msg = __pyx_t_6; __pyx_t_6 = 0;
435: unaryagenda, None, &blocked, &midfilter, NULL)
+436: if not covered:
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_covered); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 436, __pyx_L1_error) __pyx_t_9 = ((!__pyx_t_4) != 0); if (__pyx_t_9) { /* … */ } /* … */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_covered); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 436, __pyx_L1_error) __pyx_t_9 = ((!__pyx_t_4) != 0); if (__pyx_t_9) { /* … */ }
+437: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_msg); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_msg); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
438:
+439: for span in range(2, lensent + 1):
__pyx_t_10 = (__pyx_v_lensent + 1);
for (__pyx_t_11 = 2; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
__pyx_v_span = __pyx_t_11;
/* … */
__pyx_t_10 = (__pyx_v_lensent + 1);
for (__pyx_t_11 = 2; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
__pyx_v_span = __pyx_t_11;
440: # constituents from left to right
+441: for left in range(lensent - span + 1):
__pyx_t_12 = ((__pyx_v_lensent - __pyx_v_span) + 1);
for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
__pyx_v_left = __pyx_t_13;
/* … */
__pyx_t_12 = ((__pyx_v_lensent - __pyx_v_span) + 1);
for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
__pyx_v_left = __pyx_t_13;
+442: right = left + span
__pyx_v_right = (__pyx_v_left + __pyx_v_span);
/* … */
__pyx_v_right = (__pyx_v_left + __pyx_v_span);
443: if CFGChart_fused is DenseCFGChart:
+444: cell = cellidx(left, right, lensent, nts)
__pyx_v_cell = __pyx_f_8discodop_10containers_cellidx(__pyx_v_left, __pyx_v_right, __pyx_v_lensent, __pyx_v_nts);
445: elif CFGChart_fused is SparseCFGChart:
+446: cell = cellstruct(left, right)
__pyx_v_cell = __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_left, __pyx_v_right);
+447: lastidx = chart.items.size()
__pyx_v_lastidx = __pyx_v_chart->__pyx_base.items.size();
/* … */
__pyx_v_lastidx = __pyx_v_chart->__pyx_base.items.size();
448: # apply all binary rules
+449: for lhs in range(1, grammar.phrasalnonterminals):
__pyx_t_3 = __pyx_v_grammar->phrasalnonterminals;
for (__pyx_t_14 = 1; __pyx_t_14 < __pyx_t_3; __pyx_t_14+=1) {
__pyx_v_lhs = __pyx_t_14;
/* … */
__pyx_t_3 = __pyx_v_grammar->phrasalnonterminals;
for (__pyx_t_14 = 1; __pyx_t_14 < __pyx_t_3; __pyx_t_14+=1) {
__pyx_v_lhs = __pyx_t_14;
+450: n = 0
__pyx_v_n = 0;
/* … */
__pyx_v_n = 0;
+451: rule = &(grammar.bylhs[lhs][n])
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
+452: item = lhs + cell
__pyx_v_item = (__pyx_v_lhs + __pyx_v_cell);
/* … */
__pyx_v_item = (__pyx_v_lhs + __pyx_v_cell);
+453: prevprob = chart._subtreeprob(item)
__pyx_v_prevprob = __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item);
/* … */
__pyx_v_prevprob = __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item);
+454: while rule.lhs == lhs:
while (1) {
__pyx_t_9 = ((__pyx_v_rule->lhs == __pyx_v_lhs) != 0);
if (!__pyx_t_9) break;
/* … */
while (1) {
__pyx_t_9 = ((__pyx_v_rule->lhs == __pyx_v_lhs) != 0);
if (!__pyx_t_9) break;
+455: narrowr = midfilter.minright[left * nts + rule.rhs1]
__pyx_v_narrowr = (__pyx_v_midfilter.minright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_rule->rhs1)]);
/* … */
__pyx_v_narrowr = (__pyx_v_midfilter.minright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_rule->rhs1)]);
+456: narrowl = midfilter.minleft[right * nts + rule.rhs2]
__pyx_v_narrowl = (__pyx_v_midfilter.minleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_rule->rhs2)]);
/* … */
__pyx_v_narrowl = (__pyx_v_midfilter.minleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_rule->rhs2)]);
+457: if (rule.rhs2 == 0 or narrowr >= right or narrowl < narrowr
__pyx_t_4 = ((__pyx_v_rule->rhs2 == 0) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
__pyx_t_4 = ((__pyx_v_narrowr >= __pyx_v_right) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
/* … */
__pyx_t_4 = ((__pyx_v_narrowl < __pyx_v_narrowr) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
/* … */
__pyx_t_4 = ((__pyx_v_rule->rhs2 == 0) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
__pyx_t_4 = ((__pyx_v_narrowr >= __pyx_v_right) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
/* … */
__pyx_t_4 = ((__pyx_v_narrowl < __pyx_v_narrowr) != 0);
if (!__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L16_bool_binop_done;
}
/* … */
if (__pyx_t_9) {
/* … */
}
+458: or TESTBIT(grammar.mask, rule.no)):
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
__pyx_t_9 = __pyx_t_4;
__pyx_L16_bool_binop_done:;
__pyx_t_4 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
__pyx_t_9 = __pyx_t_4;
__pyx_L16_bool_binop_done:;
+459: n += 1
__pyx_v_n = (__pyx_v_n + 1);
/* … */
__pyx_v_n = (__pyx_v_n + 1);
+460: rule = &(grammar.bylhs[lhs][n])
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
+461: continue
goto __pyx_L13_continue;
/* … */
goto __pyx_L13_continue;
+462: widel = midfilter.maxleft[right * nts + rule.rhs2]
__pyx_v_widel = (__pyx_v_midfilter.maxleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_rule->rhs2)]);
/* … */
__pyx_v_widel = (__pyx_v_midfilter.maxleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_rule->rhs2)]);
+463: minmid = narrowr if narrowr > widel else widel
if (((__pyx_v_narrowr > __pyx_v_widel) != 0)) {
__pyx_t_15 = __pyx_v_narrowr;
} else {
__pyx_t_15 = __pyx_v_widel;
}
__pyx_v_minmid = __pyx_t_15;
/* … */
if (((__pyx_v_narrowr > __pyx_v_widel) != 0)) {
__pyx_t_15 = __pyx_v_narrowr;
} else {
__pyx_t_15 = __pyx_v_widel;
}
__pyx_v_minmid = __pyx_t_15;
+464: wider = midfilter.maxright[left * nts + rule.rhs1]
__pyx_v_wider = (__pyx_v_midfilter.maxright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_rule->rhs1)]);
/* … */
__pyx_v_wider = (__pyx_v_midfilter.maxright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_rule->rhs1)]);
+465: maxmid = wider if wider < narrowl else narrowl
if (((__pyx_v_wider < __pyx_v_narrowl) != 0)) {
__pyx_t_15 = __pyx_v_wider;
} else {
__pyx_t_15 = __pyx_v_narrowl;
}
__pyx_v_maxmid = __pyx_t_15;
/* … */
if (((__pyx_v_wider < __pyx_v_narrowl) != 0)) {
__pyx_t_15 = __pyx_v_wider;
} else {
__pyx_t_15 = __pyx_v_narrowl;
}
__pyx_v_maxmid = __pyx_t_15;
+466: for mid in range(minmid, maxmid + 1):
__pyx_t_16 = (__pyx_v_maxmid + 1);
for (__pyx_t_15 = __pyx_v_minmid; __pyx_t_15 < __pyx_t_16; __pyx_t_15+=1) {
__pyx_v_mid = __pyx_t_15;
/* … */
__pyx_t_16 = (__pyx_v_maxmid + 1);
for (__pyx_t_15 = __pyx_v_minmid; __pyx_t_15 < __pyx_t_16; __pyx_t_15+=1) {
__pyx_v_mid = __pyx_t_15;
467: if CFGChart_fused is DenseCFGChart:
+468: leftitem = rule.rhs1 + cellidx(left, mid,
__pyx_v_leftitem = (__pyx_v_rule->rhs1 + __pyx_f_8discodop_10containers_cellidx(__pyx_v_left, __pyx_v_mid, __pyx_v_lensent, __pyx_v_nts));
469: lensent, nts)
+470: rightitem = rule.rhs2 + cellidx(mid, right,
__pyx_v_rightitem = (__pyx_v_rule->rhs2 + __pyx_f_8discodop_10containers_cellidx(__pyx_v_mid, __pyx_v_right, __pyx_v_lensent, __pyx_v_nts));
471: lensent, nts)
472: elif CFGChart_fused is SparseCFGChart:
+473: leftitem = rule.rhs1 + cellstruct(left, mid)
__pyx_v_leftitem = (__pyx_v_rule->rhs1 + __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_left, __pyx_v_mid));
+474: rightitem = rule.rhs2 + cellstruct(mid, right)
__pyx_v_rightitem = (__pyx_v_rule->rhs2 + __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_mid, __pyx_v_right));
+475: prob = chart._subtreeprob(leftitem)
__pyx_v_prob = __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_leftitem);
/* … */
__pyx_v_prob = __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_leftitem);
+476: if isinf(prob):
__pyx_t_9 = (isinf(__pyx_v_prob) != 0);
if (__pyx_t_9) {
/* … */
}
/* … */
__pyx_t_9 = (isinf(__pyx_v_prob) != 0);
if (__pyx_t_9) {
/* … */
}
+477: continue
goto __pyx_L20_continue;
/* … */
goto __pyx_L20_continue;
+478: prob += chart._subtreeprob(rightitem)
__pyx_v_prob = (__pyx_v_prob + __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_rightitem));
/* … */
__pyx_v_prob = (__pyx_v_prob + __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_rightitem));
+479: if isfinite(prob):
__pyx_t_9 = (isfinite(__pyx_v_prob) != 0);
if (__pyx_t_9) {
/* … */
}
__pyx_L20_continue:;
}
/* … */
__pyx_t_9 = (isfinite(__pyx_v_prob) != 0);
if (__pyx_t_9) {
/* … */
}
__pyx_L20_continue:;
}
+480: if chart.updateprob(item, prob + rule.prob,
__pyx_t_9 = (__pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(__pyx_v_chart, __pyx_v_item, (__pyx_v_prob + __pyx_v_rule->prob), __pyx_t_17) != 0);
if (__pyx_t_9) {
/* … */
goto __pyx_L24;
}
/* … */
__pyx_t_9 = (__pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(__pyx_v_chart, __pyx_v_item, (__pyx_v_prob + __pyx_v_rule->prob), __pyx_t_17) != 0);
if (__pyx_t_9) {
/* … */
goto __pyx_L24;
}
+481: beam_beta if span <= beam_delta else 0.0):
if (((__pyx_v_span <= __pyx_v_beam_delta) != 0)) {
__pyx_t_17 = __pyx_v_beam_beta;
} else {
__pyx_t_17 = 0.0;
}
/* … */
if (((__pyx_v_span <= __pyx_v_beam_delta) != 0)) {
__pyx_t_17 = __pyx_v_beam_beta;
} else {
__pyx_t_17 = 0.0;
}
+482: chart.addedge(item, mid, rule)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(__pyx_v_chart, __pyx_v_item, __pyx_v_mid, __pyx_v_rule);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(__pyx_v_chart, __pyx_v_item, __pyx_v_mid, __pyx_v_rule);
483: else:
+484: blocked += 1
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L24:;
/* … */
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L24:;
+485: n += 1
__pyx_v_n = (__pyx_v_n + 1);
/* … */
__pyx_v_n = (__pyx_v_n + 1);
+486: rule = &(grammar.bylhs[lhs][n])
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
__pyx_L13_continue:;
}
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->bylhs[__pyx_v_lhs])[__pyx_v_n]));
__pyx_L13_continue:;
}
487:
+488: if isinf(prevprob) and isfinite(chart._subtreeprob(item)):
__pyx_t_4 = (isinf(__pyx_v_prevprob) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_4 = (isfinite(__pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item)) != 0);
__pyx_t_9 = __pyx_t_4;
__pyx_L26_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
}
/* … */
__pyx_t_4 = (isinf(__pyx_v_prevprob) != 0);
if (__pyx_t_4) {
} else {
__pyx_t_9 = __pyx_t_4;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_4 = (isfinite(__pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item)) != 0);
__pyx_t_9 = __pyx_t_4;
__pyx_L26_bool_binop_done:;
if (__pyx_t_9) {
/* … */
}
}
+489: updatemidfilter(midfilter, left, right, lhs, nts)
__pyx_f_8discodop_4pcfg_updatemidfilter(__pyx_v_midfilter, __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
/* … */
__pyx_f_8discodop_4pcfg_updatemidfilter(__pyx_v_midfilter, __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
490:
+491: applyunaryrules[CFGChart_fused](chart, left, right, cell, lastidx,
__pyx_fuse_0__pyx_f_8discodop_4pcfg_applyunaryrules(__pyx_v_chart, __pyx_v_left, __pyx_v_right, __pyx_v_cell, __pyx_v_lastidx, __pyx_v_unaryagenda, (&__pyx_v_midfilter), (&__pyx_v_blocked), ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None));
}
}
/* … */
__pyx_fuse_1__pyx_f_8discodop_4pcfg_applyunaryrules(__pyx_v_chart, __pyx_v_left, __pyx_v_right, __pyx_v_cell, __pyx_v_lastidx, __pyx_v_unaryagenda, (&__pyx_v_midfilter), (&__pyx_v_blocked), ((struct __pyx_obj_8discodop_10containers_Whitelist *)Py_None));
}
}
492: unaryagenda, &midfilter, &blocked, None)
493:
+494: msg = '%s%s, blocked %s' % (
__pyx_t_5 = PyUnicode_Format(__pyx_kp_u_s_s_blocked_s, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_s_s_blocked_s, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_5); __pyx_t_5 = 0;
+495: '' if chart else 'no parse; ', chart.stats(), blocked)
__pyx_t_9 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 495, __pyx_L1_error) if (__pyx_t_9) { __Pyx_INCREF(__pyx_kp_u__2); __pyx_t_1 = __pyx_kp_u__2; } else { __Pyx_INCREF(__pyx_kp_u_no_parse); __pyx_t_1 = __pyx_kp_u_no_parse; } __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_stats); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } if (__pyx_t_7) { __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 495, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyInt_From_uint64_t(__pyx_v_blocked); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; /* … */ __pyx_t_9 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 495, __pyx_L1_error) if (__pyx_t_9) { __Pyx_INCREF(__pyx_kp_u__2); __pyx_t_1 = __pyx_kp_u__2; } else { __Pyx_INCREF(__pyx_kp_u_no_parse); __pyx_t_1 = __pyx_kp_u_no_parse; } __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_stats); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } if (__pyx_t_7) { __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 495, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyInt_From_uint64_t(__pyx_v_blocked); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0;
+496: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 496, __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, 496, __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;
497:
498:
+499: cdef parse_leftchildloop(sent, SparseCFGChart chart, tags,
static PyObject *__pyx_f_8discodop_4pcfg_parse_leftchildloop(PyObject *__pyx_v_sent, struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_chart, PyObject *__pyx_v_tags, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, Prob __pyx_v_beam_beta, int __pyx_v_beam_delta) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
Agenda<Label,Prob> __pyx_v_unaryagenda;
ProbRule *__pyx_v_rule;
std::vector<size_t> __pyx_v_cellindex;
Prob __pyx_v_leftprob;
Prob __pyx_v_rightprob;
Label __pyx_v_rhs1;
ItemNo __pyx_v_leftitemidx;
ItemNo __pyx_v_lastidx;
uint64_t __pyx_v_item;
uint64_t __pyx_v_leftitem;
uint64_t __pyx_v_rightcell;
uint64_t __pyx_v_cell;
uint64_t __pyx_v_ccell;
uint64_t __pyx_v_blocked;
uint32_t __pyx_v_n;
short __pyx_v_left;
short __pyx_v_right;
short __pyx_v_mid;
short __pyx_v_span;
short __pyx_v_lensent;
union __pyx_t_8discodop_4pcfg_CFGItem __pyx_v_li;
PyObject *__pyx_v_covered = NULL;
PyObject *__pyx_v_msg = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("parse_leftchildloop", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("discodop.pcfg.parse_leftchildloop", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_XDECREF(__pyx_v_covered);
__Pyx_XDECREF(__pyx_v_msg);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
500: Whitelist whitelist, Prob beam_beta, int beam_delta):
501: """A CKY parser that iterates over items in chart and compatible rules."""
502: cdef:
+503: Grammar grammar = chart.grammar
__pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar);
__Pyx_INCREF(__pyx_t_1);
__pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1);
__pyx_t_1 = 0;
504: Agenda[Label, Prob] unaryagenda
505: ProbRule *rule
506: vector[size_t] cellindex # compact cell idx => itemidx
507: Prob leftprob, rightprob
508: Label rhs1
509: ItemNo leftitemidx, lastidx
510: uint64_t item, leftitem, rightcell, cell, ccell
+511: uint64_t blocked = 0
__pyx_v_blocked = 0;
512: uint32_t n
+513: short left, right, mid, span, lensent = len(sent)
__pyx_t_2 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 513, __pyx_L1_error)
__pyx_v_lensent = __pyx_t_2;
514: CFGItem li
+515: cellindex.resize(compactcellidx(lensent - 1, lensent, lensent, 1) + 2, 0)
try {
__pyx_v_cellindex.resize((__pyx_f_8discodop_10containers_compactcellidx((__pyx_v_lensent - 1), __pyx_v_lensent, __pyx_v_lensent, 1) + 2), 0);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 515, __pyx_L1_error)
}
+516: if beam_beta:
__pyx_t_3 = (__pyx_v_beam_beta != 0);
if (__pyx_t_3) {
/* … */
}
+517: chart.beambuckets.resize(
try {
__pyx_v_chart->__pyx_base.beambuckets.resize((__pyx_f_8discodop_10containers_compactcellidx((__pyx_v_lensent - 1), __pyx_v_lensent, __pyx_v_lensent, 1) + 1), HUGE_VAL);
} catch(...) {
__Pyx_CppExn2PyErr();
__PYX_ERR(0, 517, __pyx_L1_error)
}
518: compactcellidx(lensent - 1, lensent, lensent, 1) + 1, INFINITY)
519: # assign POS tags
+520: covered, msg = populatepos(chart, sent, tags, unaryagenda, whitelist,
__pyx_t_1 = __pyx_fuse_1__pyx_f_8discodop_4pcfg_populatepos(__pyx_v_chart, __pyx_v_sent, __pyx_v_tags, __pyx_v_unaryagenda, __pyx_v_whitelist, (&__pyx_v_blocked), NULL, (&__pyx_v_cellindex)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if !CYTHON_COMPILING_IN_PYPY Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 520, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 520, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 520, __pyx_L1_error) __pyx_L5_unpacking_done:; } __pyx_v_covered = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_msg = __pyx_t_5; __pyx_t_5 = 0;
521: &blocked, NULL, &cellindex)
+522: if not covered:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_covered); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 522, __pyx_L1_error)
__pyx_t_8 = ((!__pyx_t_3) != 0);
if (__pyx_t_8) {
/* … */
}
+523: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_msg); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
524:
+525: for span in range(2, lensent + 1):
__pyx_t_9 = (__pyx_v_lensent + 1);
for (__pyx_t_10 = 2; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
__pyx_v_span = __pyx_t_10;
526: # constituents from left to right
+527: for left in range(lensent - span + 1):
__pyx_t_11 = ((__pyx_v_lensent - __pyx_v_span) + 1);
for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_left = __pyx_t_12;
+528: right = left + span
__pyx_v_right = (__pyx_v_left + __pyx_v_span);
+529: cell = cellstruct(left, right)
__pyx_v_cell = __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_left, __pyx_v_right);
+530: ccell = compactcellidx(left, right, lensent, 1)
__pyx_v_ccell = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_lensent, 1);
+531: cellindex[ccell] = lastidx = chart.items.size()
__pyx_t_13 = __pyx_v_chart->__pyx_base.items.size();
(__pyx_v_cellindex[__pyx_v_ccell]) = __pyx_t_13;
__pyx_v_lastidx = __pyx_t_13;
532: # apply binary rules; if whitelist is given, skip labels not in set
+533: for mid in range(left + 1, right):
__pyx_t_14 = __pyx_v_right;
for (__pyx_t_15 = (__pyx_v_left + 1); __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
__pyx_v_mid = __pyx_t_15;
+534: rightcell = cellstruct(mid, right)
__pyx_v_rightcell = __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_mid, __pyx_v_right);
+535: leftitemidx = cellindex[compactcellidx(left, mid, lensent, 1)]
__pyx_v_leftitemidx = (__pyx_v_cellindex[__pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_mid, __pyx_v_lensent, 1)]);
+536: leftitem = chart.items[leftitemidx]
__pyx_v_leftitem = (__pyx_v_chart->__pyx_base.items[__pyx_v_leftitemidx]);
+537: li.dt = leftitem
__pyx_v_li.dt = __pyx_v_leftitem;
+538: while li.st.end == mid:
while (1) {
__pyx_t_8 = ((__pyx_v_li.st.end == __pyx_v_mid) != 0);
if (!__pyx_t_8) break;
+539: leftprob = (<Chart>chart).subtreeprob(leftitemidx)
__pyx_v_leftprob = ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart)->__pyx_vtab)->subtreeprob(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_leftitemidx);
+540: rhs1 = chart._label(leftitem)
__pyx_v_rhs1 = __pyx_f_8discodop_4pcfg_14SparseCFGChart__label(__pyx_v_chart, __pyx_v_leftitem);
+541: n = 0
__pyx_v_n = 0;
+542: rule = &(grammar.lbinary[rhs1][n])
__pyx_v_rule = (&((__pyx_v_grammar->lbinary[__pyx_v_rhs1])[__pyx_v_n]));
+543: while rule.rhs1 == rhs1 and n < grammar.numbinary:
while (1) {
__pyx_t_3 = ((__pyx_v_rule->rhs1 == __pyx_v_rhs1) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_8 = __pyx_t_3;
goto __pyx_L17_bool_binop_done;
}
__pyx_t_3 = ((__pyx_v_n < __pyx_v_grammar->numbinary) != 0);
__pyx_t_8 = __pyx_t_3;
__pyx_L17_bool_binop_done:;
if (!__pyx_t_8) break;
544: # This requires a hash table lookup of right item;
545: # might be better if items in cell are together
546: # in own datastructure
+547: rightprob = chart._subtreeprob(rightcell + rule.rhs2)
__pyx_v_rightprob = __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, (__pyx_v_rightcell + __pyx_v_rule->rhs2));
+548: item = cell + rule.lhs
__pyx_v_item = (__pyx_v_cell + __pyx_v_rule->lhs);
+549: if isfinite(rightprob):
__pyx_t_8 = (isfinite(__pyx_v_rightprob) != 0);
if (__pyx_t_8) {
/* … */
}
+550: if TESTBIT(grammar.mask, rule.no) or (
__pyx_t_3 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (!__pyx_t_3) {
} else {
__pyx_t_8 = __pyx_t_3;
goto __pyx_L21_bool_binop_done;
}
/* … */
if (__pyx_t_8) {
/* … */
goto __pyx_L20;
}
+551: whitelist is not None
__pyx_t_3 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_16 = (__pyx_t_3 != 0);
if (__pyx_t_16) {
} else {
__pyx_t_8 = __pyx_t_16;
goto __pyx_L21_bool_binop_done;
}
+552: and whitelist.mapping[rule.lhs]
__pyx_t_16 = ((__pyx_v_whitelist->mapping[__pyx_v_rule->lhs]) != 0);
if (__pyx_t_16) {
} else {
__pyx_t_8 = __pyx_t_16;
goto __pyx_L21_bool_binop_done;
}
+553: and not whitelist.cfg[ccell].count(
__pyx_t_16 = ((!((__pyx_v_whitelist->cfg[__pyx_v_ccell]).count((__pyx_v_whitelist->mapping[__pyx_v_rule->lhs])) != 0)) != 0);
__pyx_t_8 = __pyx_t_16;
__pyx_L21_bool_binop_done:;
554: whitelist.mapping[rule.lhs])):
+555: blocked += 1
__pyx_v_blocked = (__pyx_v_blocked + 1);
+556: elif not chart.updateprob(
__pyx_t_8 = ((!(__pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(__pyx_v_chart, __pyx_v_item, ((__pyx_v_leftprob + __pyx_v_rightprob) + __pyx_v_rule->prob), __pyx_t_17) != 0)) != 0);
if (__pyx_t_8) {
/* … */
goto __pyx_L20;
}
557: item, leftprob + rightprob + rule.prob,
+558: beam_beta if span <= beam_delta else 0.0):
if (((__pyx_v_span <= __pyx_v_beam_delta) != 0)) {
__pyx_t_17 = __pyx_v_beam_beta;
} else {
__pyx_t_17 = 0.0;
}
+559: blocked += 1
__pyx_v_blocked = (__pyx_v_blocked + 1);
560: else:
+561: chart.addedge(item, mid, rule)
/*else*/ {
__pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(__pyx_v_chart, __pyx_v_item, __pyx_v_mid, __pyx_v_rule);
}
__pyx_L20:;
+562: n += 1
__pyx_v_n = (__pyx_v_n + 1);
+563: rule = &(grammar.lbinary[rhs1][n])
__pyx_v_rule = (&((__pyx_v_grammar->lbinary[__pyx_v_rhs1])[__pyx_v_n]));
}
+564: leftitemidx += 1
__pyx_v_leftitemidx = (__pyx_v_leftitemidx + 1);
+565: leftitem = chart.items[leftitemidx]
__pyx_v_leftitem = (__pyx_v_chart->__pyx_base.items[__pyx_v_leftitemidx]);
+566: li.dt = leftitem
__pyx_v_li.dt = __pyx_v_leftitem;
}
}
567:
+568: applyunaryrules(chart, left, right, cell, lastidx, unaryagenda,
__pyx_fuse_1__pyx_f_8discodop_4pcfg_applyunaryrules(__pyx_v_chart, __pyx_v_left, __pyx_v_right, __pyx_v_cell, __pyx_v_lastidx, __pyx_v_unaryagenda, NULL, (&__pyx_v_blocked), __pyx_v_whitelist);
569: NULL, &blocked, whitelist)
+570: cellindex[ccell + 1] = chart.items.size()
(__pyx_v_cellindex[(__pyx_v_ccell + 1)]) = __pyx_v_chart->__pyx_base.items.size();
}
}
+571: msg = '%s%s, blocked %s' % (
__pyx_t_4 = PyUnicode_Format(__pyx_kp_u_s_s_blocked_s, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 571, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_4); __pyx_t_4 = 0;
+572: '' if chart else 'no parse; ', chart.stats(), blocked)
__pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_chart)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 572, __pyx_L1_error) if (__pyx_t_8) { __Pyx_INCREF(__pyx_kp_u__2); __pyx_t_1 = __pyx_kp_u__2; } else { __Pyx_INCREF(__pyx_kp_u_no_parse); __pyx_t_1 = __pyx_kp_u_no_parse; } __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_chart), __pyx_n_s_stats); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __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_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 572, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 572, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_blocked); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 572, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4); __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0;
+573: return chart, msg
__Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_chart)); __Pyx_GIVEREF(((PyObject *)__pyx_v_chart)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_chart)); __Pyx_INCREF(__pyx_v_msg); __Pyx_GIVEREF(__pyx_v_msg); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_msg); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
574:
575:
+576: cdef populatepos(CFGChart_fused chart, sent, tags,
static PyObject *__pyx_fuse_0__pyx_f_8discodop_4pcfg_populatepos(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_chart, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, Agenda<Label,Prob> &__pyx_v_unaryagenda, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, uint64_t *__pyx_v_blocked, struct __pyx_t_8discodop_4pcfg_MidFilter *__pyx_v_midfilter, std::vector<size_t> *__pyx_v_cellindex) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
LexicalRule __pyx_v_lexrule;
Label __pyx_v_lhs;
size_t __pyx_v_nts;
ItemNo __pyx_v_lastidx;
uint64_t __pyx_v_cell;
uint64_t __pyx_v_ccell;
uint32_t __pyx_v_n;
short __pyx_v_left;
short __pyx_v_right;
short __pyx_v_lensent;
PyObject *__pyx_v_word = NULL;
PyObject *__pyx_v_tag = NULL;
PyObject *__pyx_v_tagre = NULL;
int __pyx_v_recognized;
spp::sparse_hash_map<std::string,std::vector<uint32_t> > ::iterator __pyx_v_it;
std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> > __pyx_v_x;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0populatepos", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("discodop.pcfg.populatepos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__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__pyx_f_8discodop_4pcfg_populatepos(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_chart, PyObject *__pyx_v_sent, PyObject *__pyx_v_tags, Agenda<Label,Prob> &__pyx_v_unaryagenda, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist, uint64_t *__pyx_v_blocked, struct __pyx_t_8discodop_4pcfg_MidFilter *__pyx_v_midfilter, std::vector<size_t> *__pyx_v_cellindex) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
LexicalRule __pyx_v_lexrule;
Label __pyx_v_lhs;
size_t __pyx_v_nts;
ItemNo __pyx_v_lastidx;
uint64_t __pyx_v_cell;
uint64_t __pyx_v_ccell;
uint32_t __pyx_v_n;
short __pyx_v_left;
short __pyx_v_right;
short __pyx_v_lensent;
PyObject *__pyx_v_word = NULL;
PyObject *__pyx_v_tag = NULL;
PyObject *__pyx_v_tagre = NULL;
int __pyx_v_recognized;
spp::sparse_hash_map<std::string,std::vector<uint32_t> > ::iterator __pyx_v_it;
std::pair<Label,spp::sparse_hash_map<std::string,uint32_t> > __pyx_v_x;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1populatepos", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_AddTraceback("discodop.pcfg.populatepos", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_XDECREF(__pyx_v_word);
__Pyx_XDECREF(__pyx_v_tag);
__Pyx_XDECREF(__pyx_v_tagre);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
577: Agenda[Label, Prob]& unaryagenda, Whitelist whitelist,
578: uint64_t *blocked, MidFilter *midfilter, vector[size_t] *cellindex):
579: """Apply all possible lexical and unary rules on each lexical span.
580:
581: :param unaryagenda: expects an empty agenda; only passed around to reuse
582: allocated memory.
583: :returns: a tuple ``(success, msg)`` where ``success`` is True if a POS tag
584: was found for every word in the sentence."""
585: cdef:
+586: Grammar grammar = chart.grammar
__pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0;
587: LexicalRule lexrule
588: Label lhs
+589: size_t nts = grammar.nonterminals
__pyx_t_2 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_2; /* … */ __pyx_t_2 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_2;
590: ItemNo lastidx
+591: uint64_t cell, ccell = 0
__pyx_v_ccell = 0; /* … */ __pyx_v_ccell = 0;
592: uint32_t n
+593: short left, right, lensent = len(sent)
__pyx_t_3 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 593, __pyx_L1_error) __pyx_v_lensent = __pyx_t_3; /* … */ __pyx_t_3 = PyObject_Length(__pyx_v_sent); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 593, __pyx_L1_error) __pyx_v_lensent = __pyx_t_3;
+594: for left, word in enumerate(sent):
__pyx_t_4 = 0; if (likely(PyList_CheckExact(__pyx_v_sent)) || PyTuple_CheckExact(__pyx_v_sent)) { __pyx_t_1 = __pyx_v_sent; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; __pyx_t_5 = NULL; } else { __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_sent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 594, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_1))) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 594, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 594, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } } else { __pyx_t_6 = __pyx_t_5(__pyx_t_1); 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, 594, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_6); } __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_6); __pyx_t_6 = 0; __pyx_v_left = __pyx_t_4; __pyx_t_4 = (__pyx_t_4 + 1); /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_4 = 0; if (likely(PyList_CheckExact(__pyx_v_sent)) || PyTuple_CheckExact(__pyx_v_sent)) { __pyx_t_1 = __pyx_v_sent; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; __pyx_t_5 = NULL; } else { __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_sent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 594, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_1))) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 594, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } else { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 594, __pyx_L1_error) #else __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); #endif } } else { __pyx_t_6 = __pyx_t_5(__pyx_t_1); 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, 594, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_6); } __Pyx_XDECREF_SET(__pyx_v_word, __pyx_t_6); __pyx_t_6 = 0; __pyx_v_left = __pyx_t_4; __pyx_t_4 = (__pyx_t_4 + 1); /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+595: tag = tags[left] if tags else None
__pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 595, __pyx_L1_error) if (__pyx_t_7) { __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tags, __pyx_v_left, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = __pyx_t_8; __pyx_t_8 = 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_7 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 595, __pyx_L1_error) if (__pyx_t_7) { __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tags, __pyx_v_left, short, 1, __Pyx_PyInt_From_short, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = __pyx_t_8; __pyx_t_8 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tag, __pyx_t_6); __pyx_t_6 = 0;
596: # if we are given gold tags, make sure we only allow matching
597: # tags - after removing addresses introduced by the DOP reduction
598: # and other state splits.
+599: tagre = re.compile('%s($|[-@^/])' % re.escape(tag)) if tags else None
__pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 599, __pyx_L1_error) if (__pyx_t_7) { __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_compile); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_escape); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __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_9 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_tag); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_tag}; __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_9); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_tag}; __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_9); } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL; __Pyx_INCREF(__pyx_v_tag); __Pyx_GIVEREF(__pyx_v_tag); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_v_tag); __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_13, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_s, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_9)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); } } if (!__pyx_t_9) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_12}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_12}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL; __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __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_6 = __pyx_t_8; __pyx_t_8 = 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_7 = __Pyx_PyObject_IsTrue(__pyx_v_tags); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 599, __pyx_L1_error) if (__pyx_t_7) { __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_compile); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_escape); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __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_9 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_tag); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_tag}; __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_9); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) { PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_tag}; __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_GOTREF(__pyx_t_9); } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL; __Pyx_INCREF(__pyx_v_tag); __Pyx_GIVEREF(__pyx_v_tag); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_v_tag); __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_13, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_s, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_9)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); } } if (!__pyx_t_9) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_12}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_12}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL; __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __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_6 = __pyx_t_8; __pyx_t_8 = 0; } else { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } __Pyx_XDECREF_SET(__pyx_v_tagre, __pyx_t_6); __pyx_t_6 = 0;
+600: right = left + 1
__pyx_v_right = (__pyx_v_left + 1);
/* … */
__pyx_v_right = (__pyx_v_left + 1);
601: if CFGChart_fused is DenseCFGChart:
+602: cell = cellidx(left, right, lensent, nts)
__pyx_v_cell = __pyx_f_8discodop_10containers_cellidx(__pyx_v_left, __pyx_v_right, __pyx_v_lensent, __pyx_v_nts);
603: elif CFGChart_fused is SparseCFGChart:
+604: cell = cellstruct(left, right)
__pyx_v_cell = __pyx_f_8discodop_4pcfg_cellstruct(__pyx_v_left, __pyx_v_right);
+605: ccell = compactcellidx(left, right, lensent, 1)
__pyx_v_ccell = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_lensent, 1);
/* … */
__pyx_v_ccell = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_lensent, 1);
+606: lastidx = chart.items.size()
__pyx_v_lastidx = __pyx_v_chart->__pyx_base.items.size();
/* … */
__pyx_v_lastidx = __pyx_v_chart->__pyx_base.items.size();
+607: if cellindex is not NULL:
__pyx_t_7 = ((__pyx_v_cellindex != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((__pyx_v_cellindex != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
+608: cellindex[0][ccell] = lastidx
((__pyx_v_cellindex[0])[__pyx_v_ccell]) = __pyx_v_lastidx;
/* … */
((__pyx_v_cellindex[0])[__pyx_v_ccell]) = __pyx_v_lastidx;
+609: recognized = False
__pyx_v_recognized = 0;
/* … */
__pyx_v_recognized = 0;
610: # for n in grammar.lexicalbyword.get(word, ()):
+611: 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, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_14 = __pyx_convert_string_from_py_std__in_string(__pyx_t_8); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_it = __pyx_v_grammar->lexicalbyword.find(__pyx_t_14); /* … */ __pyx_tuple__3 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); /* … */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_word, __pyx_n_s_encode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_14 = __pyx_convert_string_from_py_std__in_string(__pyx_t_8); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_it = __pyx_v_grammar->lexicalbyword.find(__pyx_t_14); /* … */ __pyx_tuple__5 = PyTuple_Pack(1, __pyx_n_u_utf8); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 611, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5);
+612: if it != grammar.lexicalbyword.end():
__pyx_t_7 = ((__pyx_v_it != __pyx_v_grammar->lexicalbyword.end()) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((__pyx_v_it != __pyx_v_grammar->lexicalbyword.end()) != 0);
if (__pyx_t_7) {
/* … */
}
+613: for n in dereference(it).second:
__pyx_t_16 = &(*__pyx_v_it).second;
__pyx_t_15 = __pyx_t_16->begin();
for (;;) {
if (!(__pyx_t_15 != __pyx_t_16->end())) break;
__pyx_t_17 = *__pyx_t_15;
++__pyx_t_15;
__pyx_v_n = __pyx_t_17;
/* … */
__pyx_L7_continue:;
}
/* … */
__pyx_t_16 = &(*__pyx_v_it).second;
__pyx_t_15 = __pyx_t_16->begin();
for (;;) {
if (!(__pyx_t_15 != __pyx_t_16->end())) break;
__pyx_t_17 = *__pyx_t_15;
++__pyx_t_15;
__pyx_v_n = __pyx_t_17;
/* … */
__pyx_L7_continue:;
}
+614: lexrule = grammar.lexical[n]
__pyx_v_lexrule = (__pyx_v_grammar->lexical[__pyx_v_n]);
/* … */
__pyx_v_lexrule = (__pyx_v_grammar->lexical[__pyx_v_n]);
+615: if (whitelist is not None and whitelist.mapping[lexrule.lhs]
__pyx_t_18 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L10_bool_binop_done;
}
/* … */
__pyx_t_19 = ((__pyx_v_whitelist->mapping[__pyx_v_lexrule.lhs]) != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L10_bool_binop_done;
}
/* … */
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_18 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L10_bool_binop_done;
}
/* … */
__pyx_t_19 = ((__pyx_v_whitelist->mapping[__pyx_v_lexrule.lhs]) != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L10_bool_binop_done;
}
/* … */
if (__pyx_t_7) {
/* … */
}
616: and whitelist.cfg[ccell].count(
+617: whitelist.mapping[lexrule.lhs]) == 0):
__pyx_t_19 = (((__pyx_v_whitelist->cfg[__pyx_v_ccell]).count((__pyx_v_whitelist->mapping[__pyx_v_lexrule.lhs])) == 0) != 0);
__pyx_t_7 = __pyx_t_19;
__pyx_L10_bool_binop_done:;
/* … */
__pyx_t_19 = (((__pyx_v_whitelist->cfg[__pyx_v_ccell]).count((__pyx_v_whitelist->mapping[__pyx_v_lexrule.lhs])) == 0) != 0);
__pyx_t_7 = __pyx_t_19;
__pyx_L10_bool_binop_done:;
+618: blocked[0] += 1
__pyx_t_20 = 0;
(__pyx_v_blocked[__pyx_t_20]) = ((__pyx_v_blocked[__pyx_t_20]) + 1);
/* … */
__pyx_t_20 = 0;
(__pyx_v_blocked[__pyx_t_20]) = ((__pyx_v_blocked[__pyx_t_20]) + 1);
+619: continue
goto __pyx_L7_continue;
/* … */
goto __pyx_L7_continue;
+620: lhs = lexrule.lhs
__pyx_t_21 = __pyx_v_lexrule.lhs;
__pyx_v_lhs = __pyx_t_21;
/* … */
__pyx_t_21 = __pyx_v_lexrule.lhs;
__pyx_v_lhs = __pyx_t_21;
+621: if tag is None or tagre.match(grammar.tolabel[lhs]):
__pyx_t_19 = (__pyx_v_tag == Py_None);
__pyx_t_18 = (__pyx_t_19 != 0);
if (!__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_10 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_13 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6);
if (likely(__pyx_t_13)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_13);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_6, function);
}
}
if (!__pyx_t_13) {
__pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_GOTREF(__pyx_t_8);
} else {
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_6)) {
PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_10};
__pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_10};
__pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
{
__pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13); __pyx_t_13 = NULL;
__Pyx_GIVEREF(__pyx_t_10);
PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_10);
__pyx_t_10 = 0;
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_7 = __pyx_t_18;
__pyx_L14_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_19 = (__pyx_v_tag == Py_None);
__pyx_t_18 = (__pyx_t_19 != 0);
if (!__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_10 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_13 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6);
if (likely(__pyx_t_13)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_13);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_6, function);
}
}
if (!__pyx_t_13) {
__pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_GOTREF(__pyx_t_8);
} else {
#if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_6)) {
PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_10};
__pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
#if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_10};
__pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
} else
#endif
{
__pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13); __pyx_t_13 = NULL;
__Pyx_GIVEREF(__pyx_t_10);
PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_10);
__pyx_t_10 = 0;
__pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
}
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_18 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 621, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_7 = __pyx_t_18;
__pyx_L14_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
+622: chart.updateprob(cell + lhs, lexrule.prob, 0.0)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_lexrule.prob, 0.0);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_lexrule.prob, 0.0);
+623: chart.addedge(cell + lhs, right, NULL)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_right, NULL);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_right, NULL);
+624: recognized = True
__pyx_v_recognized = 1;
/* … */
__pyx_v_recognized = 1;
+625: if midfilter is not NULL:
__pyx_t_7 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
+626: updatemidfilter(midfilter[0], left, right, lhs, nts)
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
/* … */
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
627: # NB: use gold tags if given, even if (word, tag) was not part of
628: # training data or if it was pruned, modulo state splits etc.
+629: if not recognized and tag is not None:
__pyx_t_18 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_18 = (__pyx_v_tag != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
__pyx_t_7 = __pyx_t_19;
__pyx_L18_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_18 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L18_bool_binop_done;
}
__pyx_t_18 = (__pyx_v_tag != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
__pyx_t_7 = __pyx_t_19;
__pyx_L18_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
+630: for x in grammar.lexicalbylhs:
__pyx_t_23 = &__pyx_v_grammar->lexicalbylhs;
__pyx_t_22 = __pyx_t_23->begin();
for (;;) {
if (!(__pyx_t_22 != __pyx_t_23->end())) break;
__pyx_t_24 = *__pyx_t_22;
++__pyx_t_22;
__pyx_v_x = __pyx_t_24;
/* … */
}
/* … */
__pyx_t_23 = &__pyx_v_grammar->lexicalbylhs;
__pyx_t_22 = __pyx_t_23->begin();
for (;;) {
if (!(__pyx_t_22 != __pyx_t_23->end())) break;
__pyx_t_24 = *__pyx_t_22;
++__pyx_t_22;
__pyx_v_x = __pyx_t_24;
/* … */
}
+631: lhs = x.first
__pyx_t_21 = __pyx_v_x.first;
__pyx_v_lhs = __pyx_t_21;
/* … */
__pyx_t_21 = __pyx_v_x.first;
__pyx_v_lhs = __pyx_t_21;
+632: if tagre.match(grammar.tolabel[lhs]):
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_10) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_12}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_8); __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_10, __pyx_t_12}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_7) { /* … */ } /* … */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_tagre, __pyx_n_s_match); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = __Pyx_GetItemInt(((PyObject *)__pyx_v_grammar->tolabel), __pyx_v_lhs, Label, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_10 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_10) { __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_GOTREF(__pyx_t_8); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_12}; __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_8); __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_10, __pyx_t_12}; __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } else #endif { __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_12); __pyx_t_12 = 0; __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_7) { /* … */ }
+633: chart.updateprob(cell + lhs, 0.0, 0.0)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), 0.0, 0.0);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), 0.0, 0.0);
+634: chart.addedge(cell + lhs, right, NULL)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_right, NULL);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(__pyx_v_chart, (__pyx_v_cell + __pyx_v_lhs), __pyx_v_right, NULL);
+635: recognized = True
__pyx_v_recognized = 1;
/* … */
__pyx_v_recognized = 1;
+636: if midfilter is not NULL:
__pyx_t_7 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
+637: updatemidfilter(midfilter[0], left, right, lhs, nts)
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
/* … */
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
+638: if not recognized:
__pyx_t_7 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((!(__pyx_v_recognized != 0)) != 0);
if (__pyx_t_7) {
/* … */
}
+639: if tag is None and it == grammar.lexicalbyword.end():
__pyx_t_19 = (__pyx_v_tag == Py_None);
__pyx_t_18 = (__pyx_t_19 != 0);
if (__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_18 = ((__pyx_v_it == __pyx_v_grammar->lexicalbyword.end()) != 0);
__pyx_t_7 = __pyx_t_18;
__pyx_L26_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_19 = (__pyx_v_tag == Py_None);
__pyx_t_18 = (__pyx_t_19 != 0);
if (__pyx_t_18) {
} else {
__pyx_t_7 = __pyx_t_18;
goto __pyx_L26_bool_binop_done;
}
__pyx_t_18 = ((__pyx_v_it == __pyx_v_grammar->lexicalbyword.end()) != 0);
__pyx_t_7 = __pyx_t_18;
__pyx_L26_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
+640: 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, 640, __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_8); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8); __pyx_t_8 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 640, __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_8); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8); __pyx_t_8 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0;
+641: 'and word %r not in lexicon' % word)
__pyx_t_8 = PyUnicode_Format(__pyx_kp_u_no_parse_no_gold_POS_tag_given_a, __pyx_v_word); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); /* … */ __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_no_parse_no_gold_POS_tag_given_a, __pyx_v_word); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8);
+642: elif tag is not None and tag not in grammar.toid:
__pyx_t_18 = (__pyx_v_tag != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L28_bool_binop_done;
}
__pyx_t_19 = (__Pyx_PySequence_ContainsTF(__pyx_v_tag, ((PyObject *)__pyx_v_grammar->toid), Py_NE)); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 642, __pyx_L1_error)
__pyx_t_18 = (__pyx_t_19 != 0);
__pyx_t_7 = __pyx_t_18;
__pyx_L28_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_18 = (__pyx_v_tag != Py_None);
__pyx_t_19 = (__pyx_t_18 != 0);
if (__pyx_t_19) {
} else {
__pyx_t_7 = __pyx_t_19;
goto __pyx_L28_bool_binop_done;
}
__pyx_t_19 = (__Pyx_PySequence_ContainsTF(__pyx_v_tag, ((PyObject *)__pyx_v_grammar->toid), Py_NE)); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 642, __pyx_L1_error)
__pyx_t_18 = (__pyx_t_19 != 0);
__pyx_t_7 = __pyx_t_18;
__pyx_L28_bool_binop_done:;
if (__pyx_t_7) {
/* … */
}
+643: return False, ('no parse: gold POS tag given '
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_8, 0, Py_False); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_8; __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 643, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); PyTuple_SET_ITEM(__pyx_t_8, 0, Py_False); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_8; __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0;
+644: '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, 644, __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, 644, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6);
+645: return False, 'no parse: all tags for word %r blocked' % word
__Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_no_parse_all_tags_for_word_r_blo, __pyx_v_word); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 645, __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_8); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8); __pyx_t_8 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; /* … */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_no_parse_all_tags_for_word_r_blo, __pyx_v_word); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 645, __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_8); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8); __pyx_t_8 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0;
646:
647: # unary rules on the span of this POS tag
+648: applyunaryrules[CFGChart_fused](chart, left, right, cell, lastidx,
__pyx_fuse_0__pyx_f_8discodop_4pcfg_applyunaryrules(__pyx_v_chart, __pyx_v_left, __pyx_v_right, __pyx_v_cell, __pyx_v_lastidx, __pyx_v_unaryagenda, __pyx_v_midfilter, __pyx_v_blocked, __pyx_v_whitelist);
/* … */
__pyx_fuse_1__pyx_f_8discodop_4pcfg_applyunaryrules(__pyx_v_chart, __pyx_v_left, __pyx_v_right, __pyx_v_cell, __pyx_v_lastidx, __pyx_v_unaryagenda, __pyx_v_midfilter, __pyx_v_blocked, __pyx_v_whitelist);
649: unaryagenda, midfilter, blocked, whitelist)
+650: if cellindex is not NULL:
__pyx_t_7 = ((__pyx_v_cellindex != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
/* … */
__pyx_t_7 = ((__pyx_v_cellindex != NULL) != 0);
if (__pyx_t_7) {
/* … */
}
+651: cellindex[0][ccell + 1] = chart.items.size()
((__pyx_v_cellindex[0])[(__pyx_v_ccell + 1)]) = __pyx_v_chart->__pyx_base.items.size();
/* … */
((__pyx_v_cellindex[0])[(__pyx_v_ccell + 1)]) = __pyx_v_chart->__pyx_base.items.size();
+652: return True, ''
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_tuple__4); __pyx_r = __pyx_tuple__4; goto __pyx_L0; /* … */ __pyx_tuple__4 = PyTuple_Pack(2, Py_True, __pyx_kp_u__2); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 652, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); /* … */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_tuple__6); __pyx_r = __pyx_tuple__6; goto __pyx_L0; /* … */ __pyx_tuple__6 = PyTuple_Pack(2, Py_True, __pyx_kp_u__2); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 652, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6);
653:
654:
+655: cdef inline void applyunaryrules(
static CYTHON_INLINE void __pyx_fuse_0__pyx_f_8discodop_4pcfg_applyunaryrules(struct __pyx_obj_8discodop_4pcfg_DenseCFGChart *__pyx_v_chart, short __pyx_v_left, short __pyx_v_right, uint64_t __pyx_v_cell, ItemNo __pyx_v_lastidx, Agenda<Label,Prob> &__pyx_v_unaryagenda, struct __pyx_t_8discodop_4pcfg_MidFilter *__pyx_v_midfilter, uint64_t *__pyx_v_blocked, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
Label __pyx_v_lhs;
Label __pyx_v_rhs1;
Prob __pyx_v_prob;
ProbRule *__pyx_v_rule;
uint64_t __pyx_v_item;
uint64_t __pyx_v_leftitem;
uint64_t __pyx_v_ccell;
size_t __pyx_v_nts;
std::vector<uint64_t> ::size_type __pyx_v_itemidx;
size_t __pyx_v_n;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_0applyunaryrules", 0);
/* … */
/* function exit code */
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_RefNannyFinishContext();
}
static CYTHON_INLINE void __pyx_fuse_1__pyx_f_8discodop_4pcfg_applyunaryrules(struct __pyx_obj_8discodop_4pcfg_SparseCFGChart *__pyx_v_chart, short __pyx_v_left, short __pyx_v_right, uint64_t __pyx_v_cell, ItemNo __pyx_v_lastidx, Agenda<Label,Prob> &__pyx_v_unaryagenda, struct __pyx_t_8discodop_4pcfg_MidFilter *__pyx_v_midfilter, uint64_t *__pyx_v_blocked, struct __pyx_obj_8discodop_10containers_Whitelist *__pyx_v_whitelist) {
struct __pyx_obj_8discodop_10containers_Grammar *__pyx_v_grammar = 0;
Label __pyx_v_lhs;
Label __pyx_v_rhs1;
Prob __pyx_v_prob;
ProbRule *__pyx_v_rule;
uint64_t __pyx_v_item;
uint64_t __pyx_v_leftitem;
uint64_t __pyx_v_ccell;
size_t __pyx_v_nts;
std::vector<uint64_t> ::size_type __pyx_v_itemidx;
size_t __pyx_v_n;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__pyx_fuse_1applyunaryrules", 0);
/* … */
/* function exit code */
__Pyx_XDECREF((PyObject *)__pyx_v_grammar);
__Pyx_RefNannyFinishContext();
}
656: CFGChart_fused chart, short left, short right, uint64_t cell,
657: ItemNo lastidx, Agenda[Label, Prob]& unaryagenda, MidFilter *midfilter,
658: uint64_t *blocked, Whitelist whitelist):
659: """Apply unary rules in a given cell."""
660: cdef:
+661: Grammar grammar = chart.grammar
__pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0; /* … */ __pyx_t_1 = ((PyObject *)__pyx_v_chart->__pyx_base.__pyx_base.grammar); __Pyx_INCREF(__pyx_t_1); __pyx_v_grammar = ((struct __pyx_obj_8discodop_10containers_Grammar *)__pyx_t_1); __pyx_t_1 = 0;
662: Label lhs, rhs1
663: Prob prob
664: ProbRule *rule
665: uint64_t item, leftitem
+666: uint64_t ccell = compactcellidx(left, right, chart.lensent, 1)
__pyx_v_ccell = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_chart->__pyx_base.__pyx_base.lensent, 1); /* … */ __pyx_v_ccell = __pyx_f_8discodop_10containers_compactcellidx(__pyx_v_left, __pyx_v_right, __pyx_v_chart->__pyx_base.__pyx_base.lensent, 1);
+667: size_t nts = grammar.nonterminals
__pyx_t_2 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_2; /* … */ __pyx_t_2 = __pyx_v_grammar->nonterminals; __pyx_v_nts = __pyx_t_2;
668: # pair[Label, Prob] unaryentry
669: # vector[pair[Label, Prob]] unaryentries
670: # collect possible rhs items for unaries
+671: for itemidx in range(lastidx, chart.items.size()):
__pyx_t_3 = __pyx_v_chart->__pyx_base.items.size();
for (__pyx_t_4 = __pyx_v_lastidx; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_itemidx = __pyx_t_4;
/* … */
__pyx_t_3 = __pyx_v_chart->__pyx_base.items.size();
for (__pyx_t_4 = __pyx_v_lastidx; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
__pyx_v_itemidx = __pyx_t_4;
+672: item = chart.items[itemidx]
__pyx_v_item = (__pyx_v_chart->__pyx_base.items[__pyx_v_itemidx]);
/* … */
__pyx_v_item = (__pyx_v_chart->__pyx_base.items[__pyx_v_itemidx]);
+673: unaryagenda.setitem(
__pyx_v_unaryagenda.setitem(__pyx_f_8discodop_4pcfg_13DenseCFGChart__label(__pyx_v_chart, __pyx_v_item), ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart)->__pyx_vtab)->subtreeprob(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_itemidx));
}
/* … */
__pyx_v_unaryagenda.setitem(__pyx_f_8discodop_4pcfg_14SparseCFGChart__label(__pyx_v_chart, __pyx_v_item), ((struct __pyx_vtabstruct_8discodop_10containers_Chart *)((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart)->__pyx_vtab)->subtreeprob(((struct __pyx_obj_8discodop_10containers_Chart *)__pyx_v_chart), __pyx_v_itemidx));
}
674: chart._label(item), (<Chart>chart).subtreeprob(itemidx))
675: # unaryentry.first = chart._label(item)
676: # unaryentry.second = chart._subtreeprob(item)
677: # unaryentries.push_back(unaryentry)
678: # FIXME heapify; possibly more efficient; but there's some bug
679: # unaryagenda.replace_entries(unaryentries)
+680: while not unaryagenda.empty():
while (1) {
__pyx_t_5 = ((!(__pyx_v_unaryagenda.empty() != 0)) != 0);
if (!__pyx_t_5) break;
/* … */
while (1) {
__pyx_t_5 = ((!(__pyx_v_unaryagenda.empty() != 0)) != 0);
if (!__pyx_t_5) break;
+681: rhs1 = unaryagenda.pop().first
__pyx_t_6 = __pyx_v_unaryagenda.pop().first;
__pyx_v_rhs1 = __pyx_t_6;
/* … */
__pyx_t_6 = __pyx_v_unaryagenda.pop().first;
__pyx_v_rhs1 = __pyx_t_6;
+682: leftitem = cell + rhs1
__pyx_v_leftitem = (__pyx_v_cell + __pyx_v_rhs1);
/* … */
__pyx_v_leftitem = (__pyx_v_cell + __pyx_v_rhs1);
683: # FIXME can vit.prob change while entry in agenda?
684: # prob = rule.prob + entry.second
+685: prob = chart._subtreeprob(leftitem)
__pyx_v_prob = __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_leftitem);
/* … */
__pyx_v_prob = __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_leftitem);
686: # FIXME: chart.updateprob here
687: # FIXME: maybe better to iterate over whitelist and check for
688: # unary prod. Or: compute intersection before loop;
+689: for n in range(grammar.numunary):
__pyx_t_2 = __pyx_v_grammar->numunary;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_2; __pyx_t_7+=1) {
__pyx_v_n = __pyx_t_7;
/* … */
__pyx_t_2 = __pyx_v_grammar->numunary;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_2; __pyx_t_7+=1) {
__pyx_v_n = __pyx_t_7;
+690: rule = &(grammar.unary[rhs1][n])
__pyx_v_rule = (&((__pyx_v_grammar->unary[__pyx_v_rhs1])[__pyx_v_n]));
/* … */
__pyx_v_rule = (&((__pyx_v_grammar->unary[__pyx_v_rhs1])[__pyx_v_n]));
+691: lhs = rule.lhs
__pyx_t_6 = __pyx_v_rule->lhs;
__pyx_v_lhs = __pyx_t_6;
/* … */
__pyx_t_6 = __pyx_v_rule->lhs;
__pyx_v_lhs = __pyx_t_6;
+692: if rule.rhs1 != rhs1:
__pyx_t_5 = ((__pyx_v_rule->rhs1 != __pyx_v_rhs1) != 0);
if (__pyx_t_5) {
/* … */
}
/* … */
__pyx_t_5 = ((__pyx_v_rule->rhs1 != __pyx_v_rhs1) != 0);
if (__pyx_t_5) {
/* … */
}
+693: break
goto __pyx_L8_break;
/* … */
goto __pyx_L8_break;
+694: elif TESTBIT(grammar.mask, rule.no) or (
__pyx_t_8 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (!__pyx_t_8) {
} else {
__pyx_t_5 = __pyx_t_8;
goto __pyx_L10_bool_binop_done;
}
/* … */
if (__pyx_t_5) {
/* … */
}
/* … */
__pyx_t_8 = (TESTBIT(__pyx_v_grammar->mask, __pyx_v_rule->no) != 0);
if (!__pyx_t_8) {
} else {
__pyx_t_5 = __pyx_t_8;
goto __pyx_L10_bool_binop_done;
}
/* … */
if (__pyx_t_5) {
/* … */
}
+695: whitelist is not None
__pyx_t_8 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
} else {
__pyx_t_5 = __pyx_t_9;
goto __pyx_L10_bool_binop_done;
}
/* … */
__pyx_t_8 = (((PyObject *)__pyx_v_whitelist) != Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
} else {
__pyx_t_5 = __pyx_t_9;
goto __pyx_L10_bool_binop_done;
}
+696: and whitelist.mapping[lhs]
__pyx_t_9 = ((__pyx_v_whitelist->mapping[__pyx_v_lhs]) != 0);
if (__pyx_t_9) {
} else {
__pyx_t_5 = __pyx_t_9;
goto __pyx_L10_bool_binop_done;
}
/* … */
__pyx_t_9 = ((__pyx_v_whitelist->mapping[__pyx_v_lhs]) != 0);
if (__pyx_t_9) {
} else {
__pyx_t_5 = __pyx_t_9;
goto __pyx_L10_bool_binop_done;
}
697: and whitelist.cfg[ccell].count(
+698: whitelist.mapping[lhs]) == 0):
__pyx_t_9 = (((__pyx_v_whitelist->cfg[__pyx_v_ccell]).count((__pyx_v_whitelist->mapping[__pyx_v_lhs])) == 0) != 0);
__pyx_t_5 = __pyx_t_9;
__pyx_L10_bool_binop_done:;
/* … */
__pyx_t_9 = (((__pyx_v_whitelist->cfg[__pyx_v_ccell]).count((__pyx_v_whitelist->mapping[__pyx_v_lhs])) == 0) != 0);
__pyx_t_5 = __pyx_t_9;
__pyx_L10_bool_binop_done:;
+699: continue
goto __pyx_L7_continue;
/* … */
goto __pyx_L7_continue;
+700: item = cell + lhs
__pyx_v_item = (__pyx_v_cell + __pyx_v_lhs);
/* … */
__pyx_v_item = (__pyx_v_cell + __pyx_v_lhs);
+701: if rule.prob + prob < chart._subtreeprob(item):
__pyx_t_5 = (((__pyx_v_rule->prob + __pyx_v_prob) < __pyx_f_8discodop_4pcfg_13DenseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item)) != 0);
if (__pyx_t_5) {
/* … */
}
/* … */
__pyx_t_5 = (((__pyx_v_rule->prob + __pyx_v_prob) < __pyx_f_8discodop_4pcfg_14SparseCFGChart__subtreeprob(__pyx_v_chart, __pyx_v_item)) != 0);
if (__pyx_t_5) {
/* … */
}
+702: if chart.updateprob(item, rule.prob + prob, 0.0):
__pyx_t_5 = (__pyx_f_8discodop_4pcfg_13DenseCFGChart_updateprob(__pyx_v_chart, __pyx_v_item, (__pyx_v_rule->prob + __pyx_v_prob), 0.0) != 0);
if (__pyx_t_5) {
/* … */
goto __pyx_L15;
}
/* … */
__pyx_t_5 = (__pyx_f_8discodop_4pcfg_14SparseCFGChart_updateprob(__pyx_v_chart, __pyx_v_item, (__pyx_v_rule->prob + __pyx_v_prob), 0.0) != 0);
if (__pyx_t_5) {
/* … */
goto __pyx_L15;
}
+703: unaryagenda.setifbetter(lhs, rule.prob + prob)
__pyx_v_unaryagenda.setifbetter(__pyx_v_lhs, (__pyx_v_rule->prob + __pyx_v_prob));
/* … */
__pyx_v_unaryagenda.setifbetter(__pyx_v_lhs, (__pyx_v_rule->prob + __pyx_v_prob));
704: else:
+705: blocked += 1
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L15:;
/* … */
/*else*/ {
__pyx_v_blocked = (__pyx_v_blocked + 1);
}
__pyx_L15:;
+706: chart.addedge(item, right, rule)
__pyx_f_8discodop_4pcfg_13DenseCFGChart_addedge(__pyx_v_chart, __pyx_v_item, __pyx_v_right, __pyx_v_rule);
/* … */
__pyx_f_8discodop_4pcfg_14SparseCFGChart_addedge(__pyx_v_chart, __pyx_v_item, __pyx_v_right, __pyx_v_rule);
+707: if midfilter is not NULL:
__pyx_t_5 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_5) {
/* … */
}
__pyx_L7_continue:;
}
__pyx_L8_break:;
}
/* … */
__pyx_t_5 = ((__pyx_v_midfilter != NULL) != 0);
if (__pyx_t_5) {
/* … */
}
__pyx_L7_continue:;
}
__pyx_L8_break:;
}
+708: updatemidfilter(midfilter[0], left, right, lhs, nts)
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
/* … */
__pyx_f_8discodop_4pcfg_updatemidfilter((__pyx_v_midfilter[0]), __pyx_v_left, __pyx_v_right, __pyx_v_lhs, __pyx_v_nts);
709:
710:
+711: cdef inline void updatemidfilter(
static CYTHON_INLINE void __pyx_f_8discodop_4pcfg_updatemidfilter(struct __pyx_t_8discodop_4pcfg_MidFilter &__pyx_v_midfilter, short __pyx_v_left, short __pyx_v_right, Label __pyx_v_lhs, size_t __pyx_v_nts) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("updatemidfilter", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
712: MidFilter& midfilter, short left, short right, Label lhs,
713: size_t nts):
714: """Update mid point filter arrays."""
+715: if left > midfilter.minleft[right * nts + lhs]:
__pyx_t_1 = ((__pyx_v_left > (__pyx_v_midfilter.minleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_lhs)])) != 0);
if (__pyx_t_1) {
/* … */
}
+716: midfilter.minleft[right * nts + lhs] = left
(__pyx_v_midfilter.minleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_lhs)]) = __pyx_v_left;
+717: if left < midfilter.maxleft[right * nts + lhs]:
__pyx_t_1 = ((__pyx_v_left < (__pyx_v_midfilter.maxleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_lhs)])) != 0);
if (__pyx_t_1) {
/* … */
}
+718: midfilter.maxleft[right * nts + lhs] = left
(__pyx_v_midfilter.maxleft[((__pyx_v_right * __pyx_v_nts) + __pyx_v_lhs)]) = __pyx_v_left;
+719: if right < midfilter.minright[left * nts + lhs]:
__pyx_t_1 = ((__pyx_v_right < (__pyx_v_midfilter.minright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_lhs)])) != 0);
if (__pyx_t_1) {
/* … */
}
+720: midfilter.minright[left * nts + lhs] = right
(__pyx_v_midfilter.minright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_lhs)]) = __pyx_v_right;
+721: if right > midfilter.maxright[left * nts + lhs]:
__pyx_t_1 = ((__pyx_v_right > (__pyx_v_midfilter.maxright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_lhs)])) != 0);
if (__pyx_t_1) {
/* … */
}
+722: midfilter.maxright[left * nts + lhs] = right
(__pyx_v_midfilter.maxright[((__pyx_v_left * __pyx_v_nts) + __pyx_v_lhs)]) = __pyx_v_right;
723:
724:
+725: def testsent(sent, grammar, expected=None):
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_3testsent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_8discodop_4pcfg_2testsent[] = "testsent(sent, grammar, expected=None)\nParse sentence with grammar and print 10 best derivations.";
static PyMethodDef __pyx_mdef_8discodop_4pcfg_3testsent = {"testsent", (PyCFunction)__pyx_pw_8discodop_4pcfg_3testsent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8discodop_4pcfg_2testsent};
static PyObject *__pyx_pw_8discodop_4pcfg_3testsent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_sent = 0;
PyObject *__pyx_v_grammar = 0;
PyObject *__pyx_v_expected = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("testsent (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sent,&__pyx_n_s_grammar,&__pyx_n_s_expected,0};
PyObject* values[3] = {0,0,0};
values[2] = ((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 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("testsent", 0, 2, 3, 1); __PYX_ERR(0, 725, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_expected);
if (value) { values[2] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "testsent") < 0)) __PYX_ERR(0, 725, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
CYTHON_FALLTHROUGH;
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_sent = values[0];
__pyx_v_grammar = values[1];
__pyx_v_expected = values[2];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("testsent", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 725, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("discodop.pcfg.testsent", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_8discodop_4pcfg_2testsent(__pyx_self, __pyx_v_sent, __pyx_v_grammar, __pyx_v_expected);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_2testsent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sent, PyObject *__pyx_v_grammar, PyObject *__pyx_v_expected) {
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);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("discodop.pcfg.testsent", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__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_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__162 = PyTuple_Pack(9, __pyx_n_s_sent, __pyx_n_s_grammar, __pyx_n_s_expected, __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__162)) __PYX_ERR(0, 725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__162);
__Pyx_GIVEREF(__pyx_tuple__162);
/* … */
__pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_4pcfg_3testsent, NULL, __pyx_n_s_discodop_pcfg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 725, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_testsent, __pyx_t_3) < 0) __PYX_ERR(0, 725, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_codeobj__163 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_discodop_pcfg_pyx, __pyx_n_s_testsent, 725, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__163)) __PYX_ERR(0, 725, __pyx_L1_error)
726: """Parse sentence with grammar and print 10 best derivations."""
+727: from .kbest import lazykbest
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_lazykbest); __Pyx_GIVEREF(__pyx_n_s_lazykbest); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_lazykbest); __pyx_t_2 = __Pyx_Import(__pyx_n_s_kbest, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __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_lazykbest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v_lazykbest = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+728: print('cfg parsing; sentence:', sent)
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_u_cfg_parsing_sentence); __Pyx_GIVEREF(__pyx_kp_u_cfg_parsing_sentence); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_cfg_parsing_sentence); __Pyx_INCREF(__pyx_v_sent); __Pyx_GIVEREF(__pyx_v_sent); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_sent); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+729: chart, msg = parse(sent.split(), grammar)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sent, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 729, __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_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 729, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; __pyx_t_6 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_6 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_grammar}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_grammar}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_4) { __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL; } __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_v_grammar); __Pyx_GIVEREF(__pyx_v_grammar); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_grammar); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(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, 729, __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_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 729, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #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, 729, __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_5 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) __PYX_ERR(0, 729, __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, 729, __pyx_L1_error) __pyx_L4_unpacking_done:; } __pyx_v_chart = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_msg = __pyx_t_5; __pyx_t_5 = 0;
+730: print(chart)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __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_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+731: assert chart, msg
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_chart); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 731, __pyx_L1_error)
if (unlikely(!__pyx_t_8)) {
__pyx_t_5 = PyTuple_Pack(1, __pyx_v_msg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 731, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
PyErr_SetObject(PyExc_AssertionError, __pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__PYX_ERR(0, 731, __pyx_L1_error)
}
}
#endif
+732: if expected is None:
__pyx_t_8 = (__pyx_v_expected == Py_None);
__pyx_t_9 = (__pyx_t_8 != 0);
if (__pyx_t_9) {
/* … */
goto __pyx_L5;
}
+733: print('10 best parse trees:')
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* … */ __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_10_best_parse_trees); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 733, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7);
734: else:
+735: print('10 best parse trees (%d expected):' % expected)
/*else*/ {
__pyx_t_5 = PyUnicode_Format(__pyx_kp_u_10_best_parse_trees_d_expected, __pyx_v_expected); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_5);
PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
__pyx_t_5 = 0;
__pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 735, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__pyx_L5:;
+736: derivations = lazykbest(chart, 10)
__Pyx_INCREF(__pyx_v_lazykbest); __pyx_t_1 = __pyx_v_lazykbest; __pyx_t_2 = NULL; __pyx_t_6 = 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_6 = 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_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_chart, __pyx_int_10}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif { __pyx_t_3 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 736, __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_6, __pyx_v_chart); __Pyx_INCREF(__pyx_int_10); __Pyx_GIVEREF(__pyx_int_10); PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_int_10); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_derivations = __pyx_t_5; __pyx_t_5 = 0;
+737: for a, p in derivations:
if (likely(PyList_CheckExact(__pyx_v_derivations)) || PyTuple_CheckExact(__pyx_v_derivations)) { __pyx_t_5 = __pyx_v_derivations; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0; __pyx_t_11 = NULL; } else { __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_derivations); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 737, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 737, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 737, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } } else { __pyx_t_1 = __pyx_t_11(__pyx_t_5); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 737, __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, 737, __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, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 2) < 0) __PYX_ERR(0, 737, __pyx_L1_error) __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 737, __pyx_L1_error) __pyx_L9_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_5); __pyx_t_5 = 0;
+738: print(exp(-p), a)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_exp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Negative(__pyx_v_p); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (!__pyx_t_4) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else { #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else #endif { __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_INCREF(__pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_a); __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, 738, __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;
+739: if expected is not None:
__pyx_t_9 = (__pyx_v_expected != Py_None);
__pyx_t_8 = (__pyx_t_9 != 0);
if (__pyx_t_8) {
/* … */
}
+740: assert len(derivations) == expected, (len(derivations), expected)
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(!Py_OptimizeFlag)) {
__pyx_t_10 = PyObject_Length(__pyx_v_derivations); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 740, __pyx_L1_error)
__pyx_t_5 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_v_expected, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_8)) {
__pyx_t_10 = PyObject_Length(__pyx_v_derivations); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 740, __pyx_L1_error)
__pyx_t_1 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_1);
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
__Pyx_INCREF(__pyx_v_expected);
__Pyx_GIVEREF(__pyx_v_expected);
PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_expected);
__pyx_t_1 = 0;
__pyx_t_1 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 740, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 740, __pyx_L1_error)
}
}
#endif
741:
742:
+743: def test():
/* Python wrapper */
static PyObject *__pyx_pw_8discodop_4pcfg_5test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_8discodop_4pcfg_4test[] = "test()";
static PyMethodDef __pyx_mdef_8discodop_4pcfg_5test = {"test", (PyCFunction)__pyx_pw_8discodop_4pcfg_5test, METH_NOARGS, __pyx_doc_8discodop_4pcfg_4test};
static PyObject *__pyx_pw_8discodop_4pcfg_5test(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("test (wrapper)", 0);
__pyx_r = __pyx_pf_8discodop_4pcfg_4test(__pyx_self);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_8discodop_4pcfg_4test(CYTHON_UNUSED PyObject *__pyx_self) {
PyObject *__pyx_v_Grammar = NULL;
PyObject *__pyx_v_cfg = NULL;
PyObject *__pyx_v_rules = NULL;
PyObject *__pyx_v_cfg2 = 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_AddTraceback("discodop.pcfg.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_Grammar);
__Pyx_XDECREF(__pyx_v_cfg);
__Pyx_XDECREF(__pyx_v_rules);
__Pyx_XDECREF(__pyx_v_cfg2);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__164 = PyTuple_Pack(4, __pyx_n_s_Grammar, __pyx_n_s_cfg, __pyx_n_s_rules, __pyx_n_s_cfg2); if (unlikely(!__pyx_tuple__164)) __PYX_ERR(0, 743, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__164);
__Pyx_GIVEREF(__pyx_tuple__164);
/* … */
__pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_8discodop_4pcfg_5test, NULL, __pyx_n_s_discodop_pcfg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 743, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 743, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+744: from .containers import Grammar
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_Grammar); __Pyx_GIVEREF(__pyx_n_s_Grammar); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Grammar); __pyx_t_2 = __Pyx_Import(__pyx_n_s_containers, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Grammar); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v_Grammar = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
745:
+746: cfg = Grammar([
__pyx_t_2 = PyList_New(20); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__12); __Pyx_INCREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__17); __Pyx_INCREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); PyList_SET_ITEM(__pyx_t_2, 2, __pyx_tuple__22); __Pyx_INCREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); PyList_SET_ITEM(__pyx_t_2, 3, __pyx_tuple__27); __Pyx_INCREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); PyList_SET_ITEM(__pyx_t_2, 4, __pyx_tuple__32); __Pyx_INCREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37); PyList_SET_ITEM(__pyx_t_2, 5, __pyx_tuple__37); __Pyx_INCREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); PyList_SET_ITEM(__pyx_t_2, 6, __pyx_tuple__42); __Pyx_INCREF(__pyx_tuple__47); __Pyx_GIVEREF(__pyx_tuple__47); PyList_SET_ITEM(__pyx_t_2, 7, __pyx_tuple__47); __Pyx_INCREF(__pyx_tuple__52); __Pyx_GIVEREF(__pyx_tuple__52); PyList_SET_ITEM(__pyx_t_2, 8, __pyx_tuple__52); __Pyx_INCREF(__pyx_tuple__57); __Pyx_GIVEREF(__pyx_tuple__57); PyList_SET_ITEM(__pyx_t_2, 9, __pyx_tuple__57); __Pyx_INCREF(__pyx_tuple__62); __Pyx_GIVEREF(__pyx_tuple__62); PyList_SET_ITEM(__pyx_t_2, 10, __pyx_tuple__62); __Pyx_INCREF(__pyx_tuple__67); __Pyx_GIVEREF(__pyx_tuple__67); PyList_SET_ITEM(__pyx_t_2, 11, __pyx_tuple__67); __Pyx_INCREF(__pyx_tuple__72); __Pyx_GIVEREF(__pyx_tuple__72); PyList_SET_ITEM(__pyx_t_2, 12, __pyx_tuple__72); __Pyx_INCREF(__pyx_tuple__77); __Pyx_GIVEREF(__pyx_tuple__77); PyList_SET_ITEM(__pyx_t_2, 13, __pyx_tuple__77); __Pyx_INCREF(__pyx_tuple__82); __Pyx_GIVEREF(__pyx_tuple__82); PyList_SET_ITEM(__pyx_t_2, 14, __pyx_tuple__82); __Pyx_INCREF(__pyx_tuple__87); __Pyx_GIVEREF(__pyx_tuple__87); PyList_SET_ITEM(__pyx_t_2, 15, __pyx_tuple__87); __Pyx_INCREF(__pyx_tuple__92); __Pyx_GIVEREF(__pyx_tuple__92); PyList_SET_ITEM(__pyx_t_2, 16, __pyx_tuple__92); __Pyx_INCREF(__pyx_tuple__97); __Pyx_GIVEREF(__pyx_tuple__97); PyList_SET_ITEM(__pyx_t_2, 17, __pyx_tuple__97); __Pyx_INCREF(__pyx_tuple__101); __Pyx_GIVEREF(__pyx_tuple__101); PyList_SET_ITEM(__pyx_t_2, 18, __pyx_tuple__101); __Pyx_INCREF(__pyx_tuple__105); __Pyx_GIVEREF(__pyx_tuple__105); PyList_SET_ITEM(__pyx_t_2, 19, __pyx_tuple__105); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_Grammar, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 746, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_cfg = __pyx_t_3; __pyx_t_3 = 0;
+747: ((('A', 'A'), ((0, ), )), 0.7), ((('A', 'B'), ((0, ), )), 0.6),
__pyx_tuple__8 = PyTuple_Pack(2, __pyx_n_u_A, __pyx_n_u_A); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); __pyx_tuple__9 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9); __pyx_tuple__10 = PyTuple_Pack(1, __pyx_tuple__9); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); __pyx_tuple__11 = PyTuple_Pack(2, __pyx_tuple__8, __pyx_tuple__10); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11); __pyx_tuple__12 = PyTuple_Pack(2, __pyx_tuple__11, __pyx_float_0_7); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__12); __Pyx_GIVEREF(__pyx_tuple__12); __pyx_tuple__13 = PyTuple_Pack(2, __pyx_n_u_A, __pyx_n_u_B); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); __pyx_tuple__14 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); __pyx_tuple__15 = PyTuple_Pack(1, __pyx_tuple__14); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); __pyx_tuple__16 = PyTuple_Pack(2, __pyx_tuple__13, __pyx_tuple__15); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); __pyx_tuple__17 = PyTuple_Pack(2, __pyx_tuple__16, __pyx_float_0_6); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17);
+748: ((('A', 'C'), ((0, ), )), 0.5), ((('A', 'D'), ((0, ), )), 0.4),
__pyx_tuple__18 = PyTuple_Pack(2, __pyx_n_u_A, __pyx_n_u_C); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18); __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); __pyx_tuple__20 = PyTuple_Pack(1, __pyx_tuple__19); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20); __pyx_tuple__21 = PyTuple_Pack(2, __pyx_tuple__18, __pyx_tuple__20); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); __pyx_tuple__22 = PyTuple_Pack(2, __pyx_tuple__21, __pyx_float_0_5); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_u_A, __pyx_n_u_D); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); __pyx_tuple__24 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); __pyx_tuple__25 = PyTuple_Pack(1, __pyx_tuple__24); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); __pyx_tuple__26 = PyTuple_Pack(2, __pyx_tuple__23, __pyx_tuple__25); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 748, __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_4); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 748, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27);
+749: ((('B', 'A'), ((0, ), )), 0.3), ((('B', 'B'), ((0, ), )), 0.2),
__pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_u_B, __pyx_n_u_A); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); __Pyx_GIVEREF(__pyx_tuple__28); __pyx_tuple__29 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); __pyx_tuple__30 = PyTuple_Pack(1, __pyx_tuple__29); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); __pyx_tuple__31 = PyTuple_Pack(2, __pyx_tuple__28, __pyx_tuple__30); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); __pyx_tuple__32 = PyTuple_Pack(2, __pyx_tuple__31, __pyx_float_0_3); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_u_B, __pyx_n_u_B); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); __pyx_tuple__34 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); __pyx_tuple__35 = PyTuple_Pack(1, __pyx_tuple__34); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); __pyx_tuple__36 = PyTuple_Pack(2, __pyx_tuple__33, __pyx_tuple__35); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__36); __Pyx_GIVEREF(__pyx_tuple__36); __pyx_tuple__37 = PyTuple_Pack(2, __pyx_tuple__36, __pyx_float_0_2); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 749, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37);
+750: ((('B', 'C'), ((0, ), )), 0.1), ((('B', 'D'), ((0, ), )), 0.2),
__pyx_tuple__38 = PyTuple_Pack(2, __pyx_n_u_B, __pyx_n_u_C); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); __pyx_tuple__39 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__39); __Pyx_GIVEREF(__pyx_tuple__39); __pyx_tuple__40 = PyTuple_Pack(1, __pyx_tuple__39); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__40); __Pyx_GIVEREF(__pyx_tuple__40); __pyx_tuple__41 = PyTuple_Pack(2, __pyx_tuple__38, __pyx_tuple__40); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__41); __Pyx_GIVEREF(__pyx_tuple__41); __pyx_tuple__42 = PyTuple_Pack(2, __pyx_tuple__41, __pyx_float_0_1); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_u_B, __pyx_n_u_D); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); __pyx_tuple__44 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__44); __Pyx_GIVEREF(__pyx_tuple__44); __pyx_tuple__45 = PyTuple_Pack(1, __pyx_tuple__44); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__45); __Pyx_GIVEREF(__pyx_tuple__45); __pyx_tuple__46 = PyTuple_Pack(2, __pyx_tuple__43, __pyx_tuple__45); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__46); __Pyx_GIVEREF(__pyx_tuple__46); __pyx_tuple__47 = PyTuple_Pack(2, __pyx_tuple__46, __pyx_float_0_2); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 750, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__47); __Pyx_GIVEREF(__pyx_tuple__47);
751: # ((('B', 'C'), ((0, ), )), 0.3),
+752: ((('C', 'A'), ((0, ), )), 0.4),
__pyx_tuple__48 = PyTuple_Pack(2, __pyx_n_u_C, __pyx_n_u_A); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__48); __Pyx_GIVEREF(__pyx_tuple__48); __pyx_tuple__49 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__49); __Pyx_GIVEREF(__pyx_tuple__49); __pyx_tuple__50 = PyTuple_Pack(1, __pyx_tuple__49); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__50); __Pyx_GIVEREF(__pyx_tuple__50); __pyx_tuple__51 = PyTuple_Pack(2, __pyx_tuple__48, __pyx_tuple__50); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__51); __Pyx_GIVEREF(__pyx_tuple__51); __pyx_tuple__52 = PyTuple_Pack(2, __pyx_tuple__51, __pyx_float_0_4); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__52); __Pyx_GIVEREF(__pyx_tuple__52);
+753: ((('C', 'B'), ((0, ), )), 0.5), ((('C', 'C'), ((0, ), )), 0.6),
__pyx_tuple__53 = PyTuple_Pack(2, __pyx_n_u_C, __pyx_n_u_B); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__53); __Pyx_GIVEREF(__pyx_tuple__53); __pyx_tuple__54 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__54); __Pyx_GIVEREF(__pyx_tuple__54); __pyx_tuple__55 = PyTuple_Pack(1, __pyx_tuple__54); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__55); __Pyx_GIVEREF(__pyx_tuple__55); __pyx_tuple__56 = PyTuple_Pack(2, __pyx_tuple__53, __pyx_tuple__55); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__56); __Pyx_GIVEREF(__pyx_tuple__56); __pyx_tuple__57 = PyTuple_Pack(2, __pyx_tuple__56, __pyx_float_0_5); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__57); __Pyx_GIVEREF(__pyx_tuple__57); __pyx_tuple__58 = PyTuple_Pack(2, __pyx_n_u_C, __pyx_n_u_C); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__58); __Pyx_GIVEREF(__pyx_tuple__58); __pyx_tuple__59 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__59); __Pyx_GIVEREF(__pyx_tuple__59); __pyx_tuple__60 = PyTuple_Pack(1, __pyx_tuple__59); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__60); __Pyx_GIVEREF(__pyx_tuple__60); __pyx_tuple__61 = PyTuple_Pack(2, __pyx_tuple__58, __pyx_tuple__60); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__61); __Pyx_GIVEREF(__pyx_tuple__61); __pyx_tuple__62 = PyTuple_Pack(2, __pyx_tuple__61, __pyx_float_0_6); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 753, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__62); __Pyx_GIVEREF(__pyx_tuple__62);
+754: ((('C', 'D'), ((0, ), )), 0.7), ((('D', 'A'), ((0, ), )), 0.8),
__pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_u_C, __pyx_n_u_D); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__63); __Pyx_GIVEREF(__pyx_tuple__63); __pyx_tuple__64 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__64); __Pyx_GIVEREF(__pyx_tuple__64); __pyx_tuple__65 = PyTuple_Pack(1, __pyx_tuple__64); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__65); __Pyx_GIVEREF(__pyx_tuple__65); __pyx_tuple__66 = PyTuple_Pack(2, __pyx_tuple__63, __pyx_tuple__65); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__66); __Pyx_GIVEREF(__pyx_tuple__66); __pyx_tuple__67 = PyTuple_Pack(2, __pyx_tuple__66, __pyx_float_0_7); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__67); __Pyx_GIVEREF(__pyx_tuple__67); __pyx_tuple__68 = PyTuple_Pack(2, __pyx_n_u_D, __pyx_n_u_A); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__68); __Pyx_GIVEREF(__pyx_tuple__68); __pyx_tuple__69 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__69); __Pyx_GIVEREF(__pyx_tuple__69); __pyx_tuple__70 = PyTuple_Pack(1, __pyx_tuple__69); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__70); __Pyx_GIVEREF(__pyx_tuple__70); __pyx_tuple__71 = PyTuple_Pack(2, __pyx_tuple__68, __pyx_tuple__70); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__71); __Pyx_GIVEREF(__pyx_tuple__71); __pyx_tuple__72 = PyTuple_Pack(2, __pyx_tuple__71, __pyx_float_0_8); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__72); __Pyx_GIVEREF(__pyx_tuple__72);
+755: ((('D', 'B'), ((0, ), )), 0.9), ((('D', 'C'), ((0, ), )), 0.8),
__pyx_tuple__73 = PyTuple_Pack(2, __pyx_n_u_D, __pyx_n_u_B); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__73); __Pyx_GIVEREF(__pyx_tuple__73); __pyx_tuple__74 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__74); __Pyx_GIVEREF(__pyx_tuple__74); __pyx_tuple__75 = PyTuple_Pack(1, __pyx_tuple__74); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__75); __Pyx_GIVEREF(__pyx_tuple__75); __pyx_tuple__76 = PyTuple_Pack(2, __pyx_tuple__73, __pyx_tuple__75); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__76); __Pyx_GIVEREF(__pyx_tuple__76); __pyx_tuple__77 = PyTuple_Pack(2, __pyx_tuple__76, __pyx_float_0_9); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__77); __Pyx_GIVEREF(__pyx_tuple__77); __pyx_tuple__78 = PyTuple_Pack(2, __pyx_n_u_D, __pyx_n_u_C); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__78); __Pyx_GIVEREF(__pyx_tuple__78); __pyx_tuple__79 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__79); __Pyx_GIVEREF(__pyx_tuple__79); __pyx_tuple__80 = PyTuple_Pack(1, __pyx_tuple__79); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__80); __Pyx_GIVEREF(__pyx_tuple__80); __pyx_tuple__81 = PyTuple_Pack(2, __pyx_tuple__78, __pyx_tuple__80); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__81); __Pyx_GIVEREF(__pyx_tuple__81); __pyx_tuple__82 = PyTuple_Pack(2, __pyx_tuple__81, __pyx_float_0_8); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 755, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__82); __Pyx_GIVEREF(__pyx_tuple__82);
+756: ((('D', 'NP', 'VP'), ((0, 1), )), 1),
__pyx_tuple__83 = PyTuple_Pack(3, __pyx_n_u_D, __pyx_n_u_NP, __pyx_n_u_VP); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__83); __Pyx_GIVEREF(__pyx_tuple__83); __pyx_tuple__84 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__84); __Pyx_GIVEREF(__pyx_tuple__84); __pyx_tuple__85 = PyTuple_Pack(1, __pyx_tuple__84); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__85); __Pyx_GIVEREF(__pyx_tuple__85); __pyx_tuple__86 = PyTuple_Pack(2, __pyx_tuple__83, __pyx_tuple__85); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__86); __Pyx_GIVEREF(__pyx_tuple__86); __pyx_tuple__87 = PyTuple_Pack(2, __pyx_tuple__86, __pyx_int_1); if (unlikely(!__pyx_tuple__87)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__87); __Pyx_GIVEREF(__pyx_tuple__87);
+757: ((('S', 'A'), ((0, ), )), 0.8),
__pyx_tuple__88 = PyTuple_Pack(2, __pyx_n_u_S, __pyx_n_u_A); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(0, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__88); __Pyx_GIVEREF(__pyx_tuple__88); __pyx_tuple__89 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__89)) __PYX_ERR(0, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__89); __Pyx_GIVEREF(__pyx_tuple__89); __pyx_tuple__90 = PyTuple_Pack(1, __pyx_tuple__89); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__90); __Pyx_GIVEREF(__pyx_tuple__90); __pyx_tuple__91 = PyTuple_Pack(2, __pyx_tuple__88, __pyx_tuple__90); if (unlikely(!__pyx_tuple__91)) __PYX_ERR(0, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__91); __Pyx_GIVEREF(__pyx_tuple__91); __pyx_tuple__92 = PyTuple_Pack(2, __pyx_tuple__91, __pyx_float_0_8); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__92); __Pyx_GIVEREF(__pyx_tuple__92);
+758: ((('S', 'D'), ((0, ), )), 0.5),
__pyx_tuple__93 = PyTuple_Pack(2, __pyx_n_u_S, __pyx_n_u_D); if (unlikely(!__pyx_tuple__93)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__93); __Pyx_GIVEREF(__pyx_tuple__93); __pyx_tuple__94 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__94); __Pyx_GIVEREF(__pyx_tuple__94); __pyx_tuple__95 = PyTuple_Pack(1, __pyx_tuple__94); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__95); __Pyx_GIVEREF(__pyx_tuple__95); __pyx_tuple__96 = PyTuple_Pack(2, __pyx_tuple__93, __pyx_tuple__95); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__96); __Pyx_GIVEREF(__pyx_tuple__96); __pyx_tuple__97 = PyTuple_Pack(2, __pyx_tuple__96, __pyx_float_0_5); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(0, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__97); __Pyx_GIVEREF(__pyx_tuple__97);
+759: ((('NP', 'Epsilon'), ('mary', )), 1),
__pyx_tuple__98 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__98); __Pyx_GIVEREF(__pyx_tuple__98); __pyx_tuple__99 = PyTuple_Pack(1, __pyx_n_u_mary); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__99); __Pyx_GIVEREF(__pyx_tuple__99); __pyx_tuple__100 = PyTuple_Pack(2, __pyx_tuple__98, __pyx_tuple__99); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__100); __Pyx_GIVEREF(__pyx_tuple__100); __pyx_tuple__101 = PyTuple_Pack(2, __pyx_tuple__100, __pyx_int_1); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(0, 759, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__101); __Pyx_GIVEREF(__pyx_tuple__101);
+760: ((('VP', 'Epsilon'), ('walks', )), 1)],
__pyx_tuple__102 = PyTuple_Pack(2, __pyx_n_u_VP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(0, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__102); __Pyx_GIVEREF(__pyx_tuple__102); __pyx_tuple__103 = PyTuple_Pack(1, __pyx_n_u_walks); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(0, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__103); __Pyx_GIVEREF(__pyx_tuple__103); __pyx_tuple__104 = PyTuple_Pack(2, __pyx_tuple__102, __pyx_tuple__103); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(0, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__104); __Pyx_GIVEREF(__pyx_tuple__104); __pyx_tuple__105 = PyTuple_Pack(2, __pyx_tuple__104, __pyx_int_1); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(0, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__105); __Pyx_GIVEREF(__pyx_tuple__105);
+761: start='S')
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_n_u_S) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
+762: print(cfg)
__pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_cfg); __Pyx_GIVEREF(__pyx_v_cfg); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_cfg); __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+763: testsent('mary walks', cfg, 10)
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = NULL; __pyx_t_4 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_1)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_4 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_mary_walks, __pyx_v_cfg, __pyx_int_10}; __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_2); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_u_mary_walks, __pyx_v_cfg, __pyx_int_10}; __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_2); } else #endif { __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL; } __Pyx_INCREF(__pyx_kp_u_mary_walks); __Pyx_GIVEREF(__pyx_kp_u_mary_walks); PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_kp_u_mary_walks); __Pyx_INCREF(__pyx_v_cfg); __Pyx_GIVEREF(__pyx_v_cfg); PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_cfg); __Pyx_INCREF(__pyx_int_10); __Pyx_GIVEREF(__pyx_int_10); PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_int_10); __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
764: # chart, msg = parse_sparse('mary walks'.split(), cfg)
765: # assert chart, msg
766:
+767: rules = [
__pyx_t_2 = PyList_New(12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_tuple__110); __Pyx_GIVEREF(__pyx_tuple__110); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__110); __Pyx_INCREF(__pyx_tuple__115); __Pyx_GIVEREF(__pyx_tuple__115); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__115); __Pyx_INCREF(__pyx_tuple__120); __Pyx_GIVEREF(__pyx_tuple__120); PyList_SET_ITEM(__pyx_t_2, 2, __pyx_tuple__120); __Pyx_INCREF(__pyx_tuple__125); __Pyx_GIVEREF(__pyx_tuple__125); PyList_SET_ITEM(__pyx_t_2, 3, __pyx_tuple__125); __Pyx_INCREF(__pyx_tuple__130); __Pyx_GIVEREF(__pyx_tuple__130); PyList_SET_ITEM(__pyx_t_2, 4, __pyx_tuple__130); __Pyx_INCREF(__pyx_tuple__134); __Pyx_GIVEREF(__pyx_tuple__134); PyList_SET_ITEM(__pyx_t_2, 5, __pyx_tuple__134); __Pyx_INCREF(__pyx_tuple__138); __Pyx_GIVEREF(__pyx_tuple__138); PyList_SET_ITEM(__pyx_t_2, 6, __pyx_tuple__138); __Pyx_INCREF(__pyx_tuple__142); __Pyx_GIVEREF(__pyx_tuple__142); PyList_SET_ITEM(__pyx_t_2, 7, __pyx_tuple__142); __Pyx_INCREF(__pyx_tuple__146); __Pyx_GIVEREF(__pyx_tuple__146); PyList_SET_ITEM(__pyx_t_2, 8, __pyx_tuple__146); __Pyx_INCREF(__pyx_tuple__150); __Pyx_GIVEREF(__pyx_tuple__150); PyList_SET_ITEM(__pyx_t_2, 9, __pyx_tuple__150); __Pyx_INCREF(__pyx_tuple__154); __Pyx_GIVEREF(__pyx_tuple__154); PyList_SET_ITEM(__pyx_t_2, 10, __pyx_tuple__154); __Pyx_INCREF(__pyx_tuple__158); __Pyx_GIVEREF(__pyx_tuple__158); PyList_SET_ITEM(__pyx_t_2, 11, __pyx_tuple__158); __pyx_v_rules = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+768: ((('NP', 'NP', 'PP'), ((0, 1), )), 0.4),
__pyx_tuple__106 = PyTuple_Pack(3, __pyx_n_u_NP, __pyx_n_u_NP, __pyx_n_u_PP); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(0, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__106); __Pyx_GIVEREF(__pyx_tuple__106); __pyx_tuple__107 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(0, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__107); __Pyx_GIVEREF(__pyx_tuple__107); __pyx_tuple__108 = PyTuple_Pack(1, __pyx_tuple__107); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(0, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__108); __Pyx_GIVEREF(__pyx_tuple__108); __pyx_tuple__109 = PyTuple_Pack(2, __pyx_tuple__106, __pyx_tuple__108); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(0, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__109); __Pyx_GIVEREF(__pyx_tuple__109); __pyx_tuple__110 = PyTuple_Pack(2, __pyx_tuple__109, __pyx_float_0_4); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 768, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__110); __Pyx_GIVEREF(__pyx_tuple__110);
+769: ((('PP', 'P', 'NP'), ((0, 1), )), 1),
__pyx_tuple__111 = PyTuple_Pack(3, __pyx_n_u_PP, __pyx_n_u_P, __pyx_n_u_NP); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__111); __Pyx_GIVEREF(__pyx_tuple__111); __pyx_tuple__112 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__112); __Pyx_GIVEREF(__pyx_tuple__112); __pyx_tuple__113 = PyTuple_Pack(1, __pyx_tuple__112); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__113); __Pyx_GIVEREF(__pyx_tuple__113); __pyx_tuple__114 = PyTuple_Pack(2, __pyx_tuple__111, __pyx_tuple__113); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__114); __Pyx_GIVEREF(__pyx_tuple__114); __pyx_tuple__115 = PyTuple_Pack(2, __pyx_tuple__114, __pyx_int_1); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__115); __Pyx_GIVEREF(__pyx_tuple__115);
+770: ((('S', 'NP', 'VP'), ((0, 1), )), 1),
__pyx_tuple__116 = PyTuple_Pack(3, __pyx_n_u_S, __pyx_n_u_NP, __pyx_n_u_VP); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__116); __Pyx_GIVEREF(__pyx_tuple__116); __pyx_tuple__117 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__117); __Pyx_GIVEREF(__pyx_tuple__117); __pyx_tuple__118 = PyTuple_Pack(1, __pyx_tuple__117); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__118); __Pyx_GIVEREF(__pyx_tuple__118); __pyx_tuple__119 = PyTuple_Pack(2, __pyx_tuple__116, __pyx_tuple__118); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__119); __Pyx_GIVEREF(__pyx_tuple__119); __pyx_tuple__120 = PyTuple_Pack(2, __pyx_tuple__119, __pyx_int_1); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 770, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__120); __Pyx_GIVEREF(__pyx_tuple__120);
+771: ((('VP', 'V', 'NP'), ((0, 1), )), 0.7),
__pyx_tuple__121 = PyTuple_Pack(3, __pyx_n_u_VP, __pyx_n_u_V, __pyx_n_u_NP); if (unlikely(!__pyx_tuple__121)) __PYX_ERR(0, 771, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__121); __Pyx_GIVEREF(__pyx_tuple__121); __pyx_tuple__122 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 771, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__122); __Pyx_GIVEREF(__pyx_tuple__122); __pyx_tuple__123 = PyTuple_Pack(1, __pyx_tuple__122); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(0, 771, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__123); __Pyx_GIVEREF(__pyx_tuple__123); __pyx_tuple__124 = PyTuple_Pack(2, __pyx_tuple__121, __pyx_tuple__123); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 771, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__124); __Pyx_GIVEREF(__pyx_tuple__124); __pyx_tuple__125 = PyTuple_Pack(2, __pyx_tuple__124, __pyx_float_0_7); if (unlikely(!__pyx_tuple__125)) __PYX_ERR(0, 771, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__125); __Pyx_GIVEREF(__pyx_tuple__125);
+772: ((('VP', 'VP', 'PP'), ((0, 1), )), 0.3),
__pyx_tuple__126 = PyTuple_Pack(3, __pyx_n_u_VP, __pyx_n_u_VP, __pyx_n_u_PP); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__126); __Pyx_GIVEREF(__pyx_tuple__126); __pyx_tuple__127 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__127)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__127); __Pyx_GIVEREF(__pyx_tuple__127); __pyx_tuple__128 = PyTuple_Pack(1, __pyx_tuple__127); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__128); __Pyx_GIVEREF(__pyx_tuple__128); __pyx_tuple__129 = PyTuple_Pack(2, __pyx_tuple__126, __pyx_tuple__128); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__129); __Pyx_GIVEREF(__pyx_tuple__129); __pyx_tuple__130 = PyTuple_Pack(2, __pyx_tuple__129, __pyx_float_0_3); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(0, 772, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__130); __Pyx_GIVEREF(__pyx_tuple__130);
+773: ((('NP', 'Epsilon'), ('astronomers', )), 0.1),
__pyx_tuple__131 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__131); __Pyx_GIVEREF(__pyx_tuple__131); __pyx_tuple__132 = PyTuple_Pack(1, __pyx_n_u_astronomers); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__132); __Pyx_GIVEREF(__pyx_tuple__132); __pyx_tuple__133 = PyTuple_Pack(2, __pyx_tuple__131, __pyx_tuple__132); if (unlikely(!__pyx_tuple__133)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__133); __Pyx_GIVEREF(__pyx_tuple__133); __pyx_tuple__134 = PyTuple_Pack(2, __pyx_tuple__133, __pyx_float_0_1); if (unlikely(!__pyx_tuple__134)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__134); __Pyx_GIVEREF(__pyx_tuple__134);
+774: ((('NP', 'Epsilon'), ('ears', )), 0.18),
__pyx_tuple__135 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__135)) __PYX_ERR(0, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__135); __Pyx_GIVEREF(__pyx_tuple__135); __pyx_tuple__136 = PyTuple_Pack(1, __pyx_n_u_ears); if (unlikely(!__pyx_tuple__136)) __PYX_ERR(0, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__136); __Pyx_GIVEREF(__pyx_tuple__136); __pyx_tuple__137 = PyTuple_Pack(2, __pyx_tuple__135, __pyx_tuple__136); if (unlikely(!__pyx_tuple__137)) __PYX_ERR(0, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__137); __Pyx_GIVEREF(__pyx_tuple__137); __pyx_tuple__138 = PyTuple_Pack(2, __pyx_tuple__137, __pyx_float_0_18); if (unlikely(!__pyx_tuple__138)) __PYX_ERR(0, 774, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__138); __Pyx_GIVEREF(__pyx_tuple__138);
+775: ((('V', 'Epsilon'), ('saw', )), 1),
__pyx_tuple__139 = PyTuple_Pack(2, __pyx_n_u_V, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__139)) __PYX_ERR(0, 775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__139); __Pyx_GIVEREF(__pyx_tuple__139); __pyx_tuple__140 = PyTuple_Pack(1, __pyx_n_u_saw); if (unlikely(!__pyx_tuple__140)) __PYX_ERR(0, 775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__140); __Pyx_GIVEREF(__pyx_tuple__140); __pyx_tuple__141 = PyTuple_Pack(2, __pyx_tuple__139, __pyx_tuple__140); if (unlikely(!__pyx_tuple__141)) __PYX_ERR(0, 775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__141); __Pyx_GIVEREF(__pyx_tuple__141); __pyx_tuple__142 = PyTuple_Pack(2, __pyx_tuple__141, __pyx_int_1); if (unlikely(!__pyx_tuple__142)) __PYX_ERR(0, 775, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__142); __Pyx_GIVEREF(__pyx_tuple__142);
+776: ((('NP', 'Epsilon'), ('saw', )), 0.04),
__pyx_tuple__143 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__143)) __PYX_ERR(0, 776, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__143); __Pyx_GIVEREF(__pyx_tuple__143); __pyx_tuple__144 = PyTuple_Pack(1, __pyx_n_u_saw); if (unlikely(!__pyx_tuple__144)) __PYX_ERR(0, 776, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__144); __Pyx_GIVEREF(__pyx_tuple__144); __pyx_tuple__145 = PyTuple_Pack(2, __pyx_tuple__143, __pyx_tuple__144); if (unlikely(!__pyx_tuple__145)) __PYX_ERR(0, 776, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__145); __Pyx_GIVEREF(__pyx_tuple__145); __pyx_tuple__146 = PyTuple_Pack(2, __pyx_tuple__145, __pyx_float_0_04); if (unlikely(!__pyx_tuple__146)) __PYX_ERR(0, 776, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__146); __Pyx_GIVEREF(__pyx_tuple__146);
+777: ((('NP', 'Epsilon'), ('stars', )), 0.18),
__pyx_tuple__147 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__147)) __PYX_ERR(0, 777, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__147); __Pyx_GIVEREF(__pyx_tuple__147); __pyx_tuple__148 = PyTuple_Pack(1, __pyx_n_u_stars); if (unlikely(!__pyx_tuple__148)) __PYX_ERR(0, 777, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__148); __Pyx_GIVEREF(__pyx_tuple__148); __pyx_tuple__149 = PyTuple_Pack(2, __pyx_tuple__147, __pyx_tuple__148); if (unlikely(!__pyx_tuple__149)) __PYX_ERR(0, 777, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__149); __Pyx_GIVEREF(__pyx_tuple__149); __pyx_tuple__150 = PyTuple_Pack(2, __pyx_tuple__149, __pyx_float_0_18); if (unlikely(!__pyx_tuple__150)) __PYX_ERR(0, 777, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__150); __Pyx_GIVEREF(__pyx_tuple__150);
+778: ((('NP', 'Epsilon'), ('telescopes', )), 0.1),
__pyx_tuple__151 = PyTuple_Pack(2, __pyx_n_u_NP, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__151)) __PYX_ERR(0, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__151); __Pyx_GIVEREF(__pyx_tuple__151); __pyx_tuple__152 = PyTuple_Pack(1, __pyx_n_u_telescopes); if (unlikely(!__pyx_tuple__152)) __PYX_ERR(0, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__152); __Pyx_GIVEREF(__pyx_tuple__152); __pyx_tuple__153 = PyTuple_Pack(2, __pyx_tuple__151, __pyx_tuple__152); if (unlikely(!__pyx_tuple__153)) __PYX_ERR(0, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__153); __Pyx_GIVEREF(__pyx_tuple__153); __pyx_tuple__154 = PyTuple_Pack(2, __pyx_tuple__153, __pyx_float_0_1); if (unlikely(!__pyx_tuple__154)) __PYX_ERR(0, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__154); __Pyx_GIVEREF(__pyx_tuple__154);
+779: ((('P', 'Epsilon'), ('with', )), 1)]
__pyx_tuple__155 = PyTuple_Pack(2, __pyx_n_u_P, __pyx_n_u_Epsilon); if (unlikely(!__pyx_tuple__155)) __PYX_ERR(0, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__155); __Pyx_GIVEREF(__pyx_tuple__155); __pyx_tuple__156 = PyTuple_Pack(1, __pyx_n_u_with); if (unlikely(!__pyx_tuple__156)) __PYX_ERR(0, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__156); __Pyx_GIVEREF(__pyx_tuple__156); __pyx_tuple__157 = PyTuple_Pack(2, __pyx_tuple__155, __pyx_tuple__156); if (unlikely(!__pyx_tuple__157)) __PYX_ERR(0, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__157); __Pyx_GIVEREF(__pyx_tuple__157); __pyx_tuple__158 = PyTuple_Pack(2, __pyx_tuple__157, __pyx_int_1); if (unlikely(!__pyx_tuple__158)) __PYX_ERR(0, 779, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__158); __Pyx_GIVEREF(__pyx_tuple__158);
+780: cfg2 = Grammar(rules, start='S')
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_rules); __Pyx_GIVEREF(__pyx_v_rules); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_rules); __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_start, __pyx_n_u_S) < 0) __PYX_ERR(0, 780, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_Grammar, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 780, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_cfg2 = __pyx_t_5; __pyx_t_5 = 0;
+781: testsent('astronomers saw stars with telescopes', cfg2, 2)
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_testsent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __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[4] = {__pyx_t_2, __pyx_kp_u_astronomers_saw_stars_with_teles, __pyx_v_cfg2, __pyx_int_2}; __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_u_astronomers_saw_stars_with_teles, __pyx_v_cfg2, __pyx_int_2}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif { __pyx_t_1 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_2) { __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL; } __Pyx_INCREF(__pyx_kp_u_astronomers_saw_stars_with_teles); __Pyx_GIVEREF(__pyx_kp_u_astronomers_saw_stars_with_teles); PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_kp_u_astronomers_saw_stars_with_teles); __Pyx_INCREF(__pyx_v_cfg2); __Pyx_GIVEREF(__pyx_v_cfg2); PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_v_cfg2); __Pyx_INCREF(__pyx_int_2); __Pyx_GIVEREF(__pyx_int_2); PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_4, __pyx_int_2); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
782:
+783: __all__ = ['CFGChart', 'DenseCFGChart', 'SparseCFGChart', 'parse']
__pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_u_CFGChart); __Pyx_GIVEREF(__pyx_n_u_CFGChart); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_CFGChart); __Pyx_INCREF(__pyx_n_u_DenseCFGChart); __Pyx_GIVEREF(__pyx_n_u_DenseCFGChart); PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_DenseCFGChart); __Pyx_INCREF(__pyx_n_u_SparseCFGChart); __Pyx_GIVEREF(__pyx_n_u_SparseCFGChart); PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_u_SparseCFGChart); __Pyx_INCREF(__pyx_n_u_parse); __Pyx_GIVEREF(__pyx_n_u_parse); PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_u_parse); if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_3) < 0) __PYX_ERR(0, 783, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;